Сценарий 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

Другие вопросы по тегам