2011-05-01 5 views
2

J'utilise Inno Setup pour changer la corbeille dans le système d'exploitation. Je dois faire quelques cas pour si l'utilisateur exécute Windows 7 ou Windows XP. J'essayer d'utiliser:Déterminer la version Windows dans Inno Setup

if not FileExists(winDir + '\System32\imageres.dll') then 
    if not FileExists(winDir + '\System32\shell32.dll') then 
    installError(3); 

Mais il semble que cela ne peut pas trouver imageres.dll ou shell32.dll même si j'ai vérifié qu'ils existent. Qu'est-ce que je fais mal? Ou puis-je vérifier la version Windows d'une autre manière?

Répondre

6

Vous devez utiliser la fonction GetWindowsVersionEx. Il remplit un TWindowsVersion enregistrement:

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; 

Il y a beaucoup d'autres fonctions connexes. Voir ci-dessous 'Fonctions système' au this page.

7

Selon the documentation, les paramètres associés à chaque fichier peut être directement lié à la version OS:

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

"0" signifie ne jamais installer; "1" signifie installer sur n'importe quelle version (c'est-à-dire la version 1.0 ou ultérieure).

Remarque: La technique ci-dessus n'est pas limitée à la section [Files]; MinVersion et OnlyBelowVersion peuvent être utilisés dans la plupart des sections.

3

Dans la plupart des sections de configuration Inno (comme [Files], [Tasks], [Run], etc.) vous pouvez utiliser le 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 

dans le script Pascal, utilisez la fonction GetWindowsVersionEx pour trouver le numéro de version de Windows. Ensuite, comparez le nombre par rapport à un Windows version number spécifique.

Voici quelques fonctions pratiques pour vérifier les versions spécifiques de Windows:

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; 

Exemple d'utilisation:

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;