我正在使用System.Diagnostics.Process.Start("shutdown.exe", "-r -f -t 1")
来重启服务器。最近,当我注意到server(win xp)
没有立即关闭时,这种情况完全没有运行。我的日志显示应用程序在shutdown.exe
命令后至少运行60秒。
所以我开始怀疑是否有任何原因/条件/等shutdown.exe
无法关闭系统,即使使用了-f。
答案 0 :(得分:1)
[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern bool InitiateSystemShutdownEx(
string lpMachineName,
string lpMessage,
uint dwTimeout,
bool bForceAppsClosed,
bool bRebootAfterShutdown,
uint dwReason);
如果存在问题,该异常应指向正确的方向。例如,您必须拥有SeShutdownPrivilege
并且必须启用它。
考虑到特权时,完整代码应如下所示。注意:这假定使用System.Security.AccessControl.Privelege
类was released in an MSDN magazine article,可供下载as linked from the article。
Privilege.RunWithPrivilege(Privilege.Shutdown, true, (_) =>
{
if (!NativeMethods.InitiateSystemShutdownEx(null /* this computer */,
"My application really needs to restart",
30 /* seconds */, true /* force shutdown */,
true /* restart */, 0x4001 /* application: unplanned maintenance */))
{
throw new Win32Exception();
}
}, null);
这将通过调用shutdown.exe
执行与您尝试执行的操作相同的功能,但最重要的是,如果存在任何阻止关闭成功的失败或安全限制,则会抛出异常。
答案 1 :(得分:0)
尝试使用斜杠而不是破折号。 /r /f /t 1