Freigeben über


MsiFormatRecordW-Funktion (msiquery.h)

Die MsiFormatRecord--Funktion formatiert Datensatzfelddaten und -eigenschaften mithilfe einer Formatzeichenfolge.

Syntax

UINT MsiFormatRecordW(
  [in]      MSIHANDLE hInstall,
  [in]      MSIHANDLE hRecord,
  [out]     LPWSTR    szResultBuf,
  [in, out] LPDWORD   pcchResultBuf
);

Parameter

[in] hInstall

Behandeln Sie die Installation. Dies kann weggelassen werden, in diesem Fall werden nur die Datensatzfeldparameter verarbeitet, und Eigenschaften sind nicht für die Ersetzung verfügbar.

[in] hRecord

Behandeln Sie den zu formatierenden Datensatz. Die Vorlagenzeichenfolge muss im Datensatzfeld 0 gespeichert werden, gefolgt von referenzierten Datenparametern.

[out] szResultBuf

Zeigen Sie auf den Puffer, der die formatierte Zeichenfolge null empfängt. Versuchen Sie nicht, die Größe des Puffers zu ermitteln, indem Sie für szResultBufeinen Nullwert (Wert=0) übergeben. Sie können die Größe des Puffers abrufen, indem Sie eine leere Zeichenfolge übergeben (z. B. ""). Die Funktion gibt dann ERROR_MORE_DATA zurück und pcchResultBuf enthält die erforderliche Puffergröße in TCHAR-s, nicht einschließlich des endenden NULL-Zeichens. Beim Zurückgeben von ERROR_SUCCESSenthält pcchResultBuf- die Anzahl der TCHAR-in den Puffer geschriebenen Zeichen, nicht einschließlich des endenden NULL-Zeichens.

[in, out] pcchResultBuf

Zeiger auf die Variable, die die Größe des Puffers in TCHAR-s angibt, auf den die Variable szResultBufverweist. Wenn die Funktion ERROR_SUCCESSzurückgibt, enthält diese Variable die Größe der in szResultBufkopierten Daten, nicht einschließlich des endenden Nullzeichens. Wenn szResultBuf nicht groß genug ist, gibt die Funktion ERROR_MORE_DATA zurück und speichert die erforderliche Größe, nicht einschließlich des endenden NULL-Zeichens, in der Variablen, auf die durch pcchResultBufverwiesen wird.

Rückgabewert

Die MsiFormatRecord-Funktion gibt einen der folgenden Werte zurück:

Bemerkungen

Die MsiFormatRecord-Funktion verwendet den folgenden Formatprozess.

Parameter, die formatierten werden in eckige Klammern [...] eingeschlossen. Die eckigen Klammern können iteriert werden, da die Ersetzungen von innen nach außen aufgelöst werden.

Wenn ein Teil der Zeichenfolge in geschweifte Klammern { } eingeschlossen ist und keine eckigen Klammern enthält, bleibt er unverändert, einschließlich der geschweiften Klammern.

Wenn ein Teil der Zeichenfolge in geschweifte Klammern { } eingeschlossen ist und mindestens einen Eigenschaftsnamen enthält, und wenn alle Eigenschaften gefunden werden, wird der Text (mit den aufgelösten Ersetzungen) ohne die geschweiften Klammern angezeigt. Wenn eine der Eigenschaften nicht gefunden wird, werden der gesamte Text in den geschweiften Klammern und die geschweiften Klammern selbst entfernt.

Beachten Sie bei benutzerdefinierten Aktionen für verzögerte Ausführung, MsiFormatRecord- nur CustomActionData- und ProductCode- Eigenschaften unterstützt. Weitere Informationen finden Sie unter Abrufen von Kontextinformationen für benutzerdefinierte Deferred Execution Custom Actions.

Die folgenden Schritte beschreiben, wie Zeichenfolgen mithilfe der funktion MsiFormatRecord formatiert werden:

So formatieren Sie Zeichenfolgen mithilfe der MsiFormatRecord-Funktion

  1. Die numerischen Parameter werden ersetzt, indem die Markierung durch den Wert des entsprechenden Datensatzfelds durch fehlende oder NULL-Werte ersetzt wird, die keinen Text erzeugen.
  2. Die resultierende Zeichenfolge wird verarbeitet, indem die Nichtdatensatzparameter durch die entsprechenden Werte ersetzt werden, die als Nächstes beschrieben werden.
    • Wenn eine Teilzeichenfolge des Formulars "[Propertyname]" gefunden wird, wird sie durch den Wert der Eigenschaft ersetzt.
    • Wenn eine Teilzeichenfolge des Formulars "[%environmentvariable]" gefunden wird, wird der Wert der Umgebungsvariable ersetzt.
    • Wenn eine Teilzeichenfolge des Formulars " [#Filekey]" gefunden wird, wird sie durch den vollständigen Pfad der Datei ersetzt, wobei der Wert Dateischlüssel als Schlüssel in der Dateitabelleverwendet wird. Der Wert von "[#Filekey]" bleibt leer und wird erst durch einen Pfad ersetzt, bis das Installationsprogramm die CostInitialize-Aktion, FileCost-Aktionund CostFinalize-Aktionausführt. Der Wert von "[#Filekey]" hängt vom Installationsstatus der Komponente ab, zu der die Datei gehört. Wenn die Komponente aus der Quelle ausgeführt wird, ist der Wert der Pfad zum Quellspeicherort der Datei. Wenn die Komponente lokal ausgeführt wird, ist der Wert der Pfad zum Zielspeicherort der Datei nach der Installation. Wenn die Komponente nicht vorhanden ist, ist der Pfad leer. Weitere Informationen zum Überprüfen des Installationsstatus von Komponenten finden Sie unter Überprüfen der Installation von Features, Komponenten, Dateien.
    • Wenn eine Teilzeichenfolge des Formulars "[$Componentkey]" gefunden wird, wird sie durch das Installationsverzeichnis der Komponente ersetzt, wobei der Wert Komponentenschlüssel s als Schlüssel in der Component-Tabelleverwendet wird. Der Wert von "[$componentkey]" bleibt leer und wird erst durch ein Verzeichnis ersetzt, bis das Installationsprogramm die CostInitialize-Aktion, FileCost-Aktionund CostFinalize-Aktionausführt. Der Wert von "[$componentkey]" hängt vom Installationsstatus der Komponente ab. Wenn die Komponente aus der Quelle ausgeführt wird, ist der Wert das Quellverzeichnis der Datei. Wenn die Komponente lokal ausgeführt wird, ist der Wert das Zielverzeichnis nach der Installation. Wenn die Komponente nicht vorhanden ist, bleibt der Wert leer. Weitere Informationen zum Überprüfen des Installationsstatus von Komponenten finden Sie unter Überprüfen der Installation von Features, Komponenten, Dateien.
    • Beachten Sie, dass, wenn eine Komponente bereits installiert ist und während der aktuellen Installation nicht neu installiert, entfernt oder verschoben wird, der Aktionsstatus der Komponente null ist und daher die Zeichenfolge "[$componentkey]" als Null ausgewertet wird.
    • Wenn eine Teilzeichenfolge des Formulars "[\c]" gefunden wird, wird sie durch das Zeichen ohne weitere Verarbeitung ersetzt. Nur das erste Zeichen, nachdem der umgekehrte Schrägstrich beibehalten wurde; alles andere wird entfernt.
Wenn ERROR_MORE_DATA zurückgegeben wird, gibt der Parameter, der ein Zeiger ist, die Größe des Puffers an, der zum Halten der Zeichenfolge erforderlich ist. Wenn ERROR_SUCCESS zurückgegeben wird, gibt sie die Anzahl der Zeichen an, die in den Zeichenfolgenpuffer geschrieben wurden. Daher können Sie die Größe des Puffers abrufen, indem Sie eine leere Zeichenfolge (z. B. "") für den Parameter übergeben, der den Puffer angibt. Versuchen Sie nicht, die Größe des Puffers zu ermitteln, indem Sie einen Nullwert (Wert=0) übergeben.

Anmerkung

Der msiquery.h-Header definiert MsiFormatRecord als Alias, der die ANSI- oder Unicode-Version dieser Funktion basierend auf der Definition der UNICODE-Präprozessorkonstante automatisch auswählt. Das Mischen der Verwendung des codierungsneutralen Alias mit Code, der nicht codierungsneutral ist, kann zu Nichtübereinstimmungen führen, die zu Kompilierungs- oder Laufzeitfehlern führen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows Installer 5.0 unter Windows Server 2012, Windows 8, Windows Server 2008 R2 oder Windows 7. Windows Installer 4.0 oder Windows Installer 4.5 unter Windows Server 2008 oder Windows Vista.
Zielplattform- Fenster
Header- msiquery.h
Library Msi.lib
DLL- Msi.dll

Siehe auch

Übergeben von Null als Argument von Windows Installer-Funktionen