Как переключаться между двумя именами пользователей в установщике сервиса Wix?

Я использую Wix для установки службы Windows, но мне нужна опция для использования учетной записи LocalSystem или учетной записи, предоставленной пользователем. Как я должен переключаться между жестко закодированным значением и пользовательским значением? Для службы у меня есть:

<ServiceInstall Id="ServiceInstaller" Type="ownProcess" Vital="yes" Start="auto" 
    Account="[SERVICELOGONUSER]" Password="[SERVICELOGONPASSWORD]" ErrorControl="normal" 
    Interactive="no"/>

В интерфейсе у меня есть свойство:

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

Но это будет просто отображать жестко закодированное значение, которое пользователь может редактировать.

1 ответ

Решение

Я бы посоветовал сделать два компонента с взаимоисключающими условиями, используя ваш 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"S. Не беспокойтесь, благодаря умному каблированию, набор инструментов WiX будет сжимать дублированный контент по компонентам только один раз.

Таким образом, не будет иметь значения, если пользователь начнет изменять SERVICELOGONUSER а также SERVICELOGONPASSWORD и решили использовать LocalSystem вместо.

Надеюсь это поможет!

Другие вопросы по тегам