gpt4 book ai didi

com - 为什么我不能注册我的 COM DLL?

转载 作者:行者123 更新时间:2023-12-04 06:59:23 27 4
gpt4 key购买 nike

我的应用程序需要注册两个 COM DLL。如果用户有必要的访问权限,它会自动完成,否则可以使用 regsvr32 完成。 .

现在在一些工作站上会发生以下情况:

  • 开始cmd.exe作为管理员
  • 注册第一个DLL:成功
  • 注册第二个 DLL:失败(0x80004005,访问被拒绝)

  • 第一次给我报这个错误,我就自动回复:“当然不行,你需要Administrator权限。”不用说,当我试图自己注册 DLL 时,我感到很尴尬......

    这可能是什么原因:一个 DLL 可以注册,另一个不能。

    一些背景资料:
  • 两个 DLL 都是用 Delphi 2005 创建的。
  • 两个 DLL 都有非常简单的接口(interface),并且只有很少的类。
  • 失败的机器总是 Vista 或 Windows 7。

  • 通常我会启动 Process Monitor,但我现在无法访问其中一个工作站,所以我必须收集尽可能多的信息,直到我能够掌握其中一个。

    更新 :我远程访问了其中一个故障工作站。神秘的事情发生了:
  • 无法启动进程监视器 (!) 几秒钟后,Windows 显示“内存不足”错误。
  • 切换到不同的用户使得注册 DLL 成为可能。 (!)

  • 换句话说:
  • UserA 身份登录, 开始 cmd.exe作为管理员,regsvr32.exe : 失败
  • UserB 身份登录, 开始 cmd.exe作为管理员,regsvr32.exe : 成功

  • 什么会引入这种行为?!

    最佳答案

    要尝试检查的几件事:

  • 在两个 dll 都将成功注册的机器上运行进程资源管理器,并快速比较两个 DLL 接触的 reg 键和文件位置。可能有一些差异可以解释这种行为
  • 它总是失败的同一个dll吗?如果您颠倒注册顺序会发生什么?第一个可能会影响第二个(例如,通过在 reg 键上设置 ACL)
  • 收集一些关于这是 32 位还是 64 位问题的统计数据可能会很有趣。 64 位 Vista 和 Win7 上的 HKCU 和 HKLM 行为有某些细节,可能会影响注册。
  • 询问遇到此问题的用户,如果他们在以管理员身份注册之前尝试注册为普通用户。如果是这种情况,HKLM 虚拟化可能会玩坏把戏。

  • 更新

    根据您的评论,看起来作为普通用户的失败注册尝试使机器处于困惑状态。在 HKCU\Software\Classes (HKCR 的每用户映射)或 HKCR\VirtualStore\MACHINE\SOFTWARE (虚拟化 HKLM)。您需要准确确定在注册尝试失败时注册表中剩下的内容。

    我会在干净的机器上运行进程资源管理器并尝试非提升注册来拍摄快照。

    另外,尝试让机器处于这种状态,然后运行非提升注销。在理想情况下,这应该“修复”机器。如果可行,您可以在进行正确修复时为您的用户提供快速解决方法。

    关于com - 为什么我不能注册我的 COM DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2116423/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com