我有一个安装了installutil.exe的.NET 2.0 Windows服务。该服务的功能是批处理服务,该服务遍历输入文件并处理每个记录并保存输出文件。当我在Windows服务中启动该服务时,20秒后它表示该服务没有响应,因此它停止服务,但是我可以从输出文件中看到该服务正常运行。 我收到的确切消息是:错误1053:服务没有及时响应启动或控制请求。
我使用注册表黑客增加了Windows服务超时,但它产生了相同的结果(唯一的区别是接收“无响应”消息需要更长的时间)。
我的服务的OnStart方法如下所示:
protected override void OnStart(string[] args)
{
Producer producer = new Producer();
ThreadStart st = new ThreadStart(producer.Produce);
workerThread = new Thread(st);
workerThread.Start();
}
static void Main()
{
System.ServiceProcess.ServiceBase[] ServicesToRun;
ServicesToRun = new System.ServiceProcess.ServiceBase[] { new BatchService() };
System.ServiceProcess.ServiceBase.Run(ServicesToRun);
}
Producer构造函数:
public Producer()
{
nMaxConcurentJobs = int.Parse(ConfigurationManager.AppSettings["MaxConcurentJobs"]);
if (ConfigurationManager.AppSettings[TIME_INTERVAL] != null)`
{
sleepTime = int.Parse(ConfigurationManager.AppSettings[TIME_INTERVAL]);
sleepTime *= 1000;
}
}
我需要通知Windows服务它的工作吗?任何帮助都会受到赞赏,我已经好好忍受了好几天了!
答案 0 :(得分:1)
通过让OnStart进行某种日志输出来确保调用RequestAdditionalTime。
确保您在ServiceBase
- 派生类构造函数中没有做很多工作,OnStart
是进行繁重工作的地方。
如果您的启动逻辑持久,您可能需要调用{{3}}来阻止服务控制管理器(SCM)假设您的进程已经死亡。当您从OnStart
返回时,SCM会在服务GUI中将您的服务标记为“正在运行”。
设计您的应用程序,使其不作为服务运行,以确保您在多线程启动代码中没有死锁。将适当的诊断输出添加到该逻辑以跟踪其进度。
答案 1 :(得分:0)