3 Stimmen

MSI-Installationsreihenfolge - DB-Skripte vor dem Start der Dienste ausführen

Leute,

wir haben einige Probleme mit der Sequenzierung bei unserer MSI-Installation. Als Teil unserer Anwendung installieren wir eine Reihe von Diensten und geben dem Benutzer die Möglichkeit zu wählen, ob er sie sofort oder später starten möchte.

Wenn sie sofort starten, scheinen sie zu früh in der Installationssequenz zu beginnen - bevor unser Datenbankmanager die Möglichkeit hatte, die Datenbank zu aktualisieren.

Im Moment sieht unsere benutzerdefinierte Aktion zum Ausführen des Datenbank-Updaters so aus - sie wird nach "InstallFinalize" ausgeführt - sehr spät im Prozess.

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

Welcher Schritt sollte nach oder vor der Ausführung erfolgen, um sicherzustellen, dass die DB-Skripte ausgeführt werden? antes de Wird einer der installierten Dienste gestartet? Gibt es einen Schritt "BeforeServiceStart"?

EDITAR:

Die Definition des Attributs "Before='StartServices'" auf dem Tag hat mein Problem nicht gelöst.

Ich nehme an, das Problem ist folgendes: Die benutzerdefinierte Aktion hat einen "inneren Text", der eine Bedingung darstellt, und diese Bedingung lautet: "&DbUpdateManager=3". Aus dem, was ich aus Versuch und Irrtum ableiten kann, bedeutet dies wahrscheinlich "die DbUpdateManager-Funktion muss veröffentlicht werden".

Nun, das Problem ist: "PublishFeature" kommt ganz am Ende der Installationssequenz, kurz vor "InstallFinalize" und definitiv NACH InstallServices / StartServices. Wenn ich also die Anforderung "Before=StartServices" festlege, ist die Bedingung "DbUpdateManager feature must be published" noch nicht erfüllt, so dass der DbUpdateManager nicht ausgeführt wird :-(

Ich habe versucht, die Bedingung zu entfernen - in diesem Fall wird mein DbUpdateManager manchmal überhaupt nicht ausgeführt, manchmal mehr als einmal - kein wirklich klares Muster, was passiert, wenn.....

Haben Sie noch weitere Ideen? Gibt es eine Möglichkeit, auf die Bedingung "Das DbUpdateManager-Feature ist installiert" zu prüfen, die nach dem Schritt "InstallFiles" erfüllt wäre?

Marc

1voto

Anton Tykhyy Punkte 18869

Es gibt keine BeforeServiceStart aber Sie könnten versuchen Before='StartServices' .

1voto

Randy Eppinger Punkte 974

Nun, es scheint, dass marc_s diese Frage in einem anderen Artikel beantwortet hat Frage . Da meine Lösung jedoch etwas anders war und die andere Frage ein wenig Rekonstruktion erfordert, um eine Lösung zu erhalten, ist hier genau das, was bei mir funktioniert hat:

...
<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>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X