【问题标题】:Running code only after successful uninstallation in Inno Setup仅在 Inno Setup 中成功卸载后运行代码
【发布时间】:2017-09-28 11:34:09
【问题描述】:

用户在卸载确认提示中点击NO时是否可以处理事件?

如果点击NO,不执行DeinitializeUninstall()?

或者是否可以从 DeinitializeUninstall() 函数处理 NO 按钮?

基本上,我不会在这里避开DelTree

procedure DeinitializeUninstall();
begin
  { if we are running in /SILENT mode, then this is an overinstall - }
  { don't delete additional folder}
  if not UninstallSilent() then
  begin
    DelTree(ExpandConstant('{#BSPLOC}'),True, True, True);
  end;
end;

【问题讨论】:

    标签: inno-setup


    【解决方案1】:

    我相信你的逻辑是错误的。看起来像XY problem

    我不认为您想检测“否”。我相信,您希望在卸载期间或之后运行代码。

    所以请使用符合您要求的事件函数。函数是CurUninstallStepChanged。并且根据您何时需要运行代码,检查 CurUninstallStep 参数的对应值(usUninstallusPostUninstallusDone)。

    procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
    begin
      if CurUninstallStep = usDone then
      begin
        { ... }
      end;
    end;
    

    对于类似的问题,请参阅:


    注意,您似乎还滥用了/SILENT 开关来检测卸载程序是否作为某个进程的一部分自动运行(升级?)。如果用户自己默默地运行卸载程序怎么办?您应该添加另一个自定义开关来发出自动运行的信号。但这是另一个问题。

    【讨论】:

    • 感谢您的快速回复!删除 DeinitializeUninstall() 并使用 CurUninstallStepChanged 解决了问题,干杯!
    • 我实际上是在寻找如何接受答案,但没有注意到用于此目的的按钮。感谢您的澄清!
    猜你喜欢
    • 2016-09-27
    • 1970-01-01
    • 2019-03-23
    • 2011-03-13
    • 2012-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    相关资源
    最近更新 更多