我在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/
似乎在寄存器中安装的唯一方法是通过regasm.exe或regsvr32,并且两者都需要提升命令提示符(具有管理员权限),这是客户端没有的。
我想解决方案是使用免费注册激活COM组件,它不需要更新注册表或在GAC中放置程序集。这是参考:
Is it possible to register a .NET assembly for COM interop without adding registry entries?
我找到了这个答案,我觉得我真的很接近解决方案:
Registering .Net COM DLLs without Admin rights / regasm
问题是,我开发的类正在使用另一个类,即PdfSharp。当我取消注册dll并尝试再次注册(通过regasm.exe)时,我的VBA宏不会在我创建对象时发出错误,但是当我执行类的功能时,说PdfSharp无法'找到了。
这个问题的解决方案没有说明使用第三方库,我认为我的.dll也会带来pdfsharp.dll。
任何想法?我真的很接近解决这个问题。
答案 0 :(得分:0)
您是否尝试过使用Install Shield Limited Edition来打包您的应用程序?它是免费的。
答案 1 :(得分:0)
我放弃了尝试在没有管理员权限的计算机上安装DLL,因此我在Visual Studio上开发了一个Console应用程序并通过Shell命令在VBA上运行它,它就像一个魅力
我将此设置为正确答案,因为它解决了我的问题,但我找不到通过安装程序在其他计算机上部署dll的方法。