2015-05-13 2 views
0

Есть ли способ перезагрузить Windows из службы (Server 2008, Server 2012)? Я пробовал:Перезагрузка Windows из службы

System.Diagnostics.Process.Start("cmd.exe /c shutdown -f -r -t 0") 

Не напрасно. Я посмотрел на решения здесь:

How to shut down the computer from C#

http://www.stackoverflow.com/questions/1215139/reboot-machine-from-a-c-wpf-app

http://www.c-sharpcorner.com/uploadfile/dhananjaycoder/shut-down-restart-log-off-and-forced-log-off-system-using-C-Sharp/

и машина просто не хочет, чтобы перезагрузить.

Когда я запускаю команду из командной строки, она работает.

cmd.exe /c shutdown -f -r -t 0 

или даже

shutdown -f -r -t 0 

Ничего не происходит при запуске внутри службы. Я даже модифицировал его для запуска:

c:\\windows\\system32\\cmd.exe /c c:\\windows\\system32\\shutdown.exe -f -r -t 0 

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

+1

Я отредактированные свой титулу. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+1

http://stackoverflow.com/questions/22606426/process-start-does-not-work-when-called-from-windows-service –

+0

Что происходит, когда вы выполняете это из службы? – CathalMF

ответ

1

Я подозреваю, что из-за того, что в оконном сервисе нет графического интерфейса ... что он не может запустить командную строку.

Посмотрите в раствор API win32 ... как ExitWindowsEx() или InitiateSystemShutdown или выключения

+0

Спасибо, Марк, у вас есть пример кода или ссылка для публикации? – joelc

+0

Пробовал этот, не работал. Http: // DebugMode.net/2010/05/18/shut-down-restart-log-off-and-forced-log-off-system-using-c/ – joelc

+0

Работала после использования регулятора токена, найденного в решении здесь. http://stackoverflow.com/questions/24726116/when-using-exitwindowsex-logoff-works-but-shutdown-and-restart-do-not – joelc

1

попробовать это ..

Process myPro = new Process() 
myPro.StartInfo.FileName = "cmd.exe"; 
myPro.StartInfo.Arguments = “/c shutdown –f –r –t 0”; 
myPro.StartInfo.UseShellExecute = false; 
myPro.CreateNoWindow = true; 
myPro.Start(); 

Кроме того, где находится ваш файл cmd.exe? Если его не закончилось из того же каталога, из которого выполняется ваше приложение? Возможно, вам потребуется указать путь к файлу cmd.exe.

пример ..

myPro.StartInfo.FileName = "c:\desktop\myStuff\cmd.exe"; 

Надеется, что это помогает

+0

Спасибо Marc, это сработало бы, за исключением того, что оно работает как служба и не может запустить командную строку. По указанному выше вопросу я также попытался установить явные пути. Решение Marc Johnston было правильным, хотя ваше приложение было бы подходящим для приложения, которое может вызвать командную строку. Благодаря! – joelc

+0

без проблем haxor –

Смежные вопросы