IfFileExists $ windir \ system32 \ drivers \ pcitdrv.sys file_found file_not_found
file_found:
MessageBox MB_OK FileFound
FILE_NOT_FOUND:
MessageBox MB_OK FileNotFound
此代码始终执行file_not_found部分代码,即使该文件存在于相应路径中。
还尝试了以下方式:
功能AB
Var / GLOBAL OnlineOrOffline
$ {Locate}" $ windir \ system32 \ drivers \" " / L = F /M=pcitdrv.sys" " SetOnlineOfflineVarliable"
MessageBox MB_OK $ OnlineOrOffline
FunctionEnd
功能SetOnlineOfflineVarliable
StrCpy $ R0 $ R9
StrCpy $ OnlineOrOffline" Found"
StrCpy $ 0 StopLocate
推$ 0
FunctionEnd
在这种情况下,也不会调用回调函数。
需要帮助。
或者只是为了
我的要求是假设存在$ windir / system32 / drivers / pcitdrv.sys文件且另一台PC没有该文件的PC。在安装过程中,需要检查一些许可证。我们可以根据文件存在跳过许可证检查吗?
答案 0 :(得分:0)
在64位版本的Windows上运行32位应用程序时,部分文件系统为redirected。
$ 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,您可以使用一个特殊的伪文件夹,该文件夹始终可以访问" real" 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
答案 1 :(得分: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
这是对的吗?