WiX - essaient d'installer des séquences

Je suis installé à une grande application, et c'est une coutume écrite outil appelé "DbUpdateManager" à la messe exécuter des scripts SQL à l'encontre de notre base de données cible.

Droit maintenant, le WiX 2.x installer fonctionne - mais il a un défaut: lors de l'installation, j'ai aussi installer un couple de services de Windows, qui peut éventuellement être commencé tout de suite. Ceux cependant échoue, si le DbUpdateManager n'a pas été lancé.

Donc ce que je suis en train de l'accomplir, c'est ceci:

  1. Installer DbUpdateManager et mes services à partir de mon MSI
  2. Exécuter DbUpdateManager AVANT les services de démarrage

Mon WiX source ressemble à quelque chose comme ceci:

<Directory Id='INSTALLDIR' Name='DbUpdMgr' LongName='DbUpdateManager' >
  <!-- DbUpdateManager component with the necessary files -->
  <Component Id='DbUpdateManagerComponent' Guid='...' DiskId='1'>
     <File Id='DbUpdateManagerFile' LongName='DbUpdateManager.Wizard.exe' 
           Name='DbUmWz.exe' src='DbUpdateManager.Wizard.exe'  KeyPath='no' />
  </Component>

  <!-- Component to install one of my Windows services -->
  <Component Id='InstallServiceComponent' Guid='...' DiskId='1'>
     <File Id='InstallServiceFile' LongName='MyService.exe' 
           Name='MyServic.exe' src='MyService.exe' KeyPath='yes'/>
     <ServiceInstall Id='InstallMyService' Name='MyService' 
                     Description='My Service' ErrorControl='normal' 
                     Start='auto' Type='ownProcess' Vital='yes' />
     <ServiceControl Id='UninstallMyService' Name='MyService' 
                     Remove='uninstall' Wait='yes' />
  </Component>

  <!-- Feature for the DbUpdateManager referencing the above component -->    
  <Feature Id='DbUpdateManager' ConfigurableDirectory='INSTALLDIR' 
           AllowAdvertise='no' Description='DbUpdateManager' Level='1' 
           Title='Database Update Manager'>
     <ComponentRef Id='DbUpdateManagerComponent'/>
  </Feature>

  <!-- Custom action for running DbUpdateManager -->    
  <CustomAction Id='RunDbUpdateManagerAction' FileKey='DbUpdateManagerFile' 
                ExeCommand='' Return='asyncWait' />

  <!-- Calling the custom action in the install sequence -->    
  <InstallExecuteSequence>
      <RemoveExistingProducts After='InstallInitialize' />
      <Custom Action='RunDbUpdateManagerAction' 
              After='InstallFinalize'>&amp;DbUpdateManager=3</Custom>

J'ai hérité de cette WIX, et ça fonctionne, mais comme je l'ai dit - la DbUpdateManager est appelé trop tard dans le processus (seulement "Après=InstallFinalize") et donc le service ne démarre pas correctement à la première (l'exécuter correctement la deuxième fois, lorsque vous redémarrez manuellement après DbUpdateManager a exécuter).

J'ai tourné autour de la MSI documentation un peu et trouve une belle étape appelée "StartServices", de sorte que mon intuition était juste changer mon appel à l'action personnalisée pour cela:

   <InstallExecuteSequence>
          <Custom Action='RunDbUpdateManagerAction' 
                  Before='StartServices'>&amp;DbUpdateManager=3</Custom>

Malheureusement, dans ce cas, rien ne se passe - DbUpdateManager n'est JAMAIS appelé....

Des idées pourquoi? Débogage de la MSI/WiX truc est vraiment vraiment difficile, et je n'arrive pas à voir la forêt pour les arbres de plus....

Merci!
Marc

EDIT: Le "RunDbUpdateManagerAction" est placé dans la bonne position dans la table InstallExecuteSequence dans mon MSI - droit APRÈS InstallServices et juste AVANT StartServices - et pourtant, il ne fonctionne pas.... DbUpdateManager (un Winforms utilitaire) ne pas afficher lors de l'installation 🙁

EDIT 2: maintenant, mon action semble être exécutées et au bon moment - malheureusement, je suis juste de ne pas voir mon assistant 🙁 j'ai vu un code d'erreur "valeur de retour 1631", ce qui signifie quelque chose comme "Service MSI n'a pas pu démarrer" - wtf ???

MSI (s) (2C:D8) [20:53:36:383]: Faire de l'action: RunDbUpdateManagerAction
Action 20:53:36: RunDbUpdateManagerAction.
L'Action a débuté à 20:53:36: RunDbUpdateManagerAction.
MSI (s) (2C:D8) [20:53:36:383]: Faire de l'action: StartServices
Action 20:53:36: StartServices. Les Services sont en cours de démarrage
L'Action a débuté à 20:53:36: StartServices.
L'Action a terminé à 20:53:36: RunDbUpdateManagerAction. Valeur de retour 1631.

InformationsquelleAutor marc_s | 2009-04-22