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

C# 错误1053服务未及时响应启动或控制请求,c#,.net,timer,windows-services,C#,.net,Timer,Windows Services,我已经创建并安装了几次服务。最初它工作正常,但在服务代码中进行一些更改后,当我在Services.msc中重新启动服务时,它开始出现错误: 错误1053:服务未及时响应启动或控制请求 代码: 这是我的主要方法代码 static void Main() { ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new AutoSMS() }; ServiceBa

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

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

代码:

这是我的主要方法代码

static void Main()
{
    ServiceBase[] ServicesToRun;
    ServicesToRun = new ServiceBase[] 
    { 
        new AutoSMS() 
    };
    ServiceBase.Run(ServicesToRun);
}
我还尝试了以下步骤:

  • 转到开始>运行>并键入regedit
  • 导航到:HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control
  • 选中控制文件夹后,在右侧窗格中单击鼠标右键,然后-选择“新建DWORD值”
  • 将新DWORD命名为:ServicesPipeTimeout
  • 右键单击ServicesPipeTimeout,然后单击修改
  • 单击Decimal,键入“180000”,然后单击OK
  • 重新启动计算机
我使用以下命令安装和卸载它:

installutil AutoSMS.exe

installutil /u AutoSMS.exe

我刚刚在.NET4.5中本地尝试了这段代码,该服务为我正确启动和停止。我怀疑您的问题可能与创建事件日志源有关

方法:

EventLog.SourceExists("MySource")
根据以下文档,要求运行代码的用户必须是管理员:


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

这是因为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

或者确保在那一刻没有另一个进程与服务对话,可能有冲突我不知道

我遇到了完全相同的问题,我所做的只是在编译dll时将调试模式更改为Release。这解决了我的问题,如何/为什么?我不知道我已经问过了,所以在我的例子中,问题是关于在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>


我遇到了同样的问题,根本不知道如何解决。是的,发生这种情况是因为服务引发了异常,但是您可以遵循一些一般准则来纠正这种情况:

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

  • 最后,可能有一些代码没有记录任何内容,并且突然关闭了程序(我就是这样),在这种情况下,您必须遵循旧的调试方法,需要将一行代码写入源代码(text/db/where)。我所面临的是,由于运行该服务的帐户不是“Admin”,因此代码只是在下降,没有记录任何异常,以防它试图写入“Windows事件日志”,即使代码是用来记录异常的。实际上,登录到日志甚至不需要管理员权限,但需要管理员权限来定义源。如果系统中尚未定义事件源,并且服务首次尝试在没有管理员权限的情况下记录事件,则会失败。要解决此问题,请执行以下步骤:

  • 以管理员权限打开命令提示符
  • 粘贴命令:
    eventcreate/ID 1/L APPLICATION/T INFORMATION/SO/D”“
  • 按回车键
  • 现在开始服务

正如其他人指出的,这种错误可能有多种原因。但希望这能帮助一些人,我将分享我们的案例。对我们来说,我们的服务已升级到.NET 4.5,但服务器上没有安装.NET 4.5

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

在我的情况下,当我收到错误
错误1053时,服务没有及时响应启动或控制请求
这就是问题所在:

我使用的是EntityFramework,连接字符串有误。因此,EntityFramework在启动时基本上无法使用不正确的连接字符串连接到数据库,并且超时

只需将数据库连接字符串替换为正确的字符串,即可正常工作。


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

在我的情况下,我在调试模式下发布服务。

解决方案是:

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

之后它工作得很好。

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

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


此问题的可能解决方案之一[它解决了我这边的问题,我的应用程序是基于JAVA的应用程序]:

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

2) 检查配置的java版本
<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>
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);
            }
        }
    }
}
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] 
{ 
    new WinsowsServiceToRun() 
};
ServiceBase.Run(ServicesToRun);
  #If Debug
         ...
         ...
         ...
        #else
         ...
         ...
        #endif
static void Main()
{
 #if DEBUG
            MailService service = new MailService();
             service.Ondebug();
 #else
             ServiceBase[] ServicesToRun;
             ServicesToRun = new ServiceBase[]
             {
                 new MailService()
             };
             ServiceBase.Run(ServicesToRun);
 #endif
         }
     }
static void Main()
{

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

}
        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>);
            }
<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
using Microsoft.Extensions.Hosting;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] arguments)
        {
            IHostBuilder hostBuilder = Host.CreateDefaultBuilder(arguments);
            hostBuilder.UseWindowsService();
            hostBuilder.Build().Run();
        }
    }
}
sc.exe create ConsoleApp1 binPath= "<BIN_PATH>\ConsoleApp1.exe"