2012-01-14 47 views
3

所以,我是能夠成功地使用下面的代碼我的項目中運行的各種參數的命令行應用程序:我包含的外部可執行文件的路徑是什麼?

String f = fileName; 
Process process = new System.Diagnostics.Process(); 
process.StartInfo.UseShellExecute = false; 
process.StartInfo.RedirectStandardOutput = true; 
process.StartInfo.FileName = "C:\\projects\\something\\MediaInfo.exe"; 
process.StartInfo.Arguments = " \"--Inform=Video;%Duration%|%Width%|%Height%;\" \"" + f + "\""; 
process.Start(); 
StreamReader output = process.StandardOutput; 
process.WaitForExit(); 
MessageBox.Show(output.ReadToEnd()); 

現在,而不是我爲MediaInfo.exe我會指定的絕對路徑喜歡指定一個相對路徑,以便當我將我的應用程序發送給某人時,他們不需要將它放置在正確的位置。

在Visual Studio中,我選擇我的項目並單擊添加現有項目。我添加了我的文件。然後選擇「始終複製」。我已經爲「構建行動」嘗試了各種項目。我有一種感覺,「無」是正確的選擇。

無論如何,我的目標是讓process.StartInfo.FileName成爲相對路徑。我不知道如何做到這一點。有任何想法嗎?

回答

3

應用程序的根目錄可以通過...

string appRoot = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 

此語句需要System.IO和System.Diagnostics程序,以編譯得到。

您可以附加到這個值由...

string dataPath = Path.Combine(appRoot, "data"); 

應用程序需要在完全信任運行這些工作達到一個子目錄,例如「數據」,在您的應用程序根目錄。 ..

+0

啊,這不是正確的道路。這給了我一些我的應用程序目錄的路徑。我可以看到正在複製到我的調試文件夾或釋放文件夾的文件;所以我知道他們正在複製某處。這條道路雖然不是那一條。關! – Parris 2012-01-20 23:21:22

+0

啊發現了!感謝您指向正確的方向:String appRoot = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory); – Parris 2012-01-20 23:24:22

0

將「C:\ projects \ something \ MediaInfo.exe」更改爲「MediaInfo.exe」,因此您的應用程序將嘗試在同一目錄中找到它。確保使用「MediaInfo.exe」釋放您的應用程序,就這些。

「總是複製」的東西只複製「MediaInfo.exe」輸出目錄,它不會幫助,如果你硬編碼的文件路徑。

相關問題