gpt4 book ai didi

c# - 如何使用 C# 从其他进程在 Mingw 上运行命令?

转载 作者:行者123 更新时间:2023-11-30 16:16:27 24 4
gpt4 key购买 nike

我正在尝试使用以下代码从其他进程对 Mingw 执行命令:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @"PATH-TO-MINGW\mingwenv.cmd";
startInfo.UseShellExecute = false;
startInfo.RedirectStandardInput = true;

using (Process exeProcess = Process.Start(startInfo))
{
StreamWriter str = exeProcess.StandardInput;
str.WriteLine("ls");

exeProcess.WaitForExit();
}

但是这段代码只是让 Mingw 吃午餐,并没有输入命令。
我是否遗漏了什么或无法做到?
谢谢
更新
基于Jason Huntleys answer ,我的解决方案看起来像这样(我正在使用 OMNeT++ 模拟器,所以目录基于它)

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = @"PATH_TO_SIMULATOR\omnetpp-4.3\msys\bin\sh.exe";
startInfo.UseShellExecute = false;
startInfo.RedirectStandardInput = true;
using (Process exeProcess = Process.Start(startInfo))
{
using (StreamWriter str = exeProcess.StandardInput)
{
str.WriteLine("cd PATH_TO_SIMULATOR/omnetpp-4.3");
str.Flush();

str.WriteLine("ls");
str.Flush();
}

exeProcess.WaitForExit();
}

最佳答案

我怀疑 c# 正在 CMD 提示符下启动您的 mingw 命令。您需要在 bash shell 中生成您的进程。尝试用“bash -l -c 'ls'”或“bash -c 'ls'”包装你的命令。确保 bash 在您的 PATH 中,并确保引用命令参数(如果有)。当我在 python 中从 popen 生成 bash 命令时,我不得不使用这种方法。我知道 diff 语言,但可能相关。

我想代码看起来与此类似。我还没有在 C# 中测试过:

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "bash.exe";
startInfo.Arguments = "-l -c 'ls -l /your/msys/path'";
# Or other examples with windows path:
# startInfo.Arguments = "-l -c 'ls -l /c/your/path'";
# startInfo.Arguments = "-l -c 'ls -l C:/your/path'";
# startInfo.Arguments = "-l -c 'ls -l C:\\your\\path'";
process.StartInfo = startInfo;
process.Start();

关于c# - 如何使用 C# 从其他进程在 Mingw 上运行命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18298108/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com