使用用户凭据或本地系统(取决于UI输入)安装WiX服务
下面是安装我的服务的.wxs安装程序文件的一部分。我有一个WiX用户界面对话框,用户可以选择安装要在使用用户凭据或本地系统(取决于UI输入)安装WiX服务,wix,Wix,下面是安装我的服务的.wxs安装程序文件的一部分。我有一个WiX用户界面对话框,用户可以选择安装要在LocalSystem帐户下运行的服务,或者输入他们想要的帐户的凭据。UI有两个文本框(一个绑定到帐户属性,另一个绑定到密码属性)和一个绑定到名为USELOCALSYSTEMACCOUNT属性的复选框 单独来看,这些服务安装程序工作正常,您可以看到下面的ServiceInstall部分。但是,如果USELOCALSYSTEMACCOUNT未设置为1,我希望安装程序使用用户输入凭据安装服务;如果US
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!有一次我听从了你关于组件组
的建议,以前从未使用过它们,这真是一种魅力。