Как Com CocreateInstanceex пытается загружать типы (для пользователя без админ Win)?

StackOverflow https://stackoverflow.com/questions/4595190

  •  15-10-2019
  •  | 
  •  

Вопрос

У меня очень сложная проблема, которая возникает только для пользователя Windows, не являющегося админи.

Я запускаю сценарий, который находится на рабочем столе и вызывает функцию в DLL C ++. Тогда поток выглядит следующим образом:

  1. Мой C ++ DLL создает процесс Delphi, отправляя его в качестве параметра.
  2. При инициализации мой процесс Delphi регистрирует класс C с данным GUID с использованием объекта COM.
  3. My C ++ DLL пытается назвать CocreateInstanceex с той же GUID. ==> Операция не выполняется с HRESULT 0x80029C4A Ошибка Загрузки Библиотека/DLL.

Не исключает, что со стороны Delphi нет исключения - регистрация, кажется, работает гладко.

Я использовал монитор процесса и, к своему удивлению, видел, что, когда называется CocreateInstanceex, есть попытка прочитать мой файл Delphi Exe из неправильного места. Вместо того, чтобы пытаться получить доступ к тому, где регистрируется EXE, существует попытка получить доступ к EXE с рабочего стола, где находится сценарий, и, конечно, EXE там нет.

Это происходит только для пользователя, не являющегося админ. Кроме того, если пользователь администратора когда-либо запускал этот скрипт раньше, он работает совершенно хорошо для не админи.

Теперь я пытаюсь выяснить, почему это происходит. Вот почему я стараюсь понять поток cocreateinstanceex. Я не нашел никакой полезной информации в Интернете. Так как же CocreateInstanceex пытается загружать типы? Где он пытается посмотреть? Вы хоть представляете, как может произойти описанная ситуация?

Любая информация или идея будут очень оценены!

Это было полезно?

Решение

Оказывается, что EXE процесса Delphi была зарегистрирована по относительному пути вместо полного пути.

Я все еще не уверен, почему для пользователя администратора это работало правильно ... поэтому, если у кого -то есть идея, мне будет интересно услышать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top