之前写一个功能:程序产生一个bat 文件,然后执行它。
出现的问题是:有时能成功,也经常执行不成功,但对产生的 bat 文件手动执行时却没有任何问题,次次都能成功。
虽然是个小问题,但却耗费了我和同事很多时间去检查,最终终于解决!
错误的方法:先打开 Cmd.exe ,然后使用命令行方式执行对应的 bat 文件。
proc.StartInfo.FileName = "Cmd.exe";
...
string dosLine = System.IO.Directory.GetCurrentDirectory().ToString() + "//CopyFile.bat";
proc.StandardInput.WriteLine(dosLine);
proc.StandardInput.WriteLine("exit");
while (!proc.HasExited)
{
ShowExeMessage("文件正在拷贝.....", false);
proc.WaitForExit(3000);
}
正确的方法:直接指定 bat 文件,然后执行。
Process proc = null;
proc = new Process();
string batFile = System.IO.Directory.GetCurrentDirectory().ToString() + "//CopyFile.bat";
proc.StartInfo.FileName = batFile; //"Cmd.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.CreateNoWindow = true;
proc.Start();