2011-05-01 2 views
2

Inno Setup을 사용하여 OS의 휴지통을 변경하고 있습니다. 사용자가 Windows 7 또는 Windows XP를 실행중인 경우 몇 가지 사례를 작성해야합니다. 내가 사용하려고 :Inno Setup에서 Windows 버전 확인

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

를하지만 나는 그들이 존재 확인한 경우에도 imageres.dll 또는 shell32.dll를 찾을 수없는 것처럼 보인다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 또는 Windows 버전을 다른 방법으로 확인할 수 있습니까?

답변

6

GetWindowsVersionEx 함수를 사용해야합니다. 그것은 TWindowsVersion 기록을 채운다 : 기타 관련 기능이 많이 있습니다

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; 

. 아래 '시스템 기능'(this page)을 참조하십시오.

7

the documentation에 따르면, 각 파일과 연관된 매개 변수를 직접 OS 버전에 묶여 수 있습니다

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

"0"를 설치하지 의미; "1"은 모든 버전 (즉, 버전 1.0 이상)에서의 설치를 의미합니다.

참고 : 위의 기술은 [파일] 섹션으로 제한되지 않습니다. MinVersion 및 OnlyBelowVersion은 대부분의 섹션에서 사용할 수 있습니다.

3

대부분의 Inno 설정 섹션 ([Files], [Tasks], [Run] 등)에서 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 

는 Windows 버전 번호를 찾기 위해 GetWindowsVersionEx 기능을 사용합니다. 그런 다음 특정 수와 Windows version number을 비교하십시오. 사용

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; 

예 :

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; 

다음은 특정 Windows 버전을 확인하기 위해 몇 가지 편리한 기능입니다