0

我正在使用 vs 安装程序为我的 vb6 应用程序构建安装程序包。问题是我可以看到在项目资源管理器下有一个附加到我的 exe 文件的依赖项列表。

替代文字 http://img505.imageshack.us/img505/9696/croppercapture259lr8.png

在目标机器树视图上的文件系统下,我实际上可以将 dll/ocx 存储在一个文件夹或 Windows 系统文件夹本身[左侧窗口]中。

替代文字 http://img101.imageshack.us/img101/9224/croppercapture251qm1.png

所以我不明白的是..实际上有区别吗?如果我只是设置了依赖项并且没有将 dll 或 ocx 添加到文件夹或 win sys 文件夹中,那么 dll 是否也会自动被复制过来?

4

2 回答 2

1

不能保证所有这些 dll 都将存在于安装软件的系统上。因此,它们需要包含在您的安装程序中。从那里你有两个选择。

您可以将它们安装在 Windows 系统文件夹或应用程序文件夹中。不同之处在于,如果您将它们安装在您的应用程序文件夹中,您可以在 XP 和 Vista 上进行设置,以便可以启动具有不同版本组件的不同版本软件并同时运行。将它们安装到系统文件夹将破坏任何依赖旧版本组件的旧版本。

如果一个组件依赖于其他无法更新的组件,那么在应用程序文件夹中安装很少会不起作用。发生这种情况时,通常与 Microsoft 库一起使用。多年来,他们在这个问题上做得更好。

您可以在此处阅读有关并行执行问题的更多信息

最后,依赖项需要在您的安装程序中,以便它们在 Windows 注册表中注册。与大多数 .NET 程序集不同,任何 ActiveX/COM 应用程序都需要注册组件才能使用它,即使您使用 CreateObject 和 Variant 类型来访问它。

我承认整个过程是特殊的,并且是关于 DLL Hell 的故事的来源之一。从 MSDN 文章开始,使用 wikipedia,当然还可以在这里提出更多问题。

于 2008-11-20T13:34:37.197 回答
0

对于普通的安装程序包,您通常不应该在 app 文件夹下有“dlls”文件夹,但其中涉及许多因素(私有标准 DLL、Reg-Free COM 等)。是的,包含依赖项(除非您排除它们)。它们每个都应该有一个属性来确定它们在目标系统上的安装位置。

该列表中还有许多组件不能以这种方式重新分发,因为它们是依赖于操作系统的系统组件、MDAC 组件,或者未获得 redist 许可(例如 fm20.dll)。

可悲的是,这是可以直接导致用户系统的 DLL Hell 的包类型的一个示例。解决此问题可能意味着研究 MS 知识库文章中的每个 MS 组件,以确定可以或应该重新分发哪些内容以及如何重新分发。

Deployment can be a messy business to get right.

于 2009-01-17T19:26:55.607 回答