我已经在Windows 10笔记本电脑上的Visual Studio Community 2015中创建了一个Windows服务项目(从Windows 7升级并完全更新),但我无法手动成功启动我的服务,而且我无法强行杀死服务一旦开始。当我尝试通过服务控制台(services.msc)启动我的服务时,我得到以下行为:
- 弹出一个“服务控制”对话框,其中包含一个进度条。
- 进度条在90秒内缓慢填充。
- 当进度条已满时,我收到错误1053。
- 服务状态更改为“正在启动”(开始待处理)并保持无限状态。
- 除了强制重启之外,无法通过任何方式停止服务。
醇>
我已经明白错误1053是30秒后无法启动的服务的结果。但是,我的服务不可能花费超过30秒的时间来启动。我的OnStart
,OnStop
和OnTimer
方法目前如下:
protected override void OnStart(string[] args)
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 10000;
timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer);
timer.Start();
}
protected override void OnStop()
{
}
public void OnTimer(object sender, System.Timers.ElapsedEventArgs args)
{
}
我的Main
方法看起来像这样:
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new MyNewService()
};
ServiceBase.Run(ServicesToRun);
}
奇怪的是,如果我的服务的启动方法设置为“自动”,那么该服务将在下次Windows重新启动时自行启动。当它自动启动时,我可以手动停止服务(这是它唯一一次手动停止)。但是,在手动成功停止后,我仍然无法手动重新启动它。尝试这样做产生与前面描述的完全相同的行为,再次导致错误1053。
我的服务安装没有错误(通过installutil),我可以毫无错误地卸载。但是,如果我在服务停留在“正在启动”(Start Pending)模式时尝试卸载我的服务(通过installutil / u),则服务不会停止,仍为“正在启动”,启动模式将切换为“已禁用” ”。只有重新启动才能完全删除该服务。
我的问题: 为什么我的服务在Windows启动时自动启动,而不是通过任何其他手动方法启动? (我需要它自动启动,但也可以手动启动和停止它。)
感谢您的时间和专业知识。
答案 0 :(得分:2)
问题是Avast反病毒以静默方式停止服务。令人讨厌的是,Avast不会将该服务报告为病毒或任何类型的威胁,也不会记录被阻止的服务。一旦我禁用了Avast,我就可以手动成功启动和停止我的服务。作为半永久性解决方案,我通过转到设置 - >将我的服务路径添加到Avast的例外列表中。主动保护 - >自定义(文件系统屏蔽) - >排除,然后点击“添加”。
要回答我的原始问题,我的服务能够在Windows启动时自动启动,因为它能够在加载Avast之前启动。这导致了我观察到的奇怪的行为,我可以在它自动启动后停止它,但不会手动重启它,因为Avast现在正在运行。
答案 1 :(得分:1)
您在方法OnStop
中使用清理服务。
您创建了timer
并且永远不会停止它。
private System.Timers.Timer timer;
protected override void OnStart(string[] args)
{
timer = new System.Timers.Timer();
timer.Interval = 10000;
timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer);
timer.Start();
}
protected override void OnStop()
{
timer.Stop();
timer = null;
}