WiX服务使用用户凭据或LocalSystem安装,具体取决于UI输入

时间:2016-10-24 09:57:07

标签: wix

以下是安装了我的服务的.wxs安装程序文件的一部分。我有一个WiX UI对话框,用户可以选择安装服务以在LocalSystem帐户下运行,也可以输入他们想要的帐户凭据。 UI有两个文本框(一个绑定到ACCOUNT属性,一个绑定到PASSWORD属性)和一个绑定到名为USELOCALSYSTEMACCOUNT的属性的复选框。

单独地,这些服务安装程序可以正常工作,您可以在下面看到ServiceInstall部分。但是,如果USELOCALSYSTEMACCOUNT未设置为1,我希望安装程序使用用户输入凭据安装服务,或者如果LocalSystem设置为1,则使用USELOCALSYSTEMACCOUNT帐户,但我是不确定如何做到这一点。 Condition代码在ServiceInstall代码中无效,因此我对如何实现这一目标感到有些失落。

下面的WiX组件部分:

<Component Id='MainExe' Guid='*'>
  <File Id='MainService' 
        Name='MyService.exe'
        Source='$(var.ServiceRoot2)\SA.MyService.exe'/>
    <ServiceInstall Id='MyService' 
                    Type='ownProcess' 
                    Vital='yes' Name='MyService' 
                    Name='$(var.HumanProductName)' 
                    Description='$(var.ProductDescription)' 
                    Start='demand' 
                    Account='[ACCOUNT]' 
                    Password='[PASSWORD]' 
                    ErrorControl='ignore' 
                    Interactive='no'/>
    <ServiceInstall Id='MyService' 
                    Type='ownProcess' 
                    Vital='yes' 
                    Name='$(var.HumanProductName)'  
                    Description='$(var.ProductDescription)' 
                    Start='demand' 
                    Account='LocalSystem' 
                    ErrorControl='ignore' 
                    Interactive='no'/>
    <ServiceControl Id='MyServiceServiceControl' 
                    Stop='both' 
                    Remove='both' 
                    Name='$(var.HumanProductName)' 
                    Wait='yes'/>
</Component>

1 个答案:

答案 0 :(得分:3)

您应该能够将条件放在整个组件周围,并且只具有LocalSystem版本和用户指定的版本。 Wix非常聪明,不能在安装程序中将Myservice.exe打包两次。只要确保你的情况已经'#34;或已安装&#34;附加到它,因为我过去有问题,条件组件/功能没有卸载,因为它们所依赖的属性在卸载期间没有设置。如果它是机器的状态(VersionNT / VersionVT64保持不变),则省略&#34; OR Installed&#34;应该没事。