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

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