COM CoCreateInstanceEx如何尝试加载类型(对于非管理员用户)?

COM CoCreateInstanceEx如何尝试加载类型(对于非管理员用户)?,com,createinstance,non-admin,Com,Createinstance,Non Admin,我有一个非常复杂的问题,只发生在非管理员windows用户 我运行一个脚本,它驻留在桌面上,并调用C++中的函数。然后,流程如下所示: < LI>我的C++ DLL创建一个Delphi进程,将它作为参数发送GUID。 在初始化时,我的Delphi进程使用COM对象工厂用给定的GUID注册一个C类 我的C++ DLL尝试用相同的GUID调用COCCRATESTANISEX。 ==>操作失败,HResult 0x80029c4a加载类型库/DLL时出错 Delphi端没有抛出任何异常-注册似乎工作顺

我有一个非常复杂的问题,只发生在非管理员windows用户

<>我运行一个脚本,它驻留在桌面上,并调用C++中的函数。然后,流程如下所示:

< LI>我的C++ DLL创建一个Delphi进程,将它作为参数发送GUID。
  • 在初始化时,我的Delphi进程使用COM对象工厂用给定的GUID注册一个C类
  • 我的C++ DLL尝试用相同的GUID调用COCCRATESTANISEX。 ==>操作失败,HResult 0x80029c4a加载类型库/DLL时出错
  • Delphi端没有抛出任何异常-注册似乎工作顺利

    我使用process monitor,发现调用CoCreateInstanceEx时,有人试图从错误的位置读取我的Delphi exe文件,这让我感到惊讶。不是尝试访问exe注册的位置,而是尝试从桌面(脚本S所在的位置)访问exe,当然exe不在那里

    这只发生在非管理员用户身上。此外,如果管理员用户以前运行过此脚本,那么它对于非管理员用户来说运行得非常好

    我现在想弄清楚为什么会发生这种情况。这就是为什么我试图理解CoCreateInstanceEx的流程。我在网上没有找到任何有用的信息。那么CoCreateInstanceEx如何尝试加载类型呢?它试图寻找什么?你知道这种情况是如何发生的吗


    任何信息或想法都将不胜感激

    结果表明,Delphi进程的exe是用相对路径而不是完整路径注册的

    我仍然不知道为什么管理员用户它工作正常。。。所以如果有人有什么想法,我很想听听