在编译的Inno Setup安装程序中修改配置文件(每个下载的可执行文件的自定义配置文件)



我正在从事一个需要独特操作方法的项目,该方法需要使用不同的配置文件更新Windows安装程序exe(使用Inno Setup打包(,其中包含每次下载的唯一标识号。

该项目本身是一个基于Web的网络,我在Apache和Linux上使用PHP。

安装程序包含 Windows 二进制可执行文件和config.ini文件。我只需要在每次准备好下载文件时编辑config.ini文件。更新只是递增计数器。

我没有找到一个方向,因为我正在考虑编辑在Windows中创建的Inno Setup打包文件,以便在Linux服务器中进行编辑。

谁能指出我一些想法来实现这一目标。

谢谢
斯克

下面是一个旧答案,只有在您不唱安装程序时才有效。如今,您基本上无法分发未签名的安装程序。进一步跳过下文。

只需将配置文件存储到未压缩的安装程序中,即可轻松修改。使用nocompression标志。您还必须使用dontverifychecksum标志,否则安装程序将在安装时将修改后的文件视为已损坏。

[Files]
Source: "config.ini"; DestDir: "{app}"; Flags: nocompression dontverifychecksum

您也不能修改文件长度。因此,您需要在文件中为较大的数字保留足够的空间,例如:

[Section]
Counter=?????

要使用 PHP 修改安装程序,您现在可以执行以下操作:

$counter = $_GET["counter"];
$filename = "mysetup.exe";
$contents = file_get_contents($filename);
$mask = "?????";
$prefix = "Counter=";
$replace = $prefix . $mask;
$p = strpos($contents, $replace);
if ($p !== false)
{
    $s = $prefix . str_pad($counter, strlen($mask), "0", STR_PAD_LEFT);
    $contents =
        substr($contents, 0, $p) . $s . substr($contents, $p + strlen($replace));
    // (or feed directly to the output stream)
    file_put_contents($filename, $contents);
}
<小时 />

如果您签署安装程序(现在对于可下载的安装程序基本上是必需的(,则必须在修改后对其进行签名。

或者请参阅在下载时将用户特定的数据嵌入到验证码签名的安装程序中。

<小时 />

另一种方法是将自定义数据包含在安装程序名称中。

最新更新