如何在exe中捆绑依赖项

时间:2011-04-29 04:57:04

标签: windows installer dependencies exe

通常我的exe都有dll依赖项,我使用nsisinno等安装程序打包。 这对于大型程序来说很有意义,但对于小脚本来说却是过度的。

是否有另一种捆绑依赖关系的方法,以便用户可以只执行一个exe而不需要PATH中的dll目录?


修改

我希望找到一种不依赖于dll类型的解决方案,并且也适用于其他类型的依赖项。

以下是一些可能的选择:

有没有人有使用这样的工具的经验?

5 个答案:

答案 0 :(得分:2)

您可以静态链接可执行文件。

答案 1 :(得分:2)

好的,你不喜欢我的另外两个想法......所以这里......

您发货并为您的客户提供“存根EXE”。存根EXE不依赖于任何其他内容,只包含ZIP文件(或安装程序包或类似文件)作为存根EXE中的资源。嵌入在存根EXE中的zip文件只包含实际的程序EXE及其所有相关的DLL。当存根EXE运行时,它只是将ZIP文件解压缩到TEMP子目录并启动应用程序EXE。

您可以优化它,以便如果应用程序已经安装在%TEMP%中,那么您将跳过解压缩步骤并启动已存在的应用程序EXE。

就个人而言,我不会走这条路。如果EXE具有依赖性,只需为用户提供安装程序即可。但是你比我更了解你的用户和客户。

答案 2 :(得分:1)

另一种方法是在GAC中安装DLL。

答案 3 :(得分:1)

您没有提到DLL依赖项是什么。只是直接使用存根lib的DLL?通过LoadLibrary动态加载? COM?需要注册吗?这是.NET中的任何一个吗?

需要考虑的几个选项。

  1. 将所有必需的DLL放在与EXE相同的目录中(这样您就不必使用PATH变量)。安装只是一个“copy *。*”或只允许从文件共享运行。 (YMMV,如果有.NET代码 - 因为从远程文件共享运行时有安全限制)。

  2. 将EXE与C-Runtime静态链接而不是动态选项(因此您不必在尚未安装MSVCRT的机器上重新创建MSVCRT)。

  3. 如果以上两项内容不够,我会有一些更疯狂的想法。让我知道。

答案 4 :(得分:0)

显然存在可以将DLL转换为LIB的software,以便您可以静态链接它,但在这种情况下这可能是过度的。