Как перезагрузить программно? - PullRequest
9 голосов
/ 13 сентября 2010

Как я могу перезагрузиться в c ++?Есть ли какое-либо положение в WinSDK?Какими правами должна обладать моя программа (процесс)?

Ответы [ 3 ]

13 голосов
/ 13 сентября 2010

Существует функция ExitWindowsEx , которая может сделать это. Вам нужно передать флаг EWX_REBOOT (0x00000002), чтобы перезапустить систему.

Важное примечание здесь (цитата из MSDN ):

Функция ExitWindowsEx возвращается, как только она инициировала процесс выключения. Выключение или выход из системы затем происходит асинхронно. Функция предназначена для остановки всех процессов в сеансе входа в систему. Поэтому, если вы не являетесь интерактивным пользователем, эта функция может успешно работать без фактического выключения компьютера. Если вы не являетесь интерактивным пользователем, используйте функцию InitiateSystemShutdown или InitiateSystemShutdownEx .

Вы можете выбрать между соответствующей функцией в зависимости от вашей ситуации.

9 голосов
/ 13 сентября 2010

Перед вызовом функции ExitWindowsEx необходимо включить привилегию SE_SHUTDOWN_NAME :

  1. OpenProcessToken (GetCurrentProcess (), TOKEN_ADJUST_PRIVILEGES, ...)
  2. LookupPrivilegeValue
  3. AdjustTokenPrivileges
  4. CloseHandle
5 голосов
/ 13 сентября 2010

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

Звучит так, будто вы ищете InitiateShutdown(), передаваяSHUTDOWN_RESTART в dwShutdownFlags.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...