Сценарий для уничтожения процесса при выходе из системы не выполняется, пока процесс не будет мертв?
У нас есть программа, которая из-за утечек памяти на некоторых экранах не выходит чисто, когда пользователь выходит. Проблема в том, что это блокирует нормальную процедуру выхода из системы - вы выбираете выход из системы, и несколько процессов исчезают, но пользователь фактически не выходит из системы.
Поскольку я не могу исправить программу, я решил использовать скрипт, запущенный при выходе из системы, чтобы завершить процесс. Я проверил, что скрипт убивает процесс, если я запускаю его двойным щелчком мыши и добавил сценарий в "Настройки Windows" -> "Сценарии" -> "Выход" на моем компьютере в gpedit.
К сожалению, кажется, что сценарии выхода из системы не запускаются до тех пор, пока не завершатся все процессы, поэтому он никогда не запускается.
Есть ли способ заставить сценарии выхода из системы запускаться на более ранней стадии процесса? Или есть лучший подход к проблеме?
5 ответов
Вы пробовали параметр реестра в HKEY_CURRENT_USER\ Панель управления \DesktopEndTasks рабочего стола, установленный на 1? Если это работает, вам не понадобится скрипт.
Вы можете использовать программу для выхода из системы, например, http://www.karenware.com/powertools/ptstopper.asp которая запускает сценарии перед выходом из системы.
Добавьте это в конец вашего скрипта
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)
пусть они используют этот скрипт вместо обычного выхода из системы.
В настоящее время я не уверен, как заставить его запустить скрипт до завершения процессов, но могу продолжать искать, если это не работает. Кроме того, у меня не было возможности проверить, но это должен быть правильный синтаксис команды. дайте мне знать, если это нужно некоторые настройки.
Я думаю, это довольно забавно, но проблема в том, что пользователь никогда не выходит из системы полностью, когда он выходит из системы, поэтому вы пишете скрипт, который говорит "убить этот процесс при выходе", но скрипт не может быть запущен, потому что пользователь никогда не выходит из системы Вы хотите, чтобы сценарий запускался, когда пользователь нажимает кнопку "Выйти", а не когда пользователь завершил выход из системы.
Я не очень разбираюсь в VBScript или даже в Windows API после выхода из системы, но я бы предложил одно из следующего:
Узнайте, есть ли отдельное событие / триггер, который генерируется, когда пользователь выбирает "Выйти из системы", и ваш сценарий запускается в этот момент. Если это легче сказать, то сделать, я прошу прощения, но это кажется самым очевидным способом получить то, что вы на самом деле имели в виду.
Узнайте, есть ли процесс, который определенно завершается после того, как пользователь выбирает "Выйти из системы" (
explorer.exe
может быть?). Это было бы хорошей идеей, только если процесс, который вы пытаетесь уничтожить, не является критичным для системы или сеансовым (или если процесс, которым вы привязываете свой сценарий уничтожения к критичному для системы IS), так как вы не хотите, чтобы скрипт уничтожал процесс просто потому, что пользователь что-то закрыл в трее.Я думаю, что идея наличия сценария выхода из системы довольно хороша, но я бы посоветовал выяснить, можно ли заменить кнопку "Выход из системы" в меню "Пуск" кнопкой, запускающей этот сценарий. Я знаю, что видел нечто подобное в компьютерных лабораториях. Но если вы полагаетесь на то, что пользователи не забывают нажимать пользовательскую кнопку "выход из системы" на рабочем столе, и они все равно могут перейти к обычному выходу из системы, то эта мускульная память только разочарует всех.
Возможно, попробуйте сервис UPHClean от Microsoft. Обратите внимание, что это будет работать только в 2000/2003 / XP http://www.microsoft.com/downloads/details.aspx?familyid=1b286e6d-8912-4e18-b570-42470e2f3582&displaylang=en