【发布时间】:2016-01-19 22:26:19
【问题描述】:
我在我的 Windows 10 笔记本电脑上的 Visual Studio Community 2015 中创建了一个 Windows 服务项目(从 Windows 7 升级并完全更新),但我无法成功手动启动我的服务,也无法强制终止服务一旦开始启动。当我尝试通过服务控制台 (services.msc) 启动我的服务时,我得到以下行为:
- “服务控制”对话框会弹出一个进度条。
- 进度条在 90 秒内缓慢填充。
- 当进度条已满时,我收到错误 1053。
- 服务的状态变为并无限保持在“Starting”(开始挂起)。
- 除了强制重启之外,无法通过任何方式停止服务。
我了解到错误 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),我可以卸载没有错误。但是,如果我在服务卡在“正在启动”(启动挂起)模式时尝试卸载我的服务(通过 installutil /u),则服务不会停止,保持为“正在启动”,并且启动模式切换到“已禁用” ”。只有在重新启动时,服务才会完全删除。
我的问题: 为什么我的服务在 Windows 启动时自动启动,而不是通过任何其他手动方法启动? (我需要它自动启动,但也可以手动启动和停止它。)
感谢您的时间和专业知识。
【问题讨论】:
-
OnStop 方法已添加到原始帖子中。它是空的。
-
您可以检查事件查看器以查看是否在其中捕获了任何错误吗?
-
@Martin 已检查,但该程序不产生任何事件日志,并且从未到达任何允许我手动写入事件日志的代码行。它卡在“开始”阶段。
标签: c# windows-services