2012-06-27 60 views
21

關於這個主題並不乏問題,但我仍然遇到麻煩。這是我的情況。我有一個服務,我需要觀看配置文件中指定的路徑。當我使用本地驅動器時它工作得很好。FileSystemWatcher觀看UNC路徑

但是,當我將其更改爲諸如\\server2\secondary\temp\watch_folder之類的服務時,服務無法啓動。日誌中的錯誤是

目錄名\\ server2 \ secondary \ temp \ watch_folder無效。

如果我直接將其複製到Windows資源管理器中,該文件夾將打開正常。如果我把我的代碼粘貼到一箇舊的Winforms應用程序中,它可以正常工作。我已經嘗試了所有「登錄爲」帳戶。我將它設置爲使用管理員帳戶,但仍然沒有骰子。

這裏是我的代碼:

_watcher = new FileSystemWatcher(); 
_watcher.Path = ConfigurationManager.AppSettings["WatchFolder"]; 
_watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName; 
_watcher.Filter = "*.txt"; 
_watcher.Created += new FileSystemEventHandler(OnCreated); 
_watcher.Error += new ErrorEventHandler(OnError); 
_watcher.EnableRaisingEvents = true; 

任何想法?我很茫然,在這一點上,我認爲我一直在盯着它太久。我衷心感謝任何幫助。

感謝, 尼克

編輯 這裏是個例外:

服務無法啓動。 System.ArgumentException:目錄名稱\ server2 \ Secondary \ temp \ watch_folder無效。
在System.IO.FileSystemWatcher.set_Path(字符串值)
在FileWatcher.FileWatcher.Watch()
在FileWatcher.FileWatcher.OnStart(字串[] args)
在System.ServiceProcess.ServiceBase.ServiceQueuedMainCallback(對象狀態)

+0

您的意思是問題已解決? –

+0

不,問題沒有解決。我仍然無法啓動服務。 – nickfinity

+1

你有任何異常錯誤嗎?你知道如何調試Windows服務嗎?任何關於錯誤的信息都有幫助。 –

回答

18

我只是嘗試這樣做:

var _watcher = new FileSystemWatcher(); 
_watcher.Path = @"\\10.31.2.221\shared\"; 
_watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName; 
_watcher.Filter = "*.txt"; 
_watcher.Created += new FileSystemEventHandler((x, y) =>Console.WriteLine("Created")); 
_watcher.Error += new ErrorEventHandler((x, y) =>Console.WriteLine("Error")); 
_watcher.EnableRaisingEvents = true; 
Console.ReadKey(); 

,如果沒有問題的作品,但是我複製你的異常就在:

  • 正在運行的用戶沒有權限讀取遠程文件夾。
  • 遠程文件夾不存在。

您的問題肯定與權限有關,我認爲正在運行的用戶沒有所需的權限。

您可以嘗試的另一件事是將遠程文件夾映射到一個本地文件夾。在你的代碼

NET USE Z: \\server2\Secondary\temp\watch_folder /user:Domain\UserName Password 

然後:

在cmd執行此

_watcher.Path = @"Z:\"; 
+1

我有這個問題,這是一個權限問題夾。謝謝您的幫助! – liebs19

+0

我也有這個問題。我使用FileSystemWatcher進行的服務設置爲將網絡驅動器上的文件夾監視爲NetworkService **,並且路徑中有空格,所以我認爲這是問題。**我正在筆記本電腦上運行它。在閱讀有關權限的答案之後,我使用FileSystemWatcher在服務器上安裝了該服務,問題消失了!從該應用服務器運行時,該服務在NetworkService下具有正確的權限。 - 有用的答案! –

5

您的服務可能在沒有該共享權限的用戶帳戶下運行。嘗試更改Windows服務以使用不同的憑據運行。

0

您可能需要對你的路徑

\\server2\\Secondary\\temp\\watch_folder 
+0

您需要在server2之前使用兩個以上的斜槓才能這樣做:Try \\\\ server2 \\ Secondary \\ temp \\ watch_folder –

0

我也遇到了這個問題。我的修復方案是將我們公司的域名包含在服務器路徑中:

\\servername.company.com\directorytowatch