Determine Windows version in Inno Setup

后端 未结 3 474
谎友^
谎友^ 2020-12-06 03:06

I\'m using Inno Setup to change the recycle bin in the OS. I need to make some cases for if the user is running Windows 7 or Windows XP. I try using:

if not          


        
相关标签:
3条回答
  • 2020-12-06 03:25

    You should use the GetWindowsVersionEx function. It fills a TWindowsVersion record:

    TWindowsVersion = record
      Major: Cardinal;             // Major version number
      Minor: Cardinal;             // Minor version number
      Build: Cardinal;             // Build number
      ServicePackMajor: Cardinal;  // Major version number of service pack
      ServicePackMinor: Cardinal;  // Minor version number of service pack
      NTPlatform: Boolean;         // True if an NT-based platform
      ProductType: Byte;           // Product type (see below)
      SuiteMask: Word;             // Product suites installed (see below)
    end;
    

    There are a lot of other related functions. See below 'System functions' at this page.

    0 讨论(0)
  • 2020-12-06 03:26

    According to the documentation, the parameters associated with each file can be directly tied to the OS version:

    [Files]
    Source: "{app}\WinNT2000XP.exe"; DestDir: "{app}"; MinVersion: 0, 1
    Source: "{app}\Win9598Me.exe"; DestDir: "{app}"; MinVersion: 1, 0
    

    "0" means never install; "1" means install on any version (i.e. version 1.0 or later).

    Note: The above technique isn't limited to the [Files] section; MinVersion and OnlyBelowVersion can be used in most sections.

    0 讨论(0)
  • 2020-12-06 03:32

    In most Inno Setup sections (like [Files], [Tasks], [Run], etc.) you can use the MinVersion and OnlyBelowVersion common parameters.

    [Files]
    Source: MyDllForVistaAndNewer.dll; Dest: {app}\MyDll.dll; MinVersion: 6.0
    Source: MyDllForOldWindows.dll; Dest: {app}\MyDll.dll; OnlyBelowVersion: 6.0
    

    In Pascal Script, use the GetWindowsVersionEx function to find the Windows version number. Then compare the number against a specific Windows version number.

    Here are few handy functions to check specific Windows versions:

    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 IsWindowsXPOrNewer: Boolean;
    begin
      Result := IsWindowsVersionOrNewer(5, 1);
    end;
    
    function IsWindowsVistaOrNewer: Boolean;
    begin
      Result := IsWindowsVersionOrNewer(6, 0);
    end;
    
    function IsWindows7OrNewer: Boolean;
    begin
      Result := IsWindowsVersionOrNewer(6, 1);
    end;
    
    function IsWindows8OrNewer: Boolean;
    begin
      Result := IsWindowsVersionOrNewer(6, 2);
    end;
    
    function IsWindows10OrNewer: Boolean;
    begin
      Result := IsWindowsVersionOrNewer(10, 0);
    end;
    

    Example of use:

    function InitializeSetup: Boolean;
    begin
      if not IsWindowsVistaOrNewer then
      begin 
        MsgBox(
          'This program was not tested on Windows XP and older, proceed with caution.',
          mbCriticalError, MB_OK);
      end;  
    
      Result := True;
    end;
    

    To test for server-editions of Windows, see:
    Checking for Windows Server 2003


    For version checking to work correctly on modern versions of Windows, make sure you always use the latest version of Inno Setup.

    0 讨论(0)
提交回复
热议问题