如何通过c#应用程序中的CMD确保批处理文件正确执行?

时间:2010-08-13 08:42:15

标签: c#

我有一个c#应用程序,它们写入批处理文件并执行它。要启动的应用程序和应用程序的路径将以批处理文件的形式写入并执行。哪个工作正常。

如何确保通过我的批处理文件在命令提示符下运行成功启动应用程序?

执行批处理文件后cmd是否返回任何值?或任何其他想法,请...

我正在使用的代码:

        public void Execute()
    { 
            string LatestFileName = GetLastWrittenBatchFile();
            if (System.IO.File.Exists(BatchPath + LatestFileName))
            {
                System.Diagnostics.ProcessStartInfo procinfo = new System.Diagnostics.ProcessStartInfo("cmd.exe");
                procinfo.UseShellExecute = false;
                procinfo.RedirectStandardError = true;
                procinfo.RedirectStandardInput = true;
                procinfo.RedirectStandardOutput = true;

                System.Diagnostics.Process process = System.Diagnostics.Process.Start(procinfo);

                System.IO.StreamReader stream = System.IO.File.OpenText(BatchPath + LatestFileName);
                System.IO.StreamReader sroutput = process.StandardOutput;
                System.IO.StreamWriter srinput = process.StandardInput;

                while (stream.Peek() != -1)
                {
                    srinput.WriteLine(stream.ReadLine());
                }

                stream.Close();
                process.Close();
                srinput.Close();
                sroutput.Close();
            }
            else
            {
                ExceptionHandler.writeToLogFile("File not found");
            } 
    }

3 个答案:

答案 0 :(得分:0)

我不熟悉批处理文件,但如果有可能从中返回退出代码,您可以使用System.Diagnostics.Process.ExitCode

进行检查

答案 1 :(得分:0)

Process process = Process.Start(new ProcessStartInfo{
    FileName = "cmd.exe",
    Arguments = "/C myfile.bat",
    UseShellExecute = false,
});
process.WaitForExit();
Console.WriteLine("returned {0}", process.ExitCode);

答案 2 :(得分:0)

System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(filename);
                    psi.RedirectStandardOutput = true;
                    psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                    psi.UseShellExecute = false;
                    System.Diagnostics.Process listFiles;
                    listFiles = System.Diagnostics.Process.Start(psi);
                    System.IO.StreamReader myOutput = listFiles.StandardOutput;
                    listFiles.WaitForExit(2000);
                    if (listFiles.HasExited)
                    {
                        string output = myOutput.ReadToEnd();
                        MessageBox.Show(output);
                    }