Ich versuche ein Installationsskript zu erstellen. Ich möchte eine MSI-Datei, Python, installieren und dann andere Dinge installieren, nachdem Python installiert wurde. Ich sehe bereits, wie eine Befehlszeileninstallation durchgeführt wird . Allerdings msiexec
kehrt sofort, auch wenn die Installation läuft noch. Wie würde ich den Abschluss einer MSI-Installation anhand eines Batch-Skripts erkennen?
7
Antworten:
Sie wissen nicht, wie Python die Weitergabe von Befehlen an Windows / DOS handhabt, aber unter Verwendung einer einfachen Batchdatei und des
start /wait
Befehls stoppt die Batchdatei und wartet, bis die MSI abgeschlossen ist, bevor Sie mit dem nächsten Schritt fortfahren.Wenn Sie beispielsweise eine Haupt-App installieren möchten, gefolgt von einem Patch, wenn dieser fertig ist, und einem endgültigen Programm, wenn dieser fertig ist, fügen Sie diese Zeilen in eine cmd-Datei ein:
quelle
start
auf dentitle
"Bug" achten. Pfade, die ein Leerzeichen enthalten, werden alstitle
Teil der Befehlszeilenargumente interpretiert . Verwenden Sie etwas wie:start "" /wait msiexec /i some.msi /qb
Nur um sicherzustellen, dasstitle
eingestellt ist.Es ist schwierig und nicht zuverlässig, aber es gibt Möglichkeiten, die Existenz eines bestimmten Prozesses in der Prozessliste zu überwachen. Sie schreiben Ihre Schleife an NOOP, während Sie darauf warten, dass dieser Prozess nicht mehr vorhanden ist, und führen dann Ihre nächsten Schritte aus. Es gibt verschiedene Möglichkeiten, damit umzugehen.
Das SysInternals-Tool
pslist
zeigt Prozesse an, obwohl das Parsen der Ausgabe schwierig sein kann. PowerShell kann auf die .NET-APIs zugreifen, um die Prozessüberwachung über dasget-process
Cmdlet durchzuführen.Diese Methoden überwachen lediglich das Vorhandensein eines Prozesses, können nicht nach den Exit-Codes suchen und können daher nicht wissen, ob ein Prozess normal oder in einem Fehlerzustand beendet wurde oder nicht. Dazu müssen Sie alle von Ihnen angegebenen MSI-Protokolle verarbeiten, die generiert werden sollen, oder möglicherweise im Windows Even-Protokoll nach Fehlerereignissen suchen.
quelle
Bei einer erfolgreichen Installation wird je nach Neustartoption einer der drei Codes zurückgegeben: 0,1641,3010. Bitte versuchen Sie, Ihr Skript so zu ändern, dass es im Gegenzug die Codes auslöst.
quelle