Inno Setup可以对新安装和更新做出不同的响应吗?

问题描述 投票:2回答:2

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

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

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

谢谢你,一如既往 - Al C.

inno-setup upgrade
2个回答
6
投票

是的,这很容易用脚本编写。

写吧

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

3
投票

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

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

#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

© www.soinside.com 2019 - 2024. All rights reserved.