4

我开发了一个基于 .NET 的 Windows 服务,它使用部分托管(C#)和非托管代码(C/C++ 库)。

在某些域环境中(例如域 abc.com 内的 Win 2k3 32 位服务器),有时服务需要超过 30 秒才能启动(尤其是在操作系统重新启动时),因此无法启动服务。我怀疑它与企业级安全性有关,但我不确定。

http://msdn.microsoft.com/en-us/library/aa720255%28VS.71%29.aspx

我尝试了以下方法但没有成功: - 通过将 using 指令尽可能远离 servicebase 实现(尤其是 xml 命名空间 - 知道会导致加载延迟)来延迟加载引用 - 延迟加载和配置 log4net - 通过预编译代码使用 ngen - 延迟工作线程的启动 - 添加/删除清单 + 内部设置的 decencies - 对二进制文件进行签名/取消签名 - 使用配置设置(有很多设置,所有的范围级别都设置为 application )稍后尽可能 - 将所有依赖项添加到 GAC

我还没有尝试为实现 Main 方法的类添加安全要求。我没有尝试实现我自己的配置加载器,因为在检查了自动生成的代码之后,我注意到设置类是单调的,它会在调用时获取它的实例。

通过完全删除 log4net 依赖,它可以工作,但这不是一个选项。

当网卡被禁用时,服务会立即启动。

4

2 回答 2

1

您通常会使用 SysInternals 的 Process Monitor 来诊断此问题。这是一项服务这一事实使事情变得复杂。查看此博客文章以获取类似的故障排除会话。

顺便说一句,它就像一个 CRL(证书撤销列表)问题。要禁用它:控制面板、Internet 选项、高级选项卡、安全性,取消选中“检查发布者的证书吊销”。

于 2010-01-28T06:36:10.000 回答
0

我们发现使用具有名称解析的 log4net UDP appender(甚至到 12.0.0.1)会导致启动速度大幅下降。

于 2010-01-28T06:41:03.300 回答