2017-05-15 213 views
0

即時通訊使用FileSystemWatcher對象從文件夾中檢索文件。FileSystemWatcher.Path網絡共享驅動器異常

代碼工作很好的本地機硬盤/文件夾,但是當我使用網絡路徑拋出異常。

出於某種原因的代碼,如果我開始在調試模式下服務不拋出異常。如果我通過installutil安裝它,那麼這個異常再次拋出。 也許是有一些權限問題,但我不知道是什麼...

public LevelOneValidatedWatcher(string strLevelOneFolder) 
{ 
    FileSystemWatcher objFSW = new FileSystemWatcher(); 
    objFSW.Path = strLevelOneFolder; /// <<<<<<<<<<<< EXCEPTION THROWN HERE 
    objFSW.Filter = "*.zip"; 
    objFSW.Created += new FileSystemEventHandler(myWatcher_Created); 
    objFSW.Renamed += new RenamedEventHandler(mydWatcher_Renamed); 
    objFSW.EnableRaisingEvents = true; 
} 

System.ArgumentException was unhandled 
Message=The directory name T:\INFORMATION TECHNOLOGY\bu is invalid. 
Source=System 
StackTrace: 
at System.IO.FileSystemWatcher.set_Path(String value) 
at MA.BatchTool.ServerLibrary.LevelOneValidatedWatcher..ctor(String strLevelOneFolder) in D:\Dev\Projects\MailAssurety1.1\Development\SourceCode\MA_1.1\WebServerSide\WebServerLibraries\LevelOneValidatedWatacher.cs:line 23 
at MA.BatchTool.ServerLibrary.ServerJobProcessor.StartFileWatcher(Object strPath) in D:\Dev\Projects\MailAssurety1.1\Development\SourceCode\MA_1.1\WebServerSide\WebServerLibraries\ServerJobProcessor.cs:line 32 
at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
at System.Threading.ThreadHelper.ThreadStart(Object obj) 
+0

根據異常消息

可能進一步閱讀,路徑不存在..請確保您使用了正確的路徑。 –

+0

嗨,路徑存在。它是一個共享驅動器。當我以調試模式啓動Visual Studio時,程序可以訪問路徑。在將服務安裝爲Windows服務之後,發生異常。 –

+1

檢查[這裏](http://stackoverflow.com/questions/3622089/windows-service-cant-access-network-share)和[這裏](http://stackoverflow.com/questions/16946312/how-come -my-windows-service-can-access-a-folder-with-files-in-them)這些可能會幫助你。 –

回答

1

驅動器盤符映射是每個交互式登錄設置。例外是告訴你事實,T:\INFORMATION TECHNOLOGY\bu確實不存在,因爲對於除你自己的會話以外的會話(例如服務運行的會話0),驅動器T:\不會映射到任何地方。當您調試時,它的工作原理是因爲當您調試時,您可能在您自己的會話中運行服務,而不是在會話0內運行。

當您嘗試從啓動的程序訪問映射驅動器時, UAC提示,因爲UAC用戶被認爲是「不同的用戶」。對於可能的解決辦法「Map a network drive to be used by a service

+0

Thx這對我有意義。 –

0

我想共享的驅動器是不是到Local System Account訪問,你將必須配置Windows服務作爲特定的運行用戶


picture

+0

是的,我做到了這一點爲了使用UNC –