【问题标题】:Reboot machine from C#/Forms App while session is locked会话被锁定时从 C#/Forms App 重启机器
【发布时间】:2015-02-04 22:44:51
【问题描述】:

参考这个问题:.net - Reboot machine from a C#/WPF App

我正在尝试创建一个 c#/.net 应用程序,即使会话被锁定(即用户已登录,此应用程序正在运行,但会话被锁定)也可以重新启动机器。

我从问题中尝试了这个:System.Diagnostics.Process.Start("shutdown.exe", "-r -t 0");

但显然只有在会话解锁时才有效。此外,在阅读此内容后:MSDN - InitiateSystemShutdown Function 似乎InitiateSystemShutdown 功能将显示系统关闭对话框,这似乎不适合我的目的。

还有其他方法吗?

【问题讨论】:

  • 反对票的理由是什么?
  • 你为什么要这样做?您要解决的真正问题是什么?让应用程序在没有警告的情况下启动重新启动并不是最友好的行为。可能有其他方法可以做你想做的事,或者在用户同意的情况下提前安排重启是可以接受的
  • @Panagiotis 有趣,我刚刚编辑了问题以删除此信息。我正在向我现有的程序添加一个功能,该程序在我们网络上的多台机器登录时运行。在一天结束时,机器需要注销(而不是锁定)。有时它们只是被锁定(未注销)。我可以看到这一点,因为我的程序仍在运行。这个想法是我可以重新启动被锁定的机器。
  • 您为什么要这样做而不是关闭?无论如何,您不需要本地程序来关闭/重新启动。您可以安排用户机器上的命令运行,例如每天凌晨 2 点。您可以使用组策略将计划任务部署到所有计算机。
  • 重新启动与关闭,因为我需要它们在早上可用。问题是,我的网络上有数百台这样的机器,添加计划任务会很麻烦。无论如何,我的问题是在 c# 中是否有另一种方法可以做到这一点。我知道还有其他方法可以重新启动计算机。

标签: c# .net system-shutdown


【解决方案1】:

ExitWindowsEx 函数完成了我想做的事情。

使用:

    [DllImport("user32.dll", SetLastError = true)]
    public static extern int ExitWindowsEx(ExitWindows uFlags, ShutdownReason dwReason);

调整令牌权限后,使用 uFlags 0x06(重启/强制)。我也使用了 dwReason 0。无论会话是否锁定,此功能都会重新启动机器。

here

【讨论】:

    猜你喜欢
    • 2012-09-28
    • 2020-10-15
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2011-01-21
    • 2012-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多