服务可以标记为“不可停止”:
在 C/C++ 中,通过在调用SetServiceStatus时指定
SERVICE_ACCEPT_STOP
标志(有关详细信息,请参阅SERVICE_STATUS)。如果是 .NET,则将ServiceBase.CanStop设置为
false
.
然而,这是一种好的做法吗?这意味着即使具有管理员权限的用户也无法以干净的方式停止此类服务。(仍然可以杀死它,但这会妨碍正确的清理。如果在同一进程中运行其他服务,它们也会被杀死。)
在我的具体情况下,我有一项控制科学仪器的服务。建议在从仪器获取数据时使服务不可停止,以防止丢失正在获取的数据。我应该补充一点:
- 我们授予非管理员用户启动/停止服务的权利
- 我们有提供 UI 来启动/停止此服务的程序。如果用户在获取过程中尝试停止服务,此程序将发出警告。但是,当然也可以使用
SC.EXE
“服务”管理单元停止。在这种情况下,没有警告。
Microsoft(或其他任何人)是否提供指导?