.NET 4.5.2 (app1)를 실행하는 C# 콘솔 응용 프로그램은 COM 응용 프로그램 (app2)을 열고 해당 app2의 API로 일부 작업을 수행합니다. 지금까지 모든 작업이 성공적 이었지만 때로는 app1이 app2를 닫으려고 할 때 app2가 영구적으로 중단됩니다.C# COM 응용 프로그램 충돌 디버깅
app2에 대한 프로세스가 작업 관리자로 끝나면 app1은 액세스 거부를보고합니다. 종료 된 프로세스를 더 이상 사용할 수 없거나 app1의 스레드를 차단했기 때문에 스레드가 계속 허용 될 때까지 오류를보고 할 수 없어서 발생 했습니까?
APP2을 종료하는 데 사용되는 코드는
private static void CloseSW(SldWorks swApp, Process sw_proces)
{
// Close with API call
if (Task.Run(() => { swApp.CloseAllDocuments(true); swApp.ExitApp(); }).Wait(TimeSpan.FromSeconds(20)))
return;
// Kill process if API call failed
if (Task.Run(() => { SWHelper.CloseSW(sw_proces); }).Wait(TimeSpan.FromSeconds(20)))
return;
// Unable to close SolidWorks, ignore error and continue
// This will eventually cause SolidWorks to crash and the crash handler will take over
}
이 코드는 완료하는 데 40초보다 훨씬 더 걸릴해서는 안하지만, 어쩌면 COM의 상호 운용성은 예상치 못한 행동을 일으키는?
개발 시스템에서이 오류를 재현 할 수 없습니다. 정확한 실패 지점을 추적하는 가장 좋은 방법은 무엇입니까? CloseSW에서 실패한 것이 아니라 그 전에 어떤 지점에서 실패한 것일 수 있습니다. 각 줄을 로그 파일에 쓰는 것보다 오류를 추적하는 더 좋은 방법이 있습니까?
이 코드는 오류가 발생하기 전에 60-150 회 실행되고 각 실행 사이에 두 응용 프로그램이 모두 닫히기 때문에주의해야합니다.
원격 환경을 제어 할 수 있으므로 원격 디버깅이 옵션이지만 이전에는 설정하지 않았습니다.
이
는 콘솔 응용 프로그램은 .NET 프레임 워크 4.5.2 – Adam
당신의 IIS 대상 프레임 워크 란 무엇인가를 실행? – Programmer
iis를 사용하지 않고 대상 프레임 워크는 4.5.2 – Adam