У меня очень сложная проблема, которая возникает только для пользователей без прав администратора.
Я запускаю скрипт S, который находится на рабочем столе и вызывает функцию в DLL C ++. Тогда поток выглядит следующим образом:
- My C ++ dll создает процесс Delphi, отправляя ему GUID в качестве параметра.
- При инициализации мой процесс Delphi регистрирует класс C с заданным GUID, используя фабрику COM-объектов.
- Моя C ++ dll пытается вызвать CoCreateInstanceEx с тем же GUID.
==> Сбой операции с HResult 0x80029c4a Ошибка загрузки библиотеки типов / DLL.
Нет исключений со стороны Delphi - регистрация, кажется, работает гладко.
Я использовал монитор процесса и с удивлением обнаружил, что при вызове CoCreateInstanceEx происходит попытка прочитать исполняемый файл Delphi из неправильного расположения. Вместо того, чтобы пытаться получить доступ к тому месту, где зарегистрирован exe-файл, существует попытка получить доступ к exe-файлу с рабочего стола, где находится сценарий S, и, конечно, exe-файл отсутствует.
Это происходит только с пользователем без прав администратора. Кроме того, если администратор когда-либо запускал этот скрипт ранее, он отлично работает для не-администратора.
Теперь я пытаюсь выяснить, почему это происходит. Вот почему я пытаюсь понять поток CoCreateInstanceEx. Я не нашел никакой полезной информации в Интернете. Так как же CoCreateInstanceEx пытается загрузить типы? Где это пытается посмотреть? Ты хоть представляешь, как может сложиться описанная ситуация?
Любая информация или идеи будут очень благодарны!