2010-02-05 3 views
0

아래 코드를 컴파일하면 오류없이 완료되지만 설정 파일을 실행하려고하면 형식 불일치 오류가 발생합니다. 아무도 그것을 일으키는 원인이 될지도 저에게 말할 수 있는가? (정확한 오류 메시지 ")는 1:66에 (런타임 오류 : 형식 불일치"입니다.) GetWindowsVersion()의 이노 설치 설명서에서 인용InnoSetup & Pascal - 컴파일 후에도 실행시 형식 불일치 오류

[Setup] 
DefaultDirName={code:AppDir}\MyApp 

[Code] 
function AppDir(Param: String): String; 
var 
Check: Integer; 
begin 
Check := GetWindowsVersion(); 
if Check = 6.0 then 
Result := ExpandConstant('{userdocs}') 
else 
Result := ExpandConstant('{pf}'); 
end; 

답변

2

:

은으로 포장 된 윈도우의 버전 번호를 반환 단일 정수. 상위 8 비트는 주요 버전을 지정합니다. 다음 8 비트는 부 버전을 지정합니다. 하위 16 비트는 빌드 번호를 지정합니다. 예를 들어,이 함수는 Windows 2000에서 버전 5.0.2195 인 $ 05000893을 반환합니다.

당신은 부동 소수점 값과 비교할 수 없습니다

, 당신은 버전 번호의 일부를 추출과 같이 할 필요가 :이 같은 어떤지 VerMajor을 확인해서는 안

function AppDir(Param: String): String; 
var 
    Ver: Cardinal; 
    VerMajor, VerMinor, BuildNum: Cardinal; 
begin 
    Ver := GetWindowsVersion(); 
    VerMajor := Ver shr 24; 
    VerMinor := (Ver shr 16) and $FF; 
    BuildNum := Ver and $FFFF; 

    if VerMajor >= 6 then 
    Result := ExpandConstant('{userdocs}') 
    else 
    Result := ExpandConstant('{pf}'); 
end; 

주 더 낮거나 높은 Windows 버전에서는 실패합니다. 항상 <= 또는 >=을 대신 사용하십시오.

관련 문제