私たちのアプリケーションは最近、.net 3.5 から .net 4 に切り替えました。発生した問題の 1 つは、GetWindowThreadProcessId が機能しなくなったことです。
マイクロソフトはホットフィックスを利用できますが、それをすべての顧客のマシンにインストールするのは面倒であり、他の問題を引き起こす可能性があります。私は回避策を好むでしょう。
http://support.microsoft.com/kb/982638
問題は、マイクロソフトが説明したように、次のとおりです。
「.NET Framework リモート アプリケーションでは、MarshalByRefObject オブジェクトがあります。このオブジェクトには、IntPtr 型を返すメソッドが含まれています。オブジェクトはプロセス境界を越えて渡されます。オブジェクトがシリアル化されると、SerializationException 例外がスローされ、次のエラー メッセージ: Invalid type code in stream 'Invalid' この問題は、CLR が IntPtr をシリアル化するときに、リモート コードが IntPtr 型をプリミティブ型として扱うために発生します。バイナリ フォーマッタは IntPtr をシリアル化します。」
それで、代替案はありますか?ウィンドウ ハンドルからプロセス ID を取得する別の方法はありますか? または、このバグを回避するために IntPtr を別の方法でマーシャリングできますか?