Сценарий NSIS не устанавливается в правильном каталоге
Я пытаюсь сделать скрипт установки:
- на 32-битном ПК: tapi_32bits.tsp в
C:\windows\system32
- на 64-битном ПК: tapi_64bits.tsp в
C:\Windows\System32
и tapi_32bits.tsp вC:\Windows\SysWOW64
Это сценарий, который я написал:
; The name of the installer
Name "TAPI Installer"
; The file to write
OutFile "TAPI Installer"
; The default installation directory
InstallDir $DESKTOP
;--------------------------------
; Install to the correct directory on 32 bit or 64 bit machines
Section
IfFileExists $WINDIR\SYSWOW64\*.* Is64bit Is32bit
Is32bit:
; Set output path to the installation directory.
SetOutPath $SYSDIR
; Put file there
File tapi_32bits.tsp
; SectionEnd MessageBox MB_OK "32 bit"
SetRegView 32
StrCpy $INSTDIR "$PROGRAMFILES32\LANDesk\Health Check"
GOTO End32Bitvs64BitCheck
Is64bit:
; install in C:\Windows\System32
SetOutPath $WINDIR\System32\
; file to put there
File tapi_64bits.tsp
; install in C:\Windows\SysWOW64
SetOutPath $WINDIR\SysWOW64
; file to put there
File tapi_32bits.tsp
;SectionEnd MessageBox MB_OK "32 bit"
SetRegView 32
StrCpy $INSTDIR "$PROGRAMFILES32\LANDesk\Health Check"
GOTO End32Bitvs64BitCheck
MessageBox MB_OK "64 bit"
SetRegView 64
StrCpy $INSTDIR "$PROGRAMFILES64\LANDesk\Health Check"
End32Bitvs64BitCheck:
SectionEnd
;--------------------------------
Но на 64-битном ПК он помещает оба файла (tapi_64bits.tsp и tapi_32bits.tsp) в папку Syswow64. Установщик говорит, что он установлен в правильной папке, но оба файла находятся в папке Syswow64. Что я делаю неправильно?
2 ответа
NSIS - это 32-битное приложение, поэтому на него влияет перенаправление файлов.
Вы должны использовать x64.nsh, он имеет код для обнаружения WOW64 и отключения перенаправления (включите его как можно скорее). Другой альтернативой является извлечение $windir\sysnative
но это больше взломать и не работает на XP 64.
Следующий код должен работать.
!include x64.nsh
; Install to the correct directory on 32 bit or 64 bit machines
Section
${If} ${RunningX64}
; install in C:\Windows\System32
SetOutPath $WINDIR\System32\
; file to put there
File tapi_64bits.tsp
; install in C:\Windows\SysWOW64
SetOutPath $WINDIR\SysWOW64
; file to put there
File tapi_32bits.tsp
${Else}
; Set output path to the installation directory.
SetOutPath $SYSDIR
; Put file there
File tapi_32bits.tsp
${EndIf}
SectionEnd