2015-08-13 38 views
0

我正在使用Wix安裝Windows服務,但需要使用本地系統帳戶或使用用戶提供的帳戶的選項。我應該如何在硬編碼值和用戶值之間切換?對於服務,我有:如何在Wix服務安裝程序中切換兩個用戶名?

<ServiceInstall Id="ServiceInstaller" Type="ownProcess" Vital="yes" Start="auto" 
    Account="[SERVICELOGONUSER]" Password="[SERVICELOGONPASSWORD]" ErrorControl="normal" 
    Interactive="no"/> 

在UI我有屬性:

<Property Id="SERVICELOGONUSER" Value="LocalSystem"/> 

在對話框我:

<Control Type="CheckBox" Width="200" Height="25" X="25" Y="75" Id="LocalCheckBox" 
    Property="UseLocalSystem" CheckBoxValue="1" Text="Use LocalSystem Account"/> 
<Control Type="Edit" Width="200" Height="15" X="25" Y="115" Id="AccountTextbox" 
    Property="SERVICELOGONUSER"> 
    <Condition Action="disable">UseLocalSystem = 1</Condition> 
    <Condition Action="enable"><![CDATA[UseLocalSystem <>1]]></Condition 
</Control> 

但是,這將只顯示硬編碼值,用戶可以編輯。

回答

1

我會建議使用您的UseLocalSystem屬性使得兩個組件相互排斥的條件,像這樣:

<Component Id="LocalSystem_Service" Guid="{A-GUID}"> 
    <Condition> UseLocalSystem = 1 </Condition> 
    <File Id="SvcFile_Local" Name="Service.exe" Source="Service.exe"/> 
    <ServiceInstall Id="ServiceInstaller" Type="ownProcess" Vital="yes" Start="auto" 
    Account="LocalSystem" ErrorControl="normal" Interactive="no"/> 
</Component> 

<Component Id="User_Service" Guid="{ANOTHER-GUID}"> 
    <Condition> <![CDATA[UseLocalSystem <>1]]> </Condition> 
    <File Id="SvcFile_User" Name="Service.exe" Source="Service.exe" /> 
    <ServiceInstall Id="ServiceInstaller" Type="ownProcess" Vital="yes" Start="auto" 
    Account="[SERVICELOGONUSER]" Password="[SERVICELOGONPASSWORD]" ErrorControl="normal" 
    Interactive="no"/> 
</Component> 

維克斯有:如果你需要在兩個地方同一個文件,你需要有一個File限制元素在每個地方,這就是爲什麼我有兩個File元素Id的不同。不用擔心,由於智能佈線,WiX工具集只會對組件中的重複內容進行一次壓縮。

這樣,如果用戶開始更改SERVICELOGONUSERSERVICELOGONPASSWORD並決定使用LocalSystem,則無關緊要。

希望這會有所幫助!

相關問題