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

10

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

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

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

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

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

dfstandish
источник
18
Это действительно глупый план, который, очевидно, смягчает симптом многих системных проблем, а не что-то решает. Этот курс действий фактически создает проблемы. Закончите с этим контрактом и никогда больше не работайте с ними.
Майкл Хэмптон
1
Помимо того, что глупо пытаться делать, это также то, что другие люди не выиграют, зная, как это сделать. Это только создаст проблемы, поэтому голосование нужно закрыть.
HostBits
3
Хотя я согласен, что это глупый план, и я не знаю мотивов, я могу сказать, что я мог бы извлечь выгоду из подобного решения. Нам всем приходится иметь дело с глупым унаследованным программным обеспечением, таким как «deamon», которое имеет окно @ # $ @ # $ @, созданное в VB6, и не работает как служба, потому что оно имеет все виды всплывающих сообщений, и вы в конечном итоге с помощью скрипта AuthoHotKey, который нажимает на ОК, когда они появляются ... поэтому было бы полезно предотвратить выход из системы ...
ETL
1
@MichaelHampton, вы, сэр, абсолютно правы. Я должен был добавить: «Я хочу сделать это, чтобы мне могли заплатить, а потом никогда больше не работать на них». как указывало ETL, в мире есть все виды наследственных злодеяний ... и, как указал Чикалик, любой ответ на этот вопрос будет способствовать возникновению зла в мире. Сказав это, я все еще хочу взломать это и быть сделано.
dfstandish
Где корень нужен? Если это было похоже на меня, и вам нужно было, чтобы процесс / приложение выполнялось под этим пользователем в интерактивном сеансе рабочего стола, тогда вы можете посмотреть на получение Firedaemon и настроить службу, которая будет работать под этим пользователем для этого приложения, в сеансе 0.
TheCleaner

Ответы:

14

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

  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выглядит так:

введите описание изображения здесь

HopelessN00b
источник
3
Секрет в том, что вы должны изменить поведение «кнопки питания» - если вы не отключите выход из системы, это не даст эффекта.
thekbb
1
logoff.exe .....
Райан Райс
4

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

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

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

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