⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filezilla.nsi

📁 一个支持FTP,SFTP的客户端程序
💻 NSI
📖 第 1 页 / 共 2 页
字号:
  GetDlgItem $R3 $IO_HWND 1206 ; Package directory input field
  GetDlgItem $R4 $IO_HWND 1207 ; Package directory browse button
  EnableWindow $R2 $R0

  StrCmp $R0 0 +4
  EnableWindow $R3 $R1
  EnableWindow $R4 $R1
  goto +3
  EnableWindow $R3 0
  EnableWindow $R4 0
  
  Abort ; Return to the page

validate_dldialog:
  ; Nothing to validate

FunctionEnd

Function Settings

  StrCpy $R1 ""

  SectionGetFlags ${SecFrenchDocumentation} $R0
  Intop $R0 $R0 & "0x1"
  StrCmp $R0 0 +2
  StrCpy $R1 "x"

  SectionGetFlags ${SecSourceCode} $R0
  Intop $R0 $R0 & "0x1"
  StrCmp $R0 0 +2
  StrCpy $R1 "x"

  StrCpy $R0 ""
  StrCmp $R1 "" "" skipsetinstallbutton
  strCpy $R0 $(^InstallBtn)
 skipsetinstallbutton:
  !insertmacro MUI_INSTALLOPTIONS_WRITE "settings.ini" settings NextButtonText $R0

  !insertmacro MUI_INSTALLOPTIONS_WRITE "settings.ini" "Field 1" text $(QuestionRunInSecureMode)
  !insertmacro MUI_INSTALLOPTIONS_WRITE "settings.ini" "Field 2" text $(UseSecureMode)
  !insertmacro MUI_INSTALLOPTIONS_WRITE "settings.ini" "Field 3" text $(DontUseSecureMode)

  ReadRegStr $R0 HKCU Software\FileZilla "Run in Secure mode"
  StrCmp $R0 "1" preselectsecure
  ReadRegStr $R0 HKLM Software\FileZilla "Run in Secure mode"
  StrCmp $R0 "1" preselectsecure
  goto preselectsecure_end
 preselectsecure:
  !insertmacro MUI_INSTALLOPTIONS_WRITE "settings.ini" "Field 2" state 1
  !insertmacro MUI_INSTALLOPTIONS_WRITE "settings.ini" "Field 3" state 0
 preselectsecure_end:

  !insertmacro MUI_INSTALLOPTIONS_WRITE "settings.ini" "Field 4" text $(StorageQuestion)
  !insertmacro MUI_INSTALLOPTIONS_WRITE "settings.ini" "Field 5" text $(UseXML)
  !insertmacro MUI_INSTALLOPTIONS_WRITE "settings.ini" "Field 6" text $(UseRegistry)
  !insertmacro MUI_INSTALLOPTIONS_WRITE "settings.ini" "Field 7" text $(ForceUseRegistry)

  ReadRegStr $R0 HKCU Software\FileZilla "Use Registry"
  StrCmp $R0 "2" preselectstorage_force
  StrCmp $R0 "1" preselectstorage
  ReadRegStr $R0 HKLM Software\FileZilla "Use Registry"
  StrCmp $R0 "2" preselectstorage_force
  StrCmp $R0 "1" preselectstorage

  !insertmacro MUI_INSTALLOPTIONS_WRITE "settings.ini" "Field 7" flags "DISABLED"
  goto preselectstorage_end
 preselectstorage_force:
  !insertmacro MUI_INSTALLOPTIONS_WRITE "settings.ini" "Field 7" state 1
 preselectstorage:
  !insertmacro MUI_INSTALLOPTIONS_WRITE "settings.ini" "Field 6" state 1
  !insertmacro MUI_INSTALLOPTIONS_WRITE "settings.ini" "Field 5" state 0
 preselectstorage_end:

  !insertmacro MUI_HEADER_TEXT $(PageSettingsTitle) $(PageSettingsSubTitle)
  !insertmacro MUI_INSTALLOPTIONS_INITDIALOG "settings.ini"
  Pop $IO_HWND
  !insertmacro MUI_INSTALLOPTIONS_SHOW

FunctionEnd

Function SettingsEnd

  ; At this point the user has either pressed Next or one of our custom buttons
  ; We find out which by reading from the INI file
  !insertmacro MUI_INSTALLOPTIONS_READ $R0 "settings.ini" "Settings" "State"
  StrCmp $R0 0 validate_settingsdialog ; Next button?
  StrCmp $R0 5 onchange_settingsdialog
  StrCmp $R0 6 onchange_settingsdialog
  Abort ; Return to the page

onchange_settingsdialog:
  ; Make the Force registry field depend on use registry radiobuttun
  !insertmacro MUI_INSTALLOPTIONS_READ $R0 "settings.ini" "Field 5" "State"
  GetDlgItem $R1 $IO_HWND 1206 ; Force registry checkbox

  StrCmp $R0 0 "" +3
  EnableWindow $R1 1
  goto +2
  EnableWindow $R1 0
  
  Abort ; Return to the page

validate_settingsdialog:
  ; Nothing to validate

FunctionEnd

!macro checklang RefLang LangToFind goto
  push "${Reflang}"
  push "${LangToFind}"
  call StrStr
  Pop $R1
  StrCmp $1 "" "" ${goto}
!macroend

Function WriteLanguage

  Push $R0
  Push $R1
  
  ;Checks current language set in the registry, if none is set (or one not included in the installer) set it to the current one
  StrCpy $R0 ""
 
  ;First check/set the value under HKCU
  ReadRegStr $R0 HKCU Software\FileZilla Language
  StrCmp $R0 "" HKCU_SetLanguage
  !insertmacro checklang "$R0" "Bulgarian" HKCU_SetLanguage
  !insertmacro checklang "$R0" "Catalan" HKCU_SetLanguage
  !insertmacro checklang "$R0" "Czech" HKCU_SetLanguage
  !insertmacro checklang "$R0" "English" HKCU_SetLanguage
  !insertmacro checklang "$R0" "Deutsch" HKCU_SetLanguage
  !insertmacro checklang "$R0" "Fran鏰is" HKCU_SetLanguage
  !insertmacro checklang "$R0" "Italiano" HKCU_SetLanguage
  !insertmacro checklang "$R0" "Hungarian" HKCU_SetLanguage
  !insertmacro checklang "$R0" "Japanese" HKCU_SetLanguage
  !insertmacro checklang "$R0" "Korean" HKCU_SetLanguage
  !insertmacro checklang "$R0" "Norwegian" HKCU_SetLanguage
  !insertmacro checklang "$R0" "Polski" HKCU_SetLanguage
  !insertmacro checklang "$R0" "Russian" HKCU_SetLanguage
  !insertmacro checklang "$R0" "Simplified Chinese" HKCU_SetLanguage
  !insertmacro checklang "$R0" "Traditional Chinese" HKCU_SetLanguage
  !Insertmacro checklang "$R0" "Slovak" HKCU_SetLanguage

  goto HKLM_CheckLanguage

 HKCU_SetLanguage:
  WriteRegStr HKCU Software\FileZilla Language $(FZLanguageName)
  
 HKLM_CheckLanguage:
  
  StrCpy $R0 ""
 
  ;Now check/set the value under HKLM
  ReadRegStr $R0 HKLM Software\FileZilla Language
  StrCmp $R0 "" HKLM_SetLanguage
  !insertmacro checklang "$R0" "Bulgarian" HKLM_SetLanguage
  !insertmacro checklang "$R0" "Catalan" HKLM_SetLanguage
  !insertmacro checklang "$R0" "Czech" HKLM_SetLanguage
  !insertmacro checklang "$R0" "English" HKLM_SetLanguage
  !insertmacro checklang "$R0" "Deutsch" HKLM_SetLanguage
  !insertmacro checklang "$R0" "Fran鏰is" HKLM_SetLanguage
  !insertmacro checklang "$R0" "Italiano" HKLM_SetLanguage
  !insertmacro checklang "$R0" "Hungarian" HKLM_SetLanguage
  !insertmacro checklang "$R0" "Japanese" HKLM_SetLanguage
  !insertmacro checklang "$R0" "Korean" HKLM_SetLanguage
  !insertmacro checklang "$R0" "Norwegian" HKLM_SetLanguage
  !insertmacro checklang "$R0" "Polski" HKLM_SetLanguage
  !insertmacro checklang "$R0" "Russian" HKLM_SetLanguage
  !insertmacro checklang "$R0" "Simplified Chinese" HKLM_SetLanguage
  !insertmacro checklang "$R0" "Traditional Chinese" HKLM_SetLanguage
  !Insertmacro checklang "$R0" "Slovak" HKLM_SetLanguage

  goto SetLanguageDone

 HKLM_SetLanguage:
  WriteRegStr HKLM Software\FileZilla Language $(FZLanguageName)
  
 SetLanguageDone:
  Pop $R1
  Pop $R0

FunctionEnd

; GetParameters
; input, none
; output, top of stack (replaces, with e.g. whatever)
; modifies no other variables.

Function GetParameters

  Push $R0
   Push $R1
   Push $R2
   Push $R3
   
   StrCpy $R2 1
   StrLen $R3 $CMDLINE
   
   ;Check for quote or space
   StrCpy $R0 $CMDLINE $R2
   StrCmp $R0 '"' 0 +3
     StrCpy $R1 '"'
     Goto loop
   StrCpy $R1 " "
   
   loop:
     IntOp $R2 $R2 + 1
     StrCpy $R0 $CMDLINE 1 $R2
     StrCmp $R0 $R1 get
     StrCmp $R2 $R3 get
     Goto loop
   
   get:
     IntOp $R2 $R2 + 1
     StrCpy $R0 $CMDLINE 1 $R2
     StrCmp $R0 " " get
     StrCpy $R0 $CMDLINE "" $R2
   
   Pop $R3
   Pop $R2
   Pop $R1
   Exch $R0

FunctionEnd

; StrStr
; input, top of stack = string to search for
;        top of stack-1 = string to search in
; output, top of stack (replaces with the portion of the string remaining)
; modifies no other variables.
;
; Usage:
;   Push "this is a long ass string"
;   Push "ass"
;   Call StrStr
;   Pop $R0
;  ($R0 at this point is "ass string")

Function StrStr
Exch $R1 ; st=haystack,old$R1, $R1=needle
  Exch    ; st=old$R1,haystack
  Exch $R2 ; st=old$R1,old$R2, $R2=haystack
  Push $R3
  Push $R4
  Push $R5
  StrLen $R3 $R1
  StrCpy $R4 0
  ; $R1=needle
  ; $R2=haystack
  ; $R3=len(needle)
  ; $R4=cnt
  ; $R5=tmp
 loop:
  StrCpy $R5 $R2 $R3 $R4
  StrCmp $R5 $R1 done
  StrCmp $R5 "" done
  IntOp $R4 $R4 + 1
  Goto loop
 done:
  StrCpy $R1 $R2 "" $R4
  Pop $R5
  Pop $R4
  Pop $R3
  Pop $R2
  Exch $R1
FunctionEnd

!include "download.nsh"

;--------------------------------
;Descriptions

!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
  !insertmacro MUI_DESCRIPTION_TEXT ${SecFileZilla} $(SecFileZillaDesc)
  !insertmacro MUI_DESCRIPTION_TEXT ${SecDocumentation} $(SecDocumentationDesc)
  !insertmacro MUI_DESCRIPTION_TEXT ${SecEnglishDocumentation} $(SecEnglishDocumentationDesc)
  !insertmacro MUI_DESCRIPTION_TEXT ${SecFrenchDocumentation} $(SecFrenchDocumentationDesc)
  !insertmacro MUI_DESCRIPTION_TEXT ${SecLangFiles} $(SecLangFilesDesc)
  !insertmacro MUI_DESCRIPTION_TEXT ${SecSourceCode} $(SecSourceCodeDesc)
  !insertmacro MUI_DESCRIPTION_TEXT ${SecStartMenu} $(SecStartMenuDesc)
  !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktopIcon} $(SecDesktopIconDesc)
  !insertmacro MUI_DESCRIPTION_TEXT ${SecDebug} $(SecDebugDesc)
!insertmacro MUI_FUNCTION_DESCRIPTION_END

;--------------------------------
;Uninstaller section

!macro deleteLanguageFiles LANGNAME SHORTNAME

  Delete "$INSTDIR\source\LanguageDLLs\${LANGNAME}\FzRes${SHORTNAME}.vcproj"
  Delete "$INSTDIR\source\LanguageDLLs\${LANGNAME}\FzRes${SHORTNAME}.rc"
  Delete "$INSTDIR\source\LanguageDLLs\${LANGNAME}\res\toolbar.bmp"
  Delete "$INSTDIR\source\LanguageDLLs\${LANGNAME}\fz_${LANGNAME}.nsh"
  RMDir "$INSTDIR\source\LanguageDLLs\${LANGNAME}\res"
  RMDir "$INSTDIR\source\LanguageDLLs\${LANGNAME}"

!macroend

Section "Uninstall"

  ;Add your stuff here

  ; remove registry keys
  MessageBox MB_ICONQUESTION|MB_YESNO $(un.QuestionDeleteRegistry) IDNO NoRegDelete
  DeleteRegKey HKCU "Software\FileZilla"
  DeleteRegKey HKLM "Software\FileZilla"
 NoRegDelete:
  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\FileZilla"

  ; remove files
  Delete $INSTDIR\FileZilla.exe
  Delete $INSTDIR\FileZilla.chm
  Delete $INSTDIR\FileZillaFrench.chm
  Delete $INSTDIR\dbghelp.dll
  Delete $INSTDIR\FzGSS.dll
  Delete $INSTDIR\FzResBu.dll
  Delete $INSTDIR\FzResBr.dll
  Delete $INSTDIR\FzResCa.dll
  Delete $INSTDIR\FzResCh.dll
  Delete $INSTDIR\FzResChs.dll
  Delete $INSTDIR\FzResCze.dll
  Delete $INSTDIR\FzResDe.dll
  Delete $INSTDIR\FzResEs.dll
  Delete $INSTDIR\FzResFr.dll
  Delete $INSTDIR\FzResHu.dll
  Delete $INSTDIR\FzResIt.dll
  Delete $INSTDIR\FzResJp.dll
  Delete $INSTDIR\FzResKr.dll
  Delete $INSTDIR\FzResNor.dll
  Delete $INSTDIR\FzResPo.dll
  Delete $INSTDIR\FzResRu.dll
  Delete $INSTDIR\FzResSk.dll
  Delete $INSTDIR\libeay32.dll
  Delete $INSTDIR\FzSFtp.exe"
  Delete $INSTDIR\ssleay32.dll
  Delete $INSTDIR\GPL.html
  Delete $INSTDIR\puttylicense.html
  Delete $INSTDIR\legal.htm
  Delete $INSTDIR\readme.htm

  ; Remove source code
  Delete $INSTDIR\build.bat
  Delete $INSTDIR\source\*.cpp"
  Delete $INSTDIR\source\*.h"
  Delete $INSTDIR\source\FileZilla.sln"
  Delete $INSTDIR\source\FileZilla.vcproj"
  Delete $INSTDIR\source\FileZilla.rc"

  ; source\res
  Delete $INSTDIR\source\res\*.ico
  Delete $INSTDIR\source\res\*.bmp
  Delete $INSTDIR\source\res\FileZilla.rc2
  Delete $INSTDIR\source\res\manifest.xml

  ; source\misc
  Delete $INSTDIR\source\misc\*.cpp
  Delete $INSTDIR\source\misc\*.h
  Delete $INSTDIR\source\misc\*.hpp

  ; source\gss
  Delete $INSTDIR\source\gss\*.h

  ; source\documentation
  Delete $INSTDIR\source\documentation\*.htm"
  Delete $INSTDIR\source\documentation\*.css"
  Delete $INSTDIR\source\documentation\*.hhc"
  Delete $INSTDIR\source\documentation\*.hhp"
  Delete $INSTDIR\source\documentation\*.hhk"
  Delete $INSTDIR\source\documentation\*.png"

  ; source\documentation\french
  Delete $INSTDIR\source\documentation\french\*.htm"
  Delete $INSTDIR\source\documentation\french\*.css"
  Delete $INSTDIR\source\documentation\french\*.hhc"
  Delete $INSTDIR\source\documentation\french\*.hhp"
  Delete $INSTDIR\source\documentation\french\*.hhk"
  Delete $INSTDIR\source\documentation\french\*.png"

  ; source\install
  Delete $INSTDIR\source\install\autobuild
  Delete $INSTDIR\source\install\uninstall.ico
  Delete $INSTDIR\source\install\FileZilla.nsi
  Delete $INSTDIR\source\install\license.txt
  Delete $INSTDIR\source\install\download.nsh
  Delete $INSTDIR\source\install\download.ini
  Delete $INSTDIR\source\install\settings.ini

  ; source\openssl
  Delete $INSTDIR\source\openssl\*.h

  ; source\LanguageDLLs
  Delete $INSTDIR\source\LanguageDLLs\fixmingw.sh
  Delete $INSTDIR\source\LanguageDLLs\fixmingw.sed
  Delete "$INSTDIR\source\LanguageDLLs\Translation Guide.htm"
  Delete $INSTDIR\source\LanguageDLLs\makelangfiles.sh

  ; Delete language files and folders
  !insertmacro deleteLanguageFiles English En
  !insertmacro deleteLanguageFiles Bulgarian Bu
  !insertmacro deleteLanguageFiles Breton Br
  !insertmacro deleteLanguageFiles Catalan Ca
  !insertmacro deleteLanguageFiles Czech Cze
  !insertmacro deleteLanguageFiles SimplifiedChinese Chs
  !insertmacro deleteLanguageFiles TraditionalChinese Ch
  !insertmacro deleteLanguageFiles French Fr
  !insertmacro deleteLanguageFiles German De
  !insertmacro deleteLanguageFiles Hungarian Hu
  !insertmacro deleteLanguageFiles Italian It
  !insertmacro deleteLanguageFiles Japanese Jp
  !insertmacro deleteLanguageFiles Korean Kr
  !insertmacro deleteLanguageFiles Norwegian Nor
  !insertmacro deleteLanguageFiles Polish Po
  !insertmacro deleteLanguageFiles Spanish Es
  !insertmacro deleteLanguageFiles Russian Ru
  !insertmacro deleteLanguageFiles Slovak Sk

  ;FzSFtp
  Delete "$INSTDIR\source\FzSFtp\*.h"
  Delete "$INSTDIR\source\FzSFtp\*.c"
  Delete "$INSTDIR\source\FzSFtp\*.cpp"
  Delete "$INSTDIR\source\FzSFtp\FzSFtp.rc"
  Delete "$INSTDIR\source\FzSFtp\FzSFtp.vcproj"
  Delete "$INSTDIR\source\FzSFtp\LICENCE"
  Delete "$INSTDIR\source\FzSFtp\res\scp.ico"

  ; MUST REMOVE UNINSTALLER, too
  Delete $INSTDIR\uninstall.exe
  ; remove shortcuts, if any.
  Delete "$SMPROGRAMS\FileZilla\*.*"
  Delete $DESKTOP\FileZilla.lnk
  ; remove directories used.

  ; Remove Startmenu shortcuts
  !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
  
  StrCmp $MUI_TEMP "" noshortcuts
  
    Delete "$SMPROGRAMS\$MUI_TEMP\FileZilla.lnk"
    Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
    Delete "$SMPROGRAMS\$MUI_TEMP\FileZilla Source Project.lnk"
    Delete "$SMPROGRAMS\$MUI_TEMP\FileZilla Documentation.lnk"
    Delete "$SMPROGRAMS\$MUI_TEMP\FileZilla Documentation (French).lnk"
    RMDir "$SMPROGRAMS\Start Menu Folder" ;Only if empty, so it won't delete other shortcuts
    
  noshortcuts:

  ; Remove folders
  RMDir "$INSTDIR\source\res"
  RMDir "$INSTDIR\source\misc"
  RMDir "$INSTDIR\source\install"
  RMDir "$INSTDIR\source\gss"
  RMDir "$INSTDIR\source\documentation\french"
  RMDir "$INSTDIR\source\documentation"
  RMDir "$INSTDIR\source\openssl"
  RMDir "$INSTDIR\source\LanguageDLLs"
  RMDir "$INSTDIR\source\FzSFtp\res"
  RMDir "$INSTDIR\source\FzSFtp"
  RMDir "$INSTDIR\source"
  RMDir "$INSTDIR"

SectionEnd

;--------------------------------
;Uninstaller functions

Function un.onInit
 
  !insertmacro MUI_UNGETLANGUAGE

FunctionEnd

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -