Senden von Meldungen an Windows Installer mithilfe von MsiProcessMessage

Die mit MsiProcessMessage gesendeten Meldungen sind die gleichen, die von der INSTALLUI\_HANDLER-Rückruffunktion empfangen werden, wenn MsiSetExternalUI aufgerufen wurde. Andernfalls verarbeitet Windows Installer die Meldungen. Weitere Informationen finden Sie unter Analysieren von Windows Installer-Meldungen.

So senden Sie beispielsweise eine INSTALLMESSAGE_ERROR-Meldung mit MB_ICONWARNING-Symbol und MB_ABORTRETRYCANCEL-Schaltflächen:

PMSIHANDLE hInstall;
PMSIHANDLE hRec;
MsiProcessMessage(hInstall, INSTALLMESSAGE(INSTALLMESSAGE_ERROR|MB_ABORTRETRYIGNORE|MB_ICONWARNING), hRec);

Dabei ist hInstall das Handle zur Installation, das einer benutzerdefinierten Aktion oder dem hProduct-Handle von MsiOpenProduct oder MsiOpenPackage zur Verfügung gestellt wird, und hRec ist der Datensatz mit den zu formatierenden Fehlerinformationen. Informationen zur Ausführung der Formatierung finden Sie unter MsiFormatRecord.

Wenn eine INSTALLMESSAGE_ERROR- oder INSTALLMESSAGE_FATALEXIT-Meldung gesendet wird, ohne dass der Schaltflächentyp oder die Symboltypen angegeben werden, werden standardmäßig MB_OK, kein Symbol und MB_DEFBUTTON1 verwendet.

Windows Installer bezeichnet die Schaltfläche ABORT nicht mit der Zeichenfolge „ABORT“, wenn eine MessageBox mit Spezifikation der MB_ABORTRETRYIGNORE-Schaltfläche angezeigt wird. Stattdessen wird die Schaltfläche mit der Zeichenfolge „Abbrechen“ bezeichnet. In allen Fehlermeldungen wird nicht das Wort „Abort“ sondern stattdessen das Wort „Abbrechen“ verwendet.

Der hRecord-Parameter der MsiProcessMessage-Funktion hängt vom Meldungstyp ab, der an MsiProcessMessage gesendet wird. Die folgende Liste enthält die Anforderungen des Datensatzes in Bezug auf den Meldungstyp:

INSTALLMESSAGE_FATALEXIT

 

INSTALLMESSAGE_INFO

 

INSTALLMESSAGE_OUTOFDISKSPACE

Feld Beschreibung
0 Vorlage für die Formatierung der resultierenden Zeichenfolge. Weitere Informationen finden Sie unter MsiFormatRecord. Auf die Felder des Datensatzes wird mit [1] für Feld 1, [2] für Feld 2 usw. verwiesen.
1 bis n Alle nachfolgenden Felder stehen in direktem Zusammenhang mit den Feldern, auf die die Vorlage in Feld 0 verweist.

 

Wenn Feld 0 NULL ist, wird die vom UI-Handler empfangene Zeichenfolge wie folgt formatiert: 1: [Daten aus Feld 1] 2: [Daten aus Feld 2], was bedeutet, dass die Zeichenfolge für jedes Feld des Datensatzes die Feldnummer gefolgt von den im Feld gespeicherten Daten enthält.

Informationsmeldungen von MsiProcessMessage werden protokolliert, wenn MsiEnableLog, die Befehlszeilenoption „/l“ oder die Protokollierungsrichtlinie „I“ oder INSTALLLOGMODE_INFO angeben.

INSTALLMESSAGE_ERROR

 

INSTALLMESSAGE_WARNING

 

INSTALLMESSAGE_USER

So verwenden Sie eine Meldung aus der Error-Tabelle.

Feld Beschreibung
0 Muss NULL sein.
1 Meldungsnummer in der Error-Tabelle.
2 bis n Bezieht sich auf die angegebene Meldung in der Error-Tabelle.

 

Beispiel:

Feld Typ Daten
0 Zeichenfolge NULL
1 INT 1304
2 Zeichenfolge Myfile.txt

 

Die resultierende Meldung, die vom UI-Handler empfangen wird, lautet:

Fehler 1304. Fehler beim Schreiben in die Datei: Myfile.txt. Stellen Sie sicher, dass Sie über Zugriff auf das Verzeichnis verfügen.

Wenn Feld 0 nicht NULL ist, wird die Meldung aus der Error-Tabelle überschrieben. Stattdessen bestimmt die Feld 0-Vorlage das Format der Meldung.

In der Meldung können auch die Schaltflächen, einschließlich Standardschaltfläche, und das Symbol angegeben werden, das mit der Meldung verwendet werden soll, wie oben erwähnt. Die Schaltflächen- und Symboltypen sind in INSTALLUI_HANDLER aufgeführt.

INSTALLMESSAGE_COMMONDATA

Diese Meldung wird gesendet, um die Schaltfläche Abbrechen in einem Statusdialogfeld zu aktivieren oder zu deaktivieren.

Feld Beschreibung
0 Nicht verwendet.
1 2 bezieht sich auf die Schaltfläche Abbrechen.
2 Der Wert 1 gibt an, dass die Schaltfläche Abbrechen sichtbar sein soll. Der Wert 0 gibt an, dass die Schaltfläche Abbrechen nicht sichtbar sein soll.

 

Wenn Sie z. B. die Schaltfläche Abbrechen deaktivieren oder ausblenden möchten, wird der Datensatz wie folgt angezeigt.

Feld Typ Daten
0 Zeichenfolge NULL
1 INT 2
2 INT 0

 

INSTALLMESSAGE_ACTIONSTART

 

INSTALLMESSAGE_ACTIONDATA

Der INSTALLMESSAGE_ACTIONSTART-Datensatz bestimmt das Format des ActionData-Datensatzes.

Feld Beschreibung
0 NULL
1 Aktionsname. Der Name in diesem Feld muss ungleich NULL sein.
2 Aktionsbeschreibung.
3 Aktionsvorlage. Wird für die ActionData-Datei verwendet, deren Meldung gemäß dieser Vorlage formatiert wird.

 

Verweisen Sie in der Action-Vorlagenmeldung nicht auf das Feld 0.

Der INSTALLMESSAGE_ACTIONDATA-Datensatz ist wie folgt formatiert.

Feld Beschreibung
0 NULL
1 bis n Abhängig vom Feld 3 der entsprechenden INSTALLMESSAGE_ACTIONSTART-Meldung oder -Vorlage, die in der ActionText-Tabelle angegeben ist.

 

Beispiel: der INSTALLMESSAGE_ACTIONSTART-Datensatz.

Feld Typ Daten
0 Zeichenfolge NULL
1 Zeichenfolge MyAction
2 Zeichenfolge Dies ist die Beschreibung von MyAction.
3 Zeichenfolge MyAction-Vorlage: Feld1-Daten sind [1]. Feld 2-Daten sind [2].

 

Die Vorlage für INSTALLMESSAGE_ACTIONSTART (Feld 3) verweist auf die Felder 1 und 2, der INSTALLMESSAGE_ACTIONDATA-Datensatz sollte 2 Felder mit den garantierten Daten enthalten. Die Felder können entweder Zeichenfolgen- oder Ganzzahlfelder sein.

INSTALLMESSAGE_ACTIONDATA-Datensatz.

Feld Typ Daten
0 Zeichenfolge NULL
1 INT 2
2 Zeichenfolge ActionData für MyAction

 

INSTALLMESSAGE_FILESINUSE

Der FILESINUSE-Datensatz ist ein Datensatz variabler Länge.

Feld Beschreibung
0 Dieses Feld kann NULL sein. Bei einer Installation, die eine einfache Benutzeroberfläche verwendet, kann dieses Feld statischen Text für die Anzeige im ListBox-Steuerelement des FilesInUse-Dialogfelds angeben. Bei einer Installation mit vollständigen Benutzeroberfläche hat dieses Feld keine Auswirkungen, da der Text durch die Erstellung des benutzerdefinierten FilesInUse-Dialogfelds angegeben wird.
1 Name der verwendeten Datei.
2 Dieses Feld bestimmt den Prozess, der die verwendete Datei enthält. Windows Installer-Version 4.0: Die Prozess-ID (PID) des Prozesses oder der Titel des Fensters des Prozesses.
Bis Windows Installer-Version 3.1: Dieses Feld muss die Prozess-ID (PID) des Prozesses sein.

 

Um beispielsweise eine FilesInUse-Meldung mit zwei verwendeten Dateien zu senden, „red.exe“ und „blue.exe“, verfügt der Datensatz über vier Felder plus das Feld 0. Das Format des Datensatzes ist wie in der folgenden Tabelle dargestellt. Für dieses Beispiel ist Windows Installer 4.0 erforderlich.

Bis Windows Installer Version 3.1: Die Felder 2 und 4 im folgenden Beispiel müssen die PIDs der Prozesse enthalten, die „red.exe“ und „blue.exe“ enthalten.

Feld Beschreibung
0 NULL
1 Red.exe
2 Roter Fenstertitel
3 Blue.exe
4 Blauer Fenstertitel

 

Hinweis

Wenn bei Windows Installer-Version 4.0 die vom Dienst übergebene PID keinen Fenstertitel hat, wie z. B. eine Anwendung auf der Taskleiste, wird die Datei nicht angezeigt, und das ausführliche Protokoll enthält die folgenden Meldungen.

 

File In Use: -<FileName>- Window could not be found. Process ID: <PID>
No window with title could be found for FilesInUse

INSTALLMESSAGE_RESOLVESOURCE

Der INSTALLMESSAGE_RESOLVESOURCE-Datensatz hat sieben Felder. Damit INSTALLMESSAGE_RESOLVESOURCE ordnungsgemäß funktioniert, verarbeitet ein externer UI-Handler die INSTALLMESSAGE_RESOLVESOURCE-Meldung möglicherweise nicht. Windows Installer muss die INSTALLMESSAGE_RESOLVESOURCE-Meldung verarbeiten. Das heißt, der externe UI-Handler gibt 0 zurück, um „Keine Aktion ausgeführt“ anzugeben, wenn die INSTALLMESSAGE_RESOLVESOURCE-Meldung gefiltert wird. Die bewährte Methode besteht darin, das Senden einer RESOLVESOURCE-Meldung zu vermeiden.

Feld Beschreibung
0 NULL
1 NULL
2 Name des Pakets.
3 Produktcode.
4 Der relative Pfad kann, sofern bekannt, NULL sein.
5 0
6 Gibt an, ob der Paketcode überprüft werden soll. Der Wert „1“ gibt an, dass der Paketcode überprüft werden soll. Der Wert „0“ gibt an, dass der Paketcode nicht überprüft werden soll.
7 Erforderlicher Datenträger aus der Media-Tabelle. Der Wert „0“ gibt an, dass jeder beliebige Datenträger akzeptabel ist.