Mic*_*zyk 11 com vba com-interop regasm excel-vba
此处描述了在没有管理员权限的情况下调用regasm的解决方法:
我正在尝试创建一个COM库,我的用户可以在没有管理员权限的情况下从Excel VBA部署和使用它.我喜欢regasm解决方法,因为似乎人们在使用Excel VBA中的免注册COM对象方面没有太大成功.我也希望早期绑定,以便我的用户可以从语法完成中受益.
但是,上述问题中接受的答案并未描述将汇编dll放在用户计算机上的位置.管理员权限是在GAC中安装程序集所必需的,所以我想知道在哪里可以放置dll文件.我假设应用程序的目录正在搜索任何引用的dll,但我不能将我的dll放在Excel的目录中而没有管理员权限.是否可以使用Excel客户端的变通方法?有没有其他方法从VBA调用COM对象而不需要管理员权限来首先部署它们?
在没有COM互操作管理权限的情况下调用regasm
我认为应该可以使用RegistrationServices.RegisterAssembly
和RegOverridePredefKey
API一起在HKCU
Uive 下以UAC友好的方式实现自动注册.我在这里发布了一个更详细的答案.
是的,现在有两个问题,您不能将其放在应该放置的位置,例如GAC或ac:\ program files子目录。由于这些位置也需要UAC提升。您可能还忘记了使用/ codebase选项运行Regasm.exe,这是告诉CLR在何处查找文件所必需的。
用户需要具有足够的特权才能将DLL复制到他具有写访问权的目录中。通常,这只是c:\ users \ username中的目录,例如appdata子目录。您必须解决的麻烦是,由于每个用户的用户名都不相同,因此需要为每个用户调整.reg文件。因此,CodeBase
需要为每个用户更改.reg文件中的值。适度地说,这伸缩性很差。
您找到的答案不是一个很好的答案。唯一的解决办法真正的作品是写自己的注册功能。在HKCU而不是HKLM中写入注册表项的注册表项。使用[ComRegisterFunction]属性。您从.reg文件中知道您需要编写哪些键。然后,您使用Assembly.GetExecutingAssembly()。Location找出要为CodeBase注册表值写什么。不要忘记[ComUnregisterFunction]。
请记住,至少在精神上,您正在尝试绕过LAN管理员对这些用户施加的限制。他们确实非常关心知道哪种代码在他们支持的机器上运行。这很可能会给您带来麻烦,至少可以与该人交谈。
归档时间: |
|
查看次数: |
4231 次 |
最近记录: |