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

我已经创建并安装了几次服务。起初它工作得很好,但是在服务代码中做了一些修改之后,当我在 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);
}

我还尝试了以下步骤:

  • 转到 Start > Run > 并键入 regedit
  • 导航到: HKEY _ LOCAL _ MACHINE SYSTEM CurrentControlSet 控件
  • 选择控件文件夹后,右键单击右侧的窗格,然后选择新的 DWORD 值
  • 命名新的 DWORD: ServicesPipeTimeout
  • 右键单击 ServicesPipeTimeout,然后单击“修改”
  • 单击 Decimal,键入“180000”,然后单击 OK
  • 重启电脑

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

installutil AutoSMS.exe


installutil /u AutoSMS.exe
286358 次浏览

我刚刚在本地尝试了这个代码。净4.5和服务启动和停止正确为我。我怀疑您的问题可能与创建 EventLog 源有关。

方法:

EventLog.SourceExists("MySource")

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

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

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

这是因为 MicrosoftWindows 服务控件,它有时控制服务的状态。如果服务在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。这解决了我的问题,怎么/为什么?我不知道我已经问过 有个问题

在我的例子中,问题是关于在 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 = new ServiceBase [] { 新的 WinsowsServiceToRun () }; 运行(ServicesToRun) ;
  • 您需要确保在 WinsowsServiceToRun 类中运行某种类型的无限循环

  • 最后,可能有一些代码没有记录任何东西并突然关闭程序(我就是这种情况) ,在这种情况下,您将不得不遵循老式的调试方法,它需要写一行到源代码(text/db/where)。我所面对的是,由于运行该服务的帐户不是“管理员”,代码只是脱落,并没有记录任何异常,以防它试图写入“ Windows 事件日志”,即使代码是在那里记录异常。对于记录到偶数日志,实际上不需要管理特权,但是需要它来定义源。如果系统中尚未定义事件源,并且服务尝试在没有管理权限的情况下首次记录事件源,那么它将失败。要解决这个问题,以下步骤如下:

    1. 使用管理特权打开命令提示符
    2. 粘贴命令: eventcreate /ID 1 /L APPLICATION /T INFORMATION /SO <<Source>> /D "<<SourceUsingWhichToWrite>>"
    3. 按回车键
    4. 现在开始服务

正如其他人指出的那样,这种错误可能有多种原因。但是希望这能帮到别人,我会分享一下我们案子的经过。对我们来说,我们的服务已经升级到。NET 4.5,但服务器没有。NET 4.5安装。

如果在服务启动时使用 EntityFramework或任何其他方法来启动数据库连接,请选中 ConnectionStrings

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

我在使用 EntityFramework 时连接字符串出错了。因此,基本上在启动 EntityFramework 时,使用不正确的 Connection String 连接数据库失败并超时。

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

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

在我的案例中,我在 调试模式。中发布服务

解决办法是:

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

之后一切都很顺利。

这招对我很管用。基本上确保 Log on 用户被设置为正确的。然而,这取决于如何设置帐户基础结构。在我的示例中,它使用 AD 帐户用户凭据。

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

enter image description here

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

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

或者

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

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

我已经搬走了

事件日志,存在

修好了。

在我的例子中,显然在 App.config 文件中有一些我在构建解决方案时没有注意到的额外符号。 因此,我建议在更改注册表项、切换配置模式等步骤之前,首先检查配置文件是否存在错误。

在这个问题上花了太多时间之后。我发现 EventLog造成所有这些混乱,虽然我正确地使用它。

不管是谁来解决这个问题,我建议你去掉 EventLog。 使用更好的工具,如“ Log4net”。

在这个问题上花了一些时间,尝试了一些没有用的解决方案之后,我遇到了 这个博客。它建议将服务初始化代码封装在 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);
}
}
}
}

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

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

你的控制应该是这样的:

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

我有两个服务运行谁是偶然耦合到相同的事件源 eventLog.Source = "MySource";后卸载两个服务,并重新安装一个遭受错误1053,我的服务正常启动。

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

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

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

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

此外,删除任何调试代码。 即,

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

我知道这是个老问题, 我过去常常编写自己的 VB.NET windows 服务,在 MS windows 7和 MS windows 10上启动它没有任何问题。

我有这个问题时,我安装最新的微软视窗10补丁的视窗服务。Windows 服务不运行的原因是。NET 版本的窗口服务所需要的运行不会在安装的 PC 中显示。

在安装了 Windows 服务之后。转到安装文件夹,例如 C: Program files (x86) Service1 Service1.exe,双击运行它。如果有东西不见了。NET 框架包,它会提示用户下载它。只需下载并等待安装。

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

我也有同样的问题。 在项目属性中取消选中“唱出 ClickOnce 清单”、“为程序集签名”和“启用 ClickOnce 安全设置”有所帮助

我的问题是一个与 appsettings.json没有复制释放构建文件夹在构建和简单地把它放入 ...\bin\Release文件夹和复制 launchSettings.json内容到 appsettings.json为我解决了这个问题。

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

我挠了挠头来清除这个错误 如果在以下代码中调试此错误,则可能会导致此错误

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);


}

这个错误可能是由于各种原因造成的。为了确定原因,请在服务运行时添加 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>);
}

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

你需要检查下面的部分。

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

因为上面的部分需要与你的.net 框架匹配。

在我今早碰到的案例中,罪魁祸首是一个格式不正确的配置文件。配置文件有一个关闭的注释标记,没有打开的注释标记。因此,请仔细检查配置文件中的错误。

由于没有人提到,我会加上它(即使它是一个愚蠢的错误)。 如果你在 Windows10上,你通常不需要重新启动,但是

确保关闭任何打开的属性页面的“服务”-窗口的情况下,你刚刚安装的服务(仍然打开属性页面的旧服务)。

我说的是这扇窗户:

Services list

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

安装.net 框架4.5! 对我来说很管用。

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

我想补充一下我的解决方案。 必须承认,我使用了一个附加的配置文件(“ 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 解决了这个问题。

如果您想注册一个。NET 核心3.1可执行文件作为 Windows 服务,请确保您添加了微软的 Nuget 包。分机。主机。WindowsServices 3.1.7或以上版本,并初始化 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"

如果你有.NET 6,请阅读它

Https://learn.microsoft.com/en-us/dotnet/core/extensions/windows-service

在命令行中创建服务时,请像下面这样使用

sc.exe create SERVICE_NAME binPath="C:\....\bin\Release\net6.0\win-x64\SERVICE_NAME.exe"