卸载顺序

len*_*ant 4 inno-setup pascalscript

我可以找到某个实际的订单,在卸载期间执行哪些事件和部分?例如,是否UninstallDelete会比usPostUninstall卸载步骤更早出现?

Inno Setup在手册中有"安装顺序"一文,但它看起来更像是编译顺序,而不是执行.

Mar*_*ryl 9

卸载顺序与安装顺序相反,正如手册所说(并且它实际上是安装顺序,而不是编译顺序).

这只是因为没有编程的卸载顺序.安装程序将其步骤记录到卸载日志中,卸载程序只是以相反的顺序处理日志,而无需任何更改顺序的选项.

事件的功能适合在卸载过程如下(仅示出了主要的卸载步骤):

  • CurUninstallStepChanged(usAppMutexCheck)
  • InitializeUninstallProgressForm
  • CurUninstallStepChanged(usUninstall)
  • 处理卸载日志:
    • [UninstallRun]
    • 注册表项
    • 图标
    • 应用目录
    • [UninstallDelete]
  • 第二次尝试删除目录(例如之前尚未为空的目录)
  • CurUninstallStepChanged(usPostUninstall)
  • CurUninstallStepChanged(usDone)
  • DeinitializeUninstall

我在一个简单的安装程序上测试了这个:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
OutputDir=.

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

[Icons]
Name: "{group}\My Program"; Filename: "{app}\MyProg.exe"

[UninstallRun]
FileName: "{app}\MyProg.exe"

[UninstallDelete]
Type: files; Name: "{app}\test.dat"
Run Code Online (Sandbox Code Playgroud)

卸载程序日志就像(它没有显示所有步骤):

[Code]

function InitializeUninstall(): Boolean;
begin
  Log('InitializeUninstall');
  Result := True;
end;

procedure InitializeUninstallProgressForm;
begin
  Log('InitializeUninstallProgressForm');
end;

procedure DeinitializeUninstall;
begin
  Log('DeinitializeUninstall');
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  Log('CurUninstallStepChanged + ' + IntToStr(Integer(CurUninstallStep)));
end;
Run Code Online (Sandbox Code Playgroud)