2016-12-15 80 views
0

我開發了使用Wix的Windows服務安裝程序。服務設置爲安裝後自動啓動。安裝程序具有自定義對話框,用於輸入和更新.config文件。輸入是可選的。錯誤1079:重新啓動Windows服務時出錯

當輸入沒有提供時,配置文件沒有更新。我可以從services.msc重新啓動windows服務。如果用戶提供輸入,則自定義操作(延遲)將更新配置文件。此自定義操作使用Impersonate =「no」模式運行。

在這種情況下,Windows服務自動啓動後安裝,一切工作正常。但是當我重新啓動服務時,它會拋出錯誤。

enter image description here

下面是安裝服務的代碼:

<Component Id="CMPFa85281c3_a329_4a93_a1d7_203fbccec31f" Guid="*" Directory="INSTALLLOCATION"> 
    <Condition> 
    <![CDATA[Installed OR (SVCINSTALL <> 0)]]> 
    </Condition> 
    <RemoveFile Id="RmFa85281c3_a329_4a93_a1d7_203fbccec31f" Name="MyService.exe" On="both" /> 
    <File Id="Fa85281c3_a329_4a93_a1d7_203fbccec31f" Source="$(var.BaseDir)\MyService.exe" KeyPath="yes" /> 

    <ServiceInstall Id="InstallWindowsService" Name="MyService" 
        DisplayName="MyService" 
        Start="auto" 
        ErrorControl="normal" 
        Type="ownProcess" 
        Account="[USER_DOMAIN]\[SERVICEUSER]" 
        Password="[PASSWORD]" 
        Description="MyService"/> 

    <ServiceControl Id="sc_InstallWindowsService" Name="MyService" 
        Start="install" Remove="uninstall" Stop="both" Wait="no"/> 
</Component> 

下面是自定義操作的代碼。從這種事情

<CustomAction Id="UpdateConfigFiles" 
       Return="check" 
       Execute="deferred" 
       Impersonate="no" 
       BinaryKey="MyCustomAction.dll" 
       DllEntry="UpdateFilePath" 
       HideTarget="yes"> 
</CustomAction> 

<InstallExecuteSequence> 
    <Custom Action="PassData" Before="UpdateConfigFiles">NOT Installed AND NOT PATCH AND NOT REMOVE</Custom> 
    <Custom Action="UpdateConfigFiles" Before="InstallFinalize">NOT Installed AND NOT PATCH AND NOT REMOVE</Custom> 
</InstallExecuteSequence> 
+0

請您澄清一下嗎?主題行說「啓動Windows服務」,但文字說「當我停止服務」..是這兩個或只是其中之一? – PhilDW

+0

服務在安裝後自動啓動。這工作正常。但是,當我從services.msc重新啓動時,它無法啓動。 –

回答

0

來看:

https://support.microsoft.com/en-us/kb/2478117

錯誤可以用特權不足相關聯,以啓動該服務。自定義操作或配置步驟沒有理由產生效果,除非它自然會導致服務以新帳戶開始或使其在同一個進程中共享兩個服務,這就是消息所說的。這似乎與安裝無關,因爲沒有任何機制可以產生效果。

重現的場景對我來說仍然不清楚,但似乎安裝可以啓動服務(並且安裝使用本地系統帳戶運行),因此它成功了,但根據知識庫文章的錯誤消息意味着試圖啓動它的用戶沒有足夠的權限,否則錯誤表示該進程正在嘗試使用兩個帳戶,可能是一個在配置文件中,另一個在安裝配置中。