我正在使用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会自动复制吗?

有帮助吗?

解决方案

无法保证所有这些dll都将出现在安装该软件的系统上。因此,他们需要包含在您的安装程序中。从那里你有两个选择。

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

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

您可以阅读更多有关涉及并行执行的问题此处

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

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

其他提示

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

您在该列表中还有许多组件,这些组件不是可再发行的,因为它们是依赖于操作系统的系统组件,MDAC组件或未获得redist许可(例如fm20.dll)。

遗憾的是,这是一个可以直接导致用户系统的DLL Hell的软件包类型的示例。修复此问题可能意味着研究MS KB文章中的每个MS组件,以确定可以或应该重新分发的内容以及方式。

为了做到正确,部署可能是一件混乱的事情。

scroll top