Ни одно приложение не связано с указанным исключением файла - PullRequest
6 голосов
/ 14 апреля 2010
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)

Привет всем,

Я получаю следующее исключение на одной машине, на которой я тестирую при попытке использовать Process.Start для открытия файла .csv Я думаю, что это происходит из-за того, что для этого CSV-файла в этом поле не установлена ​​ассоциация.

Так как бы вы избежали этой ситуации?

Принудительно открыть Process.Start в Блокноте? - В идеале он должен быть открыт в Excel, но что делать, если Excel не существует на этом компьютере?

Спасибо

Ответы [ 3 ]

4 голосов
/ 14 апреля 2010

Если ваше приложение зависит от того, установлен ли Excel для правильной и эффективной работы, сообщите об этом пользователю. Перехватите исключение и откройте уведомление, чтобы сообщить им о проблеме, но затем в этом уведомлении дайте им возможность открыть его в альтернативном редакторе, таком как блокнот.

Все это сводится к хорошему UX - сообщите пользователю, но сделайте это таким образом, чтобы вы расширяли его возможности, предлагая варианты продолжения, а не просто мешали им и останавливались, когда возникала такая небольшая проблема.

Редактировать: Делать именно то, что вы делаете - не думайте, что у них есть Excel, у них может быть какой-то другой просмотрщик / редактор, например OpenOffice. Что бы ни было зарегистрировано в CSV, пусть оно делает свое дело. Не пытайтесь самостоятельно проверять файловую ассоциацию, ваше приложение может не иметь (вероятно, не будет) достаточных привилегий, чтобы зацикливаться на реестре.

Вам также необходимо проверить другие очевидные причины исключений, например, у пользователя нет прав на открытие целевого файла, это может быть связано с ограничениями, установленными для папки или самого файла. Возможно, файл заблокирован, потому что он все еще открыт в другом процессе. Существует множество причин, по которым ваш Process.Start может завершиться неудачей.

Перехватите исключение, и если причина не в приложении, связанном с файлом, предложите им эту опцию. Если пользователь решит использовать Блокнот, попробуйте открыть файл в Блокноте, но при этом не пропустите исключения. Блокнот - хороший вариант, он не удерживает блокировку файла, но он все еще зависит от ACL для папок / файлов.

4 голосов
/ 07 июня 2012

Если вы установите ProcessStartInfo.ErrorDialog = true, тогда пользователю будет предложено ввести стандартный диалог Windows: см. здесь

2 голосов
/ 14 апреля 2010

Прочитайте реестр, чтобы увидеть, есть ли программа, связанная с расширением файла, прежде чем вы запустите process.start. Загляните в HKEY_CLASSES_ROOT\.csv, чтобы узнать, кто зарегистрирован для обработки этого расширения файла, если оно есть.

...