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

Windows services .NET服务在Windows Server 2003 r2 sp2上失败,错误为1053,windows-services,.net-2.0,windows-server-2003-r2,Windows Services,.net 2.0,Windows Server 2003 R2,我们在windows Server 2003 R2计算机上安装了一组.net 2.0 windows服务。它们配置为作为本地系统帐户启动,启动模式为自动。所有服务均失败,错误为1053“服务未及时响应启动或控制请求” 我已经在其中一个服务中插入了日志记录,并调查了该问题超出了我们的代码范围。没有执行单行代码。 似乎计算机上的.net代码权限存在问题。但问题只会在客户机上重现(两个症状相同的不同客户机)。在我们的开发人员和测试人员环境中,我们无法复制它 要复制的系统:OS:Windows Serv

我们在windows Server 2003 R2计算机上安装了一组.net 2.0 windows服务。它们配置为作为本地系统帐户启动,启动模式为自动。所有服务均失败,错误为1053“服务未及时响应启动或控制请求”

我已经在其中一个服务中插入了日志记录,并调查了该问题超出了我们的代码范围。没有执行单行代码。

似乎计算机上的.net代码权限存在问题。但问题只会在客户机上重现(两个症状相同的不同客户机)。在我们的开发人员和测试人员环境中,我们无法复制它

要复制的系统:OS:Windows Server 2003 R2 SP2 32位干净安装+产品先决条件:SQL Server 2005 Express SP2、.NET Framework 2 SP2+我们的产品

有什么建议吗

自2011年4月7日起更新:

来自客户端计算机的带有ProcessMonitor日志的文件:
服务进程名称为:ParsecServiceHost.exe

当服务在win 7/vista上运行时没有问题,那么我认为问题在于您的代码,例如,您的OnStart()方法。通常情况下,此方法中不允许IO操作,请小心使用此方法中的线程。

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

以下是MSDN的链接,供您快速参考:


这可能还有一个问题。您可能正在使用调试版本。服务不会在调试模式下运行,因此您应该使用发布版本来运行服务。

最后,报告一个microsoft支持帮助获得的答案:

出现此问题的原因是.NET Framework 2.0托管程序集 具有Authenticode签名,加载所需时间比平常长。这个 在管理.NET Framework 2.0时,始终验证签名 加载具有Authenticode签名的程序集

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

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

-修复:一个.NET Framework 2.0 具有Authenticode签名的托管应用程序需要更长的时间 比平常开始的时候

要解决此问题,可以使用此配置设置在.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

我想这不会有什么帮助,因为所有的C++服务都在DEV和测试机上使用了哪些操作系统?我们在测试仪上安装了Windows Server 2003标准R2 SP2,不能复制这种行为。在我们的开发机器上,我们有Windows 7和Vista,从来没有遇到过这个问题。您的OnStart()方法看起来如何?因为此方法中不允许IO操作。服务是否连接到可能未配置的任何外部资源(数据库、套接字服务器等)?如果它确实连接到任何外部资源,您可以在服务外部连接到这些资源吗?service OnStart方法不执行。您的服务类中是否有静态ctor或具有字段初始值设定项表达式的任何静态字段,服务类没有静态构造函数或字段,日志记录是通过静态类实现的,但我确信在那里实现的异常处理非常准确,并且在logger类init及其方法调用上不会发生死锁。“这可能还有一个问题。您可能正在使用调试版本。服务不会在调试模式下运行,因此您应该使用发布版本来运行服务。“dude,这些信息来自哪里?”您不应该在服务的构造函数中声明将在服务的OnStart()方法中使用的任何资源。基本上,构造函数是第一次运行,然后它保存了要在OnStart()中使用的值,但是在OnStop()之后,资源被释放,并且不能再次使用。只需将所有实例化代码从构造函数移动到OnStart(),它就会运行。”请仔细阅读问题:“我已将日志插入其中一个服务,并调查了该问题,该问题超出了我们的代码范围。我在回答中提到的两个问题是我在工作中遇到的两个最常见的问题