2015-10-06 42 views
-1

我有一個通過Process運行的控制檯應用程序。在這個控制檯應用程序中,我還通過一個流程運行另一個exe從另一個進程啓動進程會導致未處理的異常

當我在bin文件夾中雙擊Run.exe時,應用程序工作正常。但是當我通過代碼運行它時,它會拋出未處理的異常。

ProcessStartInfo info = new ProcessStartInfo(); 
info.FileName = @"C:\_Core\Server\bin\Debug\ServerManager.exe"; 
Process process = new Process(); 
Process.Start(info); 

控制檯應用程序內部守則,運行另一個exe文件:啓動控制檯應用程序

enter image description here

代碼

ProcessStartInfo info = new ProcessStartInfo(); 
info.FileName = @"C:\_Core\Client\bin\Debug\Run.exe"; 
Process process = new Process(); 
Process.Start(info); 
+0

顯示的代碼。它看起來像'Form_Load'處理程序讀取一個不存在的文件,因爲您的啓動目錄不同。 – CodeCaster

+0

@CodeCaster我只是運行'exe'。我想知道它與雙擊不同。 – jmc

+0

我解釋了區別,它是啓動目錄。 – CodeCaster

回答

2

這可能是一個錯誤的值的啓動目錄。試試這個:

info.FileName = @"C:\_Core\Client\bin\Debug\Run.exe"; 
info.WorkingDirectory = Path.GetDirectoryName(info.Filename); 
Process.Start(info); 

但是,最好的辦法肯定是從調用的應用程序將其固定到您的Form.Load,例如

// On the main form 
private void Load() 
{ 
// Before doing anything, fix your current directory : 
    string exeDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
    Directory.SetCurrentDirectory(exeDir); 

    .......... 
} 
+0

如果'exe' im正在運行來自不同的目錄,這有什麼關係嗎?目前我正在編寫'exe'路徑 – jmc

+0

是的,它確實很重要。如果您希望它從其他目錄運行,請檢查我所做的編輯。 – Ksv3n

+1

你不應該從調用者解決這個問題。獲取被調用程序中的可執行文件的位置,並從那裏使用相對路徑。 – CodeCaster

相關問題