2012-05-25 4 views
0

Я пытаюсь сделать скрипт установки:NSIS скрипт не устанавливается в правильном каталоге

  • на 32бит ПК: tapi_32bits.tsp в C:\windows\system32
  • на 64bits ПК: 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. Что я делаю не так?

ответ

3

NSIS - это 32-разрядное приложение, на которое воздействует file redirection.

Вы должны использовать x64.nsh, у него есть код для обнаружения WOW64 и отключения перенаправления (верните его как можно скорее). Другой альтернативой является извлечение до $windir\sysnative, но это скорее хак и не работает на XP 64.

+0

кажется нормально Sysnative заменяется на system32 Win 7 x64 – Tanguy

+0

@Tanguy: Нет это не так! В 64-битном приложении есть только% windir% \ system32, и в нем содержатся реальные 64-битные системные файлы (32-разрядные системные файлы находятся в SysWow64). В 32-битном приложении% windir% \ sysnative содержит 64-битные системные файлы, а% windir% \ system32 содержит 32-битные системные файлы ... – Anders

-1

Следующий код должен работать.

!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