我制作了一个 ActiveX 控件,并制作了其 .cab 文件,以便使用 Internet Explorer 在客户端计算机上自动安装。它在 Windows XP 上运行良好,但在 Windows Vista 和 Windows 7 上,其安装被 UAC(用户帐户控制)阻止,当我禁用它时,一切正常...我已经使用开发环境证书签署了我的 .cab 文件...解决这个问题的方法是什么..我不想告诉用户禁用它他们的UAC模块...
这很可能是因为您尝试在 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
另一个快速说明,您可以使用进程监视器来查看注册控件时使用的键;摆弄过滤器需要一些练习,但一旦掌握了窍门,效果就不错了。如果您正在写入 HKCR (HKEY_CLASSES_ROOT),默认情况下会将内容放入 HKEY_LOCAL_MACHINE/Software/Classes 中。您想要做的(为了避免没有管理员权限而出现问题)是将密钥放在 HKEY_CURRENT_USER/Software/Classes 中。
希望有帮助
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)