我正在开发一个需要独特操作方法的项目,该方法需要使用不同的配置文件更新Windows安装程序exe(使用Inno安装程序打包),其中包含每个下载的唯一标识号。
项目本身是基于Web的,我在Apache和Linux上使用PHP。
安装程序包含Windows二进制可执行文件和config.ini
文件。我只需要在每次准备下载文件时编辑config.ini
文件。更新只是增加计数器。
我正在寻找方法,因为我正在考虑编辑在Windows中创建的Inno Setup打包文件,以便在Linux服务器中进行编辑。
任何人都可以指出我想要实现这一目标的一些想法。
谢谢,
SK
答案 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