【问题标题】:Create icons for and run different programs on different versions of Windows in Inno Setup在 Inno Setup 中为不同版本的 Windows 创建图标并运行不同的程序
【发布时间】:2021-05-18 21:58:25
【问题描述】:

我想在安装过程中使用代码变量来决定[Icons][Run] 部分,但我不知道我是否错了。

我的[Code] 部分是:

[Code]
var 
  myW7Val: string;

function GetMyW7Val(Value: string): string;
begin
  Result := myW7Val;
end;

function IsWindowsVersionOrNewer(Major, Minor: Integer): Boolean;
var
  Version: TWindowsVersion;
begin
  GetWindowsVersionEx(Version);
  Result :=
    (Version.Major > Major) or
    ((Version.Major = Major) and (Version.Minor >= Minor));
end;

function IsWindows8OrNewer: Boolean;
begin
  Result := IsWindowsVersionOrNewer(6, 2);
  if not Result then
    myW7Val := '1';  
  myW7Val := '0';
end;

function InitializeSetup: Boolean;
begin
  IsWindows8OrNewer
  Result := True;
end;

我的[Icons] 部分是:

[Icons]
#if "{code:GetMyW7Val}" == '0'
  Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
  Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; \
    Tasks: desktopicon
  Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; \
    Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
#elif "{code:GetMyW7Val}" == '1'
  Name: "{autoprograms}\{#MyAppLanceurName}"; \
    Filename: "{app}\{#MyAppLanceurExeName}"
  Name: "{autodesktop}\{#MyAppLanceurName}"; \
    Filename: "{app}\{#MyAppLanceurExeName}"; Tasks: desktopicon
  Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppLanceurName}"; \
    Filename: "{app}\{#MyAppLanceurExeName}"; Tasks: quicklaunchicon
#endif

如果 myW7Val0 ,我想使用前三个条目,如果 myW7Val1 ,则使用其他条目。但目前我有一个错误,没有价值观。

你有什么想法吗?

提前致谢

【问题讨论】:

    标签: inno-setup pascalscript


    【解决方案1】:

    要回答您的字面问题,请使用Check parameter

    [Code]
    function IsWindows8OrNewer: Boolean;
    begin
      Result := IsWindowsVersionOrNewer(6, 2);
    end;
    
    [Icons]
    Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; \
      Check: not IsWindows8OrNewer 
    Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; \
      Tasks: desktopicon; Check: not IsWindows8OrNewer 
    Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; \
      Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon; \
      Check: not IsWindows8OrNewer 
    
    Name: "{autoprograms}\{#MyAppLanceurName}"; \
      Filename: "{app}\{#MyAppLanceurExeName}"; Check: IsWindows8OrNewer 
    Name: "{autodesktop}\{#MyAppLanceurName}"; \
      Filename: "{app}\{#MyAppLanceurExeName}"; Tasks: desktopicon; \
      Check: IsWindows8OrNewer 
    Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppLanceurName}"; \
      Filename: "{app}\{#MyAppLanceurExeName}"; Tasks: quicklaunchicon; \
      Check: IsWindows8OrNewer 
    

    虽然这有点矫枉过正,但有 MinVersion and OnlyBelowVersion parameters 用于选择特定 Windows 版本的条目:

    [Icons]
    Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; \
      OnlyBelowVersion: 6.2
    Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; \
      Tasks: desktopicon; OnlyBelowVersion: 6.2
    Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; \
      Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon; \
      OnlyBelowVersion: 6.2
     
    Name: "{autoprograms}\{#MyAppLanceurName}"; \
      Filename: "{app}\{#MyAppLanceurExeName}"; MinVersion: 6.2 
    Name: "{autodesktop}\{#MyAppLanceurName}"; \
      Filename: "{app}\{#MyAppLanceurExeName}"; Tasks: desktopicon; \
      MinVersion: 6.2
    Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppLanceurName}"; \
      Filename: "{app}\{#MyAppLanceurExeName}"; Tasks: quicklaunchicon; MinVersion: 6.2
    

    或者,您可以使用scripted constant 来选择应用程序名称和文件名,以避免重复Icons 条目:

    [Code]
    function IsWindows8OrNewer: Boolean;
    begin
      Result := IsWindowsVersionOrNewer(6, 2);
    end;
    
    function GetAppName(Param: string): string;
    begin
      if IsWindows8OrNewer then Result := '{#MyAppLanceurName}'
        else Result := '{#MyAppName}';
    end;
    
    function GetAppExeName(Param: string): string;
    begin
      if IsWindows8OrNewer then Result := '{#MyAppLanceurExeName}'
        else Result := '{#MyAppExeName}';
    end;
    
    [Icons]
    Name: "{autoprograms}\{code:GetAppName}"; Filename: "{app}\{code:GetAppExeName}"
    Name: "{autodesktop}\{code:GetAppName}"; Filename: "{app}\{code:GetAppExeName}"; \
      Tasks: desktopicon
    Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{code:GetAppName}"; \
      Filename: "{app}\{code:GetAppExeName}"; Tasks: quicklaunchicon
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-12
      • 2022-01-27
      • 2014-10-18
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 2011-03-31
      • 2018-10-07
      相关资源
      最近更新 更多