2009-11-20 100 views
3

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

+0

也许发布您的清单,以便我们可以查找错误? – 2009-11-20 19:43:27

+0

你是在询问有关.inf文件的问题,你的意思是什么? – 2009-11-23 08:11:27

+0

我注意到一件事,当我右键单击Internet Explorer并单击以管理员身份运行时,每件事情都很好...... – 2009-11-23 10:38:12

回答

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

,那么你就必须把: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中。

希望有帮助