【问题标题】:Skip Preparing to Install Wizard page in Inno Setup跳过 Inno Setup 中的准备安装向导页面
【发布时间】:2019-11-06 15:03:04
【问题描述】:

参考问题Basic or Advanced installation mode choice to skip or use advanced options pages,我现在需要跳过准备安装向导页面。

在我的情况下,显示此页面是因为一个或多个程序正在使用需要由安装程序替换的文件;因此安装程序会询问用户是否希望安装程序自动关闭应用程序并在安装结束时重新启动。

我需要在基本模式下在设置过程中隐藏此页面,并且如果使用了某些文件,设置会自动关闭使用它们的应用程序,而无需向用户询问任何内容。

我尝试将ShouldSkipPage 编辑为:

function ShouldSkipPage(PageID: Integer): Boolean; 
begin 
  { If "Basic" mode is selected, skip Directory and Components pages }
  Result := 
    ModePage.Values[0] and
    ((PageID = wpSelectDir) or (PageID = wpSelectComponents) or (PageID = wpReady) or (PageID = wpPreparing));
end;

添加(PageID = wpPreparing),但页面仍以基本模式显示。

有没有办法使用 Inno Setup 来实现这一点?

【问题讨论】:

    标签: installation inno-setup pascalscript


    【解决方案1】:

    ShouldSkipPage event 甚至没有被调用为wpPreparing。该页面不可跳过。

    如果您仍想跳过它,则必须使用以下技巧:

    使用第一种方法,您的代码将如下所示:

    [Code]
    const
      BN_CLICKED = 0;
      WM_COMMAND = $0111;
      CN_BASE = $BC00;
      CN_COMMAND = CN_BASE + WM_COMMAND;
    
    procedure CurPageChanged(CurPageID: Integer);
    var
      Param: Longint;
    begin
      { If Basic mode is selected, skip Preparing page }
      if (CurPageID = wpPreparing) and ModePage.Values[0] then
      begin
        Param := 0 or BN_CLICKED shl 16;
        PostMessage(WizardForm.NextButton.Handle, CN_COMMAND, Param, 0);
      end;
    end;
    

    【讨论】:

      【解决方案2】:

      只是不要那样做。曾经。您在不提示用户的情况下关闭任意应用程序列表是绝对不可接受的。提前开枪然后在安装结束时要求重新启动同样不礼貌。 (不问就触发重启是不可原谅的。)

      可以做的是将一些代码放入PrepareToInstall [Code] 函数中,该函数将自动关闭您的应用程序。这会在提示用户关闭应用程序之前执行,因此如果仅涉及您的应用程序,则不会提示它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多