通常我的exe都有dll依赖项,我使用nsis或inno等安装程序打包。 这对于大型程序来说很有意义,但对于小脚本来说却是过度的。
是否有另一种捆绑依赖关系的方法,以便用户可以只执行一个exe而不需要PATH中的dll目录?
修改
我希望找到一种不依赖于dll类型的解决方案,并且也适用于其他类型的依赖项。
以下是一些可能的选择:
有没有人有使用这样的工具的经验?
答案 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中的任何一个吗?
需要考虑的几个选项。
将所有必需的DLL放在与EXE相同的目录中(这样您就不必使用PATH变量)。安装只是一个“copy *。*”或只允许从文件共享运行。 (YMMV,如果有.NET代码 - 因为从远程文件共享运行时有安全限制)。
将EXE与C-Runtime静态链接而不是动态选项(因此您不必在尚未安装MSVCRT的机器上重新创建MSVCRT)。
如果以上两项内容不够,我会有一些更疯狂的想法。让我知道。
答案 4 :(得分:0)
显然存在可以将DLL转换为LIB的software,以便您可以静态链接它,但在这种情况下这可能是过度的。