Как создать пользовательский диалог в WiX для ввода пользователем?
Я использую WiX для создания установщика для службы Windows. Желательно, чтобы имя службы, которая устанавливается и отображается в Сервисах, настраивается во время установки.
Например, это то, о чем я думаю (wix xml snip):
<ServiceInstall
Id="MyServiceInstaller"
Name="NAME_PASSED_FROM_DIALOG"
Type="ownProcess"
Start="auto"
ErrorControl="normal"
Description="My Service"
Account="localsystem"/>
<ServiceControl
Id="StartMyServiceInstaller"
Name="NAME_PASSED_FROM_DIALOG"
Start="install"
Wait="no" />
<ServiceControl
Id="StopMyServiceInstaller"
Name="NAME_PASSED_FROM_DIALOG"
Remove="uninstall"
Stop="both"
Wait="yes" />
NAME_PASSED_FROM_DIALOG - это то, что я хотел бы подключить к настраиваемому диалоговому окну, который создается и отображается для лица, устанавливающего службу, чтобы они могли установить/изменить имя службы. Я думаю, что это очень похоже на свойство WIXUI_INSTALLDIR, которое устанавливается и передается в набор диалоговых окон WixUI_InstallDir.
Мой вопрос:
Как создать пользовательский интерфейс пользовательского интерфейса, который может принимать пользовательский ввод, который передается во время выполнения установщика?
Ответы
Ответ 1
Получайте удовольствие от пользовательского интерфейса!
Изменить: оригинальная ссылка для ответа больше не существует. Firegiant (поддерживающие Wix) некоторые примеры для части этого процесса, но он не полностью отвечает на этот вопрос. Там - это еще один учебник, который больше всего подходит для ответа на этот вопрос.
Краткий обзор того, что будет происходить:
- Создать свойство
- Если элемент управления пользовательского интерфейса задал это свойство
- Атрибут name в службе ссылается на свойство, то есть [ServiceNameProperty].
Однако это сложно, и способ, которым предлагается создать новый диалог пользовательского интерфейса, заключается в том, чтобы взять существующий диалог, сделать его клон, а затем редактировать с помощью нового текста, элементов управления и использовать его для заполнения свойства.
Ответ 2
Проблема с использованием свойств для установки Service Name заключается в том, что при попытке удалить службу служба не может найти имя службы.
Ответ 3
Попробуйте использовать
WixEdit
это хороший инструмент для создания пользовательского интерфейса
Ответ 4
Как насчет использования saveState dict в методе установки ProjectInstaller.
Ответ 5
1. Вам нужно создать MyWixUI_InstallDir.wx, чтобы переопределить WixUI_InstallDir для этого
см. это
http://skullpsgblog.blogspot.in/2015/11/adding-custom-dialog-ui-to-your-msi.html
2. Вам нужно добавить свое собственное диалоговое окно, которое содержит входные текстовые поля, чтобы получить информацию о пользователе, в Свойстве и обратитесь к этому диалоговому окну в MyWixUI_InstallDir.wxs
3. Наконец, вам необходимо указать MyWixUI_InstallDir.wxs в product.wxs.
а
<UIRef Id="MyWixUI_InstallDir" />
4. вам нужно создать customaction, чтобы проверить, что пользователь доступен на рабочем компьютере.
5. Затем, если пользователь действителен, нам нужно назначить эти учетные данные (получить от Свойство) к нашей службе.
<DirectoryRef Id="INSTALLDIR">
<Component Id="CMP_InstallMeTXT" Guid="7AB5216B-2DB5-4A8A-9293-F6711FFAAA83">
<ServiceInstall Id="ServiceInstaller" Type="ownProcess" Vital="yes" Name="WinServiceProject" DisplayName="WinServiceProject" Description="WinServiceProject" Start="auto" ErrorControl="ignore" Interactive="no" Account=".\[ACCOUNT]" Password="[MY_PASSWORD]" />
<ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="WinServiceProject"Wait="yes" />
<util:User Id="UpdateUserLogonAsService" UpdateIfExists="yes" CreateUser="no" Name="[ACCOUNT]" Password="[MY_PASSWORD]" LogonAsService="yes" />
</Component>
</DirectoryRef>
Вы можете получить образец проекта здесь https://github.com/skullpsg/Wix_installer