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

2fjabf4q  于 2023-03-21  发布在  PHP
关注(0)|答案(1)|浏览(202)

我正在进行一个项目,需要一个独特的操作方法,需要一个windows installer exe(使用Inno Setup打包)更新不同的配置文件,其中包含每个下载的唯一标识号。
这个项目本身是一个基于Web的项目,我在Apache和Linux上使用PHP。
安装程序包含一个Windows二进制可执行文件和config.ini文件。我只需要编辑config.ini文件,每次文件准备下载。更新只是增加计数器。
我没有找到一个方向的方法,因为我正在寻找编辑一个在Windows中创建的Inno安装程序打包文件,以在Linux服务器中编辑。
任何人都可以指出我对一些想法来实现这一点,请。
谢谢你,
斯克

lndjwyie

lndjwyie1#

  • 下面是一个旧的答案,只有当你不唱安装程序的工作。现在你基本上不能分发未签名的安装程序。跳过下面进一步。*

只需将配置文件解压保存到安装程序中,以便于修改。使用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));

    // (or feed directly to the output stream)
    file_put_contents($filename, $contents);
}

如果您签署安装程序(现在这对于可下载的安装程序来说基本上是必需的),您必须在修改它之后签署它。
或者参见Embed user-specific data into an authenticode signed installer on download
另一种方法是将自定义数据包含到安装程序名称中。

相关问题