安装 Windows 服务然后尝试运行时,出现错误 1053.说我的服务开始时间太长



>错误 1053:Windows 服务无法及时启动

我已经按照无数在线教程中显示的方式设置了我的服务,但我的 OnStart 方法似乎仍然根本没有被调用。这个过程应该运行,然后无限循环,并不断检查服务器是否要运行的命令。这是我的主要:

static void Main(string[] args)
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new AgentService(args)
};
ServiceBase.Run(ServicesToRun);
}

以下是我的服务构造函数和OnStart的外观:

public AgentService(string[] args)
{
InitializeComponent();
this.Args = new ServiceArguments();
this.ValidArgs = this.Args.SetArgs(args);
this.AgentCycle = Int32.Parse(Args.Cycle);
}
protected override void OnStart(string[] args)
{
ServiceStatus serviceStatus = new ServiceStatus
{
dwCurrentState = ServiceState.SERVICE_START_PENDING,
dwWaitHint = 100
};
this.CimCommands = new Dictionary<string, CimCommand>();
SetServiceStatus(this.ServiceHandle, ref serviceStatus);
serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
SetServiceStatus(this.ServiceHandle, ref serviceStatus);
if (this.ValidArgs) 
RunAgent();
}

我正在通过命令行提交参数,但如果没有给出,我正在使用环境变量。所有这些都存在于我的机器上,所以我不明白为什么我的服务没有"及时"启动。我只有 2 个额外的依赖项。一个是Newtonsoft.Json,一个是RestSharp

我也尝试过使用 TopShelf 将其编写为控制台应用程序,但我遇到了同样的错误。逻辑都是合理的,我已经测试了我的方法。有什么想法吗?

编辑:好的,这是解释这项服务目标的最佳方式......该服务应该每 5 秒调用一次 api/服务器,然后接收一个 json,告诉它在 Windows 机器上运行什么命令。完成所有这些命令后,它会再次询问服务器是否有任何工作要完成,然后重新开始。自定义类型只是json_objects与 Newtonsoft 一起使用,服务参数只是一个具有 5 个字符串值和 1 个布尔值的对象。然后是用于解析 cmd 行、环境变量或配置文件中的参数的函数。

是的,从 RunAgent 调用的函数中肯定存在无限循环。

虽然RunAgent()没有回来,但OnStart()不会。当OnStart()不返回时,服务管理器将终止进程,因为"启动需要很长时间"。不要将无限循环放入 OnStart 函数中!

这一次,信息正是它所说的。它也完全符合它的目的(让你修复你的错误代码(。对于轮询,您需要在"onStart(("中启动的计时器之类的东西。也许是单独的后台任务或线程。不是你阻止 OnStart(( 的自定义循环。

最新更新