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