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

у приложение, которое необходимо перезагрузить компьютер с 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);

Тем не менее, это всегда возвращает ложь. Поэтому я вызываю метод Marshal.GetLastWin32Error, и он возвращает код ошибки 1008. Это сообщение об ошибке:

«Была сделана попытка сослаться на токен, который не существует».

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

Ответы на вопрос(1)

Ваш ответ на вопрос