Вызов InitiateSystemShutdown не работает - PullRequest
1 голос
/ 09 апреля 2009

Я пишу приложение, которое должно будет перезагрузить компьютер с Windows, на котором выполняется код.

Похоже, что в .NET не было API для этого, поэтому я искал для этого Win32 API, и он называется InitiateSystemShutdown. Внешняя декларация приведена ниже:

[DllImport("advapi32.dll")]
public static extern bool InitiateSystemShutdown(string Machinename, string
Message, long Timeout, int ForceAppsClosed, int RebootAfterShutdown);

Затем я пытаюсь вызвать эту подпрограмму операционной системы со следующими аргументами:

InitiateSystemShutdown(null, null, 30, 1, 1);

Однако, это всегда возвращает false. Поэтому я вызываю метод Marshal.GetLastWin32Error, и он возвращает код ошибки 1008. Сообщение об этом коде ошибки:

"Была сделана попытка сослаться на несуществующий токен."

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

1 Ответ

1 голос
/ 10 апреля 2009

См. Следующий пример в MSDN: Отображение диалогового окна выключения .

Вам необходимо получить правильные привилегии для вашей темы.

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