2011-10-31 104 views
2

安裝/更新驅動程序要安裝驅動程序,您通常發送命令:從Windows服務

DefaultInstall 128 {INF路徑}

通過直接調用或RUNDLL的InstallHinfSection。

這很奇妙。我可以在任何地方安裝我的驅動程序(包括64位Win 2008 R2,這意味着我已經完成了所有代碼的簽名)。

然而,從Windows服務啓動時上述失敗。我已閱讀關於服務和客戶端安裝的信息,並希望我已經滿足了無提示服務安裝(構建.CAT文件,與驅動程序一起簽名等)的所有要求。

但沒有骰子 - 它只是失敗。在交互式安裝和服務安裝之間比較SetupAPI.log中的錯誤不會顯示任何差異(除了交互式執行復制驅動程序文件和成功的步驟,其他方法則不成功)。

驅動程序本身沒有被使用(我的服務是唯一使用它的)。有沒有辦法讓服務在不需要用戶交互的情況下悄悄更新驅動程序?

+0

我們從服務做同樣的事情,它工作正常,這是直接調用API,而不是通過rundll32。 – Luke

+0

真的嗎?我已經嘗試啓動rundll32並調用相同的結果的API。關於?什麼類型的驅動程序正在安裝? – DougN

+0

實際上,我們正在使用這兩種方法。在32位機器上,我們直接調用API;在64位機器上,我們通過rundll32調用它(我們有一個32位安裝程序)。這是Vista和更高版本上的文件系統微型過濾器。 – Luke

回答

2

我給微軟打電話,並與一位支持工程師討論過這個問題。

原來,使用DefaultInstall和InstallHinfSection有點過時,但仍然有效。如果驅動程序是由他們認可的證書籤名的,因爲DefaultInstall是'啞',它恰好在沒有提示用戶的情況下正常工作。然而,驅動程序本身仍然被允許啓動,因爲它與Microsoft證書交叉簽名。我猜想一個不錯的小洞。訣竅是它必須由設置爲與桌面交互(需求)的服務安裝。如果您的服務目前沒有以這種方式運行,那麼使用PsExec或RemCom之類的東西是一種方法。

未來,這可能無法繼續工作。此時,將驅動程序的.cat文件放入Windows \ System32 \ Catroot {F7 ...文件夾中,但不能直接複製 - 有一個API。

如果.cat放在第一位,那麼理論上驅動程序不應該提示詢問驅動程序的證書是否可以被用戶接受,因爲catroot是'用戶可以接受的證書列表和司機。

此外,在嘗試驅動程序安裝之前安裝目錄文件可能會有所幫助,因爲該目錄包含驅動程序將呈現的安全證書(儘管在本例中不一定 - 但它可能有助於未來(也可能與贏2003)

基本上支持工程師很驚訝這個工作在所有和我們去一圈又一圈,它是如何可能的工作...希望這可以幫助其他人。