
Wir haben ein Programm, das aufgrund von Speicherlecks in einigen Bildschirmen nicht sauber beendet wird, wenn der Benutzer es beendet. Das Problem besteht darin, dass dadurch der normale Abmeldevorgang blockiert wird - Sie wählen „Abmelden“ und einige Prozesse verschwinden, aber der Benutzer meldet sich nicht wirklich ab.
Da ich das Programm nicht reparieren kann, dachte ich, ich könnte ein Skript verwenden, das beim Abmelden ausgeführt wird, um den Prozess zu beenden. Ich habe überprüft, dass das Skript den Prozess beendet, wenn ich es per Doppelklick ausführe, und habe das Skript auf meinem Computer in gpedit zu den Windows-Einstellungen -> Skripts -> Abmelden hinzugefügt.
Leider scheint es so, dass die Abmeldeskripte erst ausgeführt werden, wenn alle Prozesse beendet sind. Sie werden also nie ausgeführt.
Gibt es eine Möglichkeit, die Abmeldeskripte zu einem früheren Zeitpunkt im Prozess auszuführen? Oder gibt es eine bessere Lösung für das Problem?
Antwort1
Haben Sie versucht, die Registrierungseinstellung unter HKEY_CURRENT_USER\Control Panel\Desktop AutoEndTasks auf 1 zu setzen? Wenn das funktioniert, brauchen Sie das Skript nicht.
Antwort2
Sie können sich mit einem Programm abmelden, wie zum Beispielhttp://www.karenware.com/powertools/ptstopper.aspdas vor der Abmeldung Skripte ausführt.
Antwort3
Fügen Sie dies am Ende Ihres Skripts hinzu
Set strComputer = "."
Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//" & strComputer & "/root/cimv2").ExecQuery("select * from Win32_OperatingSystem where Primary=true")
for each OpSys in OpSysSet
OpSys.Win32Shutdown 0
next
WScript.Quit(0)
Lassen Sie sie dieses Skript anstelle der normalen Abmeldung verwenden.
ich bin derzeit nicht sicher, wie ich es dazu bringe, ein Skript auszuführen, bevor Prozesse beendet werden, aber ich kann weitersuchen, falls das nicht funktioniert. Außerdem hatte ich keine Gelegenheit, es zu testen, aber das sollte die richtige Syntax für den Befehl sein. Sagen Sie mir Bescheid, falls es optimiert werden muss.
Antwort4
Ich finde es irgendwie komisch, dass Ihr Problem darin besteht, dass der Benutzer sich beim Abmelden nie vollständig abmeldet. Sie schreiben also ein Skript, das besagt: „Beenden Sie diesen Prozess beim Abmelden“, aber das Skript kann nicht ausgeführt werden, da sich der Benutzer nie abmeldet. Sie möchten, dass das Skript gestartet wird, wenn der Benutzer auf „Abmelden“ klickt, und nicht, wenn er sich vollständig abgemeldet hat.
Ich kenne mich zwar nicht so gut mit VBScript oder der Windows-API hinter der Abmeldung aus, würde aber Folgendes vorschlagen:
Finden Sie heraus, ob es ein separates Ereignis/einen separaten Auslöser gibt, der ausgelöst wird, wenn ein Benutzer „Abmelden“ auswählt, und lassen Sie Ihr Skript an diesem Punkt starten. Wenn das leichter gesagt als getan ist, entschuldige ich mich, aber es scheint der naheliegendste Weg zu sein, um das zu erreichen, was Sie eigentlich im Sinn hatten.
Finden Sie heraus, ob es einen Prozess gibt, der definitiv beendet wird, nachdem der Benutzer sich abgemeldet hat (
explorer.exe
vielleicht?). Dies wäre nur dann sinnvoll, wenn der Prozess, den Sie beenden möchten, weder systemkritisch noch sitzungskritisch ist (oder wenn der Prozess, an den Sie Ihr Kill-Skript binden, systemkritisch IST), da Sie nicht möchten, dass das Skript den Prozess beendet, nur weil der Benutzer etwas in der Taskleiste geschlossen hat.Ich finde die Idee mit dem Abmeldeskript ganz gut, würde aber vorschlagen, herauszufinden, ob man die Schaltfläche „Abmelden“ im Startmenü tatsächlich durch eine Schaltfläche ersetzen kann, die dieses Skript startet. Ich weiß, dass ich in Computerlaboren etwas Ähnliches gesehen habe. Aber wenn man sich darauf verlässt, dass die Benutzer daran denken, auf die benutzerdefinierte Schaltfläche „Abmelden“ auf dem Desktop zu klicken, und sie trotzdem zur normalen Abmeldung gelangen können, wird dieses Muskelgedächtnis nur alle frustrieren.