2016-08-05 4 views
0

.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 회 실행되고 각 실행 사이에 두 응용 프로그램이 모두 닫히기 때문에주의해야합니다.

원격 환경을 제어 할 수 있으므로 원격 디버깅이 옵션이지만 이전에는 설정하지 않았습니다.

답변

1

일반적으로 COM interops에서 문제를 일으키는 원인은 IIS가 현재 ISAPI.dll을 사용하는 개체에 문제가 있다는 것입니다. 현재 버전의 IIS에서 작동하도록 어셈블리에서 사용 권한이 구성되어 있는지 확인하십시오.

사용중인 프레임 워크 버전, 사용중인 IIS 버전 및 사용중인 응용 프로그램 풀 프레임 워크의 경우. HTH

+0

는 콘솔 응용 프로그램은 .NET 프레임 워크 4.5.2 – Adam

+0

당신의 IIS 대상 프레임 워크 란 무엇인가를 실행? – Programmer

+0

iis를 사용하지 않고 대상 프레임 워크는 4.5.2 – Adam