代码之家  ›  专栏  ›  技术社区  ›  Al C

Inno安装程序能否对新安装和更新做出不同的响应?

  •  2
  • Al C  · 技术社区  · 15 年前

    我的innosetup脚本在安装过程结束时打开一个网页(使用用户的默认浏览器):

    [Run]
    Filename: http://example.com; Flags: shellexec
    

    不过,我希望网页 如果应用程序已经存在,即如果用户正在安装程序的新版本,则打开。网页应该 只有 在初次安装后打开。(显然,我认为值得一提的是,安装程序包括一个appid,并在安装文件旁边的注册表中输入值。)

    一如既往地谢谢你——艾尔·C。

    2 回复  |  直到 6 年前
        1
  •  6
  •   Andreas Rejbrand    15 年前

    是的,使用脚本很容易。

    只写

    [Run]
    Filename: "http://example.com"; Flags: shellexec; Check: NotAnUpdate
    
    procedure CurPageChanged(CurPageID: Integer);
    begin
      if CurPageID = wpInstalling then
        IsUpdate := FileExists(ExpandConstant('{app}\TheFileNameOfMyApp.exe'));
    end;
    
    function NotAnUpdate: Boolean;
    begin
      result := not IsUpdate;
    end;
    
        2
  •  3
  •   Martin Prikryl    6 年前

    The answer by @AndreasRejbrand 如果用户选择将可执行文件安装到与上次不同的位置,将无法工作。

    您可以查询特定于安装程序的Inno安装注册表项:

    #define AppId "your-app-id"
    #define SetupReg "Software\Microsoft\Windows\CurrentVersion\Uninstall\" + AppId + "_is1"
    #define SetupAppPathReg "Inno Setup: App Path"
    
    [Setup]
    AppId={#AppId}
    ...
    
    [Run]
    Filename: "https://www.example.com/"; Flags: shellexec; Check: not IsUpgrade
    ...
    
    [Code]
    
    function IsUpgrade: Boolean;
    var
      S: string;
    begin
      Result :=
        RegQueryStringValue(HKLM, '{#SetupReg}', '{#SetupAppPathReg}', S) or
        RegQueryStringValue(HKCU, '{#SetupReg}', '{#SetupAppPathReg}', S);
    end;
    

    例如如何使用 IsUpgrade 在里面 [Code] 截面,见
    Excludes part of Code section if installation is update in Inno Setup

    检查这是您的“appid”包含左花括号:
    Checking if installation is fresh or upgrade does not work when AppId contains a curly bracket

    推荐文章