Завершение работы или перезагрузка компьютера в C# и ASP.NET

Я хочу иметь возможность завершить работу или перезапустить сервер, на котором запущено мое приложение ASP.NET. Следующий код прекрасно работает в режиме отладки:

Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "shutdown";
startInfo.Arguments = "/r /f /t 0";
startInfo.UseShellExecute = true;
startInfo.Verb = "runas";
process.StartInfo = startInfo;
process.Start();

Я также пробовал этот код, но я получаю следующую ошибку "Объект Process должен иметь для свойства UseShellExecute значение false, чтобы запустить процесс как пользователь":

var info = new ProcessStartInfo("shutdown.exe", "/r /t 0");
        info.UserName = "administrator";
        //A not-so-secure use of SecureString
        var secureString = new SecureString();
        var password = "password";
        foreach (var letter in password)
        {
            secureString.AppendChar(letter);
        }
        info.Password = secureString;
        var restart = new Process();
        restart.StartInfo = info;
        restart.Start();

Я добавляю следующее в мой код:

info.UseShellExecute = false;

Затем ошибка "Объект Process должен иметь для свойства UseShellExecute значение false, чтобы запустить процесс как пользователь", но код выполняется как первый блок кода.

Сервер будет перезагружен, когда я выполню код в режиме отладки или если я выполню команду cmd. Однако когда я запускаю приложение на сервере, оно не перезапускается. Я не получаю никакой ошибки, или появляется сообщение о том, что сервер перезагружается или не собирается. Кто-нибудь может сказать мне, пожалуйста, что я делаю не так?

ОБНОВЛЕНИЕ: я добавил try-catch и приложение никогда не выдает исключение. Однако, когда я посмотрел журналы событий, я обнаружил событие ошибки приложения 1000 для shutdown.exe

1 ответ

Учетная запись, под которой работает ваш пул приложений, не имеет достаточных прав для перезагрузки системы, поэтому этого не происходит.

Вы можете изменить это, войдя на сервер и впоследствии перейдя к Control Panel > Administrative Tools > Local Security Policy, расширяя Security Settings > Local Policies > User Rights Assignment узел и собирается в Shut down the system установка. Добавьте учетную запись пула приложений (или ее родительскую группу, если у вас есть группа для этого) в этот список.

Другие вопросы по тегам