Wix: Launch Conditions definieren

Jetzt habe ich ein MSI Paket gebaut, welches einen Windows-Dienst installiert und hatte das Problem, das dieser Dienst beim Starten abstürtzt.
Der Grund dafür war, das ich mit dem Dienst versuche einen Wert aus der Registry zu lesen, den ein Programm Schreibt, welches nicht installiert war.
Demzufolge: Kein Programm installiert – Kein Registry-Schlüssel zum auslesen.

Für diesen Fall wäre es doch schön, wenn man direkt beim Installieren des MSI-Paketes prüfen könnte, ob das entsprechende Programm, bzw der RegistryKey vorhanden ist.
Dies geht mit Launch Conditions im Wix-Code des MSI Paketes.

Hierzu braucht man als erstes eine Property, die in der Condition ausgewertet werden soll:

1
2
3
4
5
6
7
<Property Id="PROGINSTALLED">
	<RegistrySearch Id="PROGINSTALLED" 
			Root="HKCU" 
			Key="Software\Hersteller\Programm" 
			Name="key" 
			Type="raw" />
</Property>

^^ Damit wird geprüft ob der Schlüssel „key“ im Pfad „HKEY_CURRENT_USER\Software\Hersteller\Programm“ vorhanden ist.

Die Entsprechende Launch Condition seht dann so aus:

1
2
3
<Condition Message="Das MSI-Paket kann aus folgendem Grund NICHT auf diesem Systen installiert werden:&#xD;&#xA;&#xD;&#xA;Programm-Name &#xD;&#xA;&#xD;&#xA;Wurde nicht auf diesem System gefunden!">
PROGINSTALLED
</Condition>

Wenn der Registry-Schlüssel nun nicht gefunden wurde, und dem entsprechend das Programm, welches ihn geschrieben haben müsste nicht Installiert ist, kommt eine Meldung beim Starten des MSI-Paketes, dass das Programm „Programm-Name“ nicht auf dem System gefunden wurde.

Als Anmerkung sei hier noch erwähnt, dass die Zeichenfolge

1
&#xD;&#xA;

für das Wix ein zeilenumbruch (CRLF) ist.

Interessant hierzu ist auch der folgende Blog Artikel: From MSI to WiX, Part 3 – Launch Conditions and Application Search

leave your comment


*

Unterstütze den Frickelblog!