如何在c#中向cmd发送命令
本文关键字:命令 cmd 中向 | 更新日期: 2023-09-27 18:07:59
我正在用c#编写程序,我需要打开cmd.exe,发送我的命令并得到它的答案。我四处搜索,找到了一些诊断的答案。进程正在使用
现在我有两个问题:
- 当我得到进程的输出时,输出不显示在cmd控制台本身。
- 我需要在系统上调用g95编译器。当我从cmd手动调用它时,它被调用并且做得很好,但是当我以编程方式调用它时,我有这个错误:"g95不被识别为内部或外部…"
另一方面,我只发现如何通过参数和process.standardInput.writeline()
将命令发送到cmd.exe。还有更方便的方法吗?我需要在打开cmd.exe时发送命令。
我正在发送我的一部分代码,可能会有帮助:
System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe");
//myProcess.StartInfo.Arguments = "/c g95";
myProcess.StartInfo.UseShellExecute = true;
myProcess.StartInfo.RedirectStandardInput = true;
myProcess.StartInfo.RedirectStandardOutput = true;
myProcess.StartInfo.RedirectStandardError = true;
myProcess.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(myProcess_OutputDataReceived);
myProcess.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(myProcess_ErrorDataReceived);
myProcess.Start();
myProcess.BeginOutputReadLine();
myProcess.BeginErrorReadLine();
myProcess.StandardInput.WriteLine("g95 c:''1_2.f -o c:''1_2.exe");
您可以直接指定g95
,并将所需的命令行参数传递给它。您不需要先执行cmd
。由于未加载用户配置文件中的设置,可能无法识别该命令。尝试将StartInfo
中的LoadUserProfile
属性设置为true。
myProcess.StartInfo.LoadUserProfile = true;
这也应该正确设置path
变量。你的代码看起来像这样:
Process myProcess = new Process();
myProcess.StartInfo = new ProcessStartInfo("g95");
myProcess.StartInfo.Arguments = "c:''1_2.f -o c:''1_2.exe"
myProcess.StartInfo.UseShellExecute = true;
myProcess.StartInfo.LoadUserProfile = true;
myProcess.StartInfo.RedirectStandardInput = true;
myProcess.StartInfo.RedirectStandardOutput = true;
myProcess.StartInfo.RedirectStandardError = true;
myProcess.OutputDataReceived += myProcess_OutputDataReceived;
myProcess.ErrorDataReceived += myProcess_ErrorDataReceived;
myProcess.Start();
myProcess.BeginOutputReadLine();
myProcess.BeginErrorReadLine();
出现错误
"g95不被识别为内部或外部…"
,因为您没有在path环境变量中添加g95.exe的路径。如果您打开命令提示符并键入g95,您将得到类似的结果。这里是G95 Windows常见问题解答页面的链接,该页面对此进行了解释。