【问题标题】:Warning window once the user tries to stop a service用户尝试停止服务时的警告窗口
【发布时间】:2012-05-12 04:30:29
【问题描述】:

我正在用“C”编写一个服务,一旦用户尝试停止该服务(使用“确定”和“取消”按钮),我想显示一个警告窗口。

是否有任何特定的 Windows API 可用于实现此目的? 还有其他简单的方法可以实现吗??

【问题讨论】:

标签: c windows winapi service windows-services


【解决方案1】:

不,这是不可能的。 Windows 服务无法直接与用户桌面交互,因此它们将无法显示任何类型的用户界面。

不过,这应该没什么大不了的。您必须拥有足够的权限才能停止和启动服务,默认情况下,只有管理员拥有这些权限。如果您不希望用户无意中停止您的服务,那么您应该利用权限为您解决该问题。

【讨论】:

  • 如果 serviceStatus 设置为 "SERVICE_CONTROL_STOP" 我们不能显示 UI 吗??
  • 没有。服务无法显示 UI。您可以将事件写入事件日志,但这似乎毫无意义。
  • 能否推荐一些链接来详细解释服务??
  • 我在 Stack Overflow 上回答了一些关于 Windows 服务的问题,其中大部分解释了服务如何/为什么不能显示 UI。你可以找到他们的名单here。我相信 Google 也有一些有趣的参考资料。
【解决方案2】:

您使用服务控制面板停止服务;您的服务通常无权访问此控制面板进程,因此您无法覆盖它的 UI 并显示询问“确定/取消”的对话框。

【讨论】:

    【解决方案3】:

    我刚刚了解到,从服务对 UI 的任何调用都会导致它挂起。 MSDN 确实有一个关于解决方法的页面 here

    【讨论】:

    • 请注意文章顶部的粗体警告:"重要 从 Windows Vista 开始,服务无法直接与用户交互。因此,技术标题为使用交互式服务的部分中提到的不应在新代码中使用。”
    • 还有显示对话框的WTSSendMessage函数。听起来如果他需要更高级的东西,他需要编写一个隐藏的 GUI 应用程序,这篇文章也谈到了这一点。
    • 问题是,您不能保证总会有用户登录以接收该消息。是的,您可以创建一个在特定用户上下文中运行的 GUI 应用程序,通过 IPC 机制与服务通信,但同样不能保证用户在尝试停止服务之前没有强制终止该应用程序。其中任何一种情况,以及许多其他情况,都会挂起你的机器,这可能不是他想要的。这些是权宜之计,旨在调试或解决已经损坏的应用程序,而不是编写新应用程序。
    【解决方案4】:

    如果您不希望任何人能够停止服务,只需告诉服务经理您不接受停止消息即可。相反,您可以提供一个停止服务的应用程序(使用某种形式的 IPC),并且该应用程序可以根据需要显示尽可能多的警告消息。

    另一方面,这惹恼你的用户,而且这不太可能是必要的。默认情况下,只有管理员可以停止服务,人们不太可能在没有充分理由的情况下尝试停止您的服务。

    【讨论】:

      猜你喜欢
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多