2012-11-18 71 views
1

出於某種原因,我似乎無法啓動並使用c#運行.cmd文件。一條線的CMD文件的一個例子是:運行.cmd文件時出現問題#

"C:\Windows\system32\ffmpeg64.exe" -v verbose -y -i "S:\TEMP\A.ts" -c:v copy -c:a copy -ss 00:00:00.000 -t 2 "S:\TEMP\A_SHORT.ts" 

我已經嘗試了幾種不同的方法來從C#中啓動該文件,如(其中curDirectory是例如「S:\ TEMP」)

Process p = Process.Start(curDirectory + "\\ffmpeg.cmd"); 

我也試過

string path = curDirectory + "\\ffmpeg.cmd"; 
Process p = Process.Start("cmd.exe", @"/c " + path); //I've also tried /k 

但發生的事情是在命令提示符將顯示出來,並說:「C:\ WINDOWS \ SYSTEM32 \ ffmpeg64.exe」無法識別......」即使該文件在那裏,我在做什麼錯?

+0

如果您從命令提示符處手動運行.cmd文件,它會在沒有錯誤的情況下完成?你有沒有試過建立一個'ProcessStartInfo'對象? – lukiffer

+0

我應該提到,它運行得非常好,當我雙擊它,當我從cmd運行它。我已經嘗試了ProcessStartInfo對象,如'ProcessStartInfo p = new ProcessStartInfo(path)',但它也失敗了 – Aeon2058

+0

您是否以管理員身份運行C#? – Nahum

回答

0

如果您的系統正在運行Windows 6.1內核或更高版本,則System32實際上包含基於您正在運行的應用程序(取決於它是32位還是64位應用程序)的其他目錄。

我認爲ffmpeg64.exe是一個64位應用程序,當您手動執行.cmd文件時,它應該默認爲64位命令提示符 - 還要確保您的應用程序的目標是「x64」或「任何CPU 」。或者,您可以在WoW64目錄中放置一個32位版本的ffmpeg。

此外,我知道你已經在評論中聲明,你不想讀取.cmd文件並對其進行修改,但是可以使用Environment.SystemDirectory而不是硬編碼路徑來編寫ProcessStartInfo

作爲最後一個選項,您可以將ffmpeg exe文件放置在靜態的地方(如您在註釋中所述,在c:\作品中),或者僅在應用程序的工作目錄中。