如何使用Installer部署类库(dll或tbl文件)

时间:2017-11-28 15:07:32

标签: c# .net vba dll deployment

我在Visual Studio上使用.Net Framework(VB.NET)开发了一个新的(小)类,并在VBA-Excel上执行了一个执行任务的参考。它在我的机器上工作正常,所以这里真正的问题是在客户机的机器上部署这个类。

当我在Visual Studio上进行构建时,我选择了“注册COM Interop”,因此创建了一个.dll和.tbs文件。我以为我可以在VBA上使用对这些文件的引用,一切都会正常工作,但并不是那么简单。我必须先在系统上注册dll才能使用它,Visual Studio会在构建时自动完成。

问题是,如何制作一个通用的安装程序安装程序,只将这些dll和tbl文件安装到任何人的机器?文件必须保留在已知文件夹中,以便我可以在VBA上引用它们,但是Windows注册表必须知道它们存在!

目前我所知道的是什么:

  • 在构建中,Visual Studio使用Regasm.exe注册dll;一世 可以使用bat文件来调用regasm.exe,但它不是一个选项 因为我必须提到它,每个客户都可以 有不同的.Net Framework版本,所以我无法知道 它的完整路径。

  • regsvr32.exe也无法正常工作,因为我们需要管理员权限,以及
    客户没有。

  • 我可以使用ClickOnce,但它是一个类库,因此是Publish选项 不存在。

这里我有一些参考资料,但我找不到一个好的解决方案。

https://www.red-gate.com/simple-talk/dotnet/visual-studio/build-and-deploy-a-.net-com-assembly/

https://social.msdn.microsoft.com/Forums/windows/en-US/70f5558c-cf53-4bc0-b3ea-435b6f5b3956/how-to-get-setup-project-to-register-assembly-for-com-interop?forum=winformssetup

https://social.msdn.microsoft.com/Forums/en-US/47d6dc58-37ce-4a34-9524-20dc1c1ffd90/how-to-use-clickonce-deployment-technology-for-class-library-project?forum=winformssetup

更新1

似乎在寄存器中安装的唯一方法是通过regasm.exe或regsvr32,并且两者都需要提升命令提示符(具有管理员权限),这是客户端没有的。

我想解决方案是使用免费注册激活COM组件,它不需要更新注册表或在GAC中放置程序集。这是参考:

Is it possible to register a .NET assembly for COM interop without adding registry entries?

更新2

我找到了这个答案,我觉得我真的很接近解决方案:

Registering .Net COM DLLs without Admin rights / regasm

问题是,我开发的类正在使用另一个类,即PdfSharp。当我取消注册dll并尝试再次注册(通过regasm.exe)时,我的VBA宏不会在我创建对象时发出错误,但是当我执行类的功能时,说PdfSharp无法'找到了。

这个问题的解决方案没有说明使用第三方库,我认为我的.dll也会带来pdfsharp.dll。

任何想法?我真的很接近解决这个问题。

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用Install Shield Limited Edition来打包您的应用程序?它是免费的。

答案 1 :(得分:0)

我放弃了尝试在没有管理员权限的计算机上安装DLL,因此我在Visual Studio上开发了一个Console应用程序并通过Shell命令在VBA上运行它,它就像一个魅力

我将此设置为正确答案,因为它解决了我的问题,但我找不到通过安装程序在其他计算机上部署dll的方法。