3台のWindowsマシン(デスクトップウィンドウと2台のWinCEマシン)で実行できる.NET Compact Frameworkアプリがあり、WinCEデバイスでは、Application.Exit()を呼び出しても、プロセスが終了時に終了することはありません。.NETに加えて、1つのCOMコンポーネント(UIスレッドですべてを実行)を使用します。終了後にデバッガーに侵入すると、VisualStudioには1つのスレッドと完全に空白の呼び出しスタックのみが表示されます。
何が原因でしょうか?
更新:私のプロセスはデスクトップで終了していますが、WinCEマシンでは終了していません。次のコードでプロセスを強制的に終了しようとしましたが、機能しません。
[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();
}
次のようなExitProcess()およびGetCurrentProcess()APIもあるはずですが、それらを呼び出そうとすると、EntryPointNotFoundExceptionが発生します。したがって、デスクトップバージョンのGetCurrentProcessのドキュメントには、単に-1が返されると記載されているため、TerminateProcess(-1、0)を使用しています。
[DllImport("coredll.dll")]
static extern int ExitProcess(IntPtr hProcess);
[DllImport("coredll.dll")]
static extern IntPtr GetCurrentProcess();
未処理の例外をスローしても、それは行われません。
更新2:問題を引き起こす最も単純なプログラムは、COMオブジェクトを作成するだけです。
static void Main()
{
new FastNavLib.MapControl();
}
COMコンポーネントを使用するC++プログラムはこの動作を示さないため、私のC ++ COMコンポーネントは、調査する.NETFrameworkとの奇妙な相互作用を持っている必要があります。