如何在 Wix 服务安装程序中的两个用户名之间切换?

How to toggle between two usernames in a Wix service installer?

我正在使用 Wix 安装 windows 服务,但需要选择使用 LocalSystem 帐户或使用用户提供的帐户。我应该如何在硬编码值和用户值之间切换?对于我的服务:

<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>

但这只会显示用户可以编辑的硬编码值。

我建议使用您的 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>

WiX 有一个限制,如果你在两个地方需要同一个文件,你需要在每个地方都有一个 File 元素,这就是为什么我有两个 File 元素不同 Id。不过不用担心,得益于智能布线,WiX 工具集只会对组件中的重复内容进行一次压缩。

这样,用户开始更改 SERVICELOGONUSERSERVICELOGONPASSWORD 并决定改用 LocalSystem 都没有关系。

希望对您有所帮助!