NSIS脚本无法从Windir文件夹中找到该文件

时间:2017-02-08 12:34:15

标签: nsis

  

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。在安装过程中,需要检查一些许可证。我们可以根据文件存在跳过许可证检查吗?

2 个答案:

答案 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 这是对的吗?