Ни одно приложение не связано с указанным исключением файла
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 ответа
Если ваше приложение зависит от того, какой Excel установлен для правильной и эффективной работы, тогда сообщите об этом пользователю. Перехватите исключение и откройте уведомление, чтобы сообщить им о проблеме, но затем в этом уведомлении дайте им возможность открыть его в альтернативном редакторе, таком как блокнот.
Все это сводится к хорошему UX - говорите пользователю, но делайте это таким образом, чтобы вы расширяли его возможности, предлагая варианты продолжения, а не просто мешали им и останавливались, когда возникала такая небольшая проблема.
Редактировать: Делайте именно то, что вы делаете - не думайте, что у них есть Excel, у них может быть какой-то другой просмотрщик / редактор, например OpenOffice. Что бы ни было зарегистрировано в CSV, пусть оно делает свое дело. Не пытайтесь самостоятельно проверять файловую ассоциацию, ваше приложение может не иметь (вероятно, не будет) достаточных привилегий, чтобы зацикливаться на реестре.
Вам также необходимо проверить другие очевидные причины исключений, например, у пользователя нет прав на открытие целевого файла, это может быть связано с ограничениями, установленными для папки или самого файла. Возможно, файл заблокирован, потому что он все еще открыт в другом процессе. Существует множество причин, по которым ваш Process.Start может завершиться с ошибкой.
Перехватите исключение, и если причина не в приложении, связанном с файлом, предложите им вариант. Если пользователь решит использовать Блокнот, попробуйте открыть файл в Блокноте, но при этом не пропустите исключения. Блокнот - хороший вариант, он не удерживает блокировку файла, но он все еще зависит от ACL для папок / файлов.
Если вы установите ProcessStartInfo.ErrorDialog = true, то пользователю будет предложено стандартное диалоговое окно Windows: см. Здесь
Прочитайте реестр, чтобы увидеть, есть ли программа, связанная с расширением файла, прежде чем вы выполните process.start. Смотреть в HKEY_CLASSES_ROOT\.csv
чтобы увидеть, кто зарегистрирован для обработки этого расширения файла, если таковое имеется.