2016-08-22 50 views
0

我在C#中的应用程序出现问题。当我尝试在SaveFileDialog对象应用程序崩溃时调用ShowDialog。 导致崩溃的代码是在try catch块中,但是由于它强制应用程序,我无法获取堆栈跟踪。SaveFileDialog崩溃,异常代码0xc0000005

try 
     { 
      SaveFileDialog sfd = new SaveFileDialog(); 

      sfd.AddExtension = true; 
      sfd.RestoreDirectory = true; 
      string ext = Path.GetExtension(this.title); 
      sfd.Filter = "File type (" + ext + ")|*" + ext; 
      sfd.FileName = Program.NormalizeTitle(this.title); 

      DialogResult ds = sfd.ShowDialog(this); 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Exception: " + ex.StackTrace); 
     } 

这是错误的描述:

Faulting application name: test.exe, version: 1.0.0.1, time stamp: 0x56585459 
Faulting module name: wkscli.dll, version: 6.1.7601.17514, time stamp: 0x4ce795a7 
Exception code: 0xc0000005 
Fault offset: 0x00001e8f 
Faulting process id: 0x%9 
Faulting application start time: 0x%10 
Faulting application path: %11 
Faulting module path: %12 

有时错误模块名称是Ntshrui.dll。

这段代码在任何其他机器上工作良好。它发生在Windows 2008 R2上.Net 2.0和4.0。 可能是什么问题?

+0

如果你在调试器中运行你的应用程序,它究竟会失败吗? –

+0

在这一行DialogResult ds = sfd.ShowDialog(this);但是我不能在调试器中运行,因为它在客户环境中。 – iz25

+2

'0xc0000005'是访问冲突,即无效(本机)内存访问。可能真的是任何事情,甚至代码可能是你调用你的东西时很长时间完成执行的原因。但是,由于您在处理shell时得到它,它可能是一个不好的第三方shell扩展。您可以尝试使用[this](http://www.nirsoft.net/utils/shexview.html)等工具来停用shell扩展,并查看错误是否消失。 –

回答

2

异常代码0xc0000005意味着访问冲突。正如在显示另存为对话框时发生的情况一样,异常可能是由一个资源管理器外壳扩展引起的。

使用Autoruns Sysinternals公司,或Nirsoft的ShellExView你可以看到它的外壳扩展安装在系统上,并且可以禁用它们一个接一个。

+0

我会这样做。 – iz25

+0

@ john1020:当然,总是要检查是否有损坏的系统文件,请参阅https://support.microsoft.com/zh-CN/kb/929833 –