2012-11-10 2 views
0

Windows Server 2003 Enterprise Edition 서비스 팩 2 테스트 컴퓨터에만 설치 한 경우에만 간헐적 인 StackOverFlow 예외를 throw하는 독립 실행 형 콘솔 응용 프로그램을 빌드했습니다. 코드는 너무 복잡하여 게시 할 수 없지만 다음은 세부 정보입니다.
소스 코드는 C# VS 2010입니다.
소스 코드에는 재귀 호출이 없지만 작업자 스레드를 사용합니다.
StackOverflowException이 발생할 때 실행중인 프로세스가 종료되지 않습니다.
예외가 발생하면 동일한 위치에서 일관되게 발생합니다.
예외가 발생하면 코드가 COM 경계를 넘어 초기화하려고 할 때 거의 항상 발생합니다. CAsset asset = new CAsset() 여기서 CAsset은 C++로 작성된 COM 개체입니다.
Windows Server 2003 Enterprise Edition 서비스 팩 2의 StackOverflowException

  System.Type assetType = System.Type.GetTypeFromProgID("GDMTCommon.HansenAsset"); 
      object activated = System.Activator.CreateInstance(assetType); 
      asset = activated as CHansenAsset; 

문제가 해결되지 System.Activator.CreateInstance의 호출로 직접 초기화를 교체 하지만 코드에서 다른 위치로 실패의 지점을 이동한다. 또한 위의 코드는 오류를 발생시키지 않지만 자산 변수는 직접 형변환 후에 null입니다. 이 인스턴스는 COM 개체를 초기화 할 때 오류가 발생하지 않는 한 번 발생합니다.
가장 어려운 일은 테스트 컴퓨터에서 소스 데이터가 서로 다른 두 세트에서이 도구를 실행할 수 있다는 것입니다. 소스 데이터 집합 중 하나는 코드가 오류없이 완료 될 때까지 실행됩니다. 다른 코드는 실패합니다.
두 개의 다른 Windows 7 테스트 컴퓨터에 동일한 도구를 설치했는데 두 시스템에서 오류를 재현 할 수 없습니다. 또한 Windows Server 2003 Standard Edition 서비스 팩 2 테스트 컴퓨터에이 도구를 설치 했으므로 해당 컴퓨터에서 오류를 재현 할 수 없습니다.
많은 검색 결과가 Windows Server 2003에 설치되었을 때 한 OS에서 작동하는 코드가 StackOverflowExceptions를 시작하기 시작한 몇 가지 다른 질문을 제기했지만 결정적인 해결책은 없었습니다.
http://support.microsoft.com/kb/915750
그러나 기사에 따르면, 문제는 서비스 팩 2에 고정되어 내가 서비스 팩 2는 테스트 시스템에 설치되어 있는지 확인했습니다 :
나는 내 문제를 설명하는 것,이 기술 자료 문서를 발견했다.
도움을 주시면 대단히 감사하겠습니다. Windows Update를 실행하고 시스템에 사용 가능한 모든 업데이트를 적용
감사합니다,
제이

+0

다른 누구도이 문제에 부딪혔을 때 클라이언트가 오늘 아침 Windows Update를 실행하고 적용 가능한 모든 패치를 적용하면 문제가 해결되었다고 알려주었습니다. –

답변

0

는 스택 오버 플로우 문제를 해결. 아직도 무엇이 그들을 처음에 일으키는 지 확신 할 수 없습니다. 이 클라이언트 컴퓨터에 액세스 할 수 없기 때문에 업데이트가 적용될 때까지 기다려야했습니다.

관련 문제