2013-06-02 150 views
1

我有一個簡單的msi編寫的WiX安裝本機NT服務。在我對msi進行了一些更改後,它在StartServices標準操作中失敗,出現錯誤「服務無法啓動,請確認您有足夠的權限」。如果我按下忽略並手動啓動該服務,則它會成功啓動。問題絕對不是沒有足夠的權限。我如何診斷/調試這些問題? Windows安裝程序的詳細日誌似乎不包含任何有用的信息。調試「服務無法啓動」Windows安裝程序錯誤

回答

5

安裝程序將沒有任何有用的信息,因爲錯誤僅由安裝程序提供。以下是我如何解決這個問題。

註釋掉的ServiceControl元素,以便安裝程序不會嘗試啓動該服務。 運行安裝程序並完成它。 手動啓動服務。

如果服務啓動,則表示某種競爭條件。一種常見的情況是該服務依賴於正在安裝到GAC或WinSXS的文件。安裝程序使用PublishAssemblies標準操作將這些文件放在那裏。但是,由於GAC和WinSXS API不支持跨安裝,PublishAssemblies會一直等到執行階段才能執行工作。這是在安裝程序嘗試啓動服務之後。另一種常見情況是,如果您有一些自定義操作正在安裝或配置該服務所需的某些內容,並且您在安裝過程中所做的操作較晚。

如果服務仍然無法啓動,這通常會排除競爭條件。你必須分析服務本身。使用諸如依賴,ildasm(如.net)和processexplorer(filemon/regmon)等工具嘗試發現缺失的依賴關係。更新安裝程序,然後沖洗並重復。

1

正如您發現的那樣,Windows Installer在無法啓動服務時不提供有用的信息。但是,當顯示對話框時,機器處於完美狀態以確定發生了什麼問題。所以,而不是取消安裝,開始調試。試着開始服務,看看是否給你更多的信息。如果沒有,請打開調試器並去鎮上。

我基本上遵循本FireGiant KB Article描述的過程。這是找出服務無法啓動的最直接方法。 Windows Installer本身不能提供更好的消息太糟糕了。

+0

這是開發人員進行調試的最佳時機,但通常有幾十個其他人只是不高興安裝「破碎」。我通常會禁用該服務,並教導開發人員如何啓用自己,以便讓整個組織承受最少的痛苦,直到開發人員全力以赴。 –