我有一个非常复杂的问题,仅适用于非Admin Windows用户。

我运行一个位于桌面上的脚本S,并在C ++ DLL中调用功能。然后流如下:

  1. 我的C ++ DLL创建了Delphi过程,将其发送为参数。
  2. 在初始化时,我的Delphi进程使用COM对象工厂使用给定的GUID注册C类C。
  3. 我的C ++ DLL试图使用相同的GUID调用CocreateinStanceEx。 ==>使用HRESULT 0x80029C4A错误加载类型库/DLL失败。

Delphi一侧没有例外 - 注册似乎可以顺利进行。

我使用了流程监视器,并感到惊讶的是,当cocreateinstanceex被称为时,试图从错误的位置读取我的Delphi EXE文件。与其尝试访问EXE注册的位置,不如试图从脚本所在的桌面上访问EXE,当然不在EXE。

这仅发生在非Admin用户。另外,如果管理员用户以前运行此脚本,则对非Admin的运行良好。

我现在试图弄清楚为什么会发生这种情况。这就是为什么我试图理解cocreateinstanceex的流程。我没有在网络上找到任何有用的信息。那么CocreateinStanceEx如何尝试加载类型?它在哪里看?您是否知道如何发生描述的情况?

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

有帮助吗?

解决方案

事实证明,Delphi过程的EXE是用相对路径而不是完整路径注册的。

我仍然不确定为什么对管理员用户工作正常工作...因此,如果有人有一个想法,我将有兴趣听到。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top