有一种方法可以在定向其stdout时通过其关联来运行文件?

时间:2018-10-11 19:58:47

标签: c# windows

我可以做到:

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\"

我可以使用过时的WinExecShellExecute,但是我不能重定向stdout / stderr。

调用CreateProcess基本上就像C#的new Process():MSDN指出

  

...请注意,此功能不会搜索“应用程序路径”注册表项指定的每个应用程序路径。

那么我注定要独自完成所有工作吗?没有更简单的解决方案?

0 个答案:

没有答案