CoCreateInstance пытается загрузить 64-битную версию DLL, хотя приложение является 32-битным - PullRequest
1 голос
/ 08 февраля 2010

Мое приложение взаимодействует с диспетчером задач. Код, который обрабатывает это, таким образом, загружает mstask.dll. У меня проблема в том, что мое приложение (32-разрядное) не работает в 64-разрядной Windows 7 с сообщением об ошибке «% 1 не является допустимым приложением win32».

Используя файл карты и некоторую трассировку стека, я определил, что это сообщение об ошибке вызывается, когда CoCreateInstance вызывается с GUID службы планирования задач. Используя Process Monitor из SysInternals, я смог определить, что мое приложение на самом деле пытается загрузить C: \ Windows \ system32 \ mstask.dll вместо C: \ Windows \ SYSWOW64 \ mstask.dll, который является 32-разрядной версией mstask. .dll.

Причина сообщения об ошибке заключается в том, что приложение пытается загрузить C: \ Windows \ system32 \ mstask.dll, который представляет собой 64-разрядную DLL, которая, очевидно, не будет работать из моего 32-разрядного приложения.

Кто-нибудь знает причину, по которой CoCreateInstance некорректно загружал 32-битную версию mstask.dll? Очевидно, что перенаправление SYSWOW64 не работает должным образом.

Странно то, что я создал небольшое тестовое приложение, которое просто пытается инициализировать службу планировщика заданий. В этом тестовом приложении вызов CoCreateInstance выполняется без проблем. Так что что-то в моем реальном приложении должно быть другим, но я понятия не имею, что.

Любой вклад приветствуется!

...