【发布时间】:2021-06-09 11:34:33
【问题描述】:
我有一个服务应用程序,它产生一个子用户进程并监视它的终止。 我将需要处理以下情况:某个桌面应用程序启动了关闭但稍后中止,以便我可以重新生成子进程。 我完全了解所有系统事件通知,但它们不会完成这项工作,因为无法检测到关机后中止。
所以问题是是否有一个 API 函数可以让我了解操作系统关闭操作的当前状态。
谢谢!
【问题讨论】:
-
关机中止?那是什么?
-
这个api可以实现docs.microsoft.com/en-us/windows/win32/api/winuser/…许多常用的windows应用程序都使用它,例如记事本,因此有效地打开记事本可以让用户否决关机。
-
除了监视终止并在合理的时间后无条件地重新启动进程之外,您可能不需要做任何特别的事情。除非您的进程本身阻止终止,否则它不会阻止系统关闭;在最坏的情况下,它会在未中止的关闭之前毫无意义地重新启动。
-
是的,计时器回调是我计划处理它的方式,但希望有一个可以用作提示的关闭状态。
-
只要我们在谈论服务,
QueryServiceStatusEx就是这样一个功能 - 至少它记录在如果发生关闭时返回ERROR_SHUTDOWN_IN_PROGRESS,尽管我不知道时间.在 C# 中,这将通过ServiceController.Status公开,但值得注意的是,此属性未记录为在关机期间产生异常,并且它调用QueryServiceStatus,这也未记录为在关机时返回错误。