在 Windows 下打包具有依赖关系的应用程序

Posted

技术标签:

【中文标题】在 Windows 下打包具有依赖关系的应用程序【英文标题】:Packaging an application with dependencies under Windows 【发布时间】:2009-02-19 21:05:20 【问题描述】:

我在 Linux 下使用 gtkmm 和 libpcap 编写了一个应用程序。当然,gtkmm 依赖于 GTK+。

将其移植到Windows并尝试分发后,我收到的反馈是要安装的依赖项太多。

用户必须先运行 GTK+、gtkmm 和 winpcap 运行时的安装程序,然后才能运行我的小应用程序,这无疑是一种痛苦。

GIMP for Windows 似乎使用了一个安装程序,如果需要,它会启动一个 GTK+ 安装程序,但对三个不同的库这样做似乎有点过分,尤其是在安装程序大小方面。

有没有更好的方法来分发这个?我相信 winpcap 实际上必须安装一个服务,所以它可能必须运行安装程序,但也许我可以将 GTK+/gtkmm 库捆绑在运行时文件夹中?

我对 Linux 开发比较熟悉,所以我不确定最好的做法是什么。

【问题讨论】:

【参考方案1】:

我强烈建议您使用像Advanced Installer 这样的工具来为您处理这个问题。在 Windows 上制作正确的安装程序确实令人头疼,因此值得您花时间使用 GUI 工具来帮助您。 AI(以及其他安装程序,就此而言)可以安装和管理 Windows 服务、先决条件等,从长远来看,通过使用这样的工具来帮助您进行部署,您将节省大量时间。特别是 Advanced Installer 对管理不同的依赖项及其相关版本有很好的支持,它还可以在安装过程中安装本机 Windows 服务。他们有一个免费版本,但根据您产品的性质,您可能希望选择其中一个商业版本。

基本上,如果您认真考虑在 Windows 上进行部署,您应该投入时间(可能还有金钱)来制作合适的 MSI 风格的安装程序。不是要打击 NSIS 的人群,而是制作非标准的 Windows 安装程序总是会给开发人员带来更多的工作,给最终用户带来更不舒服的体验。

【讨论】:

【参考方案2】:

如果您想手动打包 GTKmm 运行时,请参阅 gnome.org 上的this link 了解更多详细信息(查看重新分发下的内容)。您也可以使用 /S 标志静默运行 GTKmm 安装程序。

【讨论】:

以上是关于在 Windows 下打包具有依赖关系的应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Maven 创建具有依赖关系的可执行 JAR?

Windows下应用程序发布的库依赖问题解决方法

具有依赖关系的 Windows 服务的关闭顺序 [关闭]

[Unity]浅谈AssetBundle的依赖关系打包与加载

如何解决源码包安装时的依赖性问题

windows程序查看可以行文件依赖库