2010-04-14 14 views
6
UnhandledException: System.ComponentModel.Win32Exception: No application is associated with the specified file for this operation 
    at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) 
    at System.Diagnostics.Process.Start() 
    at System.Diagnostics.Process.Start(ProcessStartInfo startInfo) 
    at System.Diagnostics.Process.Start(String fileName) 

Hallo allerseits,ist keine Anwendung mit der angegebenen Datei Ausnahme zugeordnet

ich die folgende Ausnahme auf einer Maschine immer an dem ich testen, wenn sie versuchen Process.Start zu verwenden, um eine CSV-Datei zu öffnen. Ich denke, das passiert, weil keine Dateizuordnung für CSV-Dateien in diesem Feld festgelegt wurde.

Wie würden Sie diese Situation vermeiden?

Erzwingen, dass der Process.Start im Editor geöffnet wird? - Idealerweise sollte es in Excel geöffnet werden, aber was machen Sie, wenn Excel nicht auf diesem Computer existiert?

Dank

Antwort

4

Wenn Ihre Anwendung davon abhängig ist, dass Excel installiert wurde, um ordnungsgemäß und effektiv zu arbeiten, dann sollten Sie den Benutzer darüber informieren. Fangen Sie die Ausnahme ab und rufen Sie eine Benachrichtigung auf, um sie über das Problem zu informieren, aber geben Sie ihnen dann in der Benachrichtigung die Option, sie in einem alternativen Editor wie Notepad zu öffnen.

Das alles läuft auf gutes UX hinaus - sagen Sie dem Benutzer, aber tun Sie es auf eine Weise, dass Sie sie ermächtigen, indem Sie Optionen anbieten, anstatt nur in den Weg zu kommen und zu stoppen, wenn ein kleines Problem auftritt .

Edit: genau das tun, was Sie tun - nicht davon ausgehen, dass sie Excel haben, können sie einen anderen Viewer/Editor wie Openoffice haben. Was auch immer für CSV registriert ist, lassen Sie es seine Sache tun. Versuchen Sie nicht, die Dateiverknüpfung selbst zu überprüfen. Ihre App verfügt möglicherweise nicht über ausreichende Berechtigungen, um in der Registrierung herumzuwandern.

Sie müssen auch nach anderen offensichtlichen Gründen für Ausnahmen suchen, z. B. dass der Benutzer keine Rechte zum Öffnen der Zieldatei hat, dies könnte auf Einschränkungen des Ordners oder der Datei selbst zurückzuführen sein. Möglicherweise ist die Datei gesperrt, weil sie in einem anderen Prozess noch geöffnet ist. Es gibt eine Reihe von Gründen, warum Ihr Process.Start fehlschlagen könnte.

Fangen Sie die Ausnahme, und wenn die Ursache keine Anwendung mit der Datei verbunden ist, bieten Sie ihnen die Option. Wenn der Benutzer sich entscheidet, den Editor zu verwenden, versuchen Sie, die Datei im Editor zu öffnen, aber achten Sie auf Ausnahmen. Notepad ist eine gute Option, es enthält keine Sperre für die Datei, aber es unterliegt immer noch Ordner/Datei-ACLs.

+0

es hängt nicht davon ab - aber für den Benutzer ist es viel einfacher, eine CSV-Datei so zu lesen. Wie kann ich überprüfen, ob Excel installiert ist? – baron

+0

Siehe meine Bearbeitung .... – slugster

+0

Ihre Antwort macht Sinn. Prost – baron

2

die Registrierung lesen, um zu sehen, ob es ein Programm mit der Dateierweiterung zugeordnet ist, bevor Sie die Process.Start tun. Suchen Sie in HKEY_CLASSES_ROOT\.csv, um zu sehen, wer für die Dateierweiterung registriert ist, falls vorhanden.

+0

und was passiert, wenn nichts verbunden ist? force öffnen im Editor (ID sagen, es ist ziemlich sicher, die meisten xp-Boxen annehmen würde dies) und wenn es eine Assoziation - öffnen Sie mit der zugehörigen App? hoffentlich können Sie den Prozessnamen leicht genug aus der Registrierung zu bekommen? ... – baron

+0

Wenn nichts zugeordnet ist, um den Dateityp zu behandeln, dann liegt es an Ihnen, was Sie damit tun - Notepad könnte eine gute Wahl sein. Wenn Ihr Blick auf die Registrierung zeigt, dass etwas registriert ist, um den Dateityp zu behandeln, würde ich Process.Start behandeln die Details der tatsächlichen Entschlüsselung der Registrierung Öffnen Sie Verben und was nicht. – dthorpe

3

Wenn Sie die ProcessStartInfo.ErrorDialog gesetzt = true, dann wird der Benutzer mit einer Standard-Windows-Dialogaufforderung sein: siehe here

Verwandte Themen