.NET Windows服务在ntdll.dll中崩溃

Phi*_*duc 4 c# windows crash windows-services

我有一个用C#编写的Windows服务.它在调用第三方COM组件时崩溃.该问题仅出现在Windows 7(x86和x64)上.当我在Windows 7(x86和x64)上运行与控制台应用程序相同的服务代码时,它工作正常.

当我在Windows 2003上运行相同的服务时,它也可以正常工作.我认为这可能与UAC有关.我正在寻找有关调试此服务的建议/方向,以确定导致问题的原因.使用ntdll.dll的调试符号?在事件日志的信息下方.

事件ID:1000,级别:错误

错误应用程序名称:ServiceHost.exe,版本:1.0.0.0,时间戳:0x4f87bc9a

错误模块名称:ntdll.dll,版本:6.1.7601.17725,时间戳:0x4ec49b60

异常代码:0xc0000005

故障偏移:0x0002bcbb

错误进程id:0x151c

错误应用程序启动时间:0x01cd1939c9017b2d

错误的应用程序路径:E:\ ServiceHost\bin\Debug\ServiceHost.exe

错误模块路径:C:\ Windows\SYSTEM32 \ntdll.dll

报告编号:08da6aa3-852d-11e1-a889-00155d016f32

Dam*_*ver 6

作为一个疯狂的猜测,你可能会遇到会话0隔离:

在WindowsXP®,WindowsServer®2003和早期版本的Windows®操作系统中,所有服务都在与登录到控制台的第一个用户相同的会话中运行.此会话称为会话0.会话0中的运行服务和用户应用程序一起构成安全风险,因为服务以提升的权限运行,因此是寻找提升其自身权限级别的方法的恶意代理的目标.

这通常会导致服务问题,例如,某些东西试图创建UI.

处理此问题的最简单方法是与第三方组件的供应商交谈,并确保它支持与服务一起使用.但是,如果供应商不再存在,则可能无法实现.

如果问题出现,而该服务正在运行,有可能在在该错误发生点到一个调试器附加到它,并捕获转储(例如,使用类似从调试工具ADPlus的窗户).如果在服务启动期间发生问题,则诊断可能比较棘手.

你真的需要隔离在一个函数调用代码上的错误带来的,然后尝试从那里来诊断.

  • 我能够确定这就是原因。COM 组件尝试通过调用 CreateDC (http://msdn.microsoft.com/en-us/library/dd183490(v=vs.85).aspx) 创建设备上下文。我必须联系供应商,看看是否真的需要这样做。 (2认同)