Ich verwende das folgende Code-Snippet, um zu ermitteln, welche Prozess-ID mein vbscript ausführt:
%Vor% Auf meinem Windows 7 (32-Bit) Rechner funktioniert dies etwa 90% der Zeit und iMyPID
enthält die Prozess ID des aktuell laufenden Skripts. 10% der Zeit Handle_Error
wird jedoch mit der Fehlermeldung " SWbemServicesEX: Nicht gefunden " aufgerufen.
Kürzlich hat jemand anderes, der Windows 7 (64-Bit) ausführt, gemeldet, dass Handle_Error
immer mit der Fehlermeldung " Nicht genügend Speicher " aufgerufen wird. Dies scheint eine wahnsinnige Fehlermeldung zu sein, nur um Ihre eigene Prozess-ID herauszufinden!
Kann jemand einen besseren Weg empfehlen, dies zu tun?
mshta strong> beendet sich sofort. Vielleicht ist es zu spät, um die Elternprozess-ID zu erhalten, indem Sie den WMI-Dienst verwenden.
Also würde ich etwas so verwenden, um gleichzeitige Skriptprozesse zu eliminieren.
Ich mag Kul-Tigin's Idee (+1), und Asok Smiths Idee (basierend auf .Exec
) verdient Respekt (+1), und es wäre noch besser gewesen, wenn .Exec
einen versteckten Prozess ausgeführt hätte. Um meine Neugier zu befriedigen, spielte ich auch damit und das tat ich.
28 mal schneller (!), nicht schlecht:)
Ich habe gerade diesen Thread gefunden, der mein Problem teilweise gelöst hat. Danke euch allen.
"Der Code kann nicht feststellen, welche Prozess-ID zu welchem Skript gehört": true, aber da dies die erste Aufgabe ist, die Ihr Skript erreichen muss, können Sie die PID mit der kürzesten Lebensdauer beibehalten.
%Vor%Abgesehen davon, dass Sie Skripte schneller als jeder einzelne gestartet haben, können Sie die PID-Funktion aufrufen. Alles muss in Ordnung sein.
Um die eigene Prozess-ID eines VB-Skripts abzurufen, können Sie sich auf die Eigenschaft CreationDate des Process-Objekts verlassen.
Im Moment, in dem ein VB-Skript gestartet wird, hat der Prozess, der das Skript ausführt, das neueste CreationDate aller Prozesse, die dasselbe Skript ausführen.
Tatsächlich wird es das höchste CreationDate aller laufenden Prozesse haben.
Um also die PID zu erhalten, müssen Sie zuerst nach dem Prozess mit dem höchsten CreationDate suchen.
%Vor%