세 개의 Windows 컴퓨터 (데스크톱 창과 두 대의 WinCE 컴퓨터)에서 실행될 수있는 .NET Compact Framework 응용 프로그램이 있고 WinCE 장치에서 Application.Exit()을 호출하더라도 프로세스가 종료 될 수 없습니다. .NET 외에도 하나의 COM 구성 요소 (UI 스레드의 모든 것을 수행함)를 사용합니다. 나가기 후에 디버거에 침입하면 Visual Studio는 단 하나의 스레드와 완전히 빈 호출 스택을 보여줍니다.왜 내 프로그램이 종료되지 않습니까?
가능한 원인은 무엇입니까?
업데이트 : 내 프로세스가 데스크톱에서는 종료되지만 WinCE 시스템에서는 종료되지 않습니다. 나는 다음과 같은 코드로 종료 프로세스를 강제하려했지만 작동하지 않습니다
또한 내가하려고하면 ExitProcess()와 GetCurrentProcess() 다음과 같은 API를, 그러나 할 수있다 해야하는[DllImport("coredll.dll")]
static extern int TerminateProcess(IntPtr hProcess, uint uExitCode);
static public void ExitProcess()
{
if (Platform.IsWindowsCE)
TerminateProcess(new IntPtr(-1), 0);
Application.Exit();
}
그것들을 호출하면 EntryPointNotFoundException이 발생합니다. 따라서 GetCurrentProcess의 데스크톱 버전에 대한 설명서에서 -1을 반환하기 때문에 TerminateProcess (-1, 0)를 사용하고 있습니다.
[DllImport("coredll.dll")]
static extern int ExitProcess(IntPtr hProcess);
[DllImport("coredll.dll")]
static extern IntPtr GetCurrentProcess();
처리되지 않은 예외를 던져도 처리되지 않습니다.
업데이트 2 : 문제를 일으키는 가장 간단한 프로그램은 COM 개체를 만들기 만합니다. COM 구성 요소가 내가 조사 할 .NET 프레임 워크와 기괴한 상호 작용이 있어야합니다 ++
static void Main()
{
new FastNavLib.MapControl();
}
C++이 문제가 발생하지 않는 COM 구성 요소를 사용하는 프로그램, 그래서 내 C.
내 C++ 응용 프로그램이 종료되지 않는 경우가 종종 있습니다.하지만 그럴 필요는 없습니다. – Qwertie
어떻게하면 크래시 덤프를 만들고 디버깅합니까, 왜 VS 디버거를 사용하는 것보다 낫겠습니까? – Qwertie
http://support.microsoft.com/kb/241215 – psychotik