如何在 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 工具集只会对组件中的重复内容进行一次压缩。
这样,用户开始更改 SERVICELOGONUSER
和 SERVICELOGONPASSWORD
并决定改用 LocalSystem
都没有关系。
希望对您有所帮助!
我正在使用 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 工具集只会对组件中的重复内容进行一次压缩。
这样,用户开始更改 SERVICELOGONUSER
和 SERVICELOGONPASSWORD
并决定改用 LocalSystem
都没有关系。
希望对您有所帮助!