2011-07-08 21 views
1

我們的WIX安裝程序在通過自定義UI對話框詢問登錄帳戶後安裝Windows服務。 服務在安裝成功後啓動。 整個安裝過程需要提升權限。WIX:Windows服務修復因缺少權限而失敗+如何檢測修復模式?

盼望關於幾個問題的任何指針:

問題1 在嘗試從「添加/刪除程序」,「修復」,UAC提示權限提升。在允許的情況下,修復仍然失敗並顯示以下消息:

「無法安裝服務。請確認您有足夠的權限來安裝系統服務」。

下面是摘自代碼:

...

特權 ...

<Component Id="C_ServiceEXE" Guid="{105F9C86-BF07-43C8-8C78-DF30F012CD68}"> 
    <File Id="$(var.TargetFileName)" Name="$(var.TargetFileName)" KeyPath="yes" Assembly=".net" 
      AssemblyManifest="$(var.TargetFileName)" AssemblyApplication="$(var.TargetFileName)" DiskId="1" 
      Source="$(var.TargetDir)\$(var.TargetFileName)" /> 

    <Condition>Privileged</Condition> 

    <ServiceInstall Id="Id_ServiceInstall" 
        Name ="$(var.ServiceName)" 
        Description="$(var.ServiceDescription)" 
        DisplayName="$(var.ServiceName)" 
        Account="[SERVICEACCOUNT]" 
        Password="[SERVICEPASSWORD]" 
        Start="auto" 
        ErrorControl="normal" 
        Type="ownProcess" 
        Vital="yes" 
        Interactive="no" 
        /> 

    <ServiceControl Id="Id_ServiceControl" 
        Name ="$(var.ServiceName)" 
        Remove="uninstall" 
        Start="install" 
        Stop="both" 
        Wait="yes" 
        /> 

    </Component> 

...

我不明白爲什麼這正在發生,因爲我的管理員在我身上Win7開箱,並且已經標記了設置,特別是服務安裝組件要在特權模式下運行。

我懷疑我可能會缺少一個AdminInstallExecute序列中的調度修復,但不太確定這是否能解決這個問題。

問題2 此外,相關的問題是 - 如果修復成功,它是否會再次要求用戶通過UI輸入登錄帳戶。 我寧願在修復或升級期間禁止所有交互式用戶界面。我意識到UPGRADINGPRODUCTCODE來檢測升級。

但是如何檢測到修復?

欣賞任何幫助或指針。

回答

0

維護模式很可能會失敗,因爲您的服務用戶帳戶無權使用log on as a service。無論您是否是管理員,都無法爲用戶安裝服務,而無需向他提供正確的日誌。

如果設置此策略有效,您還需要在安裝過程中動態執行此操作。解決方案是使用ntrights.exe作爲自定義操作。此自定義操作可以使用包含用戶帳戶信息的自定義屬性。

要檢測修復過程,您可以檢查REINSTALL屬性值。

+0

應該提到我是從Vista開始建設的。在Windows 7上使用installUtil.exe安裝服務時,登錄權會自動授予指定的服務帳戶。 (需要在Vista上檢查相同)。 – Sameer

+0

該問題似乎是修復/重新安裝是一個像新的安裝(不知道如果安裝程序第一次卸載)。在修復時,我的用戶界面要求登錄帳戶不顯示,導致SERVICEACCOUNT unintialized某些默認等值。這會導致服務安裝失敗,導致修復/重新安裝失敗。_感謝您的迴應._ NTrights.exe似乎針對老版本的操作系統,本應該說我瞄準了Vista,因爲這個工具看起來並不存在(我可能會錯過一些東西)。 – Sameer

+0

在您的代碼示例中,您正在使用ServiceInstall和ServiceControl表。所以你需要像我解釋的那樣將服務策略設置爲日誌。 「ntrights.exe」可以在Vista和Windows 7上運行,只要執行它的自定義操作被推遲而沒有模擬。 –