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