小编C. *_*ite的帖子

注册没有管理员权限/ regasm的.Net COM DLL

最近,我在C#中编写了一个类库,用于Office应用程序,包括约70人使用的关键Access应用程序.对于具有管理员权限的用户,注册DLL很简单,但让DLL在其他计算机上运行是有问题的.

注册DLL以使用管理员权限

  • 在Visual Studio中构建DLL.确保在项目的" 应用程序"选项卡上选择了这些选项:
    • 输出类型:类库
    • 装配信息:使装配COM可见:已检查
  • 使用提升的命令提示符注册程序集:
    • RegAsm YourDll.dll /tlb /codebase
  • YourDll.tlb在VBA中添加引用:工具 - >引用
  • 验证您是否可以创建对象的实例

怎么了?

Regasm在这里做了几件事.首先,它创建了一个类型库(YourDLL.tlb),它提供有关DLL中的类的信息.其次,它将有关库的信息存储在注册表中,以便系统"知道"当您要求将类实例化为对象时的含义.

要查看Regasm添加的注册表项,可以使用以下/regfile参数运行它:

Regasm YourDLL.dll /codebase /regfile

(该/regfile选项对/tlb参数无效.)

如果该/codebase选项告诉Regasm包含有关YourDLL.dll磁盘位置的信息,这对于创建对象很重要.

如果您YourDLL.reg在文本编辑器中打开,您将看到Regasm添加到注册表的条目:条目HKEY_Classes_Root(实际上只是重定向到HKLM\Software\Classes).不幸的是,您需要管理员权限才能修改HKLM,因此这对我们的其他用户无效.

还有一些其他线程(例如,注册没有管理员权限的COM,注册COM DLL供VBA使用,注册DLL(ActiveX)用于非管理员用户,无法注册.NET COM DLL,COM Interop没有regasm)讨论问题,但他们的解决方案是复杂的(例如需要注册表重定向)或不完整(假设你已经知道至少一半的答案)或不适用于混合64/32位环境(例如Win64,Office32).

那么如何在没有管理权限的情况下注册在Visual Studio中创建的COM DLL,以便在当前用户的VBA 32和64位环境中使用?

.net registry dll vba regasm

17
推荐指数
2
解决办法
7298
查看次数

标签 统计

.net ×1

dll ×1

regasm ×1

registry ×1

vba ×1