2012-04-16 6 views
39

Ich möchte um Hilfe bitten beim Öffnen einer Datei von C# App mit zugehöriger App. Ich versuchte dies:Öffnen Sie die Datei mit der zugehörigen Anwendung

 ProcessStartInfo pi = new ProcessStartInfo(file); 
     pi.Arguments = Path.GetFileName(file); 
     pi.UseShellExecute = true; 
     pi.WorkingDirectory = Path.GetDirectoryName(file); 
     pi.FileName = file; 
     pi.Verb = "OPEN"; 
     Process.Start(pi); 

oder dies:

 Process.Start(file); 

wo String file in beiden Beispielen vollständigen Pfad zur Datei zu öffnen versucht, darstellt. Jetzt funktioniert alles gut, außer die (jpg) Bilder mit ACDSee App. Irfanview-Verbände funktionieren gut, auch MS-Office-Dokumente. Nach dem Versuch, das jpg-Bild zu öffnen, das acdsee zugeordnet ist, wird nur der acdsee im Infobereich ausgeführt und die Datei wird nicht geöffnet.

ich entdecken, dass in der Registrierung CLASSES_ROOT für * .jpg Bilder gibt es einen ACDSee.JPG Wert als assoziierte Anwendung, und unter diesem Schlüssel gibt es in dem Shell-> Open-> Befehl ein Pfad :

"C:\Program Files\ACD Systems\ACDSee\ACDSee.exe" /dde 

und ich Ding, dass diese seltsamen /dde der Grund ist, warum ich die Datei nicht öffnen kann. Ich erkannte, dass in der gleichen Ausrichtungs-Schlüssel Shell-> Öffnen dort einige DDEExec Tasteneingabe mit Wert ist [open("%1")]

Für Irfan View oder anderen geprüft App ist kein ddeexec, nur der normale Befehl wie

"C:\Program Files (x86)\IrfanView\i_view32.exe" "%1" 

die nach swaping das% 1 für Dateinamen von der Kommandozeile ausgeführt werden kann, aber ich konnte den Befehl von acdsee Eintrag in der Befehlszeile :(

Also meine Frage ist, wie kann ich einrichten nicht ausgeführt die ProcessStartInfo Objekt zu sicherstellen, dass es alle Dateien wie im Explorer durch Doppelklick ausgeführt werden würde, die Standards und diese DDEExec Einsen? Gibt es etwas anderes wie DDEExec, dass ich bewusst sein sollte? Dank und sorry für mein EN

Antwort

79

Gerade

System.Diagnostics.Process.Start(@"file path"); 

Beispiel

System.Diagnostics.Process.Start(@"C:\foo.jpg"); 
System.Diagnostics.Process.Start(@"C:\foo.doc"); 
System.Diagnostics.Process.Start(@"C:\foo.dxf"); 
... 

und Shell schreibt Programm laufen assoziiert es aus der Registrierung zu lesen, wie üblich Doppelklick tut.

+2

Es scheint, als ob er das bereits mit 'Process.Start (file);'. –

+0

"Also meine Frage, wie kann ich das ProcessStartInfo-Objekt einrichten, um sicherzustellen, dass es alle Dateien so ausführt, wie es im Explorer durch Doppelklick geschehen würde": Die Antwort ist das. Er benutzte Befehlszeilenargumente, was auch immer ... aber nicht direkte Aufrufe, so viel ich sehe. – Tigran

+0

@Tigran Mario hat recht, wie ich geschrieben habe, habe ich deinen Vorschlag als zweites Beispiel versucht ... ich wollte meine Frage in der Weise stellen, dass dies eindeutig nicht die richtige Lösung ist, da das JPG nicht geöffnet ist! – Zavael

9

Dies ist ein alter Thread, aber nur für den Fall, dass jemand wie ich auf sie stößt. pi.FileName muss auf den Dateinamen (und möglicherweise den vollständigen Pfad zur Datei) der ausführbaren Datei festgelegt werden, die Sie zum Öffnen Ihrer Datei verwenden möchten. Der folgende Code funktioniert für mich, um eine Videodatei mit VLC zu öffnen.

string file = files[currentIndex].fileName; 
ProcessStartInfo pi = new ProcessStartInfo(file); 
pi.Arguments = Path.GetFileName(file); 
pi.UseShellExecute = true; 
pi.WorkingDirectory = Path.GetDirectoryName(file); 
pi.FileName = "C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe"; 
pi.Verb = "OPEN"; 
Process.Start(pi); 

Tigran Antwort funktioniert, aber werden Fenster Standard-Anwendung benutzen, um Ihre Datei zu öffnen, so Process mit nützlich sein können, wenn Sie die Datei mit einer Anwendung öffnen möchten, die nicht die Standardeinstellung.

+3

(: ein Kommentar zu einer alten Antwort auf einen alten Thread :) Tigrans Antwort führt das zuletzt zugeordnete Programm für die Erweiterungen jeder Datei aus. Die Antwort von Tree zwingt dazu, ** vlc zu verwenden .exe **. Zavaels Frage bezieht sich auf Probleme, die er nur mit ** ACDSee.exe ** hat und wie er seine Erweiterungsverknüpfung einrichtet. Ich denke, die Autoren von ACDSee müssen darüber kontaktiert werden. –

Verwandte Themen