我有一个我想从C#窗体运行的批处理文件。批处理文件非常基础,并接受一个参数
cd C:\Program Files (x86)\Advent\ApxClient
AdvScriptRunner REPRUN -mrgainloss -p%1 -vf -t\\myserver\apx$\pdf\myReport
如果我在命令提示符下调用它,这可以正常工作
C:\ Program Files(x86)\ Locations \ blah> realizegainloss 123456
运行得很好,我得到预期的结果(它输出一个报告运行在第三方软件上)。但是我不能为我的生活用c#来解决这个问题。我有以下内容。
private void button1_Click(object sender, EventArgs e)
{
ExecuteCommand(getCommand());
}
public string getCommand()
{
return "realizedgainloss.bat";
}
static void ExecuteCommand(string command)
{
int exitCode;
ProcessStartInfo processInfo;
Process process;
processInfo = new ProcessStartInfo(command);
//processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
// *** Redirect the output ***
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;
processInfo.Arguments = String.Format("{0} {1}", command, "123456");
process = Process.Start(processInfo);
process.WaitForExit();
// *** Read the streams ***
// Warning: This approach can lead to deadlocks, see Edit #2
string output = process.StandardOutput.ReadToEnd();
string error = process.StandardError.ReadToEnd();
exitCode = process.ExitCode;
Console.WriteLine("output>>" + (String.IsNullOrEmpty(output) ? "(none)" : output));
Console.WriteLine("error>>" + (String.IsNullOrEmpty(error) ? "(none)" : error));
Console.WriteLine("ExitCode: " + exitCode.ToString(), "ExecuteCommand");
process.Close();
}
值得注意的是,如果我不提供参数,并将bat文件更改为静态,用12345代替它的%1,则它从C#运行,所以有一些不正确的关于如何我将参数放入bat文件......
有什么想法吗?
答案 0 :(得分:1)
您有批处理文件名作为要运行的命令和脚本的第一个参数。我发现使用cmd.exe作为运行命令并使用/ C参数调用它更容易,更可靠。这样做你应该确保你的工作目录也正确设置。
processInfo = new ProcessStartInfo("cmd.exe");
processInfo.Arguments = String.Format("/C {0} {1}", command, "123456");
processInfo.WorkingDirectory = yourWorkingDirectory;