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 FileNotFoundNSIS сценарий не смог найти файл из папки Windir

Этот код всегда выполняет часть файла file_not_found, даже если этот файл существует в соответствующем пути.

также попытался ниже способом:

Функция AB
Var/GLOBAL OnlineOrOffline
$ {Расположить} "$ Windir \ system32 \ Drivers \" "/ L = F /M=pcitdrv.sys" " SetOnlineOfflineVarliable»
MessageBox MB_OK $ OnlineOrOffline
FunctionEnd

Функция SetOnlineOfflineVarliable
STRCPY $ R0 $ R9
STRCPY $ OnlineOrOffline "Найдено"
STRCPY $ 0 StopLocate
Нажмите $ 0
FunctionEnd

В этом случае также функция обратного вызова не вызывается.

Нужна помощь по этому вопросу.

Или просто

Мое требование предполагают ПК с $ WINDIR/system32/драйверы/файл присутствует pcitdrv.sys и другой компьютер, не имеющий файл. Во время установки есть проверка лицензии. Можем ли мы пропустить проверку лицензии на основе присутствия файла?

+0

Это происходит только на 64-битной Windows? – Anders

ответ

0

Части файловой системы: redirected при работе в 32-разрядном приложении в 64-разрядной версии Windows.

$ windir \ system32 перенаправляется на $ windir \ SysWOW64.

Вы можете отключить переадресацию при выполнении проверки:

!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 

Если вы не заботитесь о Windows XP 64-бит support вы можете использовать специальную папку псевдо, что всегда обращается к «реальной» system32 папка:

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

Спасибо. Это работает. Но что делает это 0 +2. Также будет ли этот скрипт работать и для всех битовых версий? 32/64 также –

+0

0 нет прыжка, +2 это пропустить эту и следующую инструкцию. Должен работать везде. – Anders

+0

О! Спасибо, Андерс. –

0

еще одно сомнение на самом деле
$ {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
Гото сделал
file_found:

сделано:
Я хотел бы, чтобы проверить два файла pcit и tcit.
Это верно?

Смежные вопросы