【问题标题】:Issue with .cab file (ActiveX) installation on Windows Vista and 7在 Windows Vista 和 7 上安装 .cab 文件 (ActiveX) 的问题
【发布时间】:2010-12-18 16:24:45
【问题描述】:

我制作了一个 ActiveX 控件,并制作了它的 .cab 文件,以便使用 Internet Explorer 在客户端计算机上自动安装。它在 Windows XP 上运行良好,但在 Windows Vista 和 Windows 7 上,它的安装被 UAC(用户帐户)阻止控制),当我禁用它时,一切正常......我已经用开发环境证书签署了我的.cab文件......解决这个问题的方法是什么......我不想告诉用户禁用他们的 UAC 模块...

【问题讨论】:

  • 也许发布您的清单以便我们查找错误?
  • manifest 是什么意思,你问的是 .inf 文件吗?
  • 我注意到一件事,当我右键单击 Internet Explorer 并单击以管理员身份运行时,一切正常...

标签: internet-explorer windows-vista activex uac cab


【解决方案1】:

这很可能是因为您试图在 HKEY_LOCAL_MACHINE 中注册您的控件,这是 ATL 中的默认设置。如果您将控件更改为在 HKEY_CURRENT_USER 中注册(启用 UAC 且您未提升权限时唯一可访问的注册表部分),您应该没问题。

如果你使用的是 VS2008 和 ATL,你可以调用:

AtlSetPerUserRegistration(perUser);

在旧版本中,您需要更多技巧。这是我们用来解决 FireBreath 问题的一个类,FireBreath 是我帮助维护的跨浏览器插件框架:

http://code.google.com/p/firebreath/source/browse/src/ActiveXPlugin/axutil.cpp http://code.google.com/p/firebreath/source/browse/src/ActiveXPlugin/axutil.h

那么您只需将:FbPerUserRegistration perUser(true); 放入您的 DllRegisterServer 和 DllUnregisterServer 入口点。

或者(我不使用 .cab 安装,所以我没有尝试过),但是 msdn 上有一个文档讨论了修改 .cab 安装以执行此操作的方法,不需要修改你的控制:

http://msdn.microsoft.com/en-us/library/dd433049%28VS.85%29.aspx

另一个快速说明,您可以使用 Process Monitor 查看您在注册控件时使用的键;摆弄过滤器需要一些练习,但是一旦掌握了它,它就不错了。如果您正在写信给 HKCR (HKEY_CLASSES_ROOT),默认情况下会将内容放在 HKEY_LOCAL_MACHINE/Software/Classes 中。您想要做的(避免没有管理员权限的问题)是将密钥放在 HKEY_CURRENT_USER/Software/Classes 中。

希望有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多