首页 > 解决方案 > 有没有办法在指导其标准输出时通过其关联运行文件?

问题描述

我可以:

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

我可以使用过时的WinExecor ShellExecute,但是我无法重定向 stdout/stderr。

调用CreateProcess基本上像 C# 一样工作new Process():MSDN 指出

...请注意,此函数不会搜索 App Paths 注册表项指定的每个应用程序路径。

所以我注定要一个人完成所有的工作吗?没有更简单的解决方案?

标签: c#windows

解决方案


推荐阅读