当控制台应用程序使用完全相同的基本库执行完全相同的操作时,可能导致Windows服务挂起的原因是什么?

Ben*_*ter 3 c# windows-services

我讨厌这样的问题 - 它们是如此不确定......并且无法确定,但是这里有.

背景:我有一个DLL,它是一个定时进程的应用程序.我的计时器接收运行它的间隔的配置和一个应该在间隔过去时运行的委托.我有另一个DLL包含我注入的进程.

我创建了两个应用程序,一个Windows服务和一个控制台应用程序 每个应用程序读取自己的配置文件并加载相同的库,推送配置的计时器间隔并委托进入我的定时进程类.

问题:昨天和过去的n周,使用Windows服务在我们的生产环境中一切正常.今天,Windows服务将运行大约20-30分钟并挂起(计时器间隔为30秒),但控制台应用程序运行没有问题,并且在过去4小时内运行.详细记录不表示任何故障.好像Windows服务只是......悄然死去 - 没有停止.

鉴于我的Windows服务和控制台应用程序正在做同样的事情,我只能认为有一些东西导致Windows服务进程挂起 - 但我不知道是什么原因造成的.我检查了配置文件,它们都是相同的 - 我甚至将其中的内容复制并粘贴到另一个中以确保.没有骰子.

当使用相同基本库的对应控制台应用程序没有时,任何人都可以就可能导致Windows服务挂起的内容提出建议; 或者任何人都可以指向我的工具方向,这将允许我诊断可能导致此问题的原因?

感谢大家的帮助 - 仍然在挖掘.

Pau*_*sik 8

您需要弄清楚生产服务器上发生了哪些变化.起初,负责的IT人员会发誓,没有任何改变,但你必须坚持不懈.我已经看到这种情况经常发生在我身上.软件不会破坏.期.改变必须是环境.

执行差异:您有两个运行相同代码的应用程序.最可能的区别(和罪魁祸首)是该服务使用与您的控制台应用程序不同的安全凭证集运行,并且可能成为安全变幻莫测的牺牲品.先检查一下.哪个Windows帐户正在运行该服务?它的作用和范围是什么?是否有任何第三方安全软件在服务器上运行,并且可能会杀死错误的应用程序?您是否必须使用第三方安全服务注册您的服务?您的.Net程序集是否正确签名?您的.Net程序集是否在服务器上正确注册和配置?最后但并非最不重要的一点是,不要忘记,您最有可能的调试器用户可以获得比许多其他帐户类型更多的东西.

另一个想法:由于时间似乎是问题的一部分,检查机器上的计划任务.也许有一个过程会每30分钟就会发生一次干扰你自己的过程.