【发布时间】:2011-06-17 14:26:18
【问题描述】:
我们的应用程序最近从 .net 3.5 切换到 .net 4。出现的一个问题是 GetWindowThreadProcessId 不再有效。
Microsoft 有一个可用的修补程序,但必须在每台客户计算机上安装它会很痛苦,并且可能会导致其他问题。我更喜欢解决方法。
http://support.microsoft.com/kb/982638
问题是,如 microsoft 所述:
“在 .NET Framework 远程应用程序中,您有一个 MarshalByRefObject 对象。该对象包含一个返回 IntPtr 类型的方法。该对象跨进程边界传递。当对象被序列化时,会引发 SerializationException 异常,并且您收到以下错误消息: 流“无效”中的类型代码无效 出现此问题的原因是,当 CLR 序列化 IntPtr 时,远程处理代码将 IntPtr 类型视为基本类型。但是,当二进制格式化程序序列化 IntPtr 时,远程处理代码稍后会将 IntPtr 类型视为无效类型。"
那么,还有其他选择吗?我有什么不同的方法可以从窗口句柄中获取进程 ID?或者我可以对我的 IntPtr 进行不同的编组以避免这个错误吗?
【问题讨论】:
标签: winapi c#-4.0 .net-4.0 interprocess intptr