我正在使用C#编写程序,我需要打开cmd.exe,发送命令并获得答案。 我四处搜索并找到了一些使用诊断程序的答案。
现在,我有两个问题:
另一方面,我只找到了如何通过参数和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");
答案 0 :(得分:2)
您可以直接指定g95
并将所需的命令行参数传递给它。您不需要先执行cmd
。可能无法识别该命令,因为未加载用户配置文件中的设置。尝试将LoadUserProfile
中的属性StartInfo
设置为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();
答案 1 :(得分:0)
您收到错误
" g95不被视为内部或外部......"
因为您还没有在PATH环境变量中添加g95.exe的路径。如果打开命令提示符并键入g95,您将得到类似的结果。这是一个link到G95 Windows常见问题页面,可以解释它。