最近,我在C#中编写了一个类库,用于Office应用程序,包括约70人使用的关键Access应用程序.对于具有管理员权限的用户,注册DLL很简单,但让DLL在其他计算机上运行是有问题的.
RegAsm YourDll.dll /tlb /codebaseYourDll.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位环境中使用?