【发布时间】:2012-05-12 04:30:29
【问题描述】:
我正在用“C”编写一个服务,一旦用户尝试停止该服务(使用“确定”和“取消”按钮),我想显示一个警告窗口。
是否有任何特定的 Windows API 可用于实现此目的? 还有其他简单的方法可以实现吗??
【问题讨论】:
标签: c windows winapi service windows-services
我正在用“C”编写一个服务,一旦用户尝试停止该服务(使用“确定”和“取消”按钮),我想显示一个警告窗口。
是否有任何特定的 Windows API 可用于实现此目的? 还有其他简单的方法可以实现吗??
【问题讨论】:
标签: c windows winapi service windows-services
不,这是不可能的。 Windows 服务无法直接与用户桌面交互,因此它们将无法显示任何类型的用户界面。
不过,这应该没什么大不了的。您必须拥有足够的权限才能停止和启动服务,默认情况下,只有管理员拥有这些权限。如果您不希望用户无意中停止您的服务,那么您应该利用权限为您解决该问题。
【讨论】:
您使用服务控制面板停止服务;您的服务通常无权访问此控制面板进程,因此您无法覆盖它的 UI 并显示询问“确定/取消”的对话框。
【讨论】:
我刚刚了解到,从服务对 UI 的任何调用都会导致它挂起。 MSDN 确实有一个关于解决方法的页面 here。
【讨论】:
如果您不希望任何人能够停止服务,只需告诉服务经理您不接受停止消息即可。相反,您可以提供一个停止服务的应用程序(使用某种形式的 IPC),并且该应用程序可以根据需要显示尽可能多的警告消息。
另一方面,这会惹恼你的用户,而且这不太可能是必要的。默认情况下,只有管理员可以停止服务,人们不太可能在没有充分理由的情况下尝试停止您的服务。
【讨论】: