2011-01-24 90 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 ,「>」