0

IIS 7.5 でホストされている WCF サービスに、呼び出されたときにコンピューターをシャットダウンまたは再起動する機能があります。

組み込みのコマンドラインを使用し、「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 サービス内で実行されている場合は機能しません。

4

2 に答える 2

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", "")
于 2015-11-24T10:03:50.810 に答える
1

あなたのサービスにはPCをシャットダウンする権限がないと思います(権限を負っているユーザーはネットワークユーザーであり、これを行うことはできないと思います)。詳細については、イベント ログを確認してください。あなたの質問に対する回答が含まれていると確信しています。

特定のアカウントで wcf サービスを実行する方法を確認してください

于 2015-11-24T06:41:07.307 に答える