Как создать пользовательский диалог в 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.

Мой вопрос:

Как создать диалоговое окно пользовательского интерфейса, которое может принимать пользовательский ввод, который передается во время выполнения программы установки?

4 ответа

Решение

Веселитесь вместе с пользовательским интерфейсом!

Изменить: исходная ссылка на ответ больше не существует. FireGiant (сопровождающие Wix) некоторые примеры для части этого процесса, но он не полностью отвечает на этот вопрос. Существует еще один учебник (ОБНОВЛЕНИЕ августа 2018: ссылка восстановлена ​​с Wayback Machine), которая дает большую часть ответа на этот вопрос.

Общий обзор того, что будет происходить:

  1. Создать недвижимость
  2. Настройте это свойство в пользовательском интерфейсе
  3. Атрибут имени в службе будет ссылаться на свойство, т.е. [ServiceNameProperty].

However this is complex, and the way that is suggested to create a new UI dialog, is to take an existing dialog, make a clone of it, and then edit with new text, controls and use it to populate the property.

Попробуйте использовать WixEdit, который является хорошим инструментом для создания пользовательского интерфейса

Проблема, связанная с использованием свойств для установки имени службы, заключается в том, что при попытке удалить службу служба не может найти имя службы.

Как насчет использования dict saveState в методе установки ProjectInstaller.

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. Вам необходимо создать пользовательские настройки, чтобы проверить, доступен ли пользователь на работающей машине.
5. Затем, если пользователь действителен, нам нужно присвоить эти учетные данные (получить из свойства) нашему сервису.

<DirectoryRef Id="INSTALLDIR">
  <Component Id="CMP_InstallMeTXT"   Guid="*">
    <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

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