Ru-Board.club
← Вернуться в раздел «Программы»

» NSIS (Nullsoft Scriptable Install System)

Автор: Igimon
Дата сообщения: 27.06.2010 05:08
Подскажите какие ключи поддерживает Uninstall.exe интересует прежде всего ключ для тихого удаления программы без всяких окошек.
Автор: dimbat
Дата сообщения: 27.06.2010 09:09
Victor_VG
Я не подготовку параметров имел ввиду. Я спрашивал о возможностях nsis или плагинов в плане взаимодействия с другими окнами. Ведь придется не только вызывать "Stored User Names And Passwords", а еще и эмулировать нажатие кнопки "Добавить" и вносить в нужные поля свои данные и тд. Или каким-то иным способом передавать/сохранять туда данные, подготовить которые как раз не проблема.
Или я в принципе слишком много хочу от nsis?
Автор: Victor_VG
Дата сообщения: 27.06.2010 10:28
dimbat

Это NSIS умеет, но тут придётся или работать через интерфейс консоли, либо прямо работать со структурами данных WinAPI. Вызов плагина nsExec::Exec - это простейший способ работы с консолью. Вызов WinAPI через плагин system - другой путь достижения цели. Скелет я дал, а полностью расписать код до строчки у меня сейчас нет времени. Коли что - продскажу, но основной источник данных - документация. Все ответы на поставленные вопросы там есть.

Igimon

Просто код пишем не имеющий вызовов MUI и скрывающий окно анинсталлера. Только можно при этом наловить море ошибок и тумаков от разъярённых пользователей. Так что, тут надо тыщи раз подумать...
Автор: Igimon
Дата сообщения: 27.06.2010 12:32
Victor_VG


Цитата:
Просто код пишем не имеющий вызовов MUI и скрывающий окно анинсталлера. Только можно при этом наловить море ошибок и тумаков от разъярённых пользователей. Так что, тут надо тыщи раз подумать...


Да сам инсталлятор (программа) уже создана и не мной, и проинсталлирована в системе, мой инсталлятор ищет в реестре ключ на предмет установлена ли данная программа или нет, если да, то выводит запрос на её удаление, далее запускает Uninstall.exe и ждет, как только Uninstall.exe закончит свою работу установка моего инсталлятора продолжится...

Но есть проблема, точнее две, первая при де-инсталляции появляется окно и.т.д по опыту InnoSetup знаю что там унисталлер поддерживает ключ /silent при котором нет никаких окошек, вроде - вы и вправду собираетесь меня удалить... Поэтому вопрос мой поддерживает ли NSIS подобный ключ типа /silent по умолчанию?

И вторая проблема, при запуске Uninstall.exe мой инсталлятор ждет пока унисталлер сделает свое дело и закроется, но Uninstall.exe запустившись копирует себя в %Temp%\~nsu.tmp\_.exe после чего зам Uninstall.exe закрывается, соответственно мой инсталлятор продолжает установку дальше, но предыдущая программа еще даже не удалилась, висит окошко с вопросом - вы правда хотите меня удалить...

Вот собственно и за этого и требуется тихая де-инсталляция.
Автор: Victor_VG
Дата сообщения: 27.06.2010 15:06
Igimon

Ну, так с этого и надо было начинать. Такую задачу я решаю иным приёмом - в скрипте установки в его начале, до копирования файлов прописываю список удаления файлов, каталогов и настроек и ключ /silent мне становится не нужен. Это проще чем запускать чужой деинсталлятор через nsExec::Exec и ждать пока тот отработается. Хотя возни часто с кодом поболее будет, но можно использовать команду RMDir /r удаляющую целые деревья каталогов вместо чистки отдельных файлов. И настройки, коли в Реестре или файлах пачками удалять не сложно. Потому и эта возможность мне ни разу не потребовалась.
Автор: dimbat
Дата сообщения: 27.06.2010 15:14
Igimon
Выдержка из мануала:
... if this is set to 'normal' and the user runs the uninstaller with /S on the command line, it will behave as if SilentUnInstall 'silent' was used.
Т.е. если деинсталлятор был создан в обычном режиме, то запуск его с ключом /S всё равно переведет его в "тихий режим". Вроде так, если не ошибаюсь.
Хотя от диалоговых окон этот ключ вряд ли избавит, если только в коде для silent не было прописано MessageBox's /SD.
Вот здесь подробнее.

Victor_VG

Цитата:
Вызов WinAPI через плагин system

Нашел таки способ через nsExec, в обход всех геморроев с окнами - cmdkey. Для xp правда придется его из сервера2003 скопировать, но результат идеальный. То, что мне и требовалось
Пошел код ваять.
Автор: Igimon
Дата сообщения: 27.06.2010 16:19
Victor_VG

Цитата:
Такую задачу я решаю иным приёмом - в скрипте установки в его начале, до копирования файлов прописываю список удаления файлов, каталогов и настроек и ключ /silent мне становится не нужен.


Наверно так бы и поступил....

Однако с ключем /S все прошло на ура, программа тихо удалилась без каких либо окон.

dimbat

Цитата:
Выдержка из мануала:


Респект!
Автор: Victor_VG
Дата сообщения: 27.06.2010 20:09
Igimon

Ну, мне чаще приходится этот приём использовать при обновлении проектов, а там полное удаление не всегда нужно.
Автор: Serge2005
Дата сообщения: 30.06.2010 08:17
Всем доброе утро!
Скажите, пожалуйста, можно ли как-то сконвертировать файл установки NSIS (vlc.win32.nsi) в файл установки InnoSetup?
[more=Код]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; NSIS installer script for vlc ;
; (http://nsis.sourceforge.net) ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

!include "languages\declaration.nsh"

!define PRODUCT_NAME "VLC media player"
!define VERSION 1.0.5
!define PRODUCT_VERSION 1.0.5
!define PRODUCT_GROUP "VideoLAN"
!define PRODUCT_PUBLISHER "VideoLAN Team"
!define PRODUCT_WEB_SITE "http://www.videolan.org"
!define PRODUCT_DIR_REGKEY "Software\VideoLAN\VLC"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_ID "{ea92ef52-afe4-4212-bacb-dfe9fca94cd6}"

!define MUI_LANGDLL_REGISTRY_ROOT "HKLM"
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_DIR_REGKEY}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "Language"

!define INSTALL_ACTIVEX
!define INSTALL_MOZILLA

!define LIBVLCCORE_DLL libvlccore.dll
!define LIBVLC_DLL libvlc.dll

;;;;;;;;;;;;;;;;;;;;;;;;;
; General configuration ;
;;;;;;;;;;;;;;;;;;;;;;;;;

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile ..\vlc-${VERSION}-win32.exe
InstallDir "$PROGRAMFILES\VideoLAN\VLC"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
!ifdef NSIS_LZMA_COMPRESS_WHOLE
SetCompressor lzma
!else
SetCompressor /SOLID lzma
!endif

;ShowInstDetails show
;ShowUnInstDetails show
SetOverwrite ifnewer
CRCCheck on
BrandingText "${PRODUCT_GROUP} ${PRODUCT_NAME}"

InstType $Name_InstTypeRecommended
InstType $Name_InstTypeMinimum
InstType $Name_InstTypeFull

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; NSIS Modern User Interface configuration ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; MUI 1.67 compatible ------
!include "MUI.nsh"

; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "vlc.ico"
!define MUI_UNICON "vlc.ico"
!define MUI_COMPONENTSPAGE_SMALLDESC

; Installer pages
; Welcome page
!define MUI_WELCOMEPAGE_TITLE_3LINES
!insertmacro MUI_PAGE_WELCOME
; License page
!insertmacro MUI_PAGE_LICENSE "COPYING.txt"
; Components page
!insertmacro MUI_PAGE_COMPONENTS
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!define MUI_FINISHPAGE_RUN "$INSTDIR\vlc.exe"
!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\README.txt"
!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
!define MUI_FINISHPAGE_LINK $Link_VisitWebsite
!define MUI_FINISHPAGE_LINK_LOCATION "http://www.videolan.org/vlc/"
!define MUI_FINISHPAGE_NOREBOOTSUPPORT
!insertmacro MUI_PAGE_FINISH

; Uninstaller pages
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_COMPONENTS
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH

; Language files
!insertmacro MUI_LANGUAGE "English" # first language is the default language
!insertmacro MUI_LANGUAGE "French"
!insertmacro MUI_LANGUAGE "German"
!insertmacro MUI_LANGUAGE "Spanish"
!insertmacro MUI_LANGUAGE "SimpChinese"
!insertmacro MUI_LANGUAGE "TradChinese"
!insertmacro MUI_LANGUAGE "Japanese"
!insertmacro MUI_LANGUAGE "Korean"
!insertmacro MUI_LANGUAGE "Italian"
!insertmacro MUI_LANGUAGE "Dutch"
!insertmacro MUI_LANGUAGE "Danish"
!insertmacro MUI_LANGUAGE "Swedish"
!insertmacro MUI_LANGUAGE "Norwegian"
!insertmacro MUI_LANGUAGE "Finnish"
!insertmacro MUI_LANGUAGE "Greek"
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_LANGUAGE "Portuguese"
!insertmacro MUI_LANGUAGE "PortugueseBR"
!insertmacro MUI_LANGUAGE "Arabic"
!insertmacro MUI_LANGUAGE "Polish"
!insertmacro MUI_LANGUAGE "Romanian"
!insertmacro MUI_LANGUAGE "Slovak"
!insertmacro MUI_LANGUAGE "Czech"
!insertmacro MUI_LANGUAGE "Hungarian"
!insertmacro MUI_LANGUAGE "Catalan"
!insertmacro MUI_LANGUAGE "Bulgarian"

; Reserve files for solid compression
!insertmacro MUI_RESERVEFILE_LANGDLL
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS

; MUI end ------

;;;;;;;;;;;;;;;;;;;;;;;
; Macro and Functions ;
;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 1. File type associations ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; Function that register one extension for VLC
Function RegisterExtension
; back up old value for extension $R0 (eg. ".opt")
ReadRegStr $1 HKCR "$R0" ""
StrCmp $1 "" NoBackup
StrCmp $1 "VLC$R0" "NoBackup"
WriteRegStr HKCR "$R0" "VLC.backup" $1
NoBackup:
WriteRegStr HKCR "$R0" "" "VLC$R0"
ReadRegStr $0 HKCR "VLC$R0" ""
WriteRegStr HKCR "VLC$R0" "" "VLC media file ($R0)"
WriteRegStr HKCR "VLC$R0\shell" "" "Open"
WriteRegStr HKCR "VLC$R0\shell\Open" "" $ShellAssociation_Play
WriteRegStr HKCR "VLC$R0\shell\Open\command" "" '"$INSTDIR\vlc.exe" --started-from-file "%1"'
WriteRegStr HKCR "VLC$R0\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'

;;; Vista Only part
; Vista detection
ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
StrCpy $R2 $R1 3
StrCmp $R2 '6.0' ForVista ToEnd
ForVista:
WriteRegStr HKLM "Software\Clients\Media\VLC\Capabilities\FileAssociations" "$R0" "VLC$R0"

ToEnd:
FunctionEnd

;; Function that removes one extension that VLC owns.
Function un.RegisterExtension
;start of restore script
ReadRegStr $1 HKCR "$R0" ""
StrCmp $1 "VLC$R0" 0 NoOwn ; only do this if we own it
; Read the old value from Backup
ReadRegStr $1 HKCR "$R0" "VLC.backup"
StrCmp $1 "" 0 Restore ; if backup="" then delete the whole key
DeleteRegKey HKCR "$R0"
Goto NoOwn
Restore:
WriteRegStr HKCR "$R0" "" $1
DeleteRegValue HKCR "$R0" "VLC.backup"
NoOwn:
DeleteRegKey HKCR "VLC$R0" ;Delete key with association settings
DeleteRegKey HKLM "Software\Clients\Media\VLC\Capabilities\FileAssociations\VLC$R0" ; for vista
FunctionEnd

!macro RegisterExtensionSection EXT
Section ${EXT}
SectionIn 1 3
Push $R0
StrCpy $R0 ${EXT}
Call RegisterExtension
Pop $R0
SectionEnd
!macroend

!macro UnRegisterExtensionSection EXT
Push $R0
StrCpy $R0 ${EXT}
Call un.RegisterExtension
Pop $R0
!macroend

!macro WriteRegStrSupportedTypes EXT
WriteRegStr HKCR Applications\vlc.exe\SupportedTypes ${EXT} ""
!macroend

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Extension lists Macros ;
; Those macros calls the previous functions ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

!macro MacroAudioExtensions _action
!insertmacro ${_action} ".a52"
!insertmacro ${_action} ".aac"
!insertmacro ${_action} ".ac3"
!insertmacro ${_action} ".dts"
!insertmacro ${_action} ".flac"
!insertmacro ${_action} ".m4a"
!insertmacro ${_action} ".m4p"
!insertmacro ${_action} ".mka"
!insertmacro ${_action} ".mod"
!insertmacro ${_action} ".mp1"
!insertmacro ${_action} ".mp2"
!insertmacro ${_action} ".mp3"
!insertmacro ${_action} ".oma"
!insertmacro ${_action} ".oga"
!insertmacro ${_action} ".spx"
!insertmacro ${_action} ".tta"
!insertmacro ${_action} ".wav"
!insertmacro ${_action} ".wma"
!insertmacro ${_action} ".wv"
!insertmacro ${_action} ".xm"
!macroend

!macro MacroVideoExtensions _action
!insertmacro ${_action} ".asf"
!insertmacro ${_action} ".avi"
!insertmacro ${_action} ".divx"
!insertmacro ${_action} ".dv"
!insertmacro ${_action} ".flv"
!insertmacro ${_action} ".gxf"
!insertmacro ${_action} ".m1v"
!insertmacro ${_action} ".m2v"
!insertmacro ${_action} ".m2ts"
!insertmacro ${_action} ".m4v"
!insertmacro ${_action} ".mkv"
!insertmacro ${_action} ".mov"
!insertmacro ${_action} ".mp4"
!insertmacro ${_action} ".mpeg"
!insertmacro ${_action} ".mpeg1"
!insertmacro ${_action} ".mpeg2"
!insertmacro ${_action} ".mpeg4"
!insertmacro ${_action} ".mpg"
!insertmacro ${_action} ".mts"
!insertmacro ${_action} ".mxf"
!insertmacro ${_action} ".nuv"
!insertmacro ${_action} ".ogg"
!insertmacro ${_action} ".ogm"
!insertmacro ${_action} ".ogx"
!insertmacro ${_action} ".ogv"
!insertmacro ${_action} ".rmvb"
!insertmacro ${_action} ".ts"
!insertmacro ${_action} ".vob"
!insertmacro ${_action} ".wmv"
!macroend

!macro MacroOtherExtensions _action
!insertmacro ${_action} ".asx"
!insertmacro ${_action} ".bin"
!insertmacro ${_action} ".cue"
!insertmacro ${_action} ".ifo"
!insertmacro ${_action} ".m3u"
!insertmacro ${_action} ".pls"
!insertmacro ${_action} ".vlc"
!insertmacro ${_action} ".xspf"
!macroend

; One macro to rule them all
!macro MacroAllExtensions _action
!insertmacro MacroAudioExtensions ${_action}
!insertmacro MacroVideoExtensions ${_action}
!insertmacro MacroOtherExtensions ${_action}
!macroend

;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 2. Context menu entries ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;

; Generic function for adding the context menu for one ext.
!macro AddContextMenuExt EXT
WriteRegStr HKCR ${EXT}\shell\PlayWithVLC "" $ContextMenuEntry_PlayWith
WriteRegStr HKCR ${EXT}\shell\PlayWithVLC\command "" '"$INSTDIR\vlc.exe" --started-from-file --no-playlist-enqueue "%1"'

WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC "" $ContextMenuEntry_AddToPlaylist
WriteRegStr HKCR ${EXT}\shell\AddToPlaylistVLC\command "" '"$INSTDIR\vlc.exe" --started-from-file --playlist-enqueue "%1"'
!macroend

!macro AddContextMenu EXT
Push $R0
ReadRegStr $R0 HKCR ${EXT} ""
!insertmacro AddContextMenuExt $R0
Pop $R0
!macroend

!macro DeleteContextMenuExt EXT
DeleteRegKey HKCR ${EXT}\shell\PlayWithVLC
DeleteRegKey HKCR ${EXT}\shell\AddToPlaylistVLC
!macroend

!macro DeleteContextMenu EXT
Push $R0
ReadRegStr $R0 HKCR ${EXT} ""
!insertmacro DeleteContextMenuExt $R0
Pop $R0
!macroend

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 3. Delete prefs and cache ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

!macro delprefs
StrCpy $0 0
!define Index 'Line${__LINE__}'
"${Index}-Loop:"
; FIXME
; this will loop through all the logged users and "virtual" windows users
; (it looks like users are only present in HKEY_USERS when they are logged in)
ClearErrors
EnumRegKey $1 HKU "" $0
StrCmp $1 "" "${Index}-End"
IntOp $0 $0 + 1
ReadRegStr $2 HKU "$1\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" AppData
StrCmp $2 "" "${Index}-Loop"
RMDir /r "$2\vlc"
Goto "${Index}-Loop"
"${Index}-End:"
!undef Index
!macroend

;;;;;;;;;;;;;;;
; 4. Logging ;
;;;;;;;;;;;;;;;
Var UninstallLog
!macro OpenUninstallLog
FileOpen $UninstallLog "$INSTDIR\uninstall.log" a
FileSeek $UninstallLog 0 END
!macroend

!macro CloseUninstallLog
FileClose $UninstallLog
SetFileAttributes "$INSTDIR\uninstall.log" HIDDEN
!macroend

;;;;;;;;;;;;;;;;;;;;
; 5. Installations ;
;;;;;;;;;;;;;;;;;;;;
!macro InstallFile FILEREGEX
File "${FILEREGEX}"
!define Index 'Line${__LINE__}'
FindFirst $0 $1 "$INSTDIR\${FILEREGEX}"
StrCmp $0 "" "${Index}-End"
"${Index}-Loop:"
StrCmp $1 "" "${Index}-End"
FileWrite $UninstallLog "$1$\r$\n"
FindNext $0 $1
Goto "${Index}-Loop"
"${Index}-End:"
!undef Index
!macroend

!macro InstallFolder FOLDER
File /r "${FOLDER}"
Push "${FOLDER}"
Call InstallFolderInternal
!macroend

Function InstallFolderInternal
Pop $9
!define Index 'Line${__LINE__}'
FindFirst $0 $1 "$INSTDIR\$9\*"
StrCmp $0 "" "${Index}-End"
"${Index}-Loop:"
StrCmp $1 "" "${Index}-End"
StrCmp $1 "." "${Index}-Next"
StrCmp $1 ".." "${Index}-Next"
IfFileExists "$9\$1\*" 0 "${Index}-Write"
Push $0
Push $9
Push "$9\$1"
Call InstallFolderInternal
Pop $9
Pop $0
Goto "${Index}-Next"
"${Index}-Write:"
FileWrite $UninstallLog "$9\$1$\r$\n"
"${Index}-Next:"
FindNext $0 $1
Goto "${Index}-Loop"
"${Index}-End:"
!undef Index
FunctionEnd
;;; End of Macros


;;;;;;;;;;;;;;;;;;;;;;
; Installer sections ;
; The CORE of the ;
; installer ;
;;;;;;;;;;;;;;;;;;;;;;

Section $Name_Section01 SEC01
SectionIn 1 2 3 RO
SetShellVarContext all
SetOutPath "$INSTDIR"

!insertmacro OpenUninstallLog

; VLC.exe, libvlc.dll
!insertmacro InstallFile vlc.exe
!insertmacro InstallFile vlc.exe.manifest

; All dlls
!insertmacro InstallFile *.dll

; Text files
!insertmacro InstallFile *.txt

; Subfolders
!insertmacro InstallFolder plugins
!insertmacro InstallFolder locale
!insertmacro InstallFolder osdmenu
!insertmacro InstallFolder skins
!insertmacro InstallFolder http
!insertmacro InstallFolder lua


; URLs
WriteIniStr "$INSTDIR\${PRODUCT_GROUP} Website.url" "InternetShortcut" "URL" \
"${PRODUCT_WEB_SITE}"
FileWrite $UninstallLog "${PRODUCT_GROUP} Website.url$\r$\n"
WriteIniStr "$INSTDIR\Documentation.url" "InternetShortcut" "URL" \
"${PRODUCT_WEB_SITE}/doc/"
FileWrite $UninstallLog "Documentation.url$\r$\n"
WriteIniStr "$INSTDIR\New_Skins.url" "InternetShortcut" "URL" \
"${PRODUCT_WEB_SITE}/vlc/skins.php"
FileWrite $UninstallLog "New_Skins.url$\r$\n"

!insertmacro CloseUninstallLog

; Add VLC to "recomended programs" for the following extensions
WriteRegStr HKCR Applications\vlc.exe "" ""
WriteRegStr HKCR Applications\vlc.exe "FriendlyAppName" "VLC media player"
WriteRegStr HKCR Applications\vlc.exe\shell\Open "" $ContextMenuEntry_PlayWith
WriteRegStr HKCR Applications\vlc.exe\shell\Open\command "" \
'"$INSTDIR\vlc.exe" --started-from-file "%1"'
!insertmacro MacroAllExtensions WriteRegStrSupportedTypes

; Vista Registration
; Vista detection
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
StrCpy $R1 $R0 3
StrCmp $R1 '6.0' lbl_vista lbl_done

lbl_vista:
WriteRegStr HKLM "Software\RegisteredApplications" "VLC" "Software\Clients\Media\VLC\Capabilities"
WriteRegStr HKLM "Software\Clients\Media\VLC\Capabilities" "ApplicationName" "VLC media player"
WriteRegStr HKLM "Software\Clients\Media\VLC\Capabilities" "ApplicationDescription" "VLC - The video swiss knife"

lbl_done:
SectionEnd

Section $Name_Section02a SEC02a
SectionIn 1 2 3
CreateDirectory "$SMPROGRAMS\VideoLAN"
CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings"
CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Audio"
CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Audio\Set Audio mode to DirectX (default).lnk" \
"$INSTDIR\vlc.exe" "--aout aout_directx --save-config vlc://quit"
CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Audio\Set Audio mode to Waveout.lnk" \
"$INSTDIR\vlc.exe" "--aout waveout --save-config vlc://quit"
CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Interface"
CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Interface\Set Main Interface to Skinnable.lnk" \
"$INSTDIR\vlc.exe" "-I skins --save-config vlc://quit"
CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Interface\Set Main Interface to Qt (default).lnk" \
"$INSTDIR\vlc.exe" "-I qt --save-config vlc://quit"
CreateDirectory "$SMPROGRAMS\VideoLAN\Quick Settings\Video"
; FIXME add detection for Vista. Direct3D will be default there, for all others it's DirectX
CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to Direct3D.lnk" \
"$INSTDIR\vlc.exe" "--vout direct3d --overlay --directx-hw-yuv --save-config vlc://quit"
CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to Direct3D (no hardware acceleration).lnk" \
"$INSTDIR\vlc.exe" "--vout direct3d --overlay --no-directx-hw-yuv --save-config vlc://quit"
CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX.lnk" \
"$INSTDIR\vlc.exe" "--vout directx --overlay --directx-hw-yuv --save-config vlc://quit"
CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX (no hardware acceleration).lnk" \
"$INSTDIR\vlc.exe" "--vout directx --no-overlay --no-directx-hw-yuv --save-config vlc://quit"
CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to DirectX (no video overlay).lnk" \
"$INSTDIR\vlc.exe" "--vout directx --no-overlay --directx-hw-yuv --save-config vlc://quit"
CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Video\Set Video mode to OpenGL.lnk" \
"$INSTDIR\vlc.exe" "--vout opengl --overlay --save-config vlc://quit"
CreateShortCut "$SMPROGRAMS\VideoLAN\Quick Settings\Reset VLC media player preferences and cache files.lnk" \
"$INSTDIR\vlc.exe" "--reset-config --reset-plugins-cache vlc://quit"
CreateShortCut "$SMPROGRAMS\VideoLAN\Documentation.lnk" \
"$INSTDIR\Documentation.url"
CreateShortCut "$SMPROGRAMS\VideoLAN\Release Notes.lnk" \
"$INSTDIR\NEWS.txt" ""
CreateShortCut "$SMPROGRAMS\VideoLAN\${PRODUCT_GROUP} Website.lnk" \
"$INSTDIR\${PRODUCT_GROUP} Website.url"
CreateShortCut "$SMPROGRAMS\VideoLAN\VLC media player.lnk" \
"$INSTDIR\vlc.exe" ""
SectionEnd

Section $Name_Section02b SEC02b
SectionIn 1 2 3
CreateShortCut "$DESKTOP\VLC media player.lnk" \
"$INSTDIR\vlc.exe" ""
SectionEnd

!ifdef INSTALL_MOZILLA
Section /o $Name_Section03 SEC03
SectionIn 3

SetOutPath "$INSTDIR"
!insertmacro OpenUninstallLog
!insertmacro InstallFile mozilla\npvlc.dll
!insertmacro InstallFile mozilla\npvlc.dll.manifest
!insertmacro CloseUninstallLog

!define Moz "SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION}"
WriteRegStr HKLM ${Moz} "Description" "VLC Multimedia Plugin"
WriteRegStr HKLM ${Moz} "Path" "$INSTDIR\npvlc.dll"
WriteRegStr HKLM ${Moz} "Product" "VLC media player"
WriteRegStr HKLM ${Moz} "Vendor" "VideoLAN"
WriteRegStr HKLM ${Moz} "Version" "${VERSION}"

; for very old version of mozilla, these lines may be needed
;Push $R0
;Push $R1
;Push $R2

;!define Index 'Line${__LINE__}'
;StrCpy $R1 "0"

;"${Index}-Loop:"

; ; Check for Key
; EnumRegKey $R0 HKLM "SOFTWARE\Mozilla" "$R1"
; StrCmp $R0 "" "${Index}-End"
; IntOp $R1 $R1 + 1
; ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"
; StrCmp $R2 "" "${Index}-Loop" ""

; CopyFiles "$INSTDIR\npvlc.dll" "$R2"
; !ifdef LIBVLC_DLL
; CopyFiles ${LIBVLC_DLL} "$R2"
; !endif
; !ifdef LIBVLC_CONTROL_DLL
; CopyFiles ${LIBVLC_CONTROL_DLL} "$R2"
; !endif
; Goto "${Index}-Loop"

;"${Index}-End:"
;!undef Index

SectionEnd
!endif

!ifdef INSTALL_ACTIVEX
Section $Name_Section04 SEC04
SectionIn 3
SetOutPath "$INSTDIR"
!insertmacro OpenUninstallLog
!insertmacro InstallFile activex\axvlc.dll
!insertmacro InstallFile activex\axvlc.dll.manifest
!insertmacro CloseUninstallLog
RegDLL "$INSTDIR\axvlc.dll"
SectionEnd
!endif


Section $Name_Section05 SEC05
SectionIn 1 2 3
WriteRegStr HKCR "AudioCD\shell\PlayWithVLC" "" $ContextMenuEntry_PlayWith
WriteRegStr HKCR "AudioCD\shell\PlayWithVLC\command" "" \
'"$INSTDIR\vlc.exe" --started-from-file cdda://%1'
WriteRegStr HKCR "DVD\shell\PlayWithVLC" "" $ContextMenuEntry_PlayWith
WriteRegStr HKCR "DVD\shell\PlayWithVLC\command" "" \
'"$INSTDIR\vlc.exe" --started-from-file dvd://%1'

WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayDVDMovieOnArrival" "VLCPlayDVDMovieOnArrival" ""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "Action" $Action_OnArrivalDVD
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "DefaultIcon" '"$INSTDIR\vlc.exe",0'
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "InvokeProgID" "VLC.DVDMovie"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "InvokeVerb" "play"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival" "Provider" "VideoLAN VLC media player"

WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayCDAudioOnArrival" "VLCPlayCDAudioOnArrival" ""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "Action" $Action_OnArrivalAudioCD
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "DefaultIcon" '"$INSTDIR\vlc.exe",0'
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "InvokeProgID" "VLC.CDAudio"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "InvokeVerb" "play"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival" "Provider" "VideoLAN VLC media player"
WriteRegStr HKCR "VLC.DVDMovie" "" "VLC DVD Movie"
WriteRegStr HKCR "VLC.DVDMovie\shell" "" "Open"
WriteRegStr HKCR "VLC.DVDMovie\shell\Open\command" "" \
'"$INSTDIR\vlc.exe" --started-from-file dvd://%1'
WriteRegStr HKCR "VLC.DVDMovie\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'
WriteRegStr HKCR "VLC.CDAudio" "" "VLC CD Audio"
WriteRegStr HKCR "VLC.CDAudio\shell" "" "Open"
WriteRegStr HKCR "VLC.CDAudio\shell\Open\command" "" \
'"$INSTDIR\vlc.exe" --started-from-file cdda://%1'
WriteRegStr HKCR "VLC.CDAudio\DefaultIcon" "" '"$INSTDIR\vlc.exe",0'

SectionEnd


SectionGroup /e !$Name_Section06 SEC06
SectionGroup $Name_SectionGroupAudio
!insertmacro MacroAudioExtensions RegisterExtensionSection
SectionGroupEnd
SectionGroup $Name_SectionGroupVideo
!insertmacro MacroVideoExtensions RegisterExtensionSection
SectionGroupEnd
SectionGroup $Name_SectionGroupOther
!insertmacro MacroOtherExtensions RegisterExtensionSection
SectionGroupEnd
SectionGroupEnd

Section $Name_Section07 SEC07
SectionIn 1 3
!insertmacro MacroAllExtensions AddContextMenu
!insertmacro AddContextMenuExt "Directory"
SectionEnd

Section $Name_Section08 SEC08
!insertmacro delprefs
SectionEnd

; Installer section descriptions
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} $Desc_Section01
!insertmacro MUI_DESCRIPTION_TEXT ${SEC02a} $Desc_Section02a
!insertmacro MUI_DESCRIPTION_TEXT ${SEC02b} $Desc_Section02b
!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} $Desc_Section03
!insertmacro MUI_DESCRIPTION_TEXT ${SEC04} $Desc_Section04
!insertmacro MUI_DESCRIPTION_TEXT ${SEC05} $Desc_Section05
!insertmacro MUI_DESCRIPTION_TEXT ${SEC06} $Desc_Section06
!insertmacro MUI_DESCRIPTION_TEXT ${SEC07} $Desc_Section07
!insertmacro MUI_DESCRIPTION_TEXT ${SEC08} $Desc_Section08
!insertmacro MUI_FUNCTION_DESCRIPTION_END

;;; Start function
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY

!include "languages\english.nsh"
StrCmp $LANGUAGE ${LANG_FRENCH} French 0
StrCmp $LANGUAGE ${LANG_GERMAN} German 0
StrCmp $LANGUAGE ${LANG_ITALIAN} Italian 0
StrCmp $LANGUAGE ${LANG_HUNGARIAN} Hungarian 0
StrCmp $LANGUAGE ${LANG_ROMANIAN} Romanian 0
StrCmp $LANGUAGE ${LANG_CATALAN} Catalan 0
StrCmp $LANGUAGE ${LANG_BULGARIAN} Bulgarian 0
StrCmp $LANGUAGE ${LANG_SLOVAK} Slovak 0
StrCmp $LANGUAGE ${LANG_POLISH} Polish 0
StrCmp $LANGUAGE ${LANG_DUTCH} Dutch 0
StrCmp $LANGUAGE ${LANG_SIMPCHINESE} SChinese 0
StrCmp $LANGUAGE ${LANG_FINNISH} Finnish 0
; StrCmp $LANGUAGE ${LANG_BENGALI} Bengali 0
; StrCmp $LANGUAGE ${LANG_PUNJABI} Punjabi 0
; StrCmp $LANGUAGE ${LANG_SLOVENIAN} Slovenian 0
StrCmp $LANGUAGE ${LANG_SPANISH} Spanish 0
StrCmp $LANGUAGE ${LANG_PORTUGUESEBR} Brazilian EndLanguageCmp
French:
!include "languages\french.nsh"
Goto EndLanguageCmp
German:
!include "languages\german.nsh"
Goto EndLanguageCmp
Italian:
!include "languages\italian.nsh"
Goto EndLanguageCmp
Hungarian:
!include "languages\hungarian.nsh"
Goto EndLanguageCmp
Romanian:
!include "languages\romanian.nsh"
Goto EndLanguageCmp
Catalan:
!include "languages\catalan.nsh"
Goto EndLanguageCmp
Bulgarian:
!include "languages\bulgarian.nsh"
Goto EndLanguageCmp
Slovak:
!include "languages\slovak.nsh"
Goto EndLanguageCmp
Polish:
!include "languages\polish.nsh"
Goto EndLanguageCmp
Dutch:
!include "languages\dutch.nsh"
Goto EndLanguageCmp
Schinese:
!include "languages\schinese.nsh"
Goto EndLanguageCmp
Finnish:
!include "languages\finnish.nsh"
Goto EndLanguageCmp
Bengali:
!include "languages\bengali.nsh"
Goto EndLanguageCmp
Punjabi:
!include "languages\punjabi.nsh"
Goto EndLanguageCmp
Slovenian:
!include "languages\slovenian.nsh"
Goto EndLanguageCmp
Spanish:
!include "languages\spanish.nsh"
Goto EndLanguageCmp
Brazilian:
!include "languages\brazilian_portuguese.nsh"
EndLanguageCmp:

ReadRegStr $R0 ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"UninstallString"
StrCmp $R0 "" done

MessageBox MB_YESNO|MB_ICONEXCLAMATION $Message_AlreadyInstalled IDNO done

;Run the uninstaller
;uninst:
ClearErrors
ExecWait '$R0 _?=$INSTDIR' ;Do not copy the uninstaller to a temp file
done:

FunctionEnd

;; End function
Section -Post
WriteUninstaller "$INSTDIR\uninstall.exe"
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "InstallDir" $INSTDIR
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "Version" "${VERSION}"
WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\vlc.exe"

WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"DisplayName" "$(^Name)"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"UninstallString" "$INSTDIR\uninstall.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"InstallLocation" "$INSTDIR"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"DisplayIcon" "$INSTDIR\vlc.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"URLInfoAbout" "${PRODUCT_WEB_SITE}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"Publisher" "${PRODUCT_PUBLISHER}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"VersionMajor" "1"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" \
"VersionMinor" "0"
SectionEnd

;;;;;;;;;;;;;;;;;;;;;;;;
; Uninstaller sections ;
;;;;;;;;;;;;;;;;;;;;;;;;

; TrimNewlines (copied from NSIS documentation)
; input, top of stack (e.g. whatever$\r$\n)
; output, top of stack (replaces, with e.g. whatever)
; modifies no other variables.

Function un.TrimNewlines
Exch $R0
Push $R1
Push $R2
StrCpy $R1 0

loop:
IntOp $R1 $R1 - 1
StrCpy $R2 $R0 1 $R1
StrCmp $R2 "$\r" loop
StrCmp $R2 "$\n" loop
IntOp $R1 $R1 + 1
IntCmp $R1 0 no_trim_needed
StrCpy $R0 $R0 $R1

no_trim_needed:
Pop $R2
Pop $R1
Exch $R0
FunctionEnd

Function un.RemoveEmptyDirs
Pop $9
!define Index 'Line${__LINE__}'
FindFirst $0 $1 "$INSTDIR$9*"
StrCmp $0 "" "${Index}-End"
"${Index}-Loop:"
StrCmp $1 "" "${Index}-End"
StrCmp $1 "." "${Index}-Next"
StrCmp $1 ".." "${Index}-Next"
Push $0
Push $1
Push $9
Push "$9$1\"
Call un.RemoveEmptyDirs
Pop $9
Pop $1
Pop $0
"${Index}-Remove:"
RMDir "$INSTDIR$9$1"
"${Index}-Next:"
FindNext $0 $1
Goto "${Index}-Loop"
"${Index}-End:"
FindClose $0
!undef Index
FunctionEnd

Section "un.$Name_Section91" SEC91
SectionIn 1 2 3 RO
SetShellVarContext all

!insertmacro MacroAllExtensions DeleteContextMenu
!insertmacro MacroAllExtensions UnRegisterExtensionSection
!insertmacro DeleteContextMenuExt "Directory"

;remove activex plugin
UnRegDLL "$INSTDIR\axvlc.dll"
Delete /REBOOTOK "$INSTDIR\axvlc.dll"
Delete /REBOOTOK "$INSTDIR\axvlc.dll.manifest"

;remove mozilla plugin
Push $R0
Push $R1
Push $R2

!define Index 'Line${__LINE__}'
StrCpy $R1 "0"

"${Index}-Loop:"

; Check for Key
EnumRegKey $R0 HKLM "SOFTWARE\Mozilla" "$R1"
StrCmp $R0 "" "${Index}-End"
IntOp $R1 $R1 + 1
ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins"
StrCmp $R2 "" "${Index}-Loop" ""

; old files (0.8.5 and before) that may be lying around
Delete /REBOOTOK "$R2\npvlc.dll"
Delete /REBOOTOK "$R2\libvlc.dll"
Delete /REBOOTOK "$R2\vlcintf.xpt"
Goto "${Index}-Loop"

"${Index}-End:"
!undef Index
Delete /REBOOTOK "$INSTDIR\npvlc.dll"
Delete /REBOOTOK "$INSTDIR\npvlc.dll.manifest"

RMDir "$SMPROGRAMS\VideoLAN"
RMDir /r $SMPROGRAMS\VideoLAN

FileOpen $UninstallLog "$INSTDIR\uninstall.log" r
UninstallLoop:
ClearErrors
FileRead $UninstallLog $R0
IfErrors UninstallEnd
Push $R0
Call un.TrimNewLines
Pop $R0
Delete "$INSTDIR\$R0"
Goto UninstallLoop
UninstallEnd:
FileClose $UninstallLog
Delete "$INSTDIR\uninstall.log"
Delete "$INSTDIR\uninstall.exe"
Push "\"
Call un.RemoveEmptyDirs
RMDir "$INSTDIR"

DeleteRegKey HKLM Software\VideoLAN

DeleteRegKey HKCR Applications\vlc.exe
DeleteRegKey HKCR AudioCD\shell\PlayWithVLC
DeleteRegKey HKCR DVD\shell\PlayWithVLC
DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayDVDMovieOnArrival" "VLCPlayDVDMovieOnArrival"
DeleteRegKey HKLM Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayDVDMovieOnArrival
DeleteRegValue HKLM "Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\PlayCDAudioOnArrival" "VLCPlayCDAudioOnArrival"
DeleteRegKey HKLM Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\Handlers\VLCPlayCDAudioOnArrival
DeleteRegKey HKLM Software\Clients\Media\VLC
DeleteRegKey HKCR "VLC.MediaFile"

DeleteRegKey HKLM \
"SOFTWARE\MozillaPlugins\@videolan.org/vlc,version=${VERSION}"

DeleteRegKey HKLM \
"Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"

Delete "$DESKTOP\VLC media player.lnk"

DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
SetAutoClose true
SectionEnd

Section /o "un.$Name_Section92" SEC92
!insertmacro delprefs
SectionEnd

; Uninstaller section descriptions
!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SEC91} $Desc_Section91
!insertmacro MUI_DESCRIPTION_TEXT ${SEC92} $Desc_Section92
!insertmacro MUI_UNFUNCTION_DESCRIPTION_END

;Function un.onUninstSuccess
; HideWindow
; MessageBox MB_ICONINFORMATION|MB_OK \
; "$(^Name) was successfully removed from your computer."
;FunctionEnd

Function un.onInit
!insertmacro MUI_UNGETLANGUAGE

!include "languages\english.nsh"
StrCmp $LANGUAGE ${LANG_FRENCH} French 0
StrCmp $LANGUAGE ${LANG_GERMAN} German 0
StrCmp $LANGUAGE ${LANG_ITALIAN} Italian 0
StrCmp $LANGUAGE ${LANG_HUNGARIAN} Hungarian 0
StrCmp $LANGUAGE ${LANG_ROMANIAN} Romanian 0
StrCmp $LANGUAGE ${LANG_CATALAN} Catalan 0
StrCmp $LANGUAGE ${LANG_BULGARIAN} Bulgarian 0
StrCmp $LANGUAGE ${LANG_SLOVAK} Slovak 0
StrCmp $LANGUAGE ${LANG_POLISH} Polish 0
StrCmp $LANGUAGE ${LANG_DUTCH} Dutch 0
StrCmp $LANGUAGE ${LANG_SIMPCHINESE} SChinese 0
StrCmp $LANGUAGE ${LANG_FINNISH} Finnish 0
; StrCmp $LANGUAGE ${LANG_BENGALI} Bengali 0
; StrCmp $LANGUAGE ${LANG_PUNJABI} Punjabi 0
; StrCmp $LANGUAGE ${LANG_SLOVENIAN} Slovenian 0
StrCmp $LANGUAGE ${LANG_SPANISH} Spanish 0
StrCmp $LANGUAGE ${LANG_PORTUGUESEBR} Brazilian EndLanguageCmp
French:
!include "languages\french.nsh"
Goto EndLanguageCmp
German:
!include "languages\german.nsh"
Goto EndLanguageCmp
Italian:
!include "languages\italian.nsh"
Goto EndLanguageCmp
Hungarian:
!include "languages\hungarian.nsh"
Goto EndLanguageCmp
Romanian:
!include "languages\romanian.nsh"
Goto EndLanguageCmp
Catalan:
!include "languages\catalan.nsh"
Goto EndLanguageCmp
Bulgarian:
!include "languages\bulgarian.nsh"
Goto EndLanguageCmp
Slovak:
!include "languages\slovak.nsh"
Goto EndLanguageCmp
Polish:
!include "languages\polish.nsh"
Goto EndLanguageCmp
Dutch:
!include "languages\dutch.nsh"
Goto EndLanguageCmp
Schinese:
!include "languages\schinese.nsh"
Goto EndLanguageCmp
Finnish:
!include "languages\finnish.nsh"
Goto EndLanguageCmp
Bengali:
!include "languages\bengali.nsh"
Goto EndLanguageCmp
Punjabi:
!include "languages\punjabi.nsh"
Goto EndLanguageCmp
Slovenian:
!include "languages\slovenian.nsh"
Goto EndLanguageCmp
Spanish:
!include "languages\spanish.nsh"
Goto EndLanguageCmp
Brazilian:
!include "languages\brazilian_portuguese.nsh"
EndLanguageCmp:

FunctionEnd
[/more]
Автор: Victor_VG
Дата сообщения: 30.06.2010 23:28
Serge2005

Я таких конвертеров не встречал, да и смысла в этом не вижу - NSIS это архитектура C++ и C-подобный входной язык со всеми его особенностями, как бы его не называли, Inno Setup - это архитектура Pascal, да, с относительно простым входным синтаксисом, но зато перекладывающая на Inno Setup Pascal Script все мало мальски сложные для неё задачи начиная с задачи уровня плюс - минус - умножить - разделить и кончая любой логикой или задачами сложнее простого копирования файлов. Без своего Inno Setup Pascal Script среда Inno Setup почти ничего не умеет, только хорошо рюшечки рисует, а вся её логика жёстко зашита в коде её интерпретатора который она каждый раз тащит с собой поскольку иначе работать неработоспособна. И его размер без сжатия чем-то типа UPX достаточно приличный до сих пор - под 800 Кб, да и с внешним Inno Setup Pascal Script-файлом сильно много ума у неё не появляется так как Inno Setup - это инструмент созданный для решения простых задач, и более он ничего не умеет. Но если его сжать, то при распаковке бинарного пакета помять нужная для этого обычно скромно начинает увеличиваться на десяток - другой Мб, ну это не считая некоторых других особенностей типа сложных процедур работы с драйверами и демонами, семафорами, переходами - этих попросту говоря у неё и в зачатке нет и т.д. В итоге, я в своё время посчитал её для моих задач инструментом не лучшим и отказался от неё в пользу NSIS. Потому я и высказался о поставленной задаче как о неверно на мой взгляд сформулированной, а в данной случае просто просто не того направления мыслей.
Автор: dimbat
Дата сообщения: 02.07.2010 11:22
Господа, подскажите.
Как правильно реализовать проверку доменных логина/пароля?
Есть готовый код, который отлично справляется, но только когда текущая машина зарегистрирована в нужном домене. С остальных же машин проверка будет проваливаться в любом случае, хотя Domain (второй параметр LogonUser) прописан принудительно правильный. Эксперименты с остальными параметрами тоже ни к чему не привели.
Может быть какими-то другими способами?
Кто в теме, огромная просьба помочь.
Автор: Krinkels
Дата сообщения: 13.07.2010 08:27
Доброго времени суток, друзья. Как реализовать такое окошко?
Автор: 820815
Дата сообщения: 13.07.2010 11:19
Оно само вылезет, при достаточно большом размере инсталлятора.
(Если при компиляции не была отключена проверка: CRCCheck off)
Автор: Krinkels
Дата сообщения: 13.07.2010 12:19
820815
А я то думал самому нужно прописывать в скрипте чтоб вылезло такое окошко. Спасибо
Автор: John_White
Дата сообщения: 13.07.2010 17:16
Krinkels
Кстати, в свое время было много споров по поводу того, как локализовать его.
Автор: Krinkels
Дата сообщения: 14.07.2010 07:21
John_White
Ну и как? Удалось локализовать?
Автор: John_White
Дата сообщения: 14.07.2010 19:51
Krinkels

Цитата:
Ну и как? Удалось локализовать?

Подключали BANNER плагин.
Но все равно получилась ересь.
ИМХО, наиболее оптимальный вариант - править сырцы НСИС.
Автор: Krinkels
Дата сообщения: 15.07.2010 10:22
John_White
Ну лучше так использовать чем вообще ни как.
Автор: Krinkels
Дата сообщения: 15.07.2010 22:06
Создал я свою страничку с 3-мя RadioButton, но на ней кнопки: "<Назад" "Далее>" "Отмена" действуют одинаково, т.е. выполняют действие отмеченное в RadioButton. Можно ли как то это исправить?
Автор: Victor_VG
Дата сообщения: 15.07.2010 23:09
John_White

Нет, по моему это не вариант. Разве использовать UNICODE версию NSIS, но тут проблема в плагины упрётся - кто из ANSI плагинов заработает под ним без сбоев? Мы на Far Manager такое проходили - я имею ввиду и разработчиков пакета и плагинов, и авторов сборок, а так же простых пользователей. Я в своей сборке не мало времени провозился с устранением проблем совместимости именно с ANSI плагинами, в UNICODE их почти не возникало, хотя в Far есть специальный модуль-враппер поддерживающий их. А в UNICODE NSIS насколько я понял такого модуля нет, значит возможны проблемы.

При локализации исходников вылезет иная проблема - полетит мультиязычность NSIS - а мы не можем заранее сказать, что все, кто воспользуется нашими разработками владеют языком на который мы перевели исходники. Остаётся только два варианта:

1) делать на каждый язык свою версию установки. А если у нас таких языков несколько?
2) использовать UNICODE и правильно выставлять charset в нужных местах.

Я считаю, что второй вариант технически более грамотен, и поднесёт меньше сюрпризов как в процессе отладки нам, так и пользователям после. И тут есть тот возможный подводный камень, про который я говорил выше - совместимость с ANSI плагинами. Предсказать их поведение я лично не берусь, да и их авторы вряд ли возьмут на себя ответственность сделать такие предсказания - слишком много случайных факторов могут повлиять на поведение программы в целом, чтобы кто либо мог дать универсальный прогноз. Сделать предположение об ожидаемом результате - пожалуй можно, но с известными оговорками об условиях в которых мы считаем его выполнимым.

Krinkels

Погоди, а ведь в HM NIS есть конструктор форм, и по идее он должен формировать код обработчиков событий. Как я про него забыл?
Автор: Krinkels
Дата сообщения: 16.07.2010 07:59
Victor_VG
К сожалению не формирует
Автор: Victor_VG
Дата сообщения: 16.07.2010 15:16
Krinkels

Лады, подумаем как сделать вместе. Должно же быть решение?
Автор: dimbat
Дата сообщения: 16.07.2010 15:52

Цитата:
Как правильно реализовать проверку доменных логина/пароля?

Вопрос снимается, обошелся использованием функции WNetAddConnection2.
Автор: Krinkels
Дата сообщения: 16.07.2010 17:02
Victor_VG
Я сначала подумал что это у меня косяк вышел, но посмотрев(и соответственно попробовав) другие увидел что там же происходит тот же косяк
Автор: John_White
Дата сообщения: 16.07.2010 17:07
Krinkels

Цитата:
Ну лучше так использовать чем вообще ни как.

Я склоняюсь к тому, что лучше не трогать этот "момент".
Victor_VG
Я так понимаю НСИС достиг своего апогея?
Или разрабы начинают забивать на него.
Хорошо, что официальный форум еще жив.
Автор: Victor_VG
Дата сообщения: 19.07.2010 08:12
John_White

Нет, работа идёт, вроде ночнушки появляются, посмотрим. Наверное что-то поменяется, а что время покажет.
Автор: AKRAV
Дата сообщения: 19.07.2010 08:31

Цитата:
Я так понимаю НСИС достиг своего апогея?
Или разрабы начинают забивать на него.

Было бы замечательно если бы направили вектор в сторону создания нормального GUI для создания инсталяторов, не тупо редактора скрипта, а полноценного IDE для этого дела, по типу Advanced Inastaller, InstallAware Studio, InstallShield.
Только не надо говорить что лишнее это и что мол полно уже таких надстроек для NSIS.
К огромному сожалению ничего даже близко похожего не нашёл.
Автор: Krinkels
Дата сообщения: 19.07.2010 10:42
AKRAV

Цитата:
К огромному сожалению ничего даже близко похожего не нашёл.

Ну если ничего не подходит, но очень хочется, можно самому написать.

А я бы вот хотел чтоб они все таки реализовали разбиение инсталятора на части, на подобии InnoSetup
Автор: dimbat
Дата сообщения: 19.07.2010 12:14
Господа, подскажите по условным переходам. Допустим есть такая структура:

Function 1
FunctionEnd

Function 2
FunctionEnd

Function 3
FunctionEnd

Section 1
SectionEnd

Section 2
SectionEnd

При определенном условии нужно сделать переход из Функции 1 сразу в Секцию 2. Goto всегда действует только в пределах текущей функции/секции. Сейчас сделал прыжки в каждом разделе для этого случая, но скорее всего есть какой-то "правильный" способ. Подскажите.
Автор: Victor_VG
Дата сообщения: 19.07.2010 19:39
dimbat

Пара операторов Call/Return первый вызывает функцию/секцию, второй возвращает управление следующей за вызовом Call команде.

AKRAV

HM NIS я его постоянно доделываю под новые версии NSIS и выкладываю у себя. Нормальная MDI IDE. Пользуюсь её с момента появления версии 2.03 - лет около ссеми, и нет проблем. Ещё можно настроить на передачу скрипта компилятору makensis средствами IDM UEStudio это профессиональный текстовый процессор интегрированный с универсальной IDE.

Раз не нашёл, значит плохо искал.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364

Предыдущая тема: The Bat!


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.