我已经构建了一个.NET控制台应用程序,它可以运行好几年.从11月23日开始,在生产中运行需要花费大量时间(15秒)(从Visual Studio运行时它可以正常工作).
我试图追溯Process Monitor(ProcMon)发生了什么,我发现了这种模式:
应用程序正常启动
应用程序加载 cryptnet.dll
应用程序进入睡眠状态,我看到一系列TCP Reconnect
消息,机器试图通过HTTP(似乎在百慕大)达到206.53.176.17.
应用程序查询信息 cryptnet.dll
应用尝试通过HTTP连接到206.53.176.78.
15秒后,一切都重新开始工作(我看到一个访问,crypt32.dll
因为应用程序继续加载时发生的第一件事).
我完全迷失了:问题与我的机器无关,但是所有同事如何使用我的工具遇到同样的问题.这似乎与在加载应用程序时完成的Authenticode签名验证有关.
实际上,当尝试通过资源管理器查看EXE 的数字签名时,单击" 详细信息"需要15秒才能查看"数字签名详细信息"面板(没有任何错误).证书的颁发者定义为:
CN = QV Schweiz ICA OU = Issuing Certificate Authority O = QuoVadis Trustlink Schweiz AG C = CH
它仍然有效(消息说"这个数字签名没问题.").
注意:证书的根发行者是http://www.quovadisglobal.bm/,恰好在百慕大......
检查程序集(Authenticode)上的数字签名可能是造成延迟的原因.
摘自此MSDN文章:
Authenticode验证会增加启动时间.必须使用证书颁发机构(CA)验证Authenticode签名的程序集.此验证可能非常耗时,因为它可能需要多次连接到网络才能下载当前的证书吊销列表.它还确保在到受信任根的路径上有完整的有效证书链.加载程序集时,这可能会转换为几秒钟的延迟.