Als Teil einer Continuous Delivery-Pipeline möchte ich eine MSI auf einem bestimmten Computer installieren. msiexec plus psexec macht das perfekt, aber es scheint, dass msiexec nur in einer Datei protokollieren kann und ich brauche es, um mich bei stdout / stderr zu protokollieren.
Um die Ausgabe wieder in unsere CI-Software zu übertragen, muss ich einen zweiten Schritt hinzufügen, um den Inhalt des Protokolls wiederzugeben, was etwas sinnlos erscheint.
Hat sich schon jemand mit diesem Problem befasst (und es überwunden?)
Vielen Dank im Voraus für jede Hilfe hier.
Kennzeichen
Antworten:
Ich habe dies erneut überprüft und hier einige aktualisierte Informationen :
Es ist möglich, die MSI-GUI zu unterdrücken und eine externe GUI festzulegen, die von einem Dritten implementiert wurde. Diese externe GUI kann während der Installation Nachrichten von msiexec.exe empfangen . Dies dient hauptsächlich zur Implementierung eines benutzerdefinierten Fortschrittsbalkens. Sie können jedoch anscheinend auch die meisten anderen Fehlermeldungen und Statusmeldungen abfangen: die MsiSetExternalUI-Funktion .
Der interessante Parameter ist der dwMessageFilter . Wenn Sie dies einstellen, können Sie beispielsweise nur die Fehlermeldungen erhalten, die während der Installation auftreten - oder so scheint es. Ich nehme an, das kann für die meisten Zwecke ausreichen.
Leider habe ich momentan keinen Beispielcode dafür. Ich werde dies später testen, wenn ich mein System richtig eingerichtet habe. Die MsiEnableLog-Funktion ist ein verwandter Funktionsaufruf, der die Protokollierung in einer Datei ermöglicht. Update: Hier ist ein funktionierendes SDK-Beispiel .
Auf der Ebene der Befehlszeilenschnittstelle können Sie die Protokollierung auch so einstellen, dass der Puffer sofort in die Datei geleert wird, indem Sie das ! Parameter:
Dies bedeutet, dass die Protokolldatei kontinuierlich geschrieben wird, sodass bei einem Absturz von msiexec.exe kein Protokollpuffer verloren geht. Die Kosten sind aufgrund des E / A-Overheads erheblich langsamer.
quelle
MsiExec
kann sich nur in einer Datei anmelden, daher müssen Sie den Inhalt dieser Datei nach Abschluss des Installationsprogramms weiter wiederholen.quelle
Ich würde die MSI-Protokolldatei auf dem lokalen System lieber dauerhaft an einem gemeinsamen Speicherort für jede Installation zwischenspeichern und dann einfach den Exit-Code des gesamten Setups registrieren. Wenn das Setup Erfolg meldet, ist die Protokolldatei ziemlich uninteressant? Nur mehr "Lärm"?
Abgesehen davon gibt es mehrere Software-Bereitstellungssysteme, die die Protokollinformationen für eine MSI-Installation erfassen und zentral speichern. Ein Beispiel ist SCCM (Microsoft umbenannt in Systems Management Server - SMS).
Einrichten der Protokollierung für alle MSI-Dateien finden Sie im Abschnitt "Global für alle Setups auf einem Computer": http://www.installsite.org/pages/en/msifaq/a/1022.htm
quelle
Ich benutze das folgende Powershell-Skript. Das Protokoll muss weiterhin in eine Datei geschrieben werden, der Inhalt wird jedoch auch live in stdout geschrieben:
quelle