错误1053服务未及时响应启动或控制请求

时间:2014-06-15 09:36:49

标签: c# .net timer

我已经创建并安装了几次服务。最初它工作正常,但在服务代码中进行了一些更改后,当我在Services.msc中重新启动服务时,它开始出错:

  

错误1053:服务未及时响应启动或控制请求

代码:

public partial class AutoSMS : ServiceBase
{
    public AutoSMS()
    {
        InitializeComponent();
        eventLog1.Clear();

        if (!System.Diagnostics.EventLog.SourceExists("MySource"))
        {
            System.Diagnostics.EventLog.CreateEventSource(
                "MySource", "MyNewLog");
        }
        eventLog1.Source = "MySource";
        eventLog1.Log = "MyNewLog";

        Timer checkForTime = new Timer(5000);
        checkForTime.Elapsed += new ElapsedEventHandler(checkForTime_Elapsed);
        checkForTime.Enabled = true;

    }

    protected override void OnStart(string[] args)
    {
        eventLog1.WriteEntry("In OnStart");
    }

    protected override void OnStop()
    {
        eventLog1.WriteEntry("In onStop.");
    }


    void checkForTime_Elapsed(object sender, ElapsedEventArgs e)
    {
        string Time = "15:05:00";
        DateTime dateTime = DateTime.ParseExact(Time, "HH:mm:ss",
                                        CultureInfo.InvariantCulture);

        if (DateTime.Now == dateTime) ;
            eventLog1.WriteEntry(Time);
    }
}

这是我的主要方法代码

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

我还尝试了以下步骤:

  • 转到开始>运行>并输入regedit
  • 导航至:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control
  • 选择控制文件夹后,右键单击右侧窗格,然后 - 选择新的DWORD值
  • 将新DWORD命名为:ServicesPipeTimeout
  • 右键单击“ServicesPipeTimeout”,然后单击“修改”
  • 单击“十进制”,键入' 180000',然后单击“确定”
  • 重新启动计算机

我曾经使用以下命令安装和卸载它:

installutil AutoSMS.exe

installutil /u AutoSMS.exe

33 个答案:

答案 0 :(得分:22)

就我而言,我是在调试模式下发布服务。

解决方案是:

  • 将解决方案更改为发布模式
  • 使用命令InstallUtil -u WindowsServiceName.exe
  • 卸载旧服务
  • 再次安装服务InstallUtil -i WindowsServiceName.exe

之后效果很好。

答案 1 :(得分:20)

正如其他人所指出的,这个错误可能有很多原因。但是希望这会帮助别人,我将分享我们案件中发生的事情。对我们来说,我们的服务已升级到.NET 4.5,但服务器没有安装.NET 4.5。

答案 2 :(得分:9)

我刚刚在.Net 4.5中尝试了本地代码,服务正常启动和停止。我怀疑你的问题可能在于创建EventLog源。

方法:

EventLog.SourceExists("MySource")

要求运行代码的用户必须是管理员,根据此处的文档:

http://msdn.microsoft.com/en-us/library/x7y6sy21(v=vs.110).aspx

检查该服务是否以具有管理员权限的用户身份运行。

答案 3 :(得分:9)

我遇到了同样的问题,并且根本不确定如何解决它。是的,这是因为服务中引发了异常,但您可以遵循一些通用准则来纠正此问题:

  • 检查您是否已编写正确的代码以启动该服务: ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new WinsowsServiceToRun() }; ServiceBase.Run(ServicesToRun);
  • 您需要确保在WinsowsServiceToRun类中运行某种无限循环

  • 最后,可能有一些代码没有记录任何内容并突然关闭程序(我就是这种情况),在这种情况下,你将不得不按照旧的调试学校来编写一个行到源(text / db / wherever)。我所面临的是,由于运行服务的帐户不是" Admin",代码只是掉下来并且没有记录任何异常,以防它试图写入" Windows事件日志" ;即使代码是在那里记录异常。记录到偶数日志实际上不需要管理员权限,但需要定义源。如果事件的源尚未在系统中定义,并且服务尝试在没有管理员权限的情况下首次记录它,则它将失败。要解决此问题,请按照以下步骤操作:

    1. 使用管理员权限打开命令提示符
    2. 粘贴命令:eventcreate /ID 1 /L APPLICATION /T INFORMATION /SO <<Source>> /D "<<SourceUsingWhichToWrite>>"
    3. 按enter
    4. 现在启动服务

答案 4 :(得分:7)

在这个问题上花了一些时间,尝试不起作用的解决方案后,我遇到了this blog。它建议将服务初始化代码包装在try / catch块中,如下所示,并添加EventLog

using System;
using System.Diagnostics;
using System.ServiceProcess;

namespace WindowsService
{
    static class Program
    {
        static void Main()
        {
            try
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
                { 
                    new Service1() 
                };
                ServiceBase.Run(ServicesToRun);
            }
            catch (Exception ex)
            {
                EventLog.WriteEntry("Application", ex.ToString(), EventLogEntryType.Error);
            }
        }
    }
}

然后,卸载旧服务,使用这些修改重新部署服务。启动该服务并查看事件查看器/应用程序日志。你会看到真正的问题是什么,这是超时的根本原因。

答案 5 :(得分:5)

在这个问题上花了太多时间。我发现100 -> 100 1000 -> 1.000 10000 -> 10.000 100000 -> 100.000 1000000 -> 1.000.000 引起了所有混乱,尽管我正确使用它。

无论谁解决这个问题,我建议你摆脱EventLog。 使用更好的工具,例如“ log4net ”。

答案 6 :(得分:4)

由于Microsoft Windows服务控制,它有时控制服务的状态。如果服务在30秒内没有发送响应,那么您将收到此错误。

您可以修改注册表,以便服务有更多时间回复

Go to Start > Run > and type regedit
Navigate to: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
With the control folder selected, right click in the pane on the right and select new DWORD Value
Name the new DWORD: ServicesPipeTimeout 
Right-click ServicesPipeTimeout, and then click Modify
Click Decimal, type '180000', and then click OK
Restart the computer

或者确保在那一刻没有其他流程与服务交谈,也许我不知道存在冲突

答案 7 :(得分:2)

如果您想将.NET core 3.1可执行文件注册为Windows服务,请确保在3.1.7或更高版本中添加了nuget包Microsoft.Extension.Hosting.WindowsServices并初始化hostBuilder,如下所示例如:

using Microsoft.Extensions.Hosting;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] arguments)
        {
            IHostBuilder hostBuilder = Host.CreateDefaultBuilder(arguments);
            hostBuilder.UseWindowsService();
            hostBuilder.Build().Run();
        }
    }
}

现在您可以安装可执行文件并将其作为Windows服务启动:

sc.exe create ConsoleApp1 binPath= "<BIN_PATH>\ConsoleApp1.exe"

答案 8 :(得分:2)

我遇到了完全相同的问题,我所做的就是在编译dll时将Debug模式更改为Release。这解决了我的问题,如何/为什么?我不知道我已经问过question SO

答案 9 :(得分:1)

此问题的可能解决方案之一[它修复了我的问题并且我的应用程序是基于 JAVA 的应用程序]:

1)检查你的应用程序是否指向正确的java版本(检查应用程序中的java版本和路径)。

2)检查配置的java版本,检查它是32位版本还是64位版本(基于您的应用程序)。如果你使用32位,那么你应该使用32位版本的JSL,否则JSL会导致这个问题。

答案 10 :(得分:1)

我知道这是老问题, 我以前编写自己的VB.NET Windows服务,在MS Windows 7和MS Windows 10上启动没有问题。

我在最新的MS Windows 10补丁上安装Windows服务时遇到此问题。 Windows服务不运行它的原因是因为安装的PC中没有显示运行窗口服务所需的.NET版本。

安装Windows服务后。转到安装文件夹,例如C:\ Program files(x86)\ Service1 \ Service1.exe,然后双击运行它。如果缺少.NET框架包,它将提示用户下载它。只需下载并等待它安装。

之后重新启动services.msc中的windows服务。 希望这个答案能够帮助那些面对这个问题的人。我知道问题是由.NET框架版本引起的。

答案 11 :(得分:1)

我在WindowsServer计算机上安装了.Net 4.6,错误已修复。

你的控制应该是这样的:

  1. 检查WindowsService的.net版本
  2. 然后检查计算机的.net版本
  3. 匹配该版本,因为它可能不匹配

答案 12 :(得分:1)

如果您正在使用ConnectionStrings或任何其他方式在服务启动时启动数据库连接,请检查EntityFramework

在我的情况下,当我收到错误Error 1053 the service did not respond to the start or control request in a timely fashion时,这就是出错:

我使用的是EntityFramework并且连接字符串错误。所以基本上在启动时,EntityFramework无法使用错误的连接字符串连接到数据库并超时。

只需用正确的数据库连接字符串替换数据库连接字符串就可以了。

根本不需要任何框架更新或任何其他系统/配置更改。

答案 13 :(得分:1)

这对我有用。基本上确保登录用户设置为正确的用户。但是,这取决于帐户基础结构的设置方式。在我的示例中,它使用的是AD帐户用户凭据。

在启动菜单搜索框中搜索“服务”  -In Services找到所需的服务   - 右键单击​​并选择“登录”选项卡   - 选择“此帐户”并输入所需的内容/凭据   - 然后像往常一样启动服务

enter image description here

答案 14 :(得分:1)

这通常是由服务本身的未捕获异常引起的。 (配置文件错误,例如)。打开命令提示符并手动启动服务可执行文件可能会显示抛出的异常。

答案 15 :(得分:0)

我的问题是appsettings.json在构建过程中没有复制并发布版本文件夹,而是简单地将其放入...\bin\Release文件夹并将launchSettings.json内容复制到appsettings.json的问题解决了我的问题。

答案 16 :(得分:0)

我想为此添加解决方案。 必须承认,我使用了附加的配置文件(“ ServiceIni.xml”),其中包含一些设置,可由用户即时更改。 当我遇到此错误时,我进行了研究并进行了以下操作:

  1. 将Program.cs更改为以下代码:
        static void Main()
        {
            try
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[]
                {
                new MyService()
                };
                ServiceBase.Run(ServicesToRun);
            }
            catch (Exception ex)
            {
                LogChanges($"Error - {ex.Message}\nInner - {ex.InnerException}");
            }
        }

        static void LogChanges(string message)
        {
            string LogPath = AppDomain.CurrentDomain.BaseDirectory + "MyServiceLog.txt";
            using (StreamWriter wr = File.AppendText(LogPath))
            {
                wr.WriteLine(message);
            }
        }
  1. 然后我从日志中发现了启动时的异常(它甚至显示错误行号:)):
Error - Configuration system failed to initialize
Inner - System.Configuration.ConfigurationErrorsException: A section using 'configSource' may contain no other attributes or elements. (C:\...\bin\Release\MyService.exe.Config line 24)
   at System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal)
   at System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(ConfigurationSchemaErrors schemaErrors)
   at System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors()
   at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey)
  1. 似乎其中一个版本将我的App.config文件从以下位置更改了:
<!-- Setting to use appSettings from external file -->
  <appSettings configSource="ServiceIni.xml"/>

  <appSettings configSource="ServiceIni.xml">
    <add key="ClientSettingsProvider.ServiceUri" value="" />
  </appSettings>

产生此错误。
修复原来的App.config即可解决此问题。

答案 17 :(得分:0)

安装.net Framework 4.5!它对我有用。

https://www.microsoft.com/en-us/download/details.aspx?id=57768

答案 18 :(得分:0)

正如没有人提到的那样,我将添加它(即使这是一个愚蠢的错误)。 如果您使用的是Windows 10,通常不需要重启,但是

->如果刚刚安装了服务(并且仍然打开了旧服务的属性页面),请确保关闭“服务”窗口的所有打开的属性页面。

我在谈论这个窗口:

Services list

关闭所有服务窗口并重试->后,它可以正常工作。与OP相比,我基本上立即获得了Error 1053(没有窗口等待任何东西)

答案 19 :(得分:0)

如果我是今天早上遇到的,罪魁祸首是格式错误的配置文件。配置文件具有关闭注释标记,而没有打开注释标记。因此,请仔细检查您的配置文件中的错误。

答案 20 :(得分:0)

此外,您需要检查配置文件的内容。

您需要检查以下部分。

<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>

以上部分的Coz需要与您的.net框架匹配。

答案 21 :(得分:0)

此错误可能是由于各种原因引起的。确定运行服务时添加try / catch的原因。

        try
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[] 
                { 
                    new Service1() 
                };
                <span class="skimlinks-unlinked">ServiceBase.Run(ServicesToRun</span>);
            }
            catch (Exception ex)
            {
                EventLog.WriteEntry("Application", ex.ToString(), <span class="skimlinks-unlinked">EventLogEntryType.Error</span>);
            }

答案 22 :(得分:0)

我挠头清除此错误 如果您在类似

的代码中对其进行调试,则可能会导致此错误
static void Main()
{
 #if DEBUG
            MailService service = new MailService();
             service.Ondebug();
 #else
             ServiceBase[] ServicesToRun;
             ServicesToRun = new ServiceBase[]
             {
                 new MailService()
             };
             ServiceBase.Run(ServicesToRun);
 #endif
         }
     }

在清除了像这样的代码中的if,elseendif之后,该错误不再出现了。...希望对您有帮助。...

static void Main()
{

    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[]
    {
        new MailService()
    };
    ServiceBase.Run(ServicesToRun);

}

答案 23 :(得分:0)

我有同样的问题。 似乎在启动服务时,主线程不应该是主工作线程。 通过简单地创建一个新线程并将主要工作交给该线程解决了我的问题。

答案 24 :(得分:0)

在我的情况下,我在App.config文件中显然有一些额外的符号,在构建我的解决方案时我没有注意到。 所以我建议先检查配置文件中的错误,然后再更改注册表项,切换配置模式等步骤。

答案 25 :(得分:0)

我有同样的问题。 取消选中项目属性中的“ Sing the ClickOnce清单”,“签署程序集”和“启用ClickOnce安全设置”

答案 26 :(得分:0)

检查服务启动代码是否正确,

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] 
{ 
    new WinsowsServiceToRun() 
};
ServiceBase.Run(ServicesToRun);

此外,删除所有调试代码。 即,

  #If Debug
         ...
         ...
         ...
        #else
         ...
         ...
        #endif

答案 27 :(得分:0)

根据我的经验,我不得不停止现有服务来更新代码。更新代码后,在启动服务时,我得到了相同的错误“错误1053,服务没有及时响应启动或控制请求”。

但重新启动机器后,这个问题得到了解决。

答案 28 :(得分:0)

我有两个运行的服务意外地连接到同一个EventSource eventLog.Source = "MySource";卸载这两个服务后,重新安装了遭遇错误1053的服务,我的服务正常启动。

答案 29 :(得分:0)

就我而言,问题是关于在App.config文件中设置的缓存配置。从App.config文件中删除以下行后,问题就解决了。

<cachingConfiguration defaultCacheManager="MyCacheManager">
<cacheManagers>
  <add name="MyCacheManager" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
       expirationPollFrequencyInSeconds="60"
       maximumElementsInCacheBeforeScavenging="50000"
       numberToRemoveWhenScavenging="1000"
       backingStoreName="NullBackingStore" />
</cacheManagers>
<backingStores>
  <add type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
       name="NullBackingStore" />
</backingStores>

答案 30 :(得分:0)

我已删除

EventLog.Exists

并修复。

答案 31 :(得分:-1)

一个可能的原因是:

Windows服务.net版本和版本不匹配你的系统.net版本。

答案 32 :(得分:-2)

构建服务

要在解决方案资源管理器中构建服务项目,请打开项目的上下文菜单,然后选择“属性”。将显示项目的属性页。 在Application选项卡的Startup object列表中,选择MyService.Program。