我需要做的是让一个C# 2005 GUI应用程序在用户请求时调用一个.bat文件和几个VBScript文件,这只是一种临时解决方案,直到放假结束我才能用C#编写所有内容。我可以轻松执行VBScript文件,但无法执行.bat文件。当我在C#应用程序中“点击”执行.bat文件时,会打开一个DOS窗口并迅速关闭,测试.bat文件不会执行 - 在DOS框中返回错误“Windows不认识bat作为内部或外部命令”。如果我只是双击.bat文件或从命令提示符手动运行它,它就可以执行。我还需要.bat文件在没有需要用户交互的情况下静默执行 - 此脚本将11k+文件复制到网络机器上的文件夹中,偶尔Windows会“忘记”目标是文件还是目录,并要求用户告诉它它是什么(这是一个完全不适合在此处讨论的其他问题...不需要多说我对此感到非常恼火)。
到目前为止,在我的C#源代码中,我有:
Process scriptProc = new Process();
if (File.Exists("c:\\scripts\\batchfile1.bat"))
{
scriptProc.StartInfo.FileName = @"cscript";
scriptProc.StartInfo.Arguments = ("cmd.exe", "/C C:\\scripts\\batchfile1.bat"); // Wacky psuedo code //
scriptProc.Start();
scriptProc.WaitForExit(1500000);
scriptProc.Close();
}
if (!File.Exists("c:\\scripts\\batchfile1.bat"))
{
}
我知道这段代码不能工作,但它基本上是我想要做的事情。我想要为.bat文件实现类似于这样的功能。我猜我必须告诉系统使用cmd来运行.bat文件。我不知道如何做到这一点。我查看了这个网站,但那只适用于C# 2003。对我来说没有太大帮助,因为我对C#非常陌生。
编辑:使用Kevin的帖子后,我再次尝试了一下。从那篇文章中得到了相同的解决方案脚本,但针对我的情况进行了修改,因为我不需要重定向:
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = "C:\\scripts\\batchfile1.bat";
proc.StartInfo.RedirectStandardError = false;
proc.StartInfo.RedirectStandardOutput = false;
proc.StartInfo.UseShellExecute = false;
proc.Start();
proc.WaitForExit();