0

我正在创建一个安装程序,它将为我们的 Access 应用程序使用 .NET COM 组件。当我将 COM dll 安装到 INSTALLDIR 时,它工作正常。我把它留给 WIX 通过运行 heat 来获取 dll 和 tlb 来进行 COM 注册。但是现在我们想将dll安装到GAC,而INSTALLDIR中只会安装tlb文件。我们的目标是我们的不同版本的软件(可以安装在同一台机器上)可以使用相同的COM版本,卸载一个版本的软件后,其他版本的软件仍然可以使用(我们无法实现)将dll安装到INSTALLDIR中,对吗?如果我的方法不对,请纠正我)。

问题来了:为了将它安装到 GAC 中,我想我应该在 dll 文件声明中添加一个 Assembly=".net" 。但是,在安装过程中,我收到此错误:“错误处理程序中遇到问题:自动化错误系统找不到指定的文件。” 当我在提交阶段调用一个 COM 方法(我们创建的访问引用)时,即在 COM 注册之后。显然我的 COM 没有成功注册。但我真的不知道为什么会这样。正如我所提到的,我所做的唯一更改是添加了这个 Assembly=".net"。在此之前,COM注册是OK的,我调用成功了。

任何帮助,将不胜感激。谢谢!

4

1 回答 1

1

这将不起作用,因为 GAC 用于基于 .net 的 dll,并且不接受 COM dll。要亲自查看,尝试将 dll 放入文件夹 C:\Windows\assembly,您将收到一条错误消息,指出它没有程序集清单。

您应该做的是使该特定 COM dll 的所有安装程序版本的组件 GUID 保持相同。这样,Windows 安装程序将记录哪些应用程序正在使用它,并且只有在删除最后一个应用程序后才卸载它。我也会把它放到它自己的安装文件夹中,否则当你卸载第一个安装的版本时,你会得到一个应用程序安装文件夹。

另一种选择是将其分离到自己的安装程序中,并使用引导程序将它们安装在一起。

于 2012-07-24T10:44:09.183 回答