什么时候运行Windows服务的可执行文件被卸载?
例如在c#中,Windows服务的正常实现是创建一个带有实现ServiceBase
的类的exe,例如。
public class SlicifyClientNodeService : ServiceBase
{
public static DateTime BootTime = DateTime.Now;
protected override void OnStart(string[] args)
{
//start running
}
protected override void OnStop()
{
//stop running
}
}
当从服务控制面板启动/停止服务时,会调用onstart / onstop方法,但是当像BootTime这样的静态变量被重新初始化时,它不清楚。
答案 0 :(得分:1)
通常,对于仅实现单个服务的可执行文件,每次停止服务时都会终止该进程,并在下次启动时重新启动该进程。
但是,ServiceMain
的文档意味着可以在同一进程中停止然后重新启动服务,在这种情况下,静态变量不会重新初始化。大概这种情况只有在停止和启动请求非常接近的情况下才会发生,我宁愿怀疑事实上它甚至不会发生。
无论如何,我建议您进行防御性编码并避免依赖此行为;可能存在特殊情况,它会发生变化,或者在将来的Windows版本中可能会发生变化。