为复杂的跨平台程序创建安装程序

2024-02-01

我正在为一堆相对复杂的桌面应用程序绘制一个应用程序部署过程。我们有本机应用程序和 Java 应用程序,因此部署必须能够检查 JRE 是否存在并在需要时安装它。某些应用程序依赖于特殊硬件,因此部署还必须能够启动必要的驱动程序安装程序。一些应用程序是多平台的,并且最好相同的机制应该能够创建 Windows、Linux 和 Mac OS X 安装程序。那是:

  • The installer must be able to install, in addition to the application itself:
    • Java运行时环境。
    • 驱动程序(硬件)- 即启动其他安装程序。
  • 安装程序生成器must可从命令行操作,以便它可以与自动构建机制集成,该机制为每个平台生成安装程序包作为夜间构建。
  • 此外,我需要为应用程序创建“从网络更新”机制。它可以包含在安装程序中,也可以是应用程序中内置的单独的自定义机制。

现在,这变得有点复杂,我怀疑可能没有一个安装程序可以完成这一切。因此,我正在考虑两种根本不同的方法:

  1. 平台特定机制:NSIS http://nsis.sourceforge.net/会创造.exe or .msi对于 Windows,XXX 将创建.deb对于 Ubuntu,YYY 将创建.dmg对于 OS X。
  2. 跨平台安装程序可以满足上述所有要求:ZZZ?

有什么建议吗?我看过的一些选项包括:

  • NSIS http://nsis.sourceforge.net/- 很好,但仅限 Windows。
  • IzPack http://izpack.org/- 很好,但需要 JVM 才能运行。

是否有一个通用的工具,或者我应该为每个平台单独选择一个合适的工具?在后一种情况下,Ubuntu 和 Mac OS X 的“NSIS 等效项”是什么?


我有一些建议如下。

  • Use WIX(Windows 安装程序 XML) http://wix.sourceforge.net/用于为 Windows 创建 MSI 安装程序
  • Use 包装机 http://developer.apple.com/mac/library/documentation/Darwin/Reference/ManPages/man1/packagemaker.1.html(XCode 工具的一部分)在 MAC OS X 上,最好是命令行版本
  • 编写包装器脚本(用 Python 等语言)来驱动整个安装程序创建过程。

    • 聚合您需要安装的所有组件(可能来自您的版本控制系统)
    • 尽可能为Wix和Package Maker生成必要的文件
    • 运行打包工具并生成包
  • 确保整个安装程序创建过程总体上是一个简单的命令操作(可以选择根据发布分支等标准创建不同版本的包)

总的来说,开发这个工作流程需要一些初步的努力和大量的思考。但最终的结果是值得付出努力的。

我还没有在 Linux 端这样做,但我想在此工作流程中会在这方面使用 RPM/DEB。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为复杂的跨平台程序创建安装程序 的相关文章

  • matlab部署工具到java包javac错误

    我正在尝试将我的程序包装为与 java 一起使用 我首先尝试了一个简单的 hello world 你好世界 m disp 你好世界 我使用了deploytool并选择了java包 当它到达这一行时 执行命令 javac verbose cl
  • 在 VS2010 中发布时 SVsBuildManagerAccessor 失败

    我的 VS 2010 有问题 我无法发布任何项目 我收到错误 获取 SVsBuildManagerAccessor 服务失败 一段时间以来我一直在尝试解决这个问题 奇怪的是 在这种情况开始发生的同时 我也开始遇到 sql server ma
  • 为什么vcredist_x86.exe不能安静安装?

    我需要安静地安装 vcredist x86 exe Microsoft Visual C 2010 Redistributable Package 我在 cmd exe 上输入 vcredist x86 exe q 但是 vcredist
  • “没有可用的二元红宝石”是什么意思?

    每当我使用rvm install x x x 即使安装成功 我也会收到此警告 No binary rubies available for osx 10 12 x86 64 ruby 2 4 0 Continuing with compil
  • 在 Windows 7 上安装 Visual Studio 2015 社区版

    我尝试在 Windows 7 64 位上安装 Visual Studio 2015 社区版 由于某种原因 安装程序显示 安装被阻止 并显示错误 此版本的 Visual Studio 需要一台装有较新版本 Windows 的计算机 为了完全安
  • 从 Python 下载/安装 Windows 更新

    我正在编写一个脚本来自动安装 Windows 更新 我可以将其部署在多台计算机上 这样我就不必担心手动更新它们 我想用 Python 编写这个 但找不到任何关于如何完成此操作的信息 我需要知道如何搜索更新 下载更新并从 python 脚本安
  • Wix - 自定义安装目录

    我使用的是 Wix 3 x 用户应该能够选择目标目录 我的Setup wxs目前是这样的 http pastebin com uH1EjbDQ http pastebin com uH1EjbDQ 询问用户自定义目标目录的最简单方法是什么
  • 如何在 Kubernetes 中按特定顺序配置 Pod 初始化?

    我想知道如何按特定顺序开始部署 我知道initContainers但这对我不起作用 我有一个巨大的平台 有大约 20 个部署和 5 个有状态集 每个都有自己的服务 环境变量 卷 水平自动缩放器等 所以不可能 或者我不知道如何 在另一个中定义
  • 有没有办法通过 WiFi 部署/调试 Cordova Android Ionic 应用程序? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 这是一个双胞胎this https stackoverflow com questions 46596236 is there a w
  • 使用代理时,React 应用程序正在不同位置查找静态文件

    我用过npx create react app my app创建一个反应应用程序 我用过的npm run build构建应用程序并使用它进行部署serve s build 我正在使用代理服务器来公开我的应用程序 我的 httpd 配置如下所
  • 如何在 erlang 中安装模块?

    我是 Erlang 新手 想知道如何安装第三方模块以在我的 Web 应用程序中使用 您将这些文件放在哪里以及执行什么类型的命令 如果您希望在系统范围内安装第 3 方库 例如 Mochiweb 最好将其设置在 ERL LIBS 环境变量下 我
  • 无法加载文件或程序集“System.Web.Razor”或其依赖项之一

    我在我的网站 Web 应用程序 中使用了 Umbraco 4 11 6 我的网站在 localhost 中工作 通过 Visual Studio 2012 和 IIS v7 进行测试 但是当我从互联网空间运行它时 出现错误 错误是 无法加载
  • 是否可以使用 GitHub Action 和 GitHub FTP Deploy 将 Laravel Web 应用程序部署到共享托管?

    是否可以deploy the Laravel网络应用程序到共享主机使用 GitHub Action 和 GitHub FTP 部署 如果可能的话我应该如何更改 github workflows master yml on push bran
  • 重新创建窗口而不破坏上下文

    这个问题是关于使用 OpenGL 的图形应用程序 当时我正在使用 GLFW 框架 但我考虑更改它 我的目标是让用户 尽可能 在全屏模式和窗口模式之间不断切换 此过程应该花费不到一秒的时间 并且可以在运行时发生 例如 看看游戏 我的世界 用户
  • Qt 创建者 4.8.4。 Windows 7 - 64 位安装

    我在 QT 方面遇到了一些困难 我需要在学校使用它来完成一些 GUI 应用程序 我最近完成了以下步骤 1 mingw get inst 20120426 exefrom 来源锻造 http sourceforge net projects
  • 如何部署经典的asp网站?

    我想知道如何部署或在 IIS 6 7 中部署经典的 asp 网站涉及哪些步骤 我们可以为现有项目创建一个安装程序吗 您应该考虑使用 Web 部署http www iis net download WebDeploy http www iis
  • 使用 Git 部署时压缩 JS/CSS 文件

    我对 git 有点陌生 另外 这是我第一个自动化部署过程的项目 到目前为止 能够做到这一点真是太幸福了git push dev并上传文件 复制配置文件等 现在 当我推送到我的开发服务器时 我想缩小 JS CSS 文件 我正在考虑在服务器上安
  • Bower 安装 self_signed_cert_in_chain

    我正在 Windows 中使用 git bash 构建一个角度应用程序 到目前为止 我已经能够使用 yo 搭建脚手架 没有问题 但是当我尝试发出以下命令时 有人可以指出我来解决这个问题吗 Bower 安装 Angular Bootstrap
  • 如何在 sles 12 中安装 docker?

    我想在我的 suse 系统中安装 docker stable 版本 版本 sles 12 在suse系统中安装docker 需要添加docker的仓库 我没有找到任何用于添加1 6版本的docker存储库的url 存储库url 我发现 do
  • Capistrano 无法定位应用程序部署中的 Gemfile 错误

    我正在尝试将 Rails 应用程序部署到生产服务器 并决定使用以下命令将其部署到 DigitalOcean本指南 https gorails com deploy ubuntu 14 04 overview RVM 要部署 我使用以下命令

随机推荐

  • Nuget 添加包出现访问被拒绝错误

    当我通过 Visual Studio 2015 GUI 添加 Nuget 包时 某些包未安装 并出现以下错误 对路径 Microsoft DotNet InternalAbstractions dll 的访问被拒绝 我尝试以管理员身份运行
  • 如何使用 TypeScript 为无状态、函数式 React 组件指定(可选)默认 props?

    我正在尝试在 Typescript 中创建一个带有可选 props 和 defaultProps 的无状态 React 组件 对于 React Native 项目 这对于普通 JS 来说是微不足道的 但我对如何在 TypeScript 中实
  • 当模型状态无效时,由于未发送下拉框列表等所有数据,必须重新填充视图模型

    在我的项目中 我创建了一项调查 将该调查链接到一家公司并选择参与的用户 我选择调查模板 添加额外问题并设置有关调查的信息 例如开始和结束日期 总而言之 结果是一个复杂的视图 其中包含来自域的许多部分的数据 我为此视图创建了一个 ViewMo
  • 在 ASP.NET Core 1.0 中使用 SignalR

    我们有一个 ASP NET Core 1 0 RC1 应用程序 我们希望将 SignalR 合并到其中 但是 SignalR 尚未成为 ASP NET Core 1 0 的一部分 有没有办法仍然将 SignalR 合并到我们现有的应用程序中
  • 如何在 Redis 哈希中存储数组?

    我对 Redis 很陌生 想看看是否可行 想象一下我收到这样的数据 account abc name Bob lname Smith account abc name Sam lname Wilson account abc name Jo
  • 这些使用 JavaScript 创建表格的方法有何优缺点?

    我发现在JS中创建表有两种方法 Using insertRow and insertCell var table document getElementById table var row table insertRow 1 var cel
  • 表格行从 itext pdf 中的新页面开始

    我正在使用 PdfPTable 在 pdf 中创建一个表格 表格中有一行 在我的行中 最后一列的数据的高度大于页面的剩余高度 因此 行从下一页开始 而表格标题位于上一页 并且第一页页眉下方有大片空白 任何人都可以建议我如何将行拆分为多个页面
  • 在 JSON.NET 中反序列化具有不同名称的对象列表

    我从一个网站获取数据 该网站返回我非常陌生的 json 格式 我已经寻找解决方案几个小时了 我必须使用这些术语 json 的格式如下 Foo name Foo size human 832 73kB bytes 852718 date hu
  • 如何为气流设置多个调度程序

    我们最近转向了气流 2 0 我想了解设置多个调度程序的过程 我尝试查看各种来源 包括使用天文学家 cli 的程序 但我们没有使用它 对于包括气流文档在内的其他来源 虽然他们提到可以这样做并给出了有关数据库要求的一些详细信息 但他们没有提供有
  • 以最佳方式返回负数的计数

    在按行和列排序的矩阵中搜索 的变体 给定一个按行和列排序的二维矩阵 您必须以最佳方式返回负数的计数 我可以想到这个解决方案 初始化行索引 0 如果行索引 gt 0 行索引 否则应用二分搜索 并用此代码实现 5X5 矩阵 include
  • 打印按值排序的字典

    我基本上是尝试迭代字典并从最大值到最小值打印出键 值 我一直在搜索这个网站 很多人都在使用 lambda 但我不太确定它是如何工作的 所以我现在试图避免它 dictIterator iter sorted bigramDict iterit
  • 如何在悬停时更改 navbarPage 链接的文本颜色(在闪亮的应用程序中)?

    这是我的闪亮应用程序的编辑版本 ui lt tagList fluidPage titlePanel tags head tags style HTML navbar default color red important navbarPa
  • PHP 对象生命周期

    我正在使用 PHP 5 2 如果我在一页上new一个对象 这个对象什么时候会被销毁 当用户转到另一个 php 页面时 对象是否会自动销毁 或者我需要显式调用 destructor 它将在页面加载结束时被破坏 从内存中卸载 或者如果您之前取消
  • SimpleXML 与 DOMDocument 性能对比

    我正在使用 SimpleXML 类构建 RSS 解析器 我想知道使用 DOMDocument 类是否会提高解析器的速度 我正在解析一个至少有 1000 行的 rss 文档 并且我使用了这 1000 行中的几乎所有数据 我正在寻找需要最少时间
  • 如何在 WPF 应用程序中为页面创建模式对话框?

    我有一个 WPF 窗口 其中有一个托管框架的控件 在该框架中我显示不同的页面 有没有办法使对话框仅在页面上模式化 当我显示对话框时 不应单击页面上的任何控件 但应该可以单击不在页面上的同一窗口上的控件 如果我对你的信息的解释是正确的 那么你
  • 正则表达式和 unicode

    我有一个脚本可以解析电视剧集的文件名 例如 show name s01e02 avi 获取剧集名称 来自 www thetvdb com API 并自动将它们重命名为更好的名称 节目名称 01x02 avi 该脚本工作正常 直到您尝试在具有
  • 检查 URL 是否有 http:// 前缀

    在我的应用程序中 当用户添加对象时 还可以添加该对象的链接 然后可以在 webView 中打开该链接 我尝试保存不带 http 前缀的链接 然后在 webView 中打开它 但无法打开它 在webView开始加载之前 有没有办法检查保存的U
  • 在 Dart 中发送 SMTP 电子邮件

    我查看了 API 文档和语言指南 但没有看到任何有关在 Dart 中发送电子邮件的内容 我也检查了这个谷歌群组帖子 https groups google com a dartlang org forum topic misc 5YNvrm
  • 如何通过 JSON 文件为curl 传递有效负载?

    我可以通过以下方式成功创建一个地方curl执行以下命令 curl vX POST https server api v1 places json d auth token B8dsbz4HExMskqUa6Qhn place name Fu
  • 为复杂的跨平台程序创建安装程序

    我正在为一堆相对复杂的桌面应用程序绘制一个应用程序部署过程 我们有本机应用程序和 Java 应用程序 因此部署必须能够检查 JRE 是否存在并在需要时安装它 某些应用程序依赖于特殊硬件 因此部署还必须能够启动必要的驱动程序安装程序 一些应用