2009-05-19 12 views
5

Mes utilisateurs peuvent joindre des documents à diverses entités de l'application. Bien sûr, si l'utilisateur A joint un fichier .TIFF, l'utilisateur B peut ne pas avoir de visionneuse pour ce type de fichier.Comment faire pour ouvrir le dialogue "Windows ne peut pas ouvrir ce fichier"?

Je voudrais être en mesure de faire apparaître cette boîte de dialogue:

alt text http://www.angryhacker.com/toys/cannotopen.png

Ma demande est C# avec VS2005.
Actuellement, je fais Process.Start et transmettre le nom de fichier. Si aucune association n'est trouvée, elle génère une exception.

Répondre

7

Cela devrait le faire:

System.Diagnostics.Process p = new System.Diagnostics.Process(); 
p.StartInfo.FileName = "rundll32.exe"; 
p.StartInfo.Arguments = "shell32.dll,OpenAs_RunDLL " + yourFileFullnameHere; 

p.Start(); 
+0

Le problème avec cette approche est qu'il ouvre la boîte de dialogue à chaque fois. Je suppose que je devrais juste exécuter ce code si je reçois une exception Win32 indiquant qu'il n'y a pas d'association. – AngryHacker

+0

Ah oui, j'aurais dû le signaler. –

+0

Notez que 'OpenAs_RunDLL' est non documenté et [ne fonctionne pas toujours.] (Http://stackoverflow.com/questions/23566667/rundll32-shell32-dll) –

12
Process pr = new Process(); 
pr.StartInfo.FileName = fileTempPath; 
pr.StartInfo.ErrorDialog = true; // important 
pr.Start(); 
+0

Celui-ci est meilleur, indépendant de la plate-forme. –

Questions connexes