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