我开发了一个基于.NET的Windows服务,它使用部分托管(C#)和非托管代码(C / C ++库)。
在某些域环境中(例如域内abc.com中的Win 2k3 32位服务器),有时服务启动时间超过30秒(特别是在重新启动操作系统时),因此无法启动服务。我怀疑它与企业级安全性有关,但我不确定。
http://msdn.microsoft.com/en-us/library/aa720255%28VS.71%29.aspx
我尝试了以下但没有成功: - 通过尽可能从servicebase实现移动using指令来延迟加载引用(尤其是xml命名空间 - 知道导致加载延迟) - 延迟加载和配置log4net - 使用ngen预编译代码 - 延迟工作线程的开始 - 添加/删除里面设置的清单+内容 - 签署/取消签名二进制文件 - 使用配置设置(有很多设置,并且所有设置的范围级别都设置为应用程序)尽可能晚 - 将所有依赖项添加到GAC
我还没有尝试为实现Main方法的类添加安全性需求。 我没有尝试实现自己的配置加载器,因为在检查自动生成的代码之后,我注意到设置类是单一的,它在调用时得到它的实例。
通过完全删除它所使用的log4net依赖关系,但这不是一个选项。
当网卡被禁用时,服务立即启动。
答案 0 :(得分:1)
您通常使用SysInternals的Process Monitor来诊断此问题。这是一项服务这一事实使问题复杂化。请查看此blog post以获取类似的问题排查会话。
它像CRL(证书撤销清单)问题一样嘎嘎作响。要禁用它:控制面板,Internet选项,高级选项卡,安全性,取消选中“检查发布者的证书吊销”。
答案 1 :(得分:0)
我们发现使用名称解析(甚至12.0.0.1)的log4net UDP appender导致启动速度大幅下降。