从C#程序执行批处理文件

时间:2010-09-23 02:21:13

标签: c#

我正在编写批处理文件并通过C#程序执行它。

编写批处理文件:

我将从app.config获取Path,Executable名称和参数,并将它们写入批处理文件。

执行批处理文件:

编写批处理文件后,我将文件名传递给下面的函数,该函数执行批处理文件以启动应用程序。

问题:

我的程序会编写很多批处理文件,这些批处理文件会在每个文件写入后立即执行。我发现,有些时候应用程序没有启动,这意味着批处理文件不会被执行。我甚至没有收到任何错误消息或提示批处理文件执行失败。

预期解决方案:

执行批处理文件时出现任何问题,我应该能够记录它或提示错误。

执行批处理文件的代码:

            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()); 
            }

            Log.Flow_writeToLogFile("Executed .Bat file : " + LatestFileName);
            stream.Close();
            process.Close();
            srinput.Close();
            sroutput.Close();

1 个答案:

答案 0 :(得分:1)

我不确定你的问题在哪里,但我对以下代码没有任何问题:

using (FileStream file = new FileStream("xyz.cmd", FileMode.Create)) {
    using (StreamWriter sw = new StreamWriter(file)) {
        sw.Write("@echo ====================\n");
        sw.Close();
    }
}

Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.FileName = "xyz.cmd";
//p.StartInfo.RedirectStandardOutput = true;
p.Start();
//String s = p.StandardOutput.ReadLine();
//while (s != null) {
//    MessageBox.Show(s);
//    s = p.StandardOutput.ReadLine();
//}
p.WaitForExit();

显然为了隐藏我的“秘密酱”而被削减了一点,但这个代码目前正在生产中使用而没有问题。

我有一个问题。为什么不直接执行cmd文件而不是运行cmd.exe

我要做的第一件事就是打印出BatchPath + LatestFileName值,看看你是否创建了任何奇怪命名的文件,这些文件会阻止cmd.exe运行它们。