【问题标题】:Is there a way to suspend OS shutdown or restart in C++?有没有办法在 C++ 中暂停操作系统关闭或重新启动?
【发布时间】:2017-09-24 08:40:18
【问题描述】:

我正计划开发一个跨平台应用程序,它可能需要在用户的操作系统关闭或重新启动之前进行处理。有没有办法在 C++ 中临时挂起或覆盖操作系统关闭/重启?

顺便说一句,此功能将完全由用户通过配置选择并默认禁用。

我觉得如果不侵入操作系统,这可能是不可能的,但我想我会征求社区的意见。

如果我唯一的选择是稍微“破解”操作系统以实现此功能,那么我将不再追求这个想法。 :)

提前致谢!

【问题讨论】:

标签: c++ operating-system cross-platform


【解决方案1】:

有没有办法在 C++ 中临时挂起或覆盖操作系统关闭/重启?

标准 C++ 中没有这样的功能。

除非有特定于平台的 API 来执行此操作,否则恐怕您将无法在 C++ 中挂起或覆盖操作系统关闭/重新启动操作。

【讨论】:

    【解决方案2】:

    C++ 中没有这方面的内容。但是典型的 GUI(Windows、Mac 等)会通知您的应用程序即将关闭,以便您可以进行最终处理。这是特定于操作系统的,并受其规则的约束。

    【讨论】:

    • mac下可以让操作系统不要关机,它会取消操作并询问用户是否强制关机,在linux下没有这样的东西,它会关闭无论你喜欢与否(因为通常只有 root 可以命令关闭)在 Windows 中,都会有一个延迟,之后一切都会被强制关闭(至少在 7 中,从未尝试过 8 或 10)
    【解决方案3】:

    要覆盖计划/正在进行的关机,您可以:

    适用于 Windows 7

    system("shutdown /a");
    

    适用于 Linux

    system("shutdown -c");
    

    【讨论】:

      【解决方案4】:

      我搜索了how to detect Linux shutdown/reboot的相关文章 但这似乎很难实现您的目的。

      我想到的是;如果您可以将您的程序添加为服务,则 linux 系统会在服务关闭之前关闭该服务。

      祝你好运

      【讨论】:

        【解决方案5】:

        感谢所有回复和想法!

        从收到的回复来看,似乎没有使用 C++ 轻松实现此类功能的“安全”和跨平台方式。

        Pete Becker 提到每个操作系统可能有特定的规则。这是有道理的,而且这些规则也总是会发生变化。

        其他人建议使用system() 命令。但是,这可能会在系统中引入更多问题和漏洞(1)(2)(可能会有更好的解释和/或示例,所以如果/当你找到它们时,请编辑这篇文章)。

        考虑到以上所有因素,我的建议是将应用程序配置为让用户通过 GUI 手动执行这些进程(完全由他们自己决定)、在操作系统启动时执行这些进程或两者兼而有之。

        再次感谢所有回复的人!

        【讨论】:

          猜你喜欢
          • 2011-03-17
          • 2021-07-31
          • 2019-12-17
          • 2017-01-02
          • 2013-07-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-22
          相关资源
          最近更新 更多