2011-10-14 35 views
0

我有一個啓動.exe的進程會拋出異常。有沒有辦法讓流程捕捉異常?進程捕獲異常

我已經試過這至今:

Assembly assembly = Assembly.LoadFrom("ConsoleApplication1.exe"); 
Type[] types = assembly.GetTypes(); 
foreach (Type t in types) 
{ 
    MethodInfo method = t.GetMethod("Main", 
     BindingFlags.Static | BindingFlags.NonPublic); 
    if (method != null) 
    { 
     try 
     { 
      method.Invoke(null, null); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.Message); 
     } 
     break; 
    } 
} 

,但我得到一個異常的第一行,說是.exe文件無法找到。 我也試過這樣:

Process myProcess = new Process(); 

myProcess.StartInfo.UseShellExecute = false; 
myProcess.StartInfo.FileName = "C:\\Users\\John\\Documents\\Visual Studio 2010\\Projects\\ConsoleApplication1\\ConsoleApplication1\\bin\\Debug\\ConsoleApplication1.EXE"; 
myProcess.StartInfo.CreateNoWindow = true; 
myProcess.Start(); 

但是當我調試,沒有任何異常,而ConsoleApplication1.exe中沒有顯示出來。

+1

我實際上沒有看到第一個代碼塊(通過反射調用一個方法)和第二個(啓動一個進程)之間的連接,但爲什麼不使用這個完整路徑(來自第二個例子)第一個例子,看看會發生什麼? – Groo

+0

如果您被告知文件cannon被找到,那麼您的目錄路徑是錯誤的。設置工作目錄。 –

回答

0

你可以只使用您的代碼的第一行try/catch語句,然後處理漁獲物。

try { Assembly assembly = Assembly.LoadFrom("ConsoleApplication1.exe"); } 
catch { throw; } 

否則你總是可以試試這個:

myProcess.StartInfo.FileName = @"C:\Where\Your\File\Is.exe"; 

希望這有助於。

1

試試這個:

System.IO.Path.GetFullPath("ConsoleApplication1.exe")

link,應返回的完整路徑