2009-12-17 166 views
1

我有一個在VB.NET中開發的Windows服務。此Windows服務每晚晚上8點將文件從我的C:\ftpDocs複製到Y:\FtpDocs文件夾中選擇一個文件。無法從VB.NET訪問網絡驅動器Windows服務

Y:是一個映射驅動器,它是\\sourceServer\Output files。當我從VB.NET Windows應用程序而不是Windows服務運行相同的代碼時,它工作得很好。但從服務中,它正在拋出訪問被拒絕訪問\\sourceServer\Output錯誤。

看來Windows服務從C:\windows\system32運行。爲此,我嘗試將當前目錄更改爲C:\ftpService(這是我的應用程序所在的文件夾)。

要訪問映射的驅動器,我提供了不是我的Windows用戶標識和密碼的用戶標識和密碼。你認爲這是它無法從Windows服務訪問它的原因嗎?

如果是,它是如何從Windows應用程序工作?這個問題在過去一個月內不會消失。

回答

4

當前映射的驅動器是每個用戶維護的 - 這對我來說是一個很大的禁忌,因爲我們都可以通過登錄同時。

您的服務需要使用某種保存的證書映射共享本身(如果您願意,您可以對它們進行硬編碼,儘管這不是非常安全並且代表了可維護性負擔)。如何做到這一點的一個很好的例子是here - 雖然,我沒有使用這個代碼,我剛剛閱讀文章。

+0

謝謝Dathan,我一定會試試這個。再次感謝。 – rowmark 2009-12-17 03:35:12

+0

感謝大山。它像一個魅力。 – rowmark 2009-12-18 03:37:02

2

通常,Windows服務在其憑據未被授權訪問網絡上的文件的標識下運行。嘗試在可訪問網絡文件的域帳戶下運行Windows服務。確保此帳戶可以訪問將要讀取和寫入的網絡和本地文件夾/文件。

另外,您需要使用UNC路徑,而不是映射驅動器。映射的驅動器不會爲服務裝入。

+0

tvanfosson, 我也試過UNC Path。但它沒有幫助。接下來的事情是我打算讓我的NetworkID添加到映射的驅動器文件夾中。 – rowmark 2009-12-17 03:25:03

+0

我知道這是一箇舊的答案,但值得注意的是,您應該永遠不要使用用戶憑據運行服務 - 如果用戶退出並且您禁用了他們的帳戶,該怎麼辦?當我開始做一份工作時,我被帶到了老開發公司的電腦。他幾年前離開了。他的帳戶很活躍,他的個人電腦一天24小時保持。數百個業務關鍵流程依賴於他的機器/信譽 - 他們甚至無法更改密碼,因爲密碼全都是硬編碼的。不用說,我快速離開了。 – Basic 2012-02-01 22:14:48

+0

就個人而言,我使用每個應用程序一個帳戶 - 一個域的acct。對於使用網絡或特定於服務器的服務。 SQL是'Server \ SQLService',Sophos AV是'Domain \ SophosService'。您應該確保普通用戶無法以(DC/Server上的)這些帳戶登錄。之後,您可以爲特定應用授予共享/其他資源的權限。 – Basic 2012-02-01 22:16:55