当我使用Verisign signtool.exe在我的服务中对程序集进行签名时,它在计算机启动时无法在运行Windows 2003 Server的计算机上启动.事件日志有两个事件:
"等待xxx服务连接的超时(30000毫秒)." 并且"由于以下错误,xxx服务服务无法启动:服务未及时响应启动或控制请求."
一旦机器运行,它就会正常运行.它在XP和Vista中都很好用.当程序集未签名时,它会正常启动.
对于已签名的.NET服务可执行文件,此问题非常常见:该服务将无法在启动时启动,但随后手动启动时运行良好。是否使用ServiceBase.RequestAdditionalTime无关紧要:实际上,在服务启动请求超时之前根本不执行任何用户代码。在没有Internet连接的计算机上,这种影响更加明显:在这种情况下,即使从SCM手动启动服务也会失败。
要解决此问题,请在加载时禁用Authenticode签名的验证,以便通过将以下元素添加到您的.exe.config文件中来创建Publisher证据:
发布者证据是很少使用的代码访问安全性(CAS)功能:仅当您的服务依赖PublisherMembershipCondition禁用它时,才会引起问题。在所有其他情况下,它将不再需要运行时执行昂贵的证书检查(包括吊销列表查找),从而消除了永久性或间歇性启动失败。
编辑,2010年7月:对于使用.NET Framework 4.0版的应用程序,不再需要此解决方法。