Я создаю приложение (сторонний проект, который может заручиться поддержкой сообщества stackoverflow более чем один раз), для которого потребуется открывать файлы различных типов (т.е. открывать документы Word в Word, а не исходно в моем приложении).
Я играл с некоторым кодом для поиска приложения по умолчанию для типа файла в реестре и передачи его в Process.Start (). Кажется, есть два вопроса с этим подходом:
1) В некоторых случаях имя приложения указывается в кавычках, а в других нет.
2) Process.Start () требует, чтобы путь к приложению и его аргументы передавались отдельно (например, Process.Start ("notepad.exe", @ "C: \ myfile.txt"); вместо Process.Start (@ "notepad) .exe C: \ myfile.txt ");).
Это означает, что когда я получаю путь из реестра, мне нужно разделить его (после определения, нужно ли разделять на кавычки или пробелы), чтобы определить, какая часть является путем приложения, а какие - аргументами, а затем передать их отдельно. для Process.Start ().
Альтернативой может быть просто передать имя файла, как в Process.Start (@ "C: \ myfile.txt"), но я думаю, что это работает, только если приложение находится в переменной среды Path.
Какой путь лучше? В случае с реестром, есть ли общее решение для анализа аргументов?
Спасибо за любую помощь!
Обновление:
Я думаю, что короткий ответ «Нет».
Похоже, я действительно шел по пути излишнего, и передача только имени файла будет работать всякий раз, когда в реестре есть соответствующее значение. То есть Все, что я нахожу в реестре, Process.Start () уже знает, как это сделать.
Я обнаружил, что, когда я пытаюсь сделать это с «новым» типом файла, я получаю Win32Exception, в котором говорится: «Нет приложения, связанного с указанным файлом для этой операции». Фредрик Мёрк упоминает в комментарии, что это не происходит с ним в Vista. Какой правильный способ справиться с этим?