Создание установщика, который будет выполнять обновление, если старая версия уже установлена
Я пытаюсь настроить 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;