2010-02-05 7 views
0

Lorsque je compile le code ci-dessous, il se termine sans erreur, mais lorsque j'essaie d'exécuter le fichier d'installation, j'obtiens une erreur d'incompatibilité de type. Quelqu'un peut-il me dire ce qui pourrait le causer? (Message d'erreur exacte est "Erreur d'exécution (à 1:66): Type Mismatch".)InnoSetup & Pascal - Erreur d'incompatibilité de type à l'exécution même après la compilation réussie

[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; 

Répondre

2

Je cite la documentation Inno Setup pour GetWindowsVersion():

Renvoie le numéro de version de Windows emballé dans un entier unique. Les 8 bits supérieurs spécifient la version majeure; les 8 bits suivants spécifient la version mineure; les 16 bits inférieurs spécifient le numéro de build. Par exemple, cette fonction renvoie $ 05000893 sur Windows 2000, qui est la version 5.0.2195.

Vous ne pouvez pas comparer avec une valeur en virgule flottante, vous devez extraire les parties du numéro de version, comme ceci:

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; 

Notez que vous ne devriez jamais vérifier VerMajor pour l'égalité, comme cela échouerait pour les versions Windows inférieures ou supérieures. Utilisez toujours <= ou >= à la place.