Процесс выключения.exe с несколькими аргументами, не работает
Я хочу создать процесс, который использует shutdown.exe, чтобы выключить компьютер через определенное время.
Вот мой код:
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = "shutdown.exe";
startInfo.Arguments = "–s –f –t " + seconds;
Process.Start(startInfo);
, где seconds - локальная переменная int, решает пользователь.
Когда я запускаю свой код, ничего не происходит. Но когда я вручную иду в командной строке и набираю:
выключение.exe-s-f-t 999
затем Windows сделает всплывающее окно и скажет мне, что система выключится через 16 минут.
Причина, по которой я думаю, что это из-за множественного аргументы, заключается в том, что мой метод прерывания текущего завершения работы системы работает (где я создал systemshutdown вручную из командной строки cmd). Это почти то же самое, за исключением startInfo.Аргумент :
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = "shutdown.exe";
startInfo.Arguments = "-a";
Process.Start(startInfo);
1 ответ:
Быстрая проверка отключения.сообщение об использовании exe показывает, что он ожидает аргументы опции после слешей ( ' / '), а не тире (' -').
Замена строки:
startInfo.Arguments = "–s –f –t " + seconds;
С:
startInfo.Arguments = "/s /f /t " + seconds;
Дает рабочий результат на моей коробке с C# express 2010.
Кроме того, вы можете перенаправить стандартную ошибку и стандарт из запущенного процесса для чтения вашей программой, так что вы можете сказать, что произошло после его запуска. Для этого вы можете сохранить объект процесса и дождаться базовый процесс для выхода, чтобы вы могли проверить, все ли прошло хорошо.
startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; Process p = Process.Start(startInfo); string outstring = p.StandardOutput.ReadToEnd(); string errstring = p.StandardError.ReadToEnd(); p.WaitForExit();
К сожалению, я не могу сказать вам, почему версия командной строки принимает префиксы 'dash' в опциях, а выполняемая версия C# - нет.
Полный список кода ниже:
int seconds = 100; ProcessStartInfo startInfo = new ProcessStartInfo(); startInfo.CreateNoWindow = false; startInfo.UseShellExecute = false; startInfo.WindowStyle = ProcessWindowStyle.Hidden; startInfo.FileName = "shutdown.exe"; startInfo.Arguments = "/s /f /t " + seconds; startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardError = true; Process p = Process.Start(startInfo); string outstring = p.StandardOutput.ReadToEnd(); string errstring = p.StandardError.ReadToEnd(); p.WaitForExit();