我正在處理循環依賴項w.r.t. Windows服務及其對驅動程序的依賴。情況如下:如何在安裝服務時定義此依賴項
我用C++寫了一個Windows服務。該服務依賴於第一次加載/使用時安裝驅動程序的DLL;該DLL在操作期間使用該驅動程序。
在早期測試中,我會通過命令行調用/INSTALL
標誌來安裝服務可執行文件 - 這將在內部調用InstallService
。
然後,我遇到了一個問題:當我手動啓動它的服務將運行,但是當它被設置爲自動運行開機後已加載的驅動程序之前,將啓動,它會因爲這個錯誤。
爲了解決這個問題,我在服務的註冊表項@HKLM\System\CurrentControlSet\Services\<SERVICE>
的DependOnService
值中設置了驅動程序對服務的依賴關係(Windows對待類似於服務的驅動程序)。這解決了這個問題。
快進到部署:我使用WiX的安裝和啓動服務。在安裝過程中,我想將驅動程序設置爲我的服務的依賴項。但是,如果我將驅動程序定義爲ServiceInstall
元素中的依賴項,那麼WiX會在啓動我的服務之前嘗試啓動它,因此我的問題是:如果不啓動依賴項,則WiX無法啓動該服務,並且依賴項不存在,因爲服務尚未運行。
如果我不指定安裝程序配置文件中的相關性則服務安裝並運行良好。
我想,我可以像以前一樣安裝該服務,在註冊表中後確定的依賴性,但有一個爲那裏的服務沒有進入!
另一件事:服務現在開機後運行!沒有定義依賴關係!我沒有做過多少測試,看看這是否一致。
那麼,如何威克斯告訴Windows,有一個服務,即爲什麼沒有註冊表項?我如何指定依賴關係?我還需要需要指定一個嗎?我是否應該放棄使用與WiX服務相關的元素,並在安裝程序中手動執行測試期間執行的命令?
我一直在摔跤這個和研究至少一個星期;任何見解將不勝感激。
環境信息:
- 開發:Windows 7中,32位
- Visual Studio 2010中
- WiX的V3.8
- 部署:Windows 7 32位和64位 - 定製,拆卸圖像 so something stand ARD可能不存在
我明白你的問題,但是我不明白的部分是「我用C++寫了一個Windows服務,這個服務依賴於第一次加載/使用時安裝驅動程序的DLL; DLL使用司機在運行期間「。 - 聽起來像是一個非常糟糕的設計選擇,這會導致你很多問題。啓動服務不應啓動任何安裝過程。你爲什麼這樣做?我會說擺脫你的服務所做的任何安裝,並開始使用WiX的全部功能。 – 2014-10-09 20:41:16
另外WiX試圖啓動你的依賴聽起來不對。它不應該啓動任何東西。它只應該安裝您的服務所依賴的必要驅動程序/ DLL。而已。 – 2014-10-09 20:45:51
@ChrisEelmaa對不起,這部分不清楚,也許我可以澄清一下:在DLL中有一個'.sys'驅動文件。在第一次使用DLL時,如果系統中沒有'.sys'文件,那麼DLL將其解壓縮並寫入磁盤 - 它不會啓動另一個安裝程序或其他任何東西。以這種方式做事的選擇不是我的,而是第三方DLL的作者。我想我可以從它已經安裝的系統上獲取'.sys'文件,並讓WiX將它安裝到正確的位置;我得看看這個。 – paul 2014-10-10 12:21:33