Я работаю над проектом, который нуждается в уникальном методе работы, который требует, чтобы установщик Windows exe (упакованный с использованием Inno Setup) обновлялся с помощью другого конфигурационного файла, содержащего уникальный идентификационный номер для каждой загрузки.
Сам проект представляет собой веб-основу, для которой я использую PHP на Apache и Linux.
Установщик содержит двоичный исполняемый файл Windows и файл config.ini
. Мне просто нужно отредактировать файл config.ini
каждый раз, когда файл будет готов к загрузке. Обновления – это просто увеличиваемый счетчик.
Я не нахожу направление для подхода, поскольку я смотрю на редактирование упакованного файла Inno Setup, созданного в Windows, для редактирования на сервере Linux.
Может ли кто-нибудь указать мне на некоторые идеи, чтобы достичь этого, пожалуйста.
Благодаря,
Sk
Просто сохраните файл конфигурации в программе установки без сжатия, чтобы обеспечить легкую модификацию. Используйте флаг 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)); file_put_contents($filename, $contents); // or feed directly to the output stream }
Если вы подпишете установщика (вы должны), вы должны подписать его после его изменения.
Или см. Вставку пользовательских данных в подписанный подстановочным установщиком при загрузке