Installation 制作一个COM注册DLL安装程序(对于初学者)?

Installation 制作一个COM注册DLL安装程序(对于初学者)?,installation,dll,com,registry,setup.exe,Installation,Dll,Com,Registry,Setup.exe,我在MS Visual Studio中创建了多个C#DLL,然后通过VBA调用从Excel访问这些DLL。这些在我的机器上工作得很好(显然,VSCOM在编译时会为我注册它们,只要我勾选了正确的框)。我还通过在我的注册表中搜索每个DLL的任何看似相关的键,并将这些项复制到其他机器注册表中,让它们在其他机器上工作。很明显,这很疯狂,所以我想做一个简单的安装程序,这样我就可以在其他机器上轻松地安装COM DLL了 因为我在那里有一个windows窗体应用程序来测试所有DLL,所以我认为为该应用程序创建

我在MS Visual Studio中创建了多个C#DLL,然后通过VBA调用从Excel访问这些DLL。这些在我的机器上工作得很好(显然,VSCOM在编译时会为我注册它们,只要我勾选了正确的框)。我还通过在我的注册表中搜索每个DLL的任何看似相关的键,并将这些项复制到其他机器注册表中,让它们在其他机器上工作。很明显,这很疯狂,所以我想做一个简单的安装程序,这样我就可以在其他机器上轻松地安装COM DLL了

因为我在那里有一个windows窗体应用程序来测试所有DLL,所以我认为为该应用程序创建一个安装程序是最有意义的,其他DLL应该安装,因为它们是依赖项。单击鼠标右键,然后“发布”将显示setup.exe。然后我可以在其他机器上安装这个。但是DLL没有在新机器上进行COM注册,因此尽管测试应用程序可以工作,但我实际上无法从Excel/VBA中使用它们

我需要做什么?(谷歌搜索似乎只找到了一些我无法在旧版本的VS中找到的老东西)

  • 我正在使用VS2019的完整版本
  • 我正在使用基本的右键单击/properties/publish创建setup.exe和相关文件夹
  • 我可以通过在解决方案中添加MSIX安装程序项目获得更多选项?但我以前从来没有这样做过,所以当我尝试学习曲线时,它似乎是一场噩梦,无法编译,主要是抱怨我似乎没有一个包括太阳下各种大小的图标。尝试使用VS从1个图像自动生成它们导致VS每次都崩溃。如果这是我唯一的选择的话,我可以试着坐在油漆中手动制作它们,但如果我不需要MSIX安装程序,这可能是毫无意义的
  • 在这一点上,我也感兴趣的只是COM注册它们,为了安全起见,不需要输入注册表项,并且可以在以后使用安装程序。但据我所知,regasm/gacutil不在任何其他机器上。(我以前也没有使用过它,所以我有点困惑应该使用哪一个,以及是否需要对x86和64都使用它。)
  • 我是VS安装程序、DLL和注册表(以及相关术语)的noob,所以请尽量保持简单。虽然很明显,我已经做了一些C#DLL,我可以从VBA(一旦COM注册)调用它们,否则它们会很有用

要注册.NET COM dll,只需使用“regasm/codebase等”。如果您想手动执行此操作,也可以使用如下代码:感谢Simon M。我已经尝试先手动将我的注册表项复制到此笔记本电脑,并从VBA获得拒绝访问的问题。然后是您的第一个链接,接着是最热门的“RegAsm.exe/codebase/tlb{path/name of DLL}”。那现在起作用了。我在很多不同的文件夹中找到了RegAsm.exe的版本,因此使用了Windows\WinSxS\x86\u RegAsm{loots of Alphagenic Numeric stuff}文件夹中的版本。这是否意味着我只完成了x86版本?我应该使用其他文件夹中的regasms来执行此操作吗?(出于某种原因,这是32位office/Excel/VBA,所以我想至少从这里开始)官方regasm.exe位于\Windows\Microsoft.NET\\Framework\v4.0.30319(32位客户端在32位注册表中注册)或\Windows\Microsoft.NET\\Framework64\v4.0.30319\(64位客户端在64位注册表中注册)。如果您将C#dll编译为“任意Cpu”(推荐),那么您可以同时在32和64个注册表中注册。根据大小,您可能只想分发文件而不注册它们。如果使用独立COM,则可以将所需的COM信息放入清单中,这样就不必注册LIB。现在,如果您希望第三方能够调用您的组件,那么是的,您需要注册它。但是,如果您只需要在流程中使用它,我实际上更喜欢隔离COM方式。“隔离COM”有时也称为“免注册COM”