Вы должны получить правильные привилегии для вашей темы.
у приложение, которое необходимо перезагрузить компьютер с 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 и выполняется под учетной записью администратора. Я пытался запустить его как локальную систему, и это не имело никакого эффекта.