Удалить при запуске Inno setup с уже установленным приложением
Я только начал использовать Inno setup, и, похоже, он работает хорошо. Однако, когда я запускаю установщик с уже установленным приложением, он переустанавливается. Я хотел бы дать пользователю возможность удалить. Возможно ли это, и если да, то как это можно сделать?
чтобы быть точным, я написал игру для домашнего задания. Я сделал установщик с помощью Inno setup. Приложение устанавливается нормально и может быть удалено с помощью панели управления, но мой профессор хотел бы иметь возможность удалить применение путем повторного запуска установщика и выбора опции удаления. Это сэкономит ему время, так как у него есть около 50 из этих заданий, чтобы отметить.
спасибо,
Джерри
3 ответов
следующий скрипт сделает следующие параметры формы, когда приложение уже установлено в целевой системе при запуске установки:
когда пользователь нажимает Repair
кнопка, настройка обычно запускается. Когда пользователь нажимает Uninstall
кнопка, ранее установленное приложение удаляется. Когда пользователь закрывает эту форму, ничего не происходит.
вот скрипт (не забудьте указать, в идеале какое-то уникальное значение для AppId
директива установки в ваш скрипт):
[Setup]
AppName=My Program
AppVersion=1.5
AppId=1C9FAC66-219F-445B-8863-20DEAF8BB5CC
DefaultDirName={pf}\My Program
OutputDir=userdocs:Inno Setup Examples Output
[CustomMessages]
OptionsFormCaption=Setup options...
RepairButtonCaption=Repair
UninstallButtonCaption=Uninstall
[Code]
const
mrRepair = 100;
mrUninstall = 101;
function ShowOptionsForm: TModalResult;
var
OptionsForm: TSetupForm;
RepairButton: TNewButton;
UninstallButton: TNewButton;
begin
Result := mrNone;
OptionsForm := CreateCustomForm;
try
OptionsForm.Width := 220;
OptionsForm.Caption := ExpandConstant('{cm:OptionsFormCaption}');
OptionsForm.Position := poScreenCenter;
RepairButton := TNewButton.Create(OptionsForm);
RepairButton.Parent := OptionsForm;
RepairButton.Left := 8;
RepairButton.Top := 8;
RepairButton.Width := OptionsForm.ClientWidth - 16;
RepairButton.Caption := ExpandConstant('{cm:RepairButtonCaption}');
RepairButton.ModalResult := mrRepair;
UninstallButton := TNewButton.Create(OptionsForm);
UninstallButton.Parent := OptionsForm;
UninstallButton.Left := 8;
UninstallButton.Top := RepairButton.Top + RepairButton.Height + 8;
UninstallButton.Width := OptionsForm.ClientWidth - 16;
UninstallButton.Caption := ExpandConstant('{cm:UninstallButtonCaption}');
UninstallButton.ModalResult := mrUninstall;
OptionsForm.ClientHeight := RepairButton.Height + UninstallButton.Height + 24;
Result := OptionsForm.ShowModal;
finally
OptionsForm.Free;
end;
end;
function GetUninstallerPath: string;
var
RegKey: string;
begin
Result := '';
RegKey := Format('%s\%s_is1', ['Software\Microsoft\Windows\CurrentVersion\Uninstall',
'{#emit SetupSetting("AppId")}']);
if not RegQueryStringValue(HKEY_LOCAL_MACHINE, RegKey, 'UninstallString', Result) then
RegQueryStringValue(HKEY_CURRENT_USER, RegKey, 'UninstallString', Result);
end;
function InitializeSetup: Boolean;
var
UninstPath: string;
ResultCode: Integer;
begin
Result := True;
UninstPath := RemoveQuotes(GetUninstallerPath);
if UninstPath <> '' then
begin
case ShowOptionsForm of
mrRepair: Result := True;
mrUninstall:
begin
Result := False;
if not Exec(UninstPath, '', '', SW_SHOW, ewNoWait, ResultCode) then
MsgBox(FmtMessage(SetupMessage(msgUninstallOpenError), [UninstPath]), mbError, MB_OK);
end;
else
Result := False;
end;
end;
end;
по какой-то причине ваш код
RegKey := Format('%s\%s_is1', ['Software\Microsoft\Windows\CurrentVersion\Uninstall',
'{#emit SetupSetting("AppId")}']);
вернула дополнительное { значение _is1. У меня не было времени проверить, почему и где я ошибался в своей реализации, все, что я подтверждаю, это то, что мой установщик работает с
RegKey := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1');
альтернативный.
надеюсь, что это помогает.
Спасибо за пример кода.
при использовании Inno Setup нет причин удалять предыдущую версию, если эта версия не была установлена другой программой установки. В противном случае обновления обрабатываются автоматически.
ваш ответ здесь :
InnoSetup: как автоматически удалить предыдущую установленную версию? предыдущие установленные версии