Наше приложение недавно переключилось с .net 3.5 на .net 4. Одна проблема, которая возникла, заключается в том, что GetWindowThreadProcessId больше не работает.
У Microsoft есть исправление, но было бы неудобно устанавливать его на каждом клиентском компьютере, и это может вызвать другие проблемы. Я бы предпочел работу вокруг.
http://support.microsoft.com/kb/982638
Проблема, как описано в Microsoft:
"В приложении удаленного взаимодействия .NET Framework у вас есть объект MarshalByRefObject. Этот объект содержит метод, который возвращает тип IntPtr. Объект передается через границу процесса. При сериализации объекта возникает исключение SerializationException, и вы получите следующее сообщение об ошибке:
Неверный код типа в потоке 'Неверный'
Эта проблема возникает из-за того, что код удаленного взаимодействия обрабатывает тип IntPtr как примитивный тип, когда CLR сериализует IntPtr. Однако код удаленного взаимодействия позже обрабатывает тип IntPtr как недопустимый тип, когда двоичный форматировщик сериализует IntPtr. "
Итак, есть ли альтернатива? Есть ли другой способ получить идентификатор процесса из дескриптора окна? Или я могу вывести свой IntPtr по-другому, чтобы избежать этой ошибки?