.NET服务失败,错误1053在Windows Server 2003 r2 sp2上

.NET服务失败,错误1053在Windows Server 2003 r2 sp2上

问题描述:

我们在Windows Server 2003 R2机器上安装了一组.net 2.0 windows服务。它们被配置为以本地系统帐户启动,并且启动模式为自动。所有服务都失败,并显示错误1053“服务没有及时响应启动或控制请求”。.NET服务失败,错误1053在Windows Server 2003 r2 sp2上

我已经将日志记录插入到其中一项服务中,并调查了该问题在我们的代码之外。没有单行代码执行。

这似乎与在机器上的.net代码权限的问题。但问题仅在客户机上重现(两个不同的客户机具有相同的症状)。在我们的开发者和测试者环境中,我们无法复制它。

系统重现:操作系统:Windows Server 2003 R2 SP2支持32位的干净安装+产品的先决条件:SQL Server 2005 Express的SP2,.NET框架2 SP2 +我们的产品

这里是什么地方,任何sugessions?

从07/04/2011 更新:

文件,从客户端计算机的ProcessMonitor日志:http://dl.dropbox.com/u/8982352/Logfile.zip 服务进程名为:ParsecServiceHost.exe

+0

服务是否连接到可能未配置的任何外部资源(数据库,套接字服务器等)?如果它确实连接到任何外部资源,您是否可以连接到服务外部的这些资源? – 2011-06-08 17:18:02

+0

Service OnStart方法不会执行。 – Semyon 2011-06-10 07:25:06

+0

你有没有在你的服务类中使用静态ctor或任何带字段初始值表达式的静态字段,这可能会在类被加载时抛出异常或花费很长时间? – 2011-07-01 11:53:28

最后,报告的答复,微软支持帮助获得:发生

此问题是因为.NET Framework 2.0管理组件 具有Authenticode签名时间比平常更长的时间来加载。当.NET Framework 2.0管理的 程序集已加载Authenticode签名时,总是会验证 签名。

此外,由于各种其他设置,.NET Framework 2.0托管程序集可能比平常需要更长的时间来加载 。例如,由于网络配置的原因,.NET Framework 2.0管理程序集可能比平时花费更长的时间来加载 。

这是Microsoft KB,它描述了问题并为.NET Framework 2提供了修补程序。0 但是,此修补程序不能解决长时间加载时间问题,但增加了在.NET中禁用禁用签名验证的功能:通过在app.config中设置generatePublisherEvidence参数! 注意:如果您有.NET Framework SP2,则不需要修补程序,只需在app.config中设置generatePublisherEvidence参数即可。

http://support.microsoft.com/kb/936707 - FIX:一种.NET Framework 2.0的 托管应用程序有一个验证码签名花费更长的时间 比平时启动。

要解决问题,可以使用此配置设置在.NET Framework 2.0托管应用程序中禁用签名验证。您可以在应用程序配置文件中使用此配置设置。要做到这一点,下面的代码添加到.NET Framework 2.0中管理应用程序 .exe.config文件与:

<configuration> 
    <runtime> 
      <generatePublisherEvidence enabled="false"/> 
     </runtime> 
</configuration> 

如果您的应用程序托管在IIS中,更改以下之一: C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet.config C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \ machine.config

注意:在x64计算机上,您还必须更改以下之一: C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ aspnet.config C:\ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ CONFIG \ machine.config

当服务没有运行在Win问题7/Vista然后我认为这个问题是你的代码,例如你的OnStart()方法。通常这种方法不允许IO操作,并且在此方法中要小心使用线程。

+0

不要以为它会有所帮助,因为所有C++服务都可以完美启动 – Semyon 2011-06-08 13:18:32

+0

您在开发和测试机上使用哪个操作系统? – CubaLibre 2011-06-08 13:25:13

+0

我们在测试仪机器上安装了Windows Server Standard 2003 r2 sp2,并且无法重现此行为。 – Semyon 2011-06-08 13:38:02

您不应该在将在服务的OnStart()方法中使用的服务的构造函数中声明任何资源。基本上,构造函数第一次运行,然后它保存在OnStart()中使用的值,但在OnStop()之后,释放资源,然后再次使用相同的值。只需将构造函数中的所有实例化代码移动到OnStart()并且它将运行。

下面是从MSDN您的快速参考链接:http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.onstart.aspx

有可能是在这其中更多的问题。您可能正在使用调试版本。服务不运行在调试模式,所以你应该使用发布版本来运行服务。

+0

”这里可能还有一个问题,你可能会使用调试版本,服务不会以调试模式运行,所以你应该使用发布版本来运行服务。“ 这个信息从哪里来,老兄? – Semyon 2011-07-04 11:53:58

+0

“你不应该在服务的OnStart()方法中使用服务的构造函数中声明任何资源,基本上,Constructor首次运行,然后它保存在OnStart中使用的值(),但是在OnStop()之后,资源被释放,然后再次使用相同的cant。只需将构造函数的所有实例化代码移动到OnStart(),它就会运行。 请仔细阅读问题: “我已经将日志记录插入到其中一项服务中,并调查了该问题在我们的代码之外。“ – Semyon 2011-07-04 11:59:01

+0

我在回答中提到的两个问题是在处理windows服务时遇到的两个最常见的问题,如果你可以发布你的OnStart()和构造函数的代码,那么我可能会在我已经给出了支持第一个问题的链接,而我提到的第二个问题来自我过去的经验,同时解决了1053. – 2011-07-05 07:08:15