我正在运行带有最新更新的 Visual Studio 2012 和带有最新更新的 Win7 上的最新 ReSharper。我有一个使用 Entity Framework 6.1 的 .NET 4.5 x64 C# Topshelf 3.1.122 包装项目。无论调试器是否附加,当我通过关闭窗口退出正在运行的程序时,vshost.exe 将停止工作,我将不得不强制退出它。这似乎没有明显的效果;这很烦人。该行为仅发生在我的机器上,而不是其他开发人员的机器上。如果使用红色停止按钮停止调试会话,则不会发生崩溃。知道什么会导致这种情况吗?
问题签名:问题事件名称:BEX64 应用程序名称:REDACTED.vshost.exe 应用程序版本:11.0.50727.1
应用程序时间戳:5011d445 故障模块名称:ntdll.dll 故障模块版本:6.1.7601.18247 故障模块时间戳:521eaf24
异常偏移量:0000000000072c4a 异常Code: c000000d
Exception Data: 0000000000000000 OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1033 Additional Information 1: 402a Additional Information 2: 402ac0175590edba59c75743ddb69b2f Additional Information 3: e38f Additional Information 4: e38f53f34d74d36ff87488c7f8d2b32e
这是 Topshelf 包装器代码供参考:
private static void Main()
{
HostFactory.Run(
x =>
{
x.Service<Foo>(s =>
{
s.ConstructUsing(name => new Foo());
s.WhenStarted(svc => svc.Start());
s.WhenStopped(svc => svc.Stop());
s.WhenShutdown(svc => svc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription(ServiceInfo.Description);
x.SetDisplayName(ServiceInfo.DisplayName);
x.SetServiceName(ServiceInfo.ServiceName);
x.EnableShutdown();
});
}
如果我在 Main 的末尾或 svc.Stop 方法的开头放了一个断点,当我关闭窗口时调试器不会中断,vshost.exe 会立即崩溃。无论如何,我看不出我如何才能完成这个。
更新:我使用 WinDbg 附加到 vshost 进程,最后得到了实际的异常:
ntdll!DbgBreakPoint:
00000000`76ef0590 cc int 3
0:022> g
ModLoad: 000007fe`f7fe0000 000007fe`f7fee000 C:\Windows\system32\wbem\wbemprox.dll
ModLoad: 000007fe`f81f0000 000007fe`f826d000 C:\Windows\system32\wbemcomn2.dll
(3c70.22e8): Unknown exception - code c000000d (first chance)
(3c70.22e8): Unknown exception - code c000000d (!!! second chance !!!)
ntdll!RtlIsDosDeviceName_U+0x1922a:
00000000`76f12c4a 4c8b1d87f70b00 mov r11,qword ptr [ntdll!NlsAnsiCodePage+0x13e (00000000`76fd23d8)] ds:00000000`76fd23d8=0000000000000000