使用用户凭据或本地系统(取决于UI输入)安装WiX服务

使用用户凭据或本地系统(取决于UI输入)安装WiX服务,wix,Wix,下面是安装我的服务的.wxs安装程序文件的一部分。我有一个WiX用户界面对话框,用户可以选择安装要在LocalSystem帐户下运行的服务,或者输入他们想要的帐户的凭据。UI有两个文本框(一个绑定到帐户属性,另一个绑定到密码属性)和一个绑定到名为USELOCALSYSTEMACCOUNT属性的复选框 单独来看,这些服务安装程序工作正常,您可以看到下面的ServiceInstall部分。但是,如果USELOCALSYSTEMACCOUNT未设置为1,我希望安装程序使用用户输入凭据安装服务;如果US

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

单独来看,这些服务安装程序工作正常,您可以看到下面的
ServiceInstall
部分。但是,如果
USELOCALSYSTEMACCOUNT
未设置为1,我希望安装程序使用用户输入凭据安装服务;如果
USELOCALSYSTEMACCOUNT
设置为1,我希望安装程序使用
LocalSystem
帐户,但我不确定如何执行此操作。
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>


您应该能够在整个组件周围设置条件,只需要本地系统版本和用户指定的版本。Wix足够聪明,不会在安装程序中两次打包Myservice.exe。只需确保您的条件已附加“或已安装”,因为我过去遇到过条件组件/功能不卸载的问题,因为卸载过程中未设置它们所依赖的属性。如果这是机器的状态(VersionNT/VersionVT64保持不变),那么省略“或已安装”就可以了。

您应该能够在整个组件周围设置条件,只需要本地系统版本和用户指定的版本。Wix足够聪明,不会在安装程序中两次打包Myservice.exe。只需确保您的条件已附加“或已安装”,因为我过去遇到过条件组件/功能不卸载的问题,因为卸载过程中未设置它们所依赖的属性。如果这是机器的一种状态(VersionNT/VersionVT64保持不变),那么省略“或已安装”就可以了。

感谢您的建议,我之前确实尝试过类似的方法,但我需要创建两个名称不同的组件,这反过来会导致更多问题,因为其他地方引用了这些问题,例如,在
ComponentRef
部分中,您可以将这两个组件(MainExe\u LocalService、MainExe\u UserService)放在组件组中,并且可以在使用ComponentRef引用的任何位置使用ComponentGroupRef。只要确保两个组件上的条件相互排斥,就不应该引起任何问题。(可能会对多个组件中的同一文件发出ICE警告)非常感谢Brian!一旦我听从了你关于
ComponentGroup
的建议,我以前从未使用过它们。感谢你的建议,我之前确实尝试过类似的方法,但我需要创建两个名称不同的组件,这反过来会导致更多问题,因为其他地方引用了这些问题,例如,在
ComponentRef
部分中,您可以将这两个组件(MainExe\u LocalService、MainExe\u UserService)放在组件组中,并且可以在使用ComponentRef引用的任何位置使用ComponentGroupRef。只要确保两个组件上的条件相互排斥,就不应该引起任何问题。(可能会对多个组件中的同一文件发出ICE警告)非常感谢Brian!有一次我听从了你关于
组件组
的建议,以前从未使用过它们,这真是一种魅力。