2017-02-08 3 views
0

IfFileExists windir $ \ system32 \ drivers \ pcitdrv.sys file_found file_not_found
file_found:
MessageBox MB_OK FileFound
file_not_found:
MessageBox MB_OK FileNotFoundscripts NSIS pas en mesure de trouver le fichier à partir du dossier Windir

Ce code exécute toujours la partie file_not_found du code même si ce fichier existe dans le chemin respectif.

a également essayé la manière suivante:

Fonction AB
Var/GLOBAL OnlineOrOffline
$ {} Localisez "windir $ \ system32 \ drivers \" "/ L = F /M=pcitdrv.sys" " SetOnlineOfflineVarliable »
MessageBox MB_OK $ OnlineOrOffline
FunctionEnd

Fonction SetOnlineOfflineVarliable
StrCpy $ $ R9
R0 StrCpy $ OnlineOrOffline "Trouvé"
StrCpy $ 0 StopLocate
Poussez $ 0
FunctionEnd

Dans ce scénario également la fonction de rappel n'est pas appelée.

Besoin d'aide à ce sujet.

Ou tout simplement

Mon exigence est supposé un PC avec windir $/system32/drivers/fichier pcitdrv.sys présent et un autre PC est de ne pas avoir ce fichier. Pendant l'installation, il y a un contrôle pour une licence. Pouvons-nous passer la vérification de la licence en fonction de la présence du fichier?

+0

Est-ce que cela fonctionne seulement sur Windows 64 bits? – Anders

Répondre

0

Certaines parties du système de fichiers sont redirected lorsqu'elles s'exécutent sur une application 32 bits sur une version 64 bits de Windows.

$ windir \ system32 est redirigé vers $ windir \ SysWOW64.

Vous pouvez désactiver la redirection lors de l'exécution de la vérification:

!include x64.nsh 
Section 

${DisableX64FSRedirection} 
StrCpy $0 "" 
IfFileExists "$windir\system32\drivers\pcitdrv.sys" 0 +2 
StrCpy $0 "1" 
${EnableX64FSRedirection} 

StrCmp $0 "" 0 file_found 
MessageBox MB_OK FileNotFound 
goto done 
file_found: 
MessageBox MB_OK FileFound 
done: 

SectionEnd 

Si vous ne se soucient pas de Windows XP 64 bits support vous pouvez utiliser un dossier spécial pseudo qui accède toujours system32 « vrai » dossier:

Section 

IfFileExists "$windir\system32\drivers\pcitdrv.sys" file_found ; Check on 32-bit Windows 
IfFileExists "$windir\sysnative\drivers\pcitdrv.sys" file_found ; Check on 64-bit Windows 

MessageBox MB_OK FileNotFound 
goto done 
file_found: 
MessageBox MB_OK FileFound 
done: 

SectionEnd 
+0

Merci, ça fonctionne, mais que fait ce 0 + 2. Est-ce que ce script fonctionnera aussi pour toutes les versions binaires? 32/64 aussi –

+0

0 est pas de saut, +2 est ignorer ceci et l'instruction suivante. Devrait travailler partout. – Anders

+0

Oh! Merci Anders. –

0

Un doute plus est en fait
$ {} DisableX64FSRedirection
sTRCPY $ 0 ""
IfFileExists "windir $ \ system32 \ drivers \ pcitdrv.sys" 0 +2
StrCpy $ 0 "1"
$ {EnableX64FSRedirection}
STRCMP $ 0 "" 0 file_found
$ {DisableX64FSRedirection}
STRCPY $ 0 ""
IfFileExists "$ windir \ system32 \ drivers \ tcitdrv.sys » 0 +2
StrCpy $ 0 "1"
$ {EnableX64FSRedirection}
STRCMP $ 0 "" 0 file_found
goto fait
file_found:

fait:
Je voudrais vérifier deux fichiers PCIT Est-ce correct?