当我使用 Verisign signtool.exe 对我的服务中的程序集进行签名时,它在运行 Windows 2003 Server 的计算机上启动时无法启动。事件日志有两个事件:
“超时(30000 毫秒)等待 xxx 服务服务连接。”
和
“由于以下错误,xxx Service 服务无法启动:
该服务没有及时响应启动或控制请求。”
一旦机器运行,它就可以正常启动。它在 XP 和 Vista 中启动良好。当程序集未签名时,它开始正常。
最佳答案
此问题对于签名的 .NET 服务可执行文件非常常见:该服务在启动时无法启动,但在之后手动启动时运行良好。是否使用 ServiceBase.RequestAdditionalTime 无关紧要:实际上,在服务启动请求超时之前根本没有执行任何用户代码。这种影响在没有 Internet 连接的机器上更为明显:在这种情况下,即使从 SCM 手动启动服务也会失败。
要解决此问题,disable the verification of the Authenticode signature at load time in order to create Publisher evidence ,通过将以下元素添加到您的 .exe.config 文件中:
<configuration>
<runtime>
<generatePublisherEvidence enabled="false"/>
</runtime>
</configuration>
发布者证据是一个很少使用的代码访问安全 (CAS) 功能:只有当您的服务依赖 PublisherMembershipCondition 时,禁用它才会导致问题。在所有其他情况下,它将不再需要运行时进行昂贵的证书检查(包括吊销列表查找),从而消除永久性或间歇性启动失败。
编辑,2010 年 7 月:对于使用 .NET Framework 4.0 版的应用程序,不再需要此解决方法。
关于.net - 签名的程序集阻止我的服务启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/554688/