【问题标题】:How to Reboot Programmatically?如何以编程方式重新启动?
【发布时间】:2010-09-14 01:10:54
【问题描述】:

如何在 C++ 中重新启动? WinSDK中是否有任何规定?我的程序(进程)应该拥有什么样的权利?

【问题讨论】:

  • 我不建议你这样做。如果系统在没有他们自己的情况下重新启动,用户可能会讨厌它。
  • 在我这样做之前我会问用户(保存你的东西等等等等)......

标签: c++ windows winapi


【解决方案1】:

ExitWindowsEx Function 可以做到这一点。您需要通过 EWX_REBOOT (0x00000002) 标志来重新启动系统。

此处的重要说明(引自 MSDN):

ExitWindowsEx 函数在启动关闭过程后立即返回。然后关闭或注销异步进行。该函数旨在停止调用者登录会话中的所有进程。因此,如果您不是交互式用户,则该功能可以在不实际关闭计算机的情况下成功。如果您不是交互式用户,请使用 InitiateSystemShutdownInitiateSystemShutdownEx 函数。

您可以根据自己的情况选择合适的功能。

【讨论】:

  • 谢谢,我会继续的。但我对访问令牌和所有内容感到困惑,你能建议任何链接来调查吗?
【解决方案2】:

在调用ExitWindowsEx函数之前你需要enableSE_SHUTDOWN_NAME privilege

  1. OpenProcessToken(GetCurrentProcess (),TOKEN_ADJUST_PRIVILEGES,...)
  2. Lo​​okupPrivilegeValue
  3. 调整令牌特权
  4. 关闭句柄

【讨论】:

    【解决方案3】:

    我认为您有一个很好的理由希望重新启动可能正在运行许多其他应用程序的 PC。

    听起来您正在寻找InitiateShutdown(),在dwShutdownFlags 中传递SHUTDOWN_RESTART

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多