Windows 如何在exe中绑定依赖项

Windows 如何在exe中绑定依赖项,windows,installation,dependencies,exe,Windows,Installation,Dependencies,Exe,通常,我的exe具有dll依赖项,我使用安装程序(如或)进行打包。 这对于大型程序来说是有意义的,但对于小型脚本来说则过于苛刻 是否有另一种捆绑依赖项的方法,以便用户只需执行一个exe,而不需要路径中的dll目录 编辑 我希望有一个解决方案,它不依赖于dll的类型,也适用于其他类型的依赖关系 以下是一些可能的选择: 有人使用过这样的工具吗?一种替代方法是在GAC中安装DLL。您可以静态链接可执行文件。您没有提到DLL依赖项是什么。就用存根库直接备份DLL?通过LoadLibrary动

通常,我的exe具有dll依赖项,我使用安装程序(如或)进行打包。 这对于大型程序来说是有意义的,但对于小型脚本来说则过于苛刻

是否有另一种捆绑依赖项的方法,以便用户只需执行一个exe,而不需要路径中的dll目录


编辑

我希望有一个解决方案,它不依赖于dll的类型,也适用于其他类型的依赖关系

以下是一些可能的选择:


有人使用过这样的工具吗?

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

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

您没有提到DLL依赖项是什么。就用存根库直接备份DLL?通过LoadLibrary动态加载?通用域名格式?需要注册吗?这是什么.NET吗

几个要考虑的选项。

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

  • 静态地将EXE链接到C运行时,而不是动态选项(这样您就不必在尚未安装MSVCRT的计算机上重新显示它)


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

    显然存在可以将DLL转换为库的方法,这样您就可以静态地链接它,但在这种情况下,这可能太过分了。

    好吧,您不喜欢我的另外两个想法中的任何一个。。。所以这里是

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

    您可以对其进行优化,如果应用程序已安装在%TEMP%中,则跳过解包步骤,只需启动已存在的应用程序EXE


    就我个人而言,我不会走这条路。只要给用户一个安装程序,如果EXE有依赖项。但是你比我更了解你的用户和客户。

    我想避免使用dll目录,因为它可能会让我的用户感到害怕和困惑。静态链接不是一个选项。大多数有经验的开发人员会建议你不要使用这些工具,而是使用传统方法,将EXE和dll安装到同一目录。你似乎不想听从这个建议。既然你已经下定决心要使用这些工具中的一种,为什么不这样做呢?我过去总是这样,但目前我分发了很多小脚本,客户端不喜欢依赖文件夹。设置一个单击一次应用程序来处理所有这些不是更容易吗?甚至可以直接从存根exe加载所有必需的文件,这比仅仅将所有必需的文件提取到临时目录并从那里启动主应用程序更难实现。我同意,这就是为什么我在上面的最后一行中建议“只给用户一个安装程序…”。