Есть ли способ запустить файл по его ассоциации, направляя его стандартный вывод? - PullRequest
0 голосов
/ 11 октября 2018

Я могу сделать:

using (var process = new Process()) {
    process.StartInfo.FileName = executable;
    process.StartInfo.Arguments = arguments;
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.CreateNoWindow = true;
    //process.StartInfo.Verb = "Open";
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.RedirectStandardError = true;

    ...

}

Но тогда мне нужно искать его ассоциацию (AssocQueryString), анализировать строку ассоциации, которая может быть довольно сложной, например:

"%systemroot%\system32\mspaint.exe" /pt "%1" "%2" "%3" "%4"

Или:

C:\Python27\python.exe "%1" %*

Затем разделить на исполняемую часть, развернуть ее с помощью Environment.ExpandEnvironmentVariables(exeFile), затем заменить все проценты на проанализированные argmunets и т. Д.

В некоторых случаях строка ассоциации может быть очень странной, например (обратите внимание на все слэши - кто знает, работает ли она вообще ...):

\"C:\Program Files\Microsoft\R Client\R_SERVER\\\bin\\x64\\RGui.exe\" \"%1\"

Я могу использовать устаревшие WinExec или ShellExecute, но тогда я не могу перенаправить stdout / stderr.

Вызов CreateProcess работает в основном как C # * new Process():MSDN заявляет, что

... Обратите внимание, что эта функция не выполняет поиск пути для каждого приложения, указанного в разделе реестра путей приложений.

Так что я обречен на этовсе работы самостоятельно?нет более простого решения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...