我开发了一个基于 .NET 的 Windows 服务,该服务使用部分托管 (C#) 和非托管代码(C/C++ 库)。
在某些域环境中(例如域 abc.com 内的 Win 2k3 32 位服务器)有时服务需要超过 30 秒才能启动(尤其是在操作系统重启时),因此无法启动服务。我怀疑它与企业级安全性有关,但我不确定。
http://msdn.microsoft.com/en-us/library/aa720255%28VS.71%29.aspx
我已经尝试了以下但没有成功: - 通过将 using 指令尽可能远离服务库实现来延迟加载引用(尤其是 xml 命名空间 - 知道会导致加载延迟) - 延迟加载和配置 log4net - 使用 ngen 预编译代码 - 延迟工作线程的启动 - 添加/删除 list + 礼仪设置里面 - 签署/取消签署二进制文件 - 尽可能晚地使用配置设置(有很多设置,所有的范围级别都设置为应用程序) - 将所有依赖项添加到 GAC
我还没有尝试为实现了 Main 方法的类添加安全要求。 我没有尝试实现我自己的配置加载器,因为在检查了自动生成的代码之后,我注意到设置类是一个单例并且它在调用时获取它的实例。
通过完全删除 log4net 依赖项它起作用了,但这不是一个选项。
当网卡被禁用时,服务会立即启动。
最佳答案
您通常会使用 SysInternals 的进程监视器来诊断此问题。这是一项服务这一事实使事情变得复杂。检查这个blog post进行类似的故障排除 session 。
顺便说一句,它就像 CRL(证书撤销列表)问题一样嘎嘎作响。要禁用它:控制面板、Internet 选项、高级选项卡、安全,取消选中“检查发布者的证书吊销”。
关于c# - 在执行托管应用程序时,.NET 执行的最耗时的检查是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2152718/