在Windows Vista和7上安装.cab文件(ActiveX)问题

时间:2009-11-20 10:33:39

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

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

1 个答案:

答案 0 :(得分:1)

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

如果您使用的是VS2008和ATL,可以通过以下方式执行此操作:

AtlSetPerUserRegistration(perUser);

在旧版本中,您需要更多的黑客攻击。这是我们用来解决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

然后你只需要在你的DllRegisterServer和DllUnregisterServer入口点放置FbPerUserRegistration perUser(true);

或者(我不使用.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。

希望有所帮助