我想安排自动重新启动我的自定义服务使用净停止,净启动batch file。
当networking停止运行时,它会中止立即执行的任何事情吗?
只是想知道如果在处理过程中会发生什么?
马尔科姆
它会异步调用你的代码,并由你来处理。 你可以制定一个干净的或放弃,如果你觉得合适。
这真的取决于如何实施服务。 “净停止”基本上呼吁服务,并说“你会好心停止”。 大多数服务将遵守这一命令,并及时停止。 但是有不好的服务不遵守和拒绝停止。 在这种情况下,净止损不会采取进一步的行动。
这真的取决于服务。 我怀疑大多数人会在停下来之前尝试进入一个好的状态。 这不是一个杀手。
服务注册接收事件(通过RegisterServiceCtrlHandler)。 当你做一个净停止注册回调将收到一个回调与SERVICE_CONTROL_STOP操作。 服务如何响应该回调取决于服务实现。 这个服务可以做定期的应用程序关闭处理。
像其他人说的那样,当你调用net stop的时候,它会调用Windows Service中的OnStop。 如果OnStop不杀死应用程序中的所有线程,或者没有正确关闭所有线程,则服务可能不会停止。 (我已经在我们的一个WCF服务中看到过这种情况:我们没有关闭OnStop中的ServiceHost,因此,该应用程序不会停止在我们的命令 – 我们必须手动杀死该进程。
我见过的一种常见模式是尝试在服务上调用停止,如果它不在超时(10秒)内死亡,强制终止进程。 作为批处理文件的替代方案,PowerShell在处理服务方面有很好的支持。