我正试图在C#中执行一个批处理文件,但是我没有得到任何成功。
我在互联网上找到了很多这样做的例子,但它对我来说并不起作用。
public void ExecuteCommand(string command)
{
int ExitCode;
ProcessStartInfo ProcessInfo;
Process Process;
ProcessInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = false;
Process = Process.Start(ProcessInfo);
Process.WaitForExit();
ExitCode = Process.ExitCode;
Process.Close();
MessageBox.Show("ExitCode: " + ExitCode.ToString(), "ExecuteCommand");
}
命令字符串包含批处理文件的名称(存储在system32
中)以及它应该操作的一些文件。(示例:txtmanipulator file1.txt file2.txt file3.txt
)。当我手动执行批处理文件时,它工作正常。
在执行代码时,它会给我一个**ExitCode: 1** (Catch all for general errors)
我做错了什么?
发布于 2012-04-12 20:26:38
System.Diagnostics.Process.Start("c:\\batchfilename.bat");
这行简单的代码将执行批处理文件。
发布于 2011-04-02 08:33:50
在steinar的帮助下,以下是对我有用的:
public void ExecuteCommand(string command)
{
int ExitCode;
ProcessStartInfo ProcessInfo;
Process process;
ProcessInfo = new ProcessStartInfo(Application.StartupPath + "\\txtmanipulator\\txtmanipulator.bat", command);
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = false;
ProcessInfo.WorkingDirectory = Application.StartupPath + "\\txtmanipulator";
// *** Redirect the output ***
ProcessInfo.RedirectStandardError = true;
ProcessInfo.RedirectStandardOutput = true;
process = Process.Start(ProcessInfo);
process.WaitForExit();
// *** Read the streams ***
string output = process.StandardOutput.ReadToEnd();
string error = process.StandardError.ReadToEnd();
ExitCode = process.ExitCode;
MessageBox.Show("output>>" + (String.IsNullOrEmpty(output) ? "(none)" : output));
MessageBox.Show("error>>" + (String.IsNullOrEmpty(error) ? "(none)" : error));
MessageBox.Show("ExitCode: " + ExitCode.ToString(), "ExecuteCommand");
process.Close();
}
发布于 2011-04-02 06:13:44
它工作得很好。我是这样测试的:
String command = @"C:\Doit.bat";
ProcessInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
// ProcessInfo.CreateNoWindow = true;
我注释掉了关闭窗户,这样我就可以看到它在运行。
https://stackoverflow.com/questions/5519328
复制相似问题