2011-01-24 93 views
2

我认为C#进程类在接受<>字符作为参数传递时遇到问题。C#进程不接受我的参数

当我调用以下代码时,可执行文件返回一个错误,指示我传递了多个参数。

proc = new Process(); 
proc.StartInfo.FileName = this.spumux.SpumuxExe; 
proc.StartInfo.Arguments = "menu.xml <menu.mpg> newmenu.mpg"; 
proc.StartInfo.UseShellExecute = false; 
proc.StartInfo.CreateNoWindow = true; 
proc.StartInfo.RedirectStandardOutput = true; 
proc.StartInfo.RedirectStandardError = true; 
proc.EnableRaisingEvents = true; 
proc.OutputDataReceived += new DataReceivedEventHandler(OutputHandler); 
proc.ErrorDataReceived += new DataReceivedEventHandler(OutputHandler); 
proc.Exited += new EventHandler(ProcExited); 
proc.Start(); 
proc.BeginOutputReadLine(); 
proc.BeginErrorReadLine(); 

此代码通常与我尝试过的其他所有可执行文件一起工作,没有任何问题。所以它必须做些什么与<,>字符

任何想法?

+0

当然没问题。 – 2011-01-24 17:06:57

回答

5

在这种情况下,尖括号意味着重定向输入/输出,这是由cmd.exe完成,而不是由启动的进程。

你有两个选择:

  • 调用CMD.EXE,而不是你的可执行文件,并提供可执行文件的参数(和你的exe文件的参数也一样)
  • 重定向标准输入/输出自己。
+0

好的,但为什么?我正在调用ffmpeg.exe,它可以与我提供的参数一起使用。为什么我现在要调用cmd.exe? – 2011-01-24 17:03:32

0

尝试"menu.xml \< menu.mpg \> newmenu.mpg"。你正在添加5个参数。要做到一个 - 做:"\"menu.xml \< menu.mpg \> newmenu.mpg\""

0

我不确定你在这里试图完成什么。你是否试图用'<'和'>'重定向IO,还是试图将这些作为参数传递?

proc.StartInfo.FileName = @"C:\Windows\System32\Cmd.exe"; 
proc.StartInfo.Arguments = "/C \"" + this.spumux.SpumuxExe + " menu.xml <menu.mpg> newmenu.mpg\""; 
+0

我只是想传递参数。此代码可以与其他可执行文件以及其他类型的参数一起使用。它似乎并不接受“<", ">” – 2011-01-24 17:05:24

0

我只能够通过创建一个批处理文件,我在那里传递参数没有解决这个问题“<”:

您可以通过使用/ C选项运行的CMD.exe重定向IO ,“>”