Query MSIExec

Das Problem:

Aus einer Batch heraus wird eine setup.exe gestartet, die wiederum mehrere msiexec-Prozesse startet und sich selbst dann beendet.
Da die exe-Datei beendet ist, läuft die Batch weiter und beendet sich im ungünstigsten Falle selbst. Man hat also keinerlei Möglichkeit zur Kontrolle der Installation. Nahe liegend ist eine Abfrage nach den msiexec-Prozessen. Jetzt wird es interessant, denn ein Prozess bleibt auch nach der Installation immer noch im Taskmanager, nämlich der gestartete Windows Installer Dienst.
Ich kann also nicht darauf warten, bis jeder msiexec-Prozess sich beendet hat, sonst läuft das Script in einer Endlos-Schleife.
Hier kommt die Lösung aus dem WMI. Ich frage einfach die Summe der gestarteten msiexec-Prozesse ab und erst wenn nur noch einer läuft, beendet sich mein Script.
Eingebaut in eine Batch lässt sich so wieder der Verlauf steuern.

option explicit
on error resume next

Dim strComputer, objWMIService, colProcesses

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Do

Set colProcesses = objWMIService.ExecQuery _
("Select * from Win32_process where name =" & "'" & "msiexec.exe" & "'")

wscript.sleep 5000


loop until colprocesses.count=1

  • Donnerstag, 15 März 2018

Leave a comment

You are commenting as guest.