我想知道如果我能趕上另一個過程,我開始使用的Process.Start(...)捕捉另一個進程未處理的異常
我知道我可以使用這個趕上standered錯誤拋出的未處理的異常link,但我想要的是捕獲通常由.NET環境的即時調試器捕獲的錯誤,該窗口包含以下字詞: 「應用程序中發生未處理的異常。如果繼續,則應用程序將忽略此錯誤並嘗試繼續,如果您單擊退出,應用程序將立即關閉....「 然後是異常消息和」繼續「和」退出「按鈕。
在此先感謝。
我想知道如果我能趕上另一個過程,我開始使用的Process.Start(...)捕捉另一個進程未處理的異常
我知道我可以使用這個趕上standered錯誤拋出的未處理的異常link,但我想要的是捕獲通常由.NET環境的即時調試器捕獲的錯誤,該窗口包含以下字詞: 「應用程序中發生未處理的異常。如果繼續,則應用程序將忽略此錯誤並嘗試繼續,如果您單擊退出,應用程序將立即關閉....「 然後是異常消息和」繼續「和」退出「按鈕。
在此先感謝。
如果你打電話給.NET可執行組件可以加載並(在您自己的風險:d)調用程序類的主要方法爲try_catch聲明:
Assembly assembly = Assembly.LoadFrom("ErroneusApp.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;
}
}
但要意識到您正在引入的安全風險。
我認爲這是我目前正在尋找的確切答案 非常感謝先生。 P.S.在我的實現中,我想我會將新加載的程序集添加到新的AppDomain中。 – 2010-02-18 16:12:48
我得問這裏,有沒有辦法找出exe是不是.net可執行程序集? 如果應用程序在.net 2.0下,而另一個是3.5,那該怎麼辦? – 2010-02-18 16:14:22
我試圖使用GetConstructor()方法調用構造函數。但它不適合我。您可以請分享一個想法或示例代碼來實現這一目標嗎? – 2016-05-31 04:53:11
否。如果受控程序使用standardError和返回碼,則可能會通知您發生了錯誤或異常,但無法以任何方式進行捕獲。
+1因爲沒有試圖對衝任何東西。 – 2010-02-17 08:27:18
您可以嘗試類似的東西,以避免調試器的問題出現,你不會得到例外,但只有退出代碼:他們提供另一種解決方法爲
class Program
{
static void Main(string[] args)
{
try
{
ProcessStartInfo info =
new ProcessStartInfo("ErroneusApp.exe");
info.ErrorDialog = false;
info.RedirectStandardError = true;
info.RedirectStandardOutput = true;
info.CreateNoWindow = true;
info.UseShellExecute = false;
System.Diagnostics.Process p =
System.Diagnostics.Process.Start(info);
p.EnableRaisingEvents = true;
p.Exited += p_Exited;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadLine();
}
static void p_Exited(object sender, EventArgs e)
{
Process p = sender as Process;
if (p != null)
{
Console.WriteLine("Exited with code:{0} ", p.ExitCode);
}
else
Console.WriteLine("exited");
}
}
在this question,但改變一些註冊表值。
我不認爲這是我所尋找的 10x幫助無論如何 – 2010-02-17 10:36:29
而不是整個偷偷摸摸地試着找到Main方法,就像在jmservera的答案中一樣,你可以簡單地在一個新的域中執行程序集。請參閱this msdn article
在解決之前的目標調用問題時,最後我以下面的方法結束。
某些應用程序會在當前目錄中存在依賴關係,因爲依賴關係不匹配,導致在其他目錄中執行任何應用程序時會導致異常。
Assembly assembly = Assembly.LoadFrom(file);
Directory.SetCurrentDirectory(Path.GetDirectoryName(file));
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);
}
Directory.SetCurrentDirectory(Path.GetDirectoryName(文件)); //通過引用當前目錄的目標調用異常將被解析。
我想知道如果我能以某種方式挖掘其他正在運行的進程的代碼並向AppDomain.UnhandledException事件添加事件處理程序。 感謝您的幫助球員 – 2010-02-17 10:39:27
我認爲你是對的,沒有問題有確切的定製解決方案。它值得一試。 – 2010-02-18 16:15:10