Наше приложение недавно перешло с .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 по-другому, чтобы избежать этой ошибки?