Установите несколько копий программного обеспечения с помощью программы установки Inno Setup - PullRequest
0 голосов
/ 30 мая 2018

Мы готовим установщики, используя Inno Setup.Таким образом, пользователь устанавливает программное обеспечение.Когда новая версия выпущена, новый установщик обновляет программное обеспечение.Пока все хорошо.

Но некоторые люди хотят иметь как старую версию программного обеспечения, так и новую.

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

1 Ответ

0 голосов
/ 30 мая 2018

В InitializeSetup функция события , определить, установлено ли приложение уже.Если это так, спросите пользователя, и если он / она решит установить новую копию, замените AppId и DefaultDirName на значения для конкретной версии, чтобы принудительно запустить новую установку.

[Setup]
#define AppId "My Program"
#define SetupReg "Software\Microsoft\Windows\CurrentVersion\Uninstall\" + AppId + "_is1"
#define DisplayVersionReg "DisplayVersion"
#define ApplicationVersion() \
   ParseVersion('MyProg.exe', Local[0], Local[1], Local[2], Local[3]), \
   Str(Local[0]) + "." + Str(Local[1])

[Setup]
AppId={code:GetAppId}
AppName=My Program
AppVersion={#ApplicationVersion}
DefaultDirName={code:GetDefaultDirName}
UsePreviousLanguage=no

[Files]
Source: "MyProg.exe"; DestDir: "{app}"
[Code]

var
  AppId: string;
  DefaultDirName: string;

function GetAppId(Param: string): string;
begin
  Result := AppId;
  Log('AppId = ' + Result);
end;

function GetDefaultDirName(Param: string): string;
begin
  Result := DefaultDirName;
  Log('DefaultDirName = ' + Result);
end;

function InitializeSetup(): Boolean;
var
  PrevVersion: string;
  CurVersion: string;
  Message: string;
  R: Integer;
begin
  CurVersion := '{#ApplicationVersion}';
  Log(Format('Installing "%s"', [CurVersion]));
  Result := True;

  AppId := '{#AppId}';
  DefaultDirName := ExpandConstant('{pf}\My Program');

  if RegQueryStringValue(HKLM, '{#SetupReg}', '{#DisplayVersionReg}', PrevVersion) or
     RegQueryStringValue(HKCU, '{#SetupReg}', '{#DisplayVersionReg}', PrevVersion) then
  begin
    Message :=
      Format(
        'Version is %s already installed. Do you want to upgrade to %s?'#13#10#13#10+
        'Press Yes, to replace %0:s with %1:s.'#13#10+
        'Press No, to keep %0:s and add separate installation of %1:s.'#13#10, [
        PrevVersion, CurVersion]);
    R := MsgBox(Message, mbConfirmation, MB_YESNOCANCEL);
    if R = IDYES then
    begin
      Log('Use chose to replace previous installation');
    end
      else
    if R = IDNO then
    begin
      AppId := AppId + CurVersion;
      DefaultDirName := DefaultDirName + ' ' + CurVersion;
      Log('Use chose to install new copy - using ID ' + AppId);
    end
      else
    begin
      Log('Use chose to cancel installation');
      Result := False;
    end;
  end;
end;

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...