Создание установщика, который будет выполнять обновление, если старая версия уже установлена

Я пытаюсь настроить Inno для моего программного обеспечения (это программное обеспечение aC#). Я планирую выпустить много версий своего программного обеспечения, я хотел бы изменить интерфейс установщика inno setup, если на компьютере уже установлена ​​более старая версия моего приложения. В этом случае пользователь не сможет изменить каталог установки.

Есть четыре случая:

Первый случай: это первая установка моего продукта, установка inno должна продолжаться нормально.

Второй случай: продукт уже установлен, и программа установки содержит более новую версию. Пользователь не может выбрать папку назначения. Он может просто запустить обновление.

Третий случай: если установщик содержит более старую версию, чем установленная, обновление будет отключено, и должно появиться сообщение.

Четвертый случай: версия установщика совпадает с установленной версией. Пользователь может восстановить свою актуальную версию, если это необходимо.

Возможно ли это сделать с помощью InnoSetup?

2 ответа

Inno Setup уже обрабатывает случаи 1, 2 и 4 автоматически, если ваш AppID остается неизменным в течение всего срока действия приложения.
Вы также можете скрыть страницы каталога и группы, используя следующие[Setup] директивы:

DisableDirPage=auto
DisableGroupPage=auto

Смотрите эту статью ISXKB для более подробной информации.

В случае 3, предполагая, что ваши файлы версионированы правильно, Inno ничего не понизит, но фактически не предупредит пользователя. Для этого вам нужно будет добавить код, чтобы проверить это, скорее всего, в InitializeSetup() функция события.

Если вы хотите получить обратную связь для пользователя, вы можете попробовать что-то подобное. Прежде всего, ваше обновление должно быть таким же AppId имя в качестве основного приложения. Затем вы можете установить некоторые проверки, которые будут отображать сообщения для информирования пользователя о состоянии.

#define MyAppVersion "1.2.2.7570"
#define MyAppName "MyApp Update"

[Setup]
AppId=MyApp
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_is1,InstallLocation}
DisableDirPage=True

[CustomMessages]
MyAppOld=The Setup detected application version 
MyAppRequired=The installation of {#MyAppName} requires MyApp to be installed.%nInstall MyApp before installing this update.%n%n
MyAppTerminated=The setup of update will be terminated.

[Code]
var
InstallLocation: String;

function GetInstallString(): String;
var
InstPath: String;
InstallString: String;
begin
InstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_is1');
InstallString := '';
if not RegQueryStringValue(HKLM, InstPath, 'InstallLocation', InstallString) then
RegQueryStringValue(HKCU, InstPath, 'InstallLocation', InstallString);
Result := InstallString;
InstallLocation := InstallString;
end;

function InitializeSetup: Boolean;
var
V: Integer;
sUnInstallString: String;
Version: String;
begin
    if RegValueExists(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_is1', 'UninstallString') then begin
      RegQueryStringValue(HKEY_LOCAL_MACHINE,'Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp_is1', 'DisplayVersion', Version);
      if Version =< ExpandConstant('{#MyAppVersion}') then begin 
          Result := True;
          GetInstallString();
       end
       else begin
MsgBox(ExpandConstant('{cm:MyAppOld}'+Version+'.'+#13#10#13#10+'{cm:MyAppRequired}'+'{cm:MyAppTerminated}'), mbInformation, MB_OK);
         Result := False;
  end;
end
else begin
  MsgBox(ExpandConstant('{cm:MyAppRequired}'+'{cm:MyAppTerminated}'), mbInformation, MB_OK);
  Result := False;
end;
end;
Другие вопросы по тегам