0

我正在開發一個涉及智能卡(數字簽名)的應用程序。讓我們假設我們在這兩種環境相同的代碼:Windows服務和控制檯應用程序之間的權限差異

  • 控制檯應用程序,由管理員用戶執行
  • Windows服務,由管理員用戶

我suposed執行,如果這兩個代碼分別爲由同一用戶執行,他們將擁有相同的權限。看起來這不是真的。當我嘗試使用Windows服務(已執行與管理員用戶)我收到

TargetInvocationException 
CryptographicException 

Can't initialize DLL provider at System.Security.Cryptography.Utils.CreateProvHandle(. 

至於我的互聯網上閱讀,也許是權限問題的一些國王。控制檯應用程序正常。

  • 如果Windows服務和控制檯應用程序由同一用戶執行,它們之間的區別是什麼?

  • 是否可以通過Windows Service實現相同的結果?

免費虛擬啤酒對誰解決它的人;)

謝謝!

回答

1

您是否曾嘗試以本地服務,網絡服務和本地系統的身份運行服務?改變這些沒有區別?我知道我必須將我的本地服務更改爲本地系統才能訪問我的文件。不知道你是否使用任何文件,但至少它是要檢查的東西。

+0

好的,謝謝布蘭迪,工作! :)。問題是我不知道爲什麼。我更改爲其他用戶,因爲網絡服務無法訪問證書。在某些方面,我不明白,證書已在文件夾中結束: - c:\ windows \ system32 \ config \ systemprofile \ application data \ microsoft \ systemcertificates \ my \ certificates 像這個文件位於那個文件夾可以與本地服務工作,我沒有得到錯誤:? - 在System.Security.Cryptography.Utils.CreateProvHandle(無法初始化DLL提供商 有人知道這個文件夾中如何結束 感謝布蘭迪! – user256038 2010-06-14 10:10:53

0

不幸的是,我沒有解決方案,但Windows服務的行爲與普通程序的行爲完全不同。例如,除非您的服務在初始化這些驅動器的服務之後啓動,否則您將無法從Windows服務訪問網絡驅動器。

您可以添加依賴到您的服務,使他們依賴於您需要的服務,或在最後。這可以解決你的問題,但我不能保證。

+0

謝謝Callash,非常感謝。不幸的是,我的服務正在手動啓動,因此之前解決了所有可能的依賴項。 – user256038 2010-06-02 10:08:10

+0

如果你總是手動開始你的服務,如果你不介意我的問題,首先要把它作爲一個windows服務,這有什麼意義呢? – 2010-06-02 10:26:45

+0

是的,很好的問題;)。我正在手動啓動該服務僅用於測試目的。在生產服務器中,它必須自動啓動:)。 – user256038 2010-06-02 10:31:30

0

控制檯應用程序和導致我頭痛的Windows服務之間的一個區別在於,Windows服務使用C:\ Windows \ System32作爲當前目錄。我不知道這是否會對您的情況有所幫助,但我想您可以嘗試一下:http://igorbrejc.net/development/c/windows-services-and-working-directories

+0

您能發佈整個異常描述(包括堆棧跟蹤)嗎? – 2010-06-03 07:38:51

+0

我把它發佈在一個新的答案,謝謝:) – user256038 2010-06-03 07:50:57

相關問題