安装时修改.exe

Modifying .exe during installation

我已经创建了一个 Windows 可执行文件用于分发。我使用 Inno Setup 创建了一个安装程序。一切正常,但现在我还想允许安装软件的人输入配置文件的 URL 或 URI,我的应用程序将使用它来获取各种初始化数据,这些数据因站点而异。由于该应用程序将在每个站点的许多位置使用,理想情况下,安装人员会在安装过程中输入一次配置文件的路径;然后应用程序将存储配置文件位置。是否有一种标准方法可以让安装程序将资源(即配置文件的路径)添加到它正在安装的 .exe 中?感谢您的任何建议。

举个例子:每个站点都会有一个服务器,我的软件会用它来实时获取信息;服务器将位于每个站点的防火墙后面,因此它是每个站点的初始化。因此,当软件安装在站点的每个工作站中时,IT 人员必须提供我的软件将在该站点使用的 URL。正如一个人所建议的那样,每个工作站都可以在注册表中存储特定于站点的 URL。我想知道是否有其他比使用注册表更好的可能性(例如,在可执行文件中动态创建字符串资源),或者注册表是否是最好的前进方式。我想让安装尽可能轻松,所以我认为使用配置文件或命令行提供 URL 的安装程序是最好的。

Is there a standard way of having an installer add a resource (i.e., the path to the configuration file) to the .exe it's installing?

是的,有一些方法可以添加或修改可执行文件的资源,例如使用 ResourceHacker 和类似工具。但我不会以任何方式称呼这个标准,因为它变得复杂,例如当您的安装程序可执行文件被签名时。 不要这样做 - 特别是不要插入配置指令。

对于您的情况,有一种更简单、更少 hack-ish 且更易于维护的方法来实现相同的目的。

I have created a Windows executable for distribution. I've created an installer, using Inno Setup.

这意味着您可以修改和重新编译应用程序和安装程序可执行文件。

我在这里的建议是在应用程序的配置方面多做一些工作:

  • 修改您的应用程序以在 bootstrap 期间读取配置文件,例如application.ini
  • 当配置文件不存在时,使用 bootstrap
  • 上的默认设置重新创建它
  • 添加一个空值的配置指令"LocalConfigurationUrl"
  • 添加一个对话框,当"LocalConfigurationUrl"为空时弹出,询问URL并写入配置

当您以这种方式实施时,您的应用程序会在第一次启动时询问配置 URL 的路径。

ideally, the person installing would enter the path to the configuration file once, during installation; then the application would store the configuration file location

现在,为了避免应用程序在启动时询问配置,您可以修改您的 Innosetup 脚本以在安装期间询问 LocalConfigurationURL,并将 application.ini 写入应用程序文件夹。 (= application.ini 使用默认配置 + LocalConfigurationUrl 具有值。)

您正在复制功能(要求 url 的表单),但您正在设置应用程序预配置,以便应用程序开箱即用,在首先开始。