java - 在构建和签名后修改或自定义安装程序的可能方法有哪些?

标签 java python c# installation install4j

我们想根据从哪个客户的网站下载软件来标记软件。例如。通过显示客户的 Logo 等。我们只需要一个 ID,软件可以在运行时基于它处理其余的定制。

自定义数量可能很大,我们希望避免预先构建和存储这些安装程序。

我愿意考虑所有选项,尤其是一些开箱即用的想法。

认为在不破坏签名的情况下不可能更改已签名的安装程序 (exe/dmg)。

我正在尝试的一些想法(以及它们的权衡):

  • 将 ID 存储在安装程序下载文件名中(缺点:易碎,浏览器可能会更改名称或附加后缀以避免重名)
  • 要求用户输入下载页面上显示的代码(缺点:给用户带来一些不便)
  • 提供一个带有安装程序和配置文件的 zip(缺点:有些用户无法解压,或者只解压没有配置文件的安装程序)
  • 在 Linux 上,可以在下载时修改安装程序 shell 脚本,如脚本 cannot be signed .
  • 设置一个服务器,在下载请求时即时构建和签署安装程序。为了加快速度,它可能是另一个包装主安装程序的安装程序,唯一的任务是使用 ID 参数提取并运行主安装程序。 (缺点:复杂的基础设施、面向公众的服务器上的代码签名证书、MacOS 公证速度非常慢)

最佳答案

基于 Chromium 的浏览器,如 Google Chrome、Chromium、Opera、Microsoft Edge 等,会在 Windows 10(仅限 NTFS 文件系统)和 Linux(仅限 Ext4)上保存所有下载文件的原始 URL 和引用 URL .

有关详细信息,请参见示例 here .在 Windows 上,也可以从命令行或直接从 Java 访问元数据.

Mac 上似乎有类似的功能。参见示例 this关于 super 用户的问题。

从安装程序中访问此元数据有助于自定义安装程序的行为。虽然数据在所有设置中都不可用(例如 Internet Explorer 仅存储 zone ID 而没有 URL)并且可能会丢失(例如用户删除数据或将文件复制到不支持元数据的文件系统),但它可能会覆盖您的大多数用户。在未找到元数据时要求用户输入代码仍然可以用作后备。

我对这种方法的主要担心是 Chromium 开发人员可能会决定在不久的将来删除此功能或将其设为可选,就像 wget 的开发人员一样(参见示例 here)

在最新的 Windows 10 上,我仍然可以使用最新的 Google Chrome 和 Microsoft Edge 浏览器获取下载文件的以下元数据:

[ZoneTransfer]
ZoneId=3
ReferrerUrl=https://httpd.apache.org/
HostUrl=https://mirror.klaus-uwe.me/apache//httpd/httpd-2.4.46.tar.bz2

关于java - 在构建和签名后修改或自定义安装程序的可能方法有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67054571/

相关文章:

python - 'DE' alpha2 国家代码的 PyCountry 货币格式问题

python - Python在点上分割字符串,后跟空白

c# - 是否有可能劫持标准输出

java - 单击“下一步”按钮后,JSP 测验不会进入下一个问题

Java:为什么我可以在匿名类中访问没有 final 的局部变量 JPanel?

python - 根据 json 响应创建单独的对象

c# - 通过 (Fluent)NHibernate 添加到 SQLite DB 时 DateTime 不正确

c# - 使用反射从属性名称中获取 lambda 表达式

java - 纯 Java 中的汉字到罗马字转换器?

java - SimpleIdentificResourceAssembler 无法解析为类型