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

时间:2017-04-10 21:00:48

标签: php linux inno-setup

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

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

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

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

任何人都可以指出我想要实现这一目标的一些想法。

谢谢,
SK

1 个答案:

答案 0 :(得分:2)

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

[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));
    file_put_contents($filename, $contents); // or feed directly to the output stream
}

如果您签署了安装程序(您应该),则必须在修改后对其进行签名。

或者查看Embed user-specific data into an authenticode signed installer on download