2016-08-22 4 views
0

J'ai un problème avec l'application en C#. Lorsque j'essaie d'appeler ShowDialog sur les plantages d'application de l'objet SaveFileDialog. Le code qui provoque le crash est dans le bloc try catch, mais comme il crase l'application, je suis incapable d'obtenir la trace de la pile.Crash SaveFileDialog avec le code d'exception 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); 
     } 

Voici la description d'erreur:

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 

nom du module est parfois la formation de failles ntshrui.dll.

Ce code fonctionne correctement pendant des années sur toute autre machine. Il s'est passé sur Windows 2008 R2 avec .Net 2.0 et 4.0. Quel pourrait être le problème?

+0

Si vous exécutez votre application dans le débogueur, où échoue-t-il exactement? –

+0

Sur cette ligne DialogResult ds = sfd.ShowDialog (this); Mais je ne peux pas exécuter dans le débogueur parce que c'est dans le client env. – iz25

+2

'0xc0000005' est une violation d'accès, c'est-à-dire un accès mémoire invalide (natif). Pourrait être vraiment n'importe quoi, même le code pourrait être la cause qui a longtemps terminé l'exécution lorsque vous appelez vos affaires. Mais puisque vous l'obtenez en traitant le shell, il pourrait être une mauvaise extension shell tierce. Vous pouvez essayer de désactiver les extensions shell avec des outils comme [this] (http://www.nirsoft.net/utils/shexview.html) et voir si l'erreur disparaît. –

Répondre

2

Le code d'exception 0xc0000005 signifie une violation d'accès. Comme cela se produit lorsque la boîte de dialogue Enregistrer sous est affichée, l'exception peut être provoquée par une extension shell Explorer.

En utilisant Autoruns de Sysinternals ou de ShellExView Nirsoft vous pouvez voir quelles extensions shell sont installés sur votre système, et vous pouvez les désactiver un par un.

+0

Je vais essayer de cette façon. – iz25

+0

@ john1020: Et bien sûr, toujours quelque chose à vérifier est pour les fichiers système corrompus, voir https://support.microsoft.com/en-us/kb/929833 –