我按照标记的答案here中的说明创建了一项服务。该服务已正确安装。当我在一段时间后启动服务时它会抛出一条消息 “Windows无法在本地计算机上启动xxx服务。
错误1053:服务未及时响应启动或控制请求。 “
点击“确定”后,其状态始终为“正在启动”。当我检查应用程序和系统日志时,没有错误。
当我检查SQL跟踪时,该服务实际上正在运行并执行它应该执行的操作。那么为什么它的状态保持在“开始”?
更新: 这是OnStart方法中的代码
protected override void OnStart(string[] args)
{
Loader loader = new Loader();
loader.StartProcess();
}
更新2:
基于WiktorZychla的评论,我做了这个并且它有效:)
protected override void OnStart(string[] args)
{
Loader loader = new Loader();
ThreadStart threadDelegate = new ThreadStart(loader.StartProcess);
Thread newThread = new Thread(threadDelegate);
newThread.Start();
}
答案 0 :(得分:6)
根据WiktorZychla的评论,这就是我所做的
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using IndexLoader;
using System.Threading;
namespace myNameSpace
{
public partial class LoaderService : ServiceBase
{
Thread newThread;
public LoaderService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
Loader loader = new Loader();
ThreadStart threadDelegate = new ThreadStart(loader.StartProcess);
newThread = new Thread(threadDelegate);
newThread.Start();
}
protected override void OnStop()
{
if ((newThread != null) && (newThread.IsAlive))
{
Thread.Sleep(5000);
newThread.Abort();
}
}
}
}
答案 1 :(得分:5)
确切地知道OnStart()
方法中的内容是有益的。 OnStart()
方法是来自用于启动服务的操作系统的回调,但必须在30秒左右返回(我记得在某处读过)。否则,操作系统会给出您正在看到的消息。简而言之,将OnStart()
方法限制为初始化,并将服务的实际工作推迟到某种线程。
答案 2 :(得分:1)
在Main()
函数的Program.cs文件中,确保您拥有:
ServiceBase.Run(new ServiceClassHere());
在创建保存
的Windows窗体应用程序时,我多次感到内疚 我的Application.Run(new Class());
函数中的 Main()