我在IIS 7.5中托管的WCF服务中有一个函数,它在关闭任务时关闭或重新启动计算机。
我使用内置命令行并通过将“shutdown.exe -t 0 -r”传递给restart或“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服务中执行时,它不起作用。
答案 0 :(得分:2)
好的,尝试所有事情并保持失败,然后结束this guy who use bat file。它有效..!
它太奇怪了,但仍然不知道它为什么会起作用。现在......谁在乎:)以后......当我有空闲时间时,我会试着想出来。
....
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", "")
答案 1 :(得分:1)
我猜你的服务没有关闭pc的权限(我想拥有权限的用户是网络用户,不能这样做)。 Check out Event Log for details,我很确定它包含您问题的答案。
查看there如何在特定帐户下运行wcf服务。