Я работаю над проектом, который нуждается в уникальном методе работы, который требует, чтобы установщик 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
}
Если вы подпишете установщик (вы должны), вы должны подписать его после изменения.
Или увидеть Вставить пользовательские данные в установщик с подписью аутентичного кода при загрузке
Других решений пока нет …