2011-03-16 70 views
5

我想要在Windows Server 2008服務器上運行Windows服務,該服務器將監視本地服務器上的目錄(即C:\ Watch),並且在該目錄中創建新的pdf時,將該文件複製到網絡分享(即//192.168.1.2/Share)。如何複製從Windows服務文件到網絡位置?

既不的服務器是域的成員。

Windows服務有它的身份登錄設置誰可以訪問//服務器/股,並創建和刪除文件沒有概率本地用戶帳戶。

我有以下工作正常,如果sourceDir和destDir是類似C:\ Source和C:\ Dest的本地文件夾,但如果我將destDir更改爲網絡位置,如// server/share /或// //服務器// //共享我得到的錯誤「裏邊反文件名,目錄名或卷標語法不正確」。

更新: 我不再收到上述錯誤,現在當我有sourceDir設置爲C:\觀察和DESTDIR設置爲\服務器\共享\(其中服務器可以是Windows或Ubuntu服務器我得到一個System.UnauthorizedAccess錯誤,我假設它來自目標服務器,如何設置連接到目標服務器時使用的憑據,請記住服務器不在域中,可以是Windows或Ubuntu。

public partial class Service1 : ServiceBase 
{ 
    private FileSystemWatcher watcher; 
    private string sourceFolder; 
    private string destFolder; 

    public Service1() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnStart(string[] args) 
    { 
     this.sourceFolder = Properties.Settings.Default.sourceDir; 
     this.destFolder = Properties.Settings.Default.destDir; 

     watcher = new FileSystemWatcher(); 
     watcher.Path = this.sourceFolder; 
     watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; 
     watcher.Filter = "*.pdf"; 

     watcher.Created += new FileSystemEventHandler(watcher_Created); 

     watcher.EnableRaisingEvents = true; 
    } 

    protected override void OnStop() 
    { 
    } 

    private void watcher_Created(object source, FileSystemEventArgs e) 
    { 
     FileInfo fInfo = new FileInfo(e.FullPath); 
     while (IsFileLocked(fInfo)) 
     { 
      Thread.Sleep(500); 
     } 
     System.IO.File.Copy(e.FullPath, this.destFolder + e.Name); 
     System.IO.File.Delete(e.FullPath); 
    } 
} 

回答

4

服務器份額將是:

string networkShare = @"\\ServerName\Share\"; 

還要記住,在身份執行服務時會影響該服務是否能夠保存到該位置。如果您使用域服務帳戶運行服務,請確保您從共享所在的計算機上調整目標共享文件夾的ACL以允許寫入

+0

感謝。我硬編碼@「\\服務器\共享\」,但現在出現以下錯誤「的文件不能被系統訪問」。所以我想這是一個權限的事情,即使當我登錄作爲用戶服務設置爲登錄,因爲我可以在\\服務器\共享 – etoisarobot 2011-03-16 18:27:21

+0

創建文件在旁註我怎樣才能使用@作爲@「 \\ server \ share \「,當路徑是一個字符串變量時。 – etoisarobot 2011-03-16 18:30:00

+0

你可以在你的app.config中存儲目的地,並從那裏讀取它,在app.config中,它只需要是\\ server \ share – kd7 2011-03-16 18:34:15

1

基於Oded的答案here 一旦我運行作爲本地用戶的服務也在遠程Ubuntu服務器上設置,一切都像魅力一樣。

+1

它可以幫你實現,或者將自己的答案標記爲已接受或者我的,所以其他人可能會受益。 – kd7 2011-03-17 20:45:39

相關問題