Предупредить пользователя, если он попытается выйти из системы

Я хочу, чтобы определенный локальный пользователь не выходил из системы. Когда-либо. Это очень похоже на этот глупый вопрос, однако мне не обязательно беспокоиться о наличии кнопок, я хочу открыть окно с сообщением "Пожалуйста, не выходите из консоли" с кнопкой "ОК", которая затем отменяет выход из системы. попытка. Это можно сделать в сценарии выхода?

Существуют групповые политики для отключения кнопки выхода из стартового меню и в диалоге CTRL-ALT-DEL. Однако то, что я хотел бы больше походить на http://msdn.microsoft.com/en-us/library/ms811998.aspx, который, как представляется, не в Server 2008 R2? Или я скучаю по нему?

Я даже пытался отключить кнопку выхода из системы при запуске, но она не работает, как указал Мэтт на этот похожий вопрос.

Можно ли создать сценарий выхода из системы, который отображает диалоговое окно, предупреждающее пользователя не выходить из системы, а затем отменяет выход из системы?

Я понимаю, что это глупая необходимость - к сожалению, я не в силах изменить или оттолкнуть. Я исчерпал эти варианты. Не стесняйтесь получить массу комментариев на комментарий, объясняющий, что это действительно глупый план, который, очевидно, смягчает симптомы многих системных проблем, а не что-то решает. Я полностью понимаю, что этот курс действий фактически создает проблемы. Я хочу, чтобы это было сделано, чтобы я мог закончить с этим контрактом и никогда больше не работать с ними.

2 ответа

Решение

Когда мне приходилось делать это, я эффективно отключал выход из системы (и выключение / перезапуск), выполняя три вещи.

  1. Используйте объекты групповой политики или локальные политики безопасности (или параметр реестра), чтобы удалить параметр выхода из системы, доступный через меню Ctrl+Alt+Del.

    • Чтобы удалить параметр из меню Ctrl+Alt+Del, необходимо перейти к User Configuration -> Administrative Templates -> System -> Ctrl+Alt+Del Options и включить Remove Logoff политика.

  2. Используйте объекты групповой политики или локальные политики безопасности (или параметр реестра), чтобы настроить доступные параметры выхода из системы, перезапуска и завершения работы, доступные через меню "Пуск".

    • Чтобы изменить поведение кнопки питания по умолчанию, перейдите к User Configuration -> Administrative Templates -> Start Menu and Taskbar и включить Change Start Menu power button политика.
      • Установка его в Lock это, вероятно, то, что вы ищете.
    • Чтобы удалить кнопки выключения / перезапуска / сна / спящего режима из меню "Пуск", необходимо перейти к User Configuration -> Administrative Templates -> Start Menu and Taskbar и включить Remove and prevent access to the Shut Down, Restart, Sleep and Hibernate command
    • Чтобы удалить опцию выхода из системы, перейдите к User Configuration -> Administrative Templates -> Start Menu and Taskbar и включить Remove Logoff on the Start Menu политика

  3. Изменить разрешения на shutdown.exe а также logoff.exe (спасибо, Райан!), чтобы ни одна учетная запись пользователя не могла его выполнить. (Если вам не нужно беспокоиться о пользователях, работающих shutdown.exe из командной строки, вы можете пропустить это.)

    • (Обычно я оставляю служебную учетную запись или резервную учетную запись администратора с разрешениями, чтобы при необходимости можно было изменить ее обратно, с минимальными усилиями).
    • По умолчанию это в C:\Windows\systm32\и разрешения позволяют пользователям и администраторам читать и выполнять, но оставляет за собой полный контроль над SYSTEM а также Trusted Installer,
    • Trusted Installer также является владельцем, поэтому для изменения разрешений необходимо вступить во владение с учетной записью администратора.

Как только вы закончите со всем этим, вы не сможете выйти из системы, перезагрузить компьютер, выключить его, перевести в спящий режим или перевести компьютер в спящий режим без особых усилий... или отсоединения кабеля питания.

Теперь меню "Пуск" моего сервера выглядит так, как показано на рисунке ниже (и переключение пользователя просто позволяет другому пользователю войти в систему):

введите описание здесь

И меню Ctrl+Alt+Del выглядит так:

введите описание здесь

Я бы предпочел добавить это в качестве комментария, но благодаря политике сайта я не должен комментировать...

Что касается сценариев выхода из системы, я не знаю, что можно сделать. Но в приложении C# Windows Forms вы можете зарегистрироваться для таких системных событий, как SessionSwitch и SessionEnding. Последний даже предоставляет свойство Cancel в EventArgs. Такое приложение.Net может помочь в вашем случае, но, конечно, пользователь может сначала закрыть это приложение (или убить его из TaskManager), а затем по-прежнему выходить из системы.

Кстати: да, я знаю, что такие глупости иногда приходится делать: есть компании-разработчики программного обеспечения, которые пишут программы, которые должны быть службами Windows, но работают с графическим интерфейсом в интерактивном сеансе...

Другие вопросы по тегам