Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET Windows服务在ntdll.dll中崩溃_C#_Windows_Windows Services_Crash - Fatal编程技术网

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

C# .NET Windows服务在ntdll.dll中崩溃,c#,windows,windows-services,crash,C#,Windows,Windows Services,Crash,我有一个用C#编写的Windows服务。当它调用第三方COM组件时,它正在崩溃。此问题仅出现在Windows 7(x86和x64)上。当我在Windows7(x86和x64)上运行与控制台应用程序相同的服务代码时,它工作正常 当我在Windows2003上运行相同的服务时,它也能正常工作。我认为这可能与UAC有关。我正在寻找有关调试此服务的建议/指导,以确定导致问题的原因。是否为ntdll.dll使用调试符号?下面是事件日志中的信息 事件ID:1000,级别:错误 出现故障的应用程序名称:Ser

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

当我在Windows2003上运行相同的服务时,它也能正常工作。我认为这可能与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


报告Id:08da6aa3-852d-11e1-a889-00155d016f32尝试将服务帐户更改为任何其他帐户。像
本地系统

一样,您可能会遇到以下问题:

在Windows XP®、Windows Server®2003和早期版本的Windows®操作系统中,所有服务都与第一个登录到控制台的用户在同一会话中运行。此会话称为会话0。在会话0中同时运行服务和用户应用程序会带来安全风险,因为服务以提升的权限运行,因此是恶意代理的目标,这些代理正在寻找提升自身权限级别的方法

这通常会导致服务出现问题,例如,如果有什么东西试图创建UI

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

如果在服务运行时出现问题,则可以将调试器附加到该服务,并在错误发生时捕获转储(例如,使用windows调试工具中的adplus之类的工具)。如果问题是在服务启动期间发生的,则诊断起来可能会更困难


您确实需要隔离代码中导致错误的最后一个函数调用,然后尝试从中进行诊断。

第三方COM组件正在使用一些黑客(一些释放的API)来提高其性能,
OS
界面在Windows的下一个版本中已被更改,恕不另行通知


这是windows早期(Norton,Office…)的一项旧政策,直接调用内核和…

HexCode意味着访问被拒绝,这就是为什么I+1'd@AgentFire。如果他的建议没有帮助,你将不得不进行内存转储以收集进一步的信息。关于ntdll.dll的符号,您只能获取公共符号,它们只会告诉您函数名,您需要使用私有符号才能发现更多。这里没有拒绝访问错误。0xc0000005是访问冲突。制作一个简单的程序,再现故障并将其发送给第三方供应商。这是一个很好的建议。碰撞不是在启动期间发生的。今天我来试试。我能确定这是原因。COM组件正试图通过调用CreateDC()来创建设备上下文。我必须联系供应商,看看这是否真的是必需的。我已将帐户设置为以我的帐户运行,该帐户是本地administrators组的成员。我要换个账户试试,这还不够。你的管理员帐户可能没有任何系统权限。不,问题与Damien的答案有关。会话0隔离。我不相信这是原因。COM组件封装了一些CORBA/HTTP请求。