簡而言之,我正在爲模擬器MAME寫一個前端,作爲WPF和C#中的一項研究。Process.Start和Process.StartInfo不能正確地傳遞參數
GUI設置好了,它正在讀取cfg,除了實際啓動MAME之外,一切都很好。
從命令行(Windows 7)中,我可以鍵入以下內容並讓模擬器正常啓動。
c:\MAME\Emulator\mame.exe mslug.zip
該模擬器沒有完全按照設計啓動問題。不過,我嘗試了以下所有內容。
Process Mame = new Process(emulatorPath);
Mame.StartInfo.Arguments = romSelected;
Mame.Start();
我試圖上述與兩個變量,並把Mame.StartInfo.Arguments =「mslug.zip」
ProcessStartInfo Mame = new ProcessStartInfo(emulatorPath);
Mame.Arguments = romSelected;
Process.Start(Mame);
我想這也與可變,並把二者「mslug.zip」在它的地方。
最後我試了下面。
Process.Start(@"c:\Mame\emulator\mame.exe", "mslug.zip");
它的行爲與以前的嘗試相同。
如果我不嘗試傳遞參數,程序啓動正常,只是告訴我沒有ROM。上述任何一種傳遞參數的方法都會產生一個快速的命令提示符blip,顯示它在rom的zip文件爲空時顯示的相同信息。
從我讀過的關於Process.Start之類的東西,我上面輸入的東西應該等同於打開命令行並輸入我開始這篇文章的命令。但如果是這種情況,那麼這應該沒有問題。我不確定我是否做錯了什麼,或者有更好的方法去解決這個問題。
注意:我還瀏覽了Windows GUI並創建了mame.exe的快捷方式,並編輯了它的屬性以將mslug.zip作爲參數傳遞,並且它也可以工作,所以它不需要通過它來完成就我所知道的命令行而言。
作爲一種幫助,我在應用程序的gui中調試了文本框,這些文本框用我的代碼中使用的變量更新以驗證變量是否正確。
更新:
我想補充說,程序(對於那些不熟悉的)依賴於您嘗試啓動的ROM的文件名。傳遞參數mslug.zip的含義會導致程序轉到它自己的rom目錄(當前是C:\ mame \ emulator \ roms)並搜索mslug.zip。我可以從我的系統中的任何目錄運行該命令並獲得相同的結果。我也可以通過路徑到ROM像
c:\mame\emulator\mame.exe c:\mame\emulator\roms\mslug.zip
這也將工作,無論我在哪裏運行它。我試圖在我的代碼中,通過傳遞路徑作爲變量,並通過它們傳遞給他們,如
string romSelected = @"c:\mame\emulator\roms\mslug.zip";
兩者都以相同的方式失敗。
什麼**工作目錄**?在命令行中,你處於'mslug.zip'所在的目錄中,在你的應用程序中你處於它的工作目錄(例如'bin/debug'目錄)。 – 2015-02-05 15:35:05
你有沒有嘗試谷歌搜索有很多關於如何正確執行此操作的示例以及'SO' http://stackoverflow.com/questions/15061854/how-to-pass-multiples-arguments-in- processstartinfo我想知道你是否通過了代碼並評估了所有參數和變量等。 – MethodMan 2015-02-05 15:35:44
@MethodMan:你指的問題是關於多個參數。這裏只有一個。來自OP的代碼是可以的。 – 2015-02-05 15:37:37