我们的应用程序最近从 .net 3.5 切换到 .net 4。出现的一个问题是 GetWindowThreadProcessId 不再有效。
Microsoft 有一个可用的修补程序,但必须在每台客户计算机上安装它会很痛苦,并且可能会导致其他问题。我更喜欢解决方法。
http://support.microsoft.com/kb/982638
正如微软所描述的,问题是:
“在 .NET Framework 远程应用程序中,您有一个 MarshalByRefObject 对象。该对象包含一个返回 IntPtr 类型的方法。该对象跨进程边界传递。当对象被序列化时,将引发 SerializationException 异常,并且您收到以下错误消息: Invalid type code in stream 'Invalid' 出现此问题的原因是,当 CLR 序列化 IntPtr 时,远程处理代码将 IntPtr 类型视为原始类型。但是,远程处理代码稍后将 IntPtr 类型视为无效类型二进制格式化程序序列化 IntPtr。”
那么,有替代方案吗?我有没有其他方法可以从窗口句柄中获取进程 ID?或者我可以以不同的方式编组我的 IntPtr 以避免这个错误?