Настройка INNO: Как реализовать обновление файлов на основе разных версий приложения - PullRequest
3 голосов
/ 15 января 2009

У меня есть приложение, написанное на Delphi, которое имеет несколько версий, которые содержат двоичные файлы и базу данных (MDB) с данными каталога.

В течение жизненного цикла продукта исправления / улучшения либо в файле базы данных, либо в некоторых двоичных файлах.

Версия сохраняется в реестре.

У пользователей могут быть разные версии программы, когда доступен новый патч.

Теперь у пользователей есть разные версии для реализации следующего сценария в Inno Setup:

  1. Если у пользователя есть версия A, запретите установку.
  2. Если у пользователя версия B, скопируйте db и файл1, файл2, файл3.
  3. Если у пользователя есть версия C, просто обновите файл 1.

Как правильно реализовать это в настройке Inno?

Ответы [ 3 ]

2 голосов
/ 15 января 2009

Inno будет смотреть информацию о версии файла по умолчанию. Так что если вашему патчу нужно только обновить файл, когда версия в патче новее, ничего не делайте; Инно уже так себя ведет.

Если, с другой стороны, вашему патчу необходимо заменить файл той же версией (или в нем нет информации о версии), используйте флаг replacecesameversion . Это заставляет Inno сравнивать содержимое файла и заменять его, если оно отличается. См. Справку для файлов для получения дополнительной информации об этом флаге.

2 голосов
/ 15 января 2009

Я не уверен, что это правильный способ, но вы можете использовать раздел [code] и флаги BeforeInstall

вроде так

[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall('{app}')
Source: "MYFILE.EXE"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall('{app}')
Source: "MYDB.MDB"; DestDir: "{app}"; BeforeInstall: MyBeforeInstall('{app}')

[Code]

function MyBeforeInstall(InstallPath): Boolean;
begin
  Result:= FALSE;
    //Check if this file is ok to install
    MsgBox(CurrentFileName , mbInformation, MB_OK);
end;

Затем используйте CurrentFileName, чтобы определить, можно ли установить файл, я не уверен, что он просто выйдет из программы установки, если результат окажется ложным, или пропустит отдельный файл.

Вы также можете использовать раздел [Типы] / [Компоненты], чтобы определить, какие файлы будут установлены, но я не знаю, есть ли способ автоматического выбора этого.

0 голосов
/ 23 января 2009

Вы можете создавать функции для проверки версии.

См. этот сайт для более подробной информации. (http://agiletracksoftware.com/blog.html?id=4)

[Code]
; Each data file contains a single value and can be loaded after extracted.
; The filename and DestDir from the [Files] section must match the names
; and locations used here
function GetAppMajorVersion(param: String): String;
     var
          AppVersion: String;
     begin
          ExtractTemporaryFile('major.dat');
          LoadStringFromFile(ExpandConstant('{tmp}\major.dat'), AppVersion);
          Result := AppVersion;
     end;

function GetAppMinorVersion(param: String): String;
     var
          AppMinorVersion: String;
     begin
          ExtractTemporaryFile('minor.dat');
          LoadStringFromFile(ExpandConstant('{tmp}\minor.dat'), AppMinorVersion);
          Result := AppMinorVersion;
     end;

function GetAppCurrentVersion(param: String): String;
     var
          BuildVersion: String;
     begin
          ExtractTemporaryFile('build.dat');
          LoadStringFromFile(ExpandConstant('{tmp}\build.dat'), BuildVersion);
          Result := BuildVersion;
     end;

Извлечение кода из блога AgileTrack: Использование Inno Setup для создания установщика с поддержкой версий

...