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

我有一个非常复杂的问题,只发生在非管理员Windows用户身上。 我运行一个脚本S驻留在桌面上并调用C ++ DLL中的函数。然后流程如下: 我的C ++ DLL创建了一个Delphi进程,并将GUID作为参数发送给它。 在初始化时,我的Delphi进程使用COM对象工厂注册具有给定GUID的类C. 我的C ++ DLL尝试使用相同的GUID调用CoCreateInstanceEx。 ==>操作失败,HResult 0x80029c4a加载类型库/ DLL时出错。 德尔福方面也没有例外 - 注册似乎顺利进行。 我使用了进程监视器,并惊讶地看到,当调用CoCreateInstanceEx时,尝试从错误的位置读取我的Delphi exe文件。尝试从脚本S所在的桌面访问exe,而不是尝试访问exe注册的位置,当然exe不在那里。 这仅发生在非管理员用户身上。此外,如果管理员用户之前曾经运行过这个脚本,那么对于非管理员来说,它运行得非常好。 我现在试图弄清楚为什么会这样。这就是我尝试理解CoCreateInstanceEx流程的原因。我没有在网上找到任何有用的信息。那么CoCreateInstanceEx如何尝试加载类型?它试图在哪里看?你知道如何描述这种情况吗? 任何信息或想法将非常感谢!     
已邀请:
事实证明,Delphi进程的exe是以相对路径而不是完整路径注册的。 我仍然不确定为什么管理员用户它正常工作...所以如果有人有想法我会有兴趣听到。     

要回复问题请先登录注册