Irgendwann muss ich die Ereignisse von msiexec
Prozessstart und seine Fertigstellung abfangen. Mein Code arbeitet mit den üblichen Benutzerberechtigungen. Der Prozess msiexec
wird von Windows mit Systemprivilegien gestartet, daher kann ich Refresh()
nicht ausführen und die HasExited
Eigenschaft dieses Prozesses überprüfen.Warum der Process.GetProcessesByName ("msiexec") falsches Ergebnis zeigt?
while (true) {
Process[] msi = Process
.GetProcessesByName("msiexec");
if (msi.Length > 0) break;
}
// The `msiexec` is launched. Now to wait its finishing...
while (true) {
Process[] msi = Process
.GetProcessesByName("msiexec");
if (msi.Length == 0) break; // Here is `false` always!
}
// Components was installed.
Aber zweite while
Schleife zeigt immer msi.Length == 1
auch nach msiexec
abgeschlossen sein wird. Warum passiert das? Wie kann ich es lösen?
Also schauen Sie in allen Systemprozessen und es gibt * NO * msiexec Prozesse laufen? Du bist dir 100% sicher? Wenn ja, dann haben Sie gerade einen Fehler in .NET gefunden. – aquinas
Anstatt eine Schleife zu verwenden, können Sie nicht einfach die 'WaitForExit()' Methode aufrufen, nachdem Sie den Prozess gefunden haben? –
@ChrisDunaway, nein, es funktioniert nicht. Ich habe es versucht, bevor ich dieses Thema erstellt habe. Das Problem ist, dass 'msiexec' mit Systemrechten arbeitet. –