gpt4 book ai didi

inno-setup - 在已安装应用程序的情况下运行 inno setup 时卸载

转载 作者:行者123 更新时间:2023-12-04 10:01:08 25 4
gpt4 key购买 nike

我刚刚开始使用 inno setup,它似乎运行良好。但是,当我在已安装应用程序的情况下运行安装程序时,它会重新安装。我想给用户卸载。这可能吗,如果可以,怎么做?

具体来说,我为家庭作业编写了一个游戏。我使用 inno setup 制作了一个安装程序。该应用程序安装正常,可以使用控制面板卸载,但我的教授希望能够通过重新运行安装程序并选择卸载选项来卸载该应用程序。这将节省他的时间,因为他有大约 50 个这些作业需要标记。

谢谢,

格里

最佳答案

下一个脚本将在启动安装程序时在目标系统上安装应用程序时生成以下选项:

enter image description here

当用户点击 Repair按钮,设置正常开始。当用户点击 Uninstall按钮,之前安装的应用程序将被卸载。当用户关闭该表单时,什么也没有发生。

这是脚本(不要忘记为脚本中的 AppId setup 指令指定一些唯一的值,最好是一些):

[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;

关于inno-setup - 在已安装应用程序的情况下运行 inno setup 时卸载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14446755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com