Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在安装Windows服务并尝试运行时,出现了一个错误1053。说我的服务开始时间太长了_C#_Windows Services - Fatal编程技术网

C# 在安装Windows服务并尝试运行时,出现了一个错误1053。说我的服务开始时间太长了

C# 在安装Windows服务并尝试运行时,出现了一个错误1053。说我的服务开始时间太长了,c#,windows-services,C#,Windows Services,错误1053:windows服务未及时启动 我已经按照无数在线教程中的显示方式设置了我的服务,但我的OnStart方法似乎根本没有被调用。这个过程应该运行,然后无限循环,并不断检查服务器是否有要运行的命令。以下是我的主要观点: static void Main(string[] args) { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { n

错误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();
}
公共代理服务(字符串[]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,需要安装,附加调试器