2011-10-14 49 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,应返回的完整路径