2013-01-23 72 views
2

我正在編寫一個Windows服務(Delphi XE2),它調用第三方庫COM中的函數。 COM庫的核心是相當古老的,並要求驅動器號映射到其數據文件的位置。它絕對不適用於UNC路徑。在我的服務中,我在服務啓動時連接驅動器盤符,以確保它可用。我正在使用WNetAddConnection2 API調用,並檢查返回值。驅動器正在成功連接,除非驅動器號已被使用(ERROR_ALREADY_ASSIGNED),但無論在哪種情況下,COM功能都可正常工作。我在服務停止時遇到的問題。如果我在服務停止時(WNetCancelConnection2)和服務器上的其他應用程序/服務正在使用驅動器號時斷開驅動器連接,則它們將受到影響並失去連接。但是,如果我在服務停止時不斷開驅動器,則驅動器將「丟失」並且無法通過其他服務連接。在Windows服務中連接映射驅動器號

我敢肯定,這與驅動器映射如何由創建它們的會話/服務「擁有」有關,但我不確定什麼是正確的解決方案。我目前正在'本地系統'開始服務。我知道微軟總是建議服務不使用映射驅動器,但我沒有選擇。有沒有人遇到過這個問題,並有任何建議?

回答

4

我目前正在啓動「本地系統」下的服務

嘗試不同的用戶帳戶。

由於Windows本地系統安全的原因保持地方 - 從督察網絡接入禁止

0

驅動字母分配在每用戶的基礎上。您的服務的驅動器盤符分配可能會影響其他應用程序/服務的唯一方法是它們全部在同一用戶帳戶中運行。應用程序不會在LocalSystem帳戶中運行,除非它們是由作爲LocalSystem運行的服務啓動的(但用戶不會看到它們)。因此,如果您希望將服務的驅動器號分配隔離到您的服務中,請爲您的服務創建一個專用用戶帳戶以便運行。這還使您能夠自定義該用戶帳戶的權限,以便它具有網絡訪問權限如果不是真的需要,不需要完整的系統訪問。