C# 在安装Windows服务并尝试运行时,出现了一个错误1053。说我的服务开始时间太长了
错误1053:windows服务未及时启动 我已经按照无数在线教程中的显示方式设置了我的服务,但我的OnStart方法似乎根本没有被调用。这个过程应该运行,然后无限循环,并不断检查服务器是否有要运行的命令。以下是我的主要观点:C# 在安装Windows服务并尝试运行时,出现了一个错误1053。说我的服务开始时间太长了,c#,windows-services,C#,Windows Services,错误1053:windows服务未及时启动 我已经按照无数在线教程中的显示方式设置了我的服务,但我的OnStart方法似乎根本没有被调用。这个过程应该运行,然后无限循环,并不断检查服务器是否有要运行的命令。以下是我的主要观点: static void Main(string[] args) { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { n
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();
}
公共代理服务(字符串[]args)
{
初始化组件();
this.Args=newServiceArguments();
this.ValidArgs=this.Args.SetArgs(Args);
this.AgentCycle=Int32.Parse(Args.Cycle);
}
启动时受保护的覆盖无效(字符串[]args)
{
ServiceStatus ServiceStatus=新的ServiceStatus
{
dwCurrentState=ServiceState.SERVICE\u START\u挂起,
dwWaitHint=100
};
this.cimcomands=new Dictionary();
SetServiceStatus(this.ServiceHandle,ref serviceStatus);
serviceStatus.dwCurrentState=ServiceState.SERVICE\u正在运行;
SetServiceStatus(this.ServiceHandle,ref serviceStatus);
如果(这是ValidArgs)
RunAgent();
}
我通过命令行提交参数,但是如果没有给出参数,我将使用环境变量。所有这些都在我的机器上,所以我不明白为什么我的服务没有“及时”启动。我只有两个额外的依赖项。一个是Newtonsoft.Json
,另一个是RestSharp
我也尝试过使用TopShelf将其作为一个控制台应用程序来编写,但我也遇到了同样的错误。逻辑是正确的,我已经测试了我的方法。有什么想法吗
编辑:好的,下面是解释这项服务目标的最佳方式。。。服务应该每5秒调用一个api/服务器,然后接收一个json,告诉它在windows机器上运行什么命令。一旦完成所有这些命令,它会再次询问服务器是否有任何工作要完成,然后重新开始。自定义类型只是用于Newtonsoft的json_对象,服务参数只是一个具有5个字符串值和1个bool的对象。然后是用于解析来自cmd行、环境变量或配置文件的参数的函数
是的,从RunAgent调用的函数中肯定有一个无限循环
当RunAgent()
不返回时,OnStart()
不返回。当OnStart()
没有返回时,服务管理器将终止进程,因为“启动需要很长时间”。不要将无限循环放入OnStart函数中
这一次,信息就是它所说的。它也确实做了它要做的事情(让你修复你的错误代码)。对于轮询,您需要一个类似计时器的东西,可以在“onStart()”中启动。可能是一个单独的后台任务或线程。不是阻止OnStart()的自定义循环
是的,从RunAgent调用的函数中肯定有一个无限循环
当RunAgent()
不返回时,OnStart()
不返回。当OnStart()
没有返回时,服务管理器将终止进程,因为“启动需要很长时间”。不要将无限循环放入OnStart函数中
这一次,信息就是它所说的。它也确实做了它要做的事情(让你修复你的错误代码)。对于轮询,您需要一个类似计时器的东西,可以在“onStart()”中启动。可能是一个单独的后台任务或线程。不是您阻止OnStart()的自定义循环。实际上它告诉您,
OnStart
需要很长时间才能完成。可能与您将等待时间设置为10000有关另外,您如何知道服务是否被调用?这并不是说你可以从一个服务中显示一个用户界面。这一点很好。我想从技术上说我不知道,但就等待时间而言,我在那之前就已经犯了这个错误。我添加它是为了解决这个问题,但它没有帮助,所以也许我应该删除它以避免混淆。您使用了大量的类型和变量,但没有向我们提供任何信息。有些变量也与类型同名,只是为了最大限度地混淆让我们从这段代码应该做什么开始。这项服务的目标是什么?@Christopher好的,我已经用底部的那个部分更新了描述。这有帮助吗?按照规定的设计,我会选择队列作为集合由于服务很难调试——缺少UI、需要安装、附加调试器——许多人不得不在控制台应用程序中复制服务管理器的基本流程由于RunAgent()不是预先存在的函数,您在其中做什么?启动任何可能的无限循环?实际上,它告诉您,OnStart
需要很长时间才能完成。可能与您将等待时间设置为10000有关另外,您如何知道服务是否被调用?这并不是说你可以从一个服务中显示一个用户界面。这一点很好。我想从技术上说我不知道,但就等待时间而言,我在那之前就已经犯了这个错误。我添加它是为了解决这个问题,但它没有帮助,所以也许我应该删除它以避免混淆。您使用了大量的类型和变量,但没有向我们提供任何信息。有些变量也与类型同名,只是为了最大限度地混淆让我们从这段代码应该做什么开始。这项服务的目标是什么?@Christopher好的,我已经用底部的那个部分更新了描述。这有帮助吗?按照规定的设计,我会选择队列作为集合因为服务很难调试-缺少UI,需要安装,附加调试器