я хочу обратиться за помощью с открытием файла из 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 в области уведомлений и не открывает файл.
Я обнаружил, что в реестре CLASSES_ROOT для изображений *.jpg, существует значение ACDSee.JPG как связанное приложение, и под этим ключом существует в оболочке-> Открыто-> Команда путь:
"C:\Program Files\ACD Systems\ACDSee\ACDSee.exe" /dde
и я вещь, что это странное /dde
причина, почему я не могу открыть файл. Я понял, что в той же reg ключевой оболочке-> Открытый существуют некоторые DDEExec
ключевая запись со значением [open("%1")]
Для представления Irfan или другого проверенного приложения там не ddeexec, просто нормальная команда как
"C:\Program Files (x86)\IrfanView\i_view32.exe" "%1"
это может быть выполнено из командной строки после подкачивания %1 для имени файла, но я не мог выполнить команду от acdsee записи в командной строке :(
Таким образом, мой вопрос, как я могу настроить ProcessStartInfo
объект гарантировать, что это выполнит все файлы, как это было бы в проводнике двойным щелчком, стандартах и этом DDEExec
? Есть ли что-то другое как DDEExec
то, что я shoul знать? спасибо и жаль о моем EN
В .Net Core (с v2.2) это должно быть:
new Process
{
StartInfo = new ProcessStartInfo(@"file path")
{
UseShellExecute = true
}
}.Start();
Связанная проблема GitHub может быть найдена здесь