我们在Windows Server 2003 R2计算机上安装了一组.net 2.0 Windows服务。它们配置为以本地系统帐户启动,启动模式为自动。所有服务都失败,错误1053“服务未及时响应启动或控制请求”。
我已将日志记录插入其中一项服务,并调查该问题不在我们的代码中。没有执行任何单行代码。
这似乎与机器上的.net代码权限有关。但问题仅在客户端计算机上重现(两个不同的客户端具有相同的症状)。在我们的开发人员和测试人员环境中,我们无法重现它。
要重现的系统:操作系统:Windows Server 2003 R2 SP2 32位全新安装+产品先决条件:SQL Server 2005 Express SP2,.NET Framework 2 SP2 +我们的产品
什么可以,任何sugessions?
从07/04/2011更新:
来自客户端计算机的ProcessMonitor日志文件:http://dl.dropbox.com/u/8982352/Logfile.zip 服务进程名称为:ParsecServiceHost.exe
答案 0 :(得分:1)
最后,报告答案,微软支持有助于:
发生此问题是因为.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参数。
http://support.microsoft.com/kb/936707 - FIX:.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 \框架\ V2.0.50727 \ aspnet.config C:\的Windows \ Microsoft.NET \框架\ 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中
答案 1 :(得分:0)
当服务在win 7 / vista上运行没有问题时,我认为问题是你的代码,例如你的OnStart()方法。通常,此方法不允许IO操作,并且在此方法中使用线程时要小心。
答案 2 :(得分:0)
您不应在服务的构造函数中声明将在服务的OnStart()
方法中使用的任何资源。基本上,构造函数第一次运行,然后它保存要在OnStart()
中使用的值,但是在OnStop()
之后释放资源,然后再次使用相同的值。只需将构造函数中的所有实例化代码移动到OnStart()
,它就会运行。
以下是来自MSDN的链接,供您快速参考:http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.onstart.aspx
这可能还有一个问题。您可以使用调试版本。服务不在调试模式下运行,因此您应该使用发布版本来运行服务。