2016-08-22 87 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 –