web-dev-qa-db-fra.com

Comment créer une boîte de dialogue personnalisée dans WiX pour la saisie de l'utilisateur?

J'utilise WiX pour créer un programme d'installation pour un service Windows. Il est souhaitable que le nom du service qui est installé et affiché dans Services soit configurable au moment de l'installation.

Par exemple, voici ce que je pense (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 est quelque chose que je voudrais associer à une boîte de dialogue personnalisée qui est créée et affichée à la personne qui installe le service afin qu'elle puisse définir/modifier le nom du service. Je pense que cela est très similaire à la propriété WIXUI_INSTALLDIR qui est définie et transmise au jeu de boîtes de dialogue WixUI_InstallDir.

Ma question est:

Comment créer une boîte de dialogue personnalisée d'interface utilisateur pouvant accepter les entrées de l'utilisateur qui sont transmises à l'exécution du programme d'installation?

25
Scott Saad

Amusez-vous avec l'interface utilisateur! 

Edit: Le lien original pour répondre n'existe plus. FireGiant (les responsables de Wix) quelques exemples pour une partie de ce processus, mais cela ne répond pas complètement à cette question. Il (est un autre tutoriel } _ (UPDATE le 20 août.20: lien ressuscité de Wayback Machine) qui répond le plus souvent à cette question.

Un aperçu de haut niveau de ce qui va se passer est:

  1. Créer une propriété
  2. Demander au contrôle d'interface utilisateur de définir cette propriété
  3. L'attribut name du service référencera la propriété, c'est-à-dire [ServiceNameProperty].

Toutefois, cette opération est complexe et la création d'une nouvelle boîte de dialogue d'interface utilisateur consiste à utiliser une boîte de dialogue existante, à en faire un clone, puis à l'éditer avec un nouveau texte, de nouveaux contrôles et à l'utiliser pour renseigner la propriété.

28
Darren Kopp

Essayez d’utiliser WixEdit , Un bel outil pour créer une interface utilisateur.

5
Andrew Usikov

Le problème que j'ai avec l'utilisation de propriétés pour définir le nom du service est que, lorsque vous essayez de désinstaller le service, le service ne peut pas trouver le nom du service.

3
user191195

Que diriez-vous d'utiliser la commande savedState dans la méthode d'installation de ProjectInstaller.

0
Madhulika