牧牛童子 2024-11-24 19:57 采纳率: 0%
浏览 7

CBuilder编写的Win服务程序,如何能够避免被“停止”?

我当前的做法是TSvr01::ServiceStop(TService* Sender, bool& Stopped)
里,设置Stopped=false; 这样有一点效果,但不彻底。

当在win服务管理里“停止”时,第一次弹窗提示不能停,第二次还不能,但第三次点就能停掉了。如何能做到始终不能停止?(是指正常点击“停止”操作)

谢谢!

  • 写回答

2条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    在Windows服务程序中,避免服务被“停止”并不是一个推荐的做法,因为这可能会导致系统资源被占用,或者用户无法对服务进行必要的操作和管理。然而,如果你有特殊的需求或场景需要这样做,可以尝试以下几种方法来增强服务的停止抗性:

    1. 修改注册表设置:可以通过修改服务的注册表设置来阻止服务的停止。例如,可以设置服务的停止超时值非常高,这样当尝试停止服务时,系统会由于超时而认为停止操作失败。但这种方法可能会导致系统资源的过度占用和服务管理器的行为不正常。请慎用。

    2. 事件日志分析并适当阻止操作:你可以在服务尝试停止时在事件日志中记录信息,并基于这些信息决定是否真正停止服务。例如,如果检测到特定的日志事件或条件,可以拒绝停止请求。但这需要编写复杂的逻辑来检测并处理这些情况。

    3. 使用更高级的技术手段:例如使用内核级别的技术来阻止服务停止操作,但这通常涉及到内核驱动编程和高级的系统级编程知识,不建议一般开发者尝试这种方式。而且这种方法很可能与操作系统不兼容或不安全。

    4. 限制服务的停止权限:通过修改服务的权限设置,确保只有具有足够权限的用户或管理员才能停止服务。这可能涉及到操作系统级别的安全设置和权限分配,需要你具有一定的系统管理知识和经验。但是这种方式并非阻止普通操作方式中的停止请求,只是防止无权限用户进行干预。

    通常情况下,建议遵循Windows服务的最佳实践来设计服务程序,允许用户和管理员正常地启动、停止和重启服务。如果确实需要阻止服务被停止,应当仔细考虑应用场景和潜在风险,并确保不会损害系统的稳定性和安全性。在某些情况下,可能需要重新考虑设计或服务的功能需求以避免这种限制。如果真的需要实现该功能,建议咨询专业的系统管理员或开发人员以确保解决方案的安全性和稳定性。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月24日