Debuggen von benutzerdefinierten Aktionen
Sie können benutzerdefinierte Aktionen debuggen, die auf DLLs (Dynamic Link Libraries) basieren, indem Sie Debugtools für Windows verwenden. Es ist nicht möglich, das dynamische Debuggen mit benutzerdefinierten Aktionen zu verwenden, die auf ausführbaren Dateien oder Skripts basieren.
Die in diesem Abschnitt beschriebenen Techniken können Ihnen beim Debuggen von benutzerdefinierten Windows Installer-Aktionen helfen. Informationen zu Debugtools für Windows finden Sie im Abschnitt zu den Treiberentwicklungstools des WDK (Windows Driver Kit).
Der Windows Installer verwendet die MsiBreak-Umgebungsvariable, um zu bestimmen, welche benutzerdefinierte Aktion debuggt werden soll. Wenn Sie Zugriff auf den Quellcode der benutzerdefinierten Aktion haben, können Sie die Debugfunktion möglicherweise ohne „MsiBreak“ verwenden. Um das Debuggen ohne „MsiBreak“ zu starten, fügen Sie am Anfang des Codes der Aktion ein temporäres Meldungsfeld ein. Wenn das Meldungsfeld während der Installation angezeigt wird, fügen Sie den Debugger an den Prozess an, der das Meldungsfeld beinhaltet. Anschließend können Sie alle erforderlichen Breakpoints festlegen und das Meldungsfeld schließen, um die Ausführung fortzusetzen. Es ist nicht möglich, die früheren Teile der benutzerdefinierten Aktion mit dieser Methode zu debuggen.
Wenn Sie die Umgebungsvariable „MsiBreak“ zum Debuggen der benutzerdefinierten Aktion verwenden möchten, legen Sie „MsiBreak“ auf den Namen der benutzerdefinierten Aktion in der CustomAction-Tabelle fest. „MsiBreak“ kann entweder eine System- oder eine Benutzerumgebungsvariable sein. Wenn die Variable als Systemvariable festgelegt ist, ist möglicherweise ein Neustart des Systems erforderlich, wenn der Wert geändert wird, um den neuen Wert zu erkennen.
Um die Umgebungsvariable „MsiBreak“ zum Debuggen einer eingebetteten Benutzeroberfläche zu verwenden, legen Sie den MsiBreak-Wert auf „MsiEmbeddedUI“ fest.
Der Windows Installer überprüft die Umgebungsvariable „MsiBreak“ nur, wenn die Benutzer*innen auch Administrator*innen sind. Das Installationsprogramm ignoriert den Wert von „MsiBreak“, wenn die Benutzer*innen keine Administrator*innen sind, auch wenn es sich um eine verwaltete Anwendung handelt.
Wenn Sie eine benutzerdefinierte Aktion debuggen, die mit erhöhten (System-)Berechtigungen in der Ausführungssequenz ausgeführt wird, fügen Sie den Debugger an den Windows Installer-Dienst an. Beim Debuggen einer benutzerdefinierten Aktion, die mit auf einem Identitätswechsel basierenden Berechtigungen in der Ausführungssequenz ausgeführt wird, fordert das System mit einem Dialogfeld auf, anzugeben, welcher Prozess debuggt werden soll. Die Benutzer*innen werden mit einem Dialogfeld aufgefordert, anzugeben, welcher Prozess debuggt werden soll. Weitere Informationen zu benutzerdefinierten Aktionen mit erhöhten Rechten finden Sie unter Sicherheit für benutzerdefinierte Aktionen.
Nachdem der Debugger an den richtigen Prozess angefügt wurde, löst das Installationsprogramm unmittelbar vor dem Aufrufen des Einstiegspunkts der DLL einen Debuggerbreakpoint aus. Am Breakpoint ist Ihre DLL bereits in den Prozess geladen und die Einstiegspunktadresse ermittelt. Wenn die DLL für die benutzerdefinierte Aktion nicht geladen werden konnte oder der Einstiegspunkt für benutzerdefinierte Aktionen nicht vorhanden war, wird kein Breakpoint ausgelöst. Da der Breakpoint vor dem Aufrufen der DLL-Funktion ausgelöst wird, sollten Sie nach dem Auslösen des Breakpoints den Debugger verwenden, um fortzufahren, bis der Einstiegspunkt für die benutzerdefinierte Aktion aufgerufen wird. Alternativ können Sie an einer beliebigen Stelle in Ihrer benutzerdefinierten Aktion einen Breakpoint festlegen und die normale Ausführung fortsetzen.
Der Windows Installer führt DLLs, die nicht in der Binary-Tabelle gespeichert sind, direkt über den DLL-Speicherort aus. Das Installationsprogramm kennt den ursprünglichen Namen einer in der Binary-Tabelle gespeicherten DLL nicht und führt die benutzerdefinierte DLL-Aktion unter einem temporären Dateinamen aus. Die Form des temporären Dateinamens lautet „MSI?????.TMP“. Unter Windows XP wird diese temporäre Datei an einem sicheren Speicherort gespeichert (in der Regel „<WindowFolder>\Installer“).
Beachten Sie, dass viele für das Debuggen erstellte DLLs den Namen und Pfad der entsprechenden PDB-Datei als Teil der DLL selbst enthalten. Beim Debuggen dieses DLL-Typs auf einem System, auf dem die PDB-Datei an dem in der DLL gespeicherten Speicherort gefunden werden kann, werden Symbole möglicherweise automatisch vom Debuggertool geladen. In Fällen, in denen die PDB-Datei am gespeicherten Speicherort nicht gefunden werden kann, der Debugger das Laden von Symbolen aus dem gespeicherten Speicherort nicht unterstützt oder die DLL nicht mit Debuginformationen erstellt wurde, müssen Sie ihre Symboldateien möglicherweise im Ordner mit der temporären DLL-Datei ablegen.
Das Installationsprogramm fügt der Installationsprotokolldatei Debuginformationen für benutzerdefinierte Aktionsskripts hinzu.
There is a problem with this Windows Installer package. A script
required for this install to complete could not be run. Contact your
support personnel or package vendor. {Custom action [2] script error
[3], [4]: [5] Line [6], Column [7], [8] }