首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当UseShellExecute为true时如何读取控制台输出?

当UseShellExecute为true时如何读取控制台输出?
EN

Stack Overflow用户
提问于 2020-06-06 02:24:01
回答 2查看 206关注 0票数 1

如果为Process.StartInfo.UseShellExecute = false,则获取标准输出为easy。然而,在我的例子中,UseShellExecute必须保持为真。原因是我启动的.exe恰好在PATH中,但不在当前工作目录中。

下面是我不能使用UseShellExecute = false的原因

代码语言:javascript
运行
复制
var psi = new ProcessStartInfo("cleancss", "--help")
{
    WorkingDirectory = @"C:\SomeRandomDirectory",
    UseShellExecute = false,
    RedirectStandardOutput = true,
    RedirectStandardInput = true
};

Process cssClean = Process.Start(psi);  //blows up with The system cannot find the file specified

它正确地爆炸了,因为UseShellExecute = false需要一个绝对路径。我没有绝对的路径。

如果我在上面的示例中设置了UseShellExecute = true,它会告诉我重定向标准输出在这种情况下不起作用。

当UseShellExecute为true时,如何获得标准输出?

EN

回答 2

Stack Overflow用户

发布于 2020-06-06 02:48:44

如果不提供绝对路径,Windows将:

  1. 在工作目录中查找.bat、.exe,然后是点前有"cleancss“的.com文件(我不确定这3个文件的确切顺序;现在它可能包括像.VBS和其他可执行文件这样的内容)

然后,

  1. 遍历path变量条目,对每个条目执行相同的检查

  1. 它找到的第一件事就是执行

  1. 如果失败,并且遍历了整个路径列表,则只有这样它才会承认失败

(请注意,Windows/DOS控制台有一个0:“检查这是否是我应该对自己作出反应的保留关键字”)。几十年来,程序不断地从关键字转换到专用流程,然后再转换回来)。

理想情况下,您应该在应用程序设置中设置此路径-以任何方式保存您正在使用的应用程序设置。然后,您可以有选择地为用户提供一个UI来设置该路径。让Windows找出你指的是的哪个文件是如此的DOS时代。我们没有像注册表这样的选项。或“查找文件”对话框。它不应该在2020年使用。

如果你不得不坚持这样做(或者你需要找到一个缺省值),实现Windows搜索模式将是微不足道的。在计划的工作目录中尝试所有3个扩展。检索path变量并对其进行迭代。

最后,Windows中的每个程序调用都使用绝对路径。只是有时Windows必须为你找出绝对路径,因为你是一个愚蠢的普通用户,在远离系统目录时输入"EDIT“。

票数 0
EN

Stack Overflow用户

发布于 2020-06-06 03:09:40

您可以使用/c参数启动您自己的CMD.exe,后跟要执行的内容。Cmd不需要路径,但如果启动,它会从调用者那里继承环境,并且确实有一个完全填充的路径。

代码语言:javascript
运行
复制
var psi = new ProcessStartInfo("cmd", "/c cleancss --help")
{
    WorkingDirectory = @"C:\SomeRandomDirectory",
    UseShellExecute = false,
    RedirectStandardOutput = true,
    RedirectStandardInput = true
};

Process cssClean = Process.Start(psi);  

cmd.exe的/c参数说明如下:

执行由字符串指定的命令,然后终止

在我的测试中,以这种方式启动的任何输出都会通过管道-d到达父进程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62221916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档