Открыть файл с соответствующим приложением
Я хочу обратиться за помощью к открытию файла из приложения c # с соответствующим приложением. Я попробовал это:
ProcessStartInfo pi = new ProcessStartInfo(file); pi.Arguments = Path.GetFileName(file); pi.UseShellExecute = true; pi.WorkingDirectory = Path.GetDirectoryName(file); pi.FileName = file; pi.Verb = "OPEN"; Process.Start(pi);
или это:
Process.Start(file);
где строковый file
в обоих примерах представляет полный путь к файлу, который пытается открыть. Теперь все работает хорошо, кроме изображений (jpg) с помощью приложения ACDSee . Ассоциации Irfanview хорошо работают, документы MS Office тоже. После попытки открыть jpg-образ, связанный с acdsee, он просто запускает acdsee в области уведомлений и не открывает файл.
- C # - WCF - межпроцессное взаимодействие
- Как выполнить команду и получить вывод команды в C ++ с помощью POSIX?
- Delphi - получить, какие файлы открываются приложением
- как скомпилировать и запустить java-программу в другой Java-программе?
- получить имя процесса из идентификатора процесса (win32)
Я обнаружил, что в реестре CLASSES_ROOT для изображений * .jpg в качестве связанного приложения есть значение ACDSee.JPG, и под этим ключом находится в shell-> Open-> Command путь:
"C:\Program Files\ACD Systems\ACDSee\ACDSee.exe" /dde
и я считаю, что эта странная /dde
причина, почему я не могу открыть файл. Я понял, что в том же ключе ключевого ключа shell-> Open есть некоторая DDEExec
ключа DDEExec
со значением [open("%1")]
Для просмотра Irfan или другого зарегистрированного приложения нет ddeexec, просто обычная команда вроде
"C:\Program Files (x86)\IrfanView\i_view32.exe" "%1"
который можно запустить из командной строки после замены файла% 1 для имени файла , но я не смог запустить команду из записи acdsee в командной строке 🙁
Поэтому мой вопрос: как я могу настроить объект ProcessStartInfo
чтобы гарантировать, что он будет запускать все файлы, как это было бы в проводнике, с помощью doubleclick, стандартов и этих DDEExec
? Есть ли что-то другое, как DDEExec
о котором я должен знать? спасибо и извините за мой EN
- Почему использование ЦП в Linux превышает 100%?
- Как получить PID процесса, который я только начал в java-программе?
- Как узнать, какие процессы обращаются к жесткому диску в системе на основе GNU / Linux?
- получение PID процесса, начатого Process.start ()
- Как я могу убить процессы диспетчера задач с помощью кода VBA?
- Перенаправление с помощью Runtime.getRuntime (). Exec () не работает
- Есть ли один JVM для Java-приложения?
- Как определить завершенный процесс Windows, если у меня все еще есть его PID?
Просто пиши
System.Diagnostics.Process.Start(@"file path");
пример
System.Diagnostics.Process.Start(@"C:\foo.jpg"); System.Diagnostics.Process.Start(@"C:\foo.doc"); System.Diagnostics.Process.Start(@"C:\foo.dxf"); ...
И shell будет запускать связанную программу, считывая ее из реестра, как это делает обычный двойной щелчок.
Это старая нить, но на всякий случай кто-то сталкивается с ней, как я. pi.FileName необходимо установить на имя файла (и, возможно, полный путь к файлу) исполняемого файла, который вы хотите использовать, чтобы открыть файл. Следующий код работает для меня, чтобы открыть видеофайл с VLC.
var path = files[currentIndex].fileName; var pi = new ProcessStartInfo(path) { Arguments = Path.GetFileName(path), UseShellExecute = true, WorkingDirectory = Path.GetDirectoryName(path), FileName = "C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe", Verb = "OPEN" }; Process.Start(pi)
Ответ Тиграна работает, но будет использовать приложение Windows по умолчанию, чтобы открыть файл, поэтому использование ProcessStartInfo может быть полезно, если вы хотите открыть файл с приложением, которое не является стандартным.