Question

Folks,

nous courons dans certains problèmes de séquençage avec notre MSI installer. Dans le cadre de notre application, nous installons un tas de services et permettre à l'utilisateur de choisir si les commencer tout de suite ou plus tard.

Quand ils commencent tout de suite, ils semblent commencer trop tôt dans la séquence d'installation - avant notre gestionnaire de base de données a eu la chance de mettre à jour la base de données

.

En ce moment, notre action personnalisée pour exécuter la base de données updater ressemble à ceci - il est exécuté après « InstallFinalize. » - très tard dans le processus

   <InstallExecuteSequence>
      <RemoveExistingProducts After='InstallInitialize' />
      <Custom Action='RunDbUpdateManagerAction' After='InstallFinalize'>
           DbUpdateManager=3</Custom>
   </InstallExecuteSequence>

Quelle serait l'étape plus appropriée à courir après ou avant, pour vous assurer que les scripts sont exécutés DB avant l'un des services installés démarrage en place? Y at-il une étape « BeforeServiceStart »?

EDIT:

Il suffit de définir l'attribut « Avant = 'StartServices de » sur l'étiquette n'a pas résolu mon problème.

Je suppose la question est la suivante: l'action personnalisée a un « texte intérieur », ce qui représente une condition, et cette condition est la suivante: « & DbUpdateManager = 3 ». D'après ce que je peux en déduire tâtonnement, cela signifie probablement « la fonction DbUpdateManager doit être publié ».

Maintenant, la difficulté est la suivante: « PublishFeature » vient ainsi à la fin de la séquence d'installation, juste avant « InstallFinalize », et certainement APRÈS InstallServices / StartServices. Alors, quand je le précise « Avant = StartServices » exigence, la condition « caractéristique DbUpdateManager doit être publié » est pas vrai encore, de sorte que le DbUpdateManager ne soit pas exécuté: - (

J'ai essayé de supprimer la condition - dans ce cas, mon DbUpdateManager n'exécute parfois pas du tout, parfois plus d'une fois - pas de réelle tendance claire quant à ce qui se passe quand .....

plus d'idées ?? Est-il possible que je puisse vérifier une condition « la fonction DbUpdateManager est installé » qui serait vrai après l'étape de « InstallFiles » ??

Marc

Était-ce utile?

La solution

Il n'y a pas BeforeServiceStart, mais vous pouvez essayer Before='StartServices'.

Autres conseils

Eh bien, il semble que marc_s obtenu une réponse à une autre question . Cependant, étant donné que ma solution était légèrement différente et l'autre question nécessite un peu de reconstruction pour obtenir une solution, voici exactement ce qui a fonctionné pour moi:

...
<InstallExecuteSequence>
  <Custom Action="CopyConfigs" 
          After="InstallFiles"><![CDATA[&ProductFeature = 3]]></Custom>
</InstallExecuteSequence>
<CustomAction Id="CopyConfigs"
              FileKey="copySamples"
              ExeCommand=""
              Execute="deferred"
              Impersonate="no"/>

<Directory Id="TARGETDIR" Name="SourceDir">
...
  <Directory Id="Config" Name="Config">
    <Component Id="ShippedConfigs" Guid="{8E6344C8-2B3F-4654-8B42-C09E76200052}">
      <File Id="copySamples"
            Source="$(var.ProjectDir)config\Copy.Configs.Sample.cmd"
            KeyPath="no"
            DiskId="1" />
    </Component>
  </Directory>
</Directory>

<Feature Id="ProductFeature" Title="MyService" Level="1">
  <ComponentRef Id="ShippedConfigs" />
  ...
</Feature>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top