현물 " 내부 "실행 파일은 CLR 어셈블리 여야합니다. 프로세스 간 예외 처리가 가능하지 않다는 것을 나타내는 다른 대답은 정확합니다. 이 접근법은 문제를 해결하는 동안 잘 작동하는 당신에게 행동을 제공하면서 작동합니다.
정상적으로 프로세스를 시작하면 원하는 것을 얻을 수 없습니다.
var process = Process.Start("MyInnerProcess.exe");
당신은 당신에게 프로세스에 대한 육즙 모든 종류의 정보를 제공하고 당신이 일을 표준 출력 스트림에 기록되는 모니터링 할 수있는 프로세스 개체를 다시 얻을 것이다 ...하지만 예외에 대한 실제 액세스 내에서 발생하지 과정.
그러나 새 AppDomain을 처음 실행하여 어셈블리를 시작하면 실행 중에 해당 어셈블리에서 throw 된 모든 예외 (처리되지 않은 상태와 첫 번째 가능성 모두)에 대한 알림을 쉽게받을 수 있습니다. (참고 : 이러한 예외 사항에 대해 수행 할 수있는 방법은 없지만 이러한 상황이 발생하고 있음을 알 수 있습니다.예외가 다른 과정에서 발생 될 때마다
var innerDomain = AppDomain.CreateDomain("InnerDomain");
try
{
//Subscribe to the events you are interested in
innerDomain.UnhandledException += innerDomain_UnhandledException;
innerDomain.FirstChanceException += innerDomain_FirstChanceException;
//Execute your assembly within the app domain
innerDomain.ExecuteAssembly("MyInnerProcess.exe");
}
catch (Exception ex)
{
//Handle exceptions when attempting to launch the process itself.
}
void innerDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
//Do something with the unhandled exceptions
}
void innerDomain_FirstChanceException(object sender, FirstChanceExceptionEventArgs e)
{
//Do something with the first chance exceptions
}
하는 것은 이제, 당신이 그 예외에 대한 액세스를 얻을 것이다 :)
여기에 코드입니다. FirstChanceException 핸들러는 모든 예외에 대해 호출됩니다 (응용 프로그램 내에서 제대로 처리 되더라도). 따라서 구독하지 않을 수도 있습니다. 아마 UnhandledException 이벤트에 관심이있을 것입니다. 또한 처리되지 않은 모든 예외는 FirstChanceException을 발생시키고 (처리되는 경우) 처리되지 않고 계속 거품을 내면 UnhandledException을 발생시킵니다.
트릭은 응용 프로그램 1이 응용 프로그램 2의 오류로 수행하고자하는 작업을 정확하게 알려주는 것입니다. 응용 프로그램 1에서 오류가 발생하지 않았는지 확인 하시겠습니까? 아니면 오류를 기록하고 싶지 않습니까? . –