Завершение работы или перезагрузка компьютера из службы WCF не работает
У меня есть функция в службе WCF, размещенной в IIS 7.5, для которой заданием является выключение или перезагрузка компьютера при вызове.
Я использую встроенную командную строку и выполняю ее, передав "shutdown.exe -t 0 -r" для перезагрузки или "shutdown.exe -t 0 -s" для выключения.
Try
Using process As New System.Diagnostics.Process()
Dim startInfo As New System.Diagnostics.ProcessStartInfo()
With startInfo
.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden
.CreateNoWindow = True
.UseShellExecute = False
.RedirectStandardError = True
.RedirectStandardInput = True
.RedirectStandardOutput = True
.FileName = "shutdown.exe"
.Arguments = "-t 0 -r"
End With
If System.Environment.OSVersion.Version.Major >= 6 Then process.StartInfo.Verb = "runas"
process.StartInfo = startInfo
process.Start()
process.WaitForExit()
If process.ExitCode = 0 Then
Return True
Else
Return False
End If
End Using
Catch ex As Exception
Return False
End Try
Командная строка работает нормально, если выполнить в командной строке вручную. Однако он не работает, когда выполняется внутри службы WCF.
2 ответа
Ладно, попробовал все и потерпел неудачу, и в итоге оказался на этом парне, который использует файл бит И это работает..!
Это так странно и до сих пор не знаю, почему это работает. А пока... кого это волнует:)... позже, когда у меня будет свободное время, я постараюсь это выяснить.
....
Dim strCmd As String = "SHUTDOWN -m {0} -f -t 0 -r"
File.WriteAllText(_pathCmd & "cmd_restart.bat", String.Format(strCmd, "127.0.0.1"))
Return ExecuteCommand(_pathCmd & "cmd_restart.bat", "")
Я полагаю, что ваш сервис не имеет разрешения на отключение компьютера (я полагаю, что пользователь, который должен получить разрешение, является пользователем сети и не может этого сделать). Проверьте журнал событий для деталей, я уверен, что он содержит ответ на ваш вопрос.
Узнайте, как запустить службу wcf под определенной учетной записью.