我讀過許多論壇,因爲沒有用戶登錄,無法從服務訪問映射的驅動器。無法訪問映射驅動器的服務
問題1)我嘗試將我的服務作爲登錄進行 - 因爲某些帳戶和我的網絡驅動器映射在該帳戶中。該服務仍然無法訪問它。爲什麼?
問題2)從同一個服務中,我調用另一個進程。流程運行在哪個用戶帳戶下?
謝謝
我讀過許多論壇,因爲沒有用戶登錄,無法從服務訪問映射的驅動器。無法訪問映射驅動器的服務
問題1)我嘗試將我的服務作爲登錄進行 - 因爲某些帳戶和我的網絡驅動器映射在該帳戶中。該服務仍然無法訪問它。爲什麼?
問題2)從同一個服務中,我調用另一個進程。流程運行在哪個用戶帳戶下?
謝謝
1)使用UNC路徑代替,那麼你不需要訪問映射的驅動器號。至於爲什麼即使在同一個帳戶中運行也無法訪問它們,因此很難確定沒有看到您的實際代碼。
2)這取決於你如何啓動過程。如果您使用ShellExecute()
或CreateProcess()
,那麼它將在調用線程的用戶帳戶中運行。如果你使用CreateProcessAsUser()
,CreateProcessWithLogonW()
,或CreateProcessWithTokenW()
,那麼它運行在您在傳遞用戶帳戶。
服務並沒有獲得關於XP映射驅動器和超越,因爲映射驅動器是每個用戶的資源,所以他們取決於誰登錄。由於可能沒有人登錄,因此可能沒有映射驅動器。
您的服務可能會映射驅動器本身。
我在服務模式下運行JBoss時遇到了類似的問題,即使在將「登錄爲:」選項更改爲映射到同一用戶後,即使執行服務,我的Java代碼也無法訪問映射驅動器駕駛。
然後我發現,如果我可以使用相同的服務映射驅動器,那麼它應該工作。
最後,在service.bat文件的頂部添加一個簡單的命令解決了這個問題。
net use x: \\SERVERNAME\SHARENAME
我遇到與TFSBuildServiceHost服務相同的問題。 – JohnZaj 2014-06-10 20:37:06
感謝您的快速回復雷米。 但是要求指出我們需要使用映射的驅動器而不是UNC路徑。我曾嘗試使用UNC路徑,它的工作正常。 關於2) - 我嘗試了以下場景: a)創建一個服務並以某個用戶身份運行。 b)從服務中調用一個進程。 (根據Remy的說法,這個過程應該在與服務相同的用戶環境中運行。) c)我仍然無法訪問映射驅動器。 。:(我的壞 需要幫助急需 感謝 – Rohit 2010-05-04 07:06:48
忘了這個要求我已經看了許多人說,忽視了微軟禁止建議UNC路徑可以看到,即使IIS不支持映射驅動器,HTTP。: //support.microsoft.com/kb/257174 – 2010-05-04 07:26:42
在UNC路徑上使用映射驅動器號沒有任何優勢,因爲無論如何都映射的驅動器號映射到UNC路徑,因此需要在這種情況下鬆開該需求 – 2010-05-04 18:43:45