我需要运行批处理文件,等待它完成并结束进程。 bat 文件启动另一个进程,将数据集中打印到控制台,我需要将所有输出重定向到某个方法而不显示任何窗口。
我尝试了所有选项,但是每次bat文件进程在内部进程完成之前获得退出状态时,如果我使用waitforexit(),那么当内部程序的输出完成时,进程会阻塞并冻结,请帮助 Bat 文件是正确的,它以前可以与 c++ 一起使用。
这是我尝试过的解决方案之一:
class Program
{
static string batchFilePath = "example.bat";
static void Main()
{
ProcessStartInfo pInfo = new ProcessStartInfo(batchFilePath);
pInfo.CreateNoWindow = true;
pInfo.UseShellExecute = false;
pInfo.RedirectStandardOutput = true;
pInfo.RedirectStandardError = true;
using (Process process = new Process())
{
process.StartInfo = pInfo;
process.OutputDataReceived += (sender, e) =>
{
if (e.Data != null)
{
Console.WriteLine("Output: " + e.Data);
}
};
process.ErrorDataReceived += (sender, e) =>
{
if (e.Data != null)
{
Console.WriteLine("Error: " + e.Data);
}
};
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
}
}
}
# BATCH FILE
Start "" "C:\Users\Teodor Mihail\AppData\Local\Programs\Opera GX\launcher.exe"
为了运行批处理文件,必须使用 System.Diagnostics 本机 C# 库。批处理文件将由 CMD 打开,并且批处理文件路径将作为参数传递给它。
using System.Diagnostics;
Process p = new Process();
string batch_file_path = "C:\\Users\\Teodor Mihail\\Desktop\\test.bat";
p.StartInfo.FileName = "cmd"; // <-- EXECUTABLE NAME
p.StartInfo.Arguments = "/k \"" + batch_file_path + "\""; // <-- COMMAND TO BE RUN BY CMD '/k', and the content of the command "PATH"
p.StartInfo.CreateNoWindow = true; // <-- CREATE NO WINDOW
p.StartInfo.UseShellExecute = false; // <-- USE THE C# APPLICATION AS THE SHELL THROUGH WHICH THE PROCESS IS EXECUTED, NOT THE OS ITSELF
p.Start(); // <-- START THE APPLICATION
p.WaitForExit(5000); // <-- WAIT FOR THE APPLICATION TO EXIT 5 SECONDS (5000 MILLISECONDS)
在您的情况下,您想要等到批处理脚本完成执行,最好的解决方案是测试并查看最佳时间量是多少。除了将应用程序设置为等待一定时间之外,没有确定的方法可以检测脚本何时完成执行。