我想为我的服务添加依赖项,以便它仅在大多数 Windows 服务启动后才尝试启动。有人可以推荐这样一种不太可能因安全原因在公司站点上被禁用的服务吗?由于我的服务需要网络服务启动并运行,所以我想确保我的服务在这些服务之后启动。此服务也可能部署在非公司环境中,因此我正在寻找一种不太可能被最终用户禁用的合适服务。
答案1
使用 Windows任务计划程序启动您的应用程序。不要向其添加依赖项。如果应用程序确实有这样的依赖项,那么这样做是有意义的。但由于这不是正式的依赖项,所以这样做不是正确的。
此外,你无法保证Windows服务的执行顺序。只有那些具有自身依赖规则的服务才能保证按特定顺序运行。其他服务则不能。这意味着在多次重启过程中,最后执行的 Windows 服务可能会有所不同。
相反,在任务计划程序下,您可以将任务设置为仅在用户登录时执行,只运行一次,并创建触发器以将任务的执行延迟几秒钟。
10 或 20 秒足以保证任务最后执行或接近最后执行,并将其设置为仅在用户登录后执行。
但是,您可以搜索事件查看器日志作为任务调度程序规则的基础。“仅在触发此事件后运行”。
答案2
您说您的服务“需要网络服务正常运行”。但真的是这样吗?即使没有链接或有效的 IP 地址,它是否只需要运行各种 IP 相关服务?
或者你的服务是否真的希望在启动时能够立即连接到外部服务?如果是这样,如果该外部服务关闭,会发生什么?如果在路由的某个地方出现网络连接问题,会发生什么?它会放弃并崩溃或停止吗?
根据我的经验,大多数时候,当人们编写服务并试图使它们依赖于其他内置服务时,他们真正在做的是试图避免编写适当的错误处理代码。我不知道您的服务实际上在做什么,所以我无法提供有关如何处理网络连接无法正常工作的多种方式的建议,即使本地服务已启动并运行。但您应该真正思考为什么您认为您的服务需要这种依赖关系。有没有更好的方法来编写它,以便您可以优雅地处理网络不可用的情况?
答案3
我建议使用 Windows 更新服务。它不太可能被禁用。
在 Vista 和 Windows 7 上,它甚至被定义为“自动(延迟启动)”,因此它将在所有其他服务之后启动。