Личный хомяк Максима

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Личный хомяк Максима » NSIS » WinUtils - инсталляционный скрипт


WinUtils - инсталляционный скрипт

Сообщений 1 страница 11 из 11

1

Пакет программ, основанный на Total Commander, для которого на NSIS написан скрип установки и удаления.
Данный комплект программ создан на основании следующих принципов:
- быстрота развертывания;
- универсальность применения;
- минимальное воздействие на систему (чтобы разница между системой до и после была для пользователя незаметна);
- функциональность, максимально охватывающая мои ежедневные потребности.
- максимальная интеграция функций всех программ, чтобы это была единая среда, используемая на интуитивном уровне.

Быстрота развертывания организована путем запаковки всего комплекта в инсталлятор, созданный по технологии NSIS, позволяющий еще на начальном этапе выбрать требуемые компоненты и правильно установить нужные параметры, как относящиеся к настройкам самих программ, так и к их взаимодействию.

Универсальность применения гарантируется путем включения в пакет всех НЕОБХОДИМЫХ утилит, пусть в некоторых конфигурациях и избыточная, но каждый компонент несет в себе хороший набор возможностей, с головой перекрывающий возможности стандартных средств системы.

Минимальное воздействие на систему заключается в том, что инсталлируемые компоненты не замещают и не изменяют настроек программ в той максимальной степени, в которой это возможно. Таким образом гарантируется, что пользователь не ощутит никаких изменений рабочей среды, кроме появления ярлыка запуска, и никакой опасности для настроенных самим пользователем программ.

Функциональность и интеграция - программы только те, которые я использую ежедневно.

0

2

Начнем с куска корявого кода инсталлятора без комментариев:

Код:
Var YN

!macro usesave _file
  IfFileExists $INSTDIR\${_file} +1 +2
  StrCmp $YN "Y" +2 +1
  file ${_file}
!macroend

!system "GetVersion.exe"
!include "Version.txt"
!include "MUI.nsh"
!define TEMP $R0
!define PRODUCT "WinUtils"
Name "WinUtils"
Caption "WinUtils ${__DATE__}"
OutFile ..\${PRODUCT}.exe
InstallDir $PROGRAMFILES\${PRODUCT}

;--------------------------------
;Modern UI Configuration

  !define MUI_CUSTOMPAGECOMMANDS

  !define MUI_LICENSEPAGE
  !define MUI_COMPONENTSPAGE
  !define MUI_COMPONENTSPAGE_SMALLDESC
  !define MUI_DIRECTORYPAGE
  !define MUI_ABORTWARNING
  !define MUI_UNINSTALLER
  !define MUI_UNCONFIRMPAGE
 
;--------------------------------
;Pages
  
  !insertmacro MUI_PAGE_LICENSE "..\License.txt"
  !insertmacro MUI_PAGE_COMPONENTS
  !insertmacro MUI_PAGE_DIRECTORY
  !insertmacro MUI_PAGE_INSTFILES
  Page custom SetCustom

;--------------------------------
;Languages

  !insertmacro MUI_LANGUAGE "Russian"

;--------------------------------
;Data

  ReserveFile "io.ini"
  !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS

!ifdef uglyinstaller
BGGradient 000000 308030 FFFFFF
InstallColors FF8080 000000
InstProgressFlags smooth colored
!else
!ifdef NSIS_CONFIG_COMPONENTPAGE
ComponentText "Компоненты ${PRODUCT}" "Выберите тип инсталляции:" "Или, выберите компоненты для инсталляции:"
InstType "Все"
InstType "Минимум"
SetOverwrite ifnewer
SetOverwrite on
!endif
!endif

Понятно что это просто заголовок, определяющий главные характеристики - язык, цвета, лицензию, переменные которые будут использованы позднее. Можно использовать практически универсально.

0

3

Начальная функция, исполняемая при запуске пакета - проверка наличия предыущей и удаление нафиг.
Прописывание Тотал Коммандера с его плагинами и самыми основными утилитами

Код:
Function .onInit

  ;Extract InstallOptions INI Files
  !insertmacro MUI_INSTALLOPTIONS_EXTRACT "io.ini"

   IfFileExists $INSTDIR\TotalCmd.EXE +1 +3
     MessageBox MB_YESNO|MB_ICONQUESTION "Обнаружена предыдущая версия. Удалить перед инсталляцией новой?" IDYES +1 IDNO +2
     Exec "$INSTDIR\uninstall.exe"

FunctionEnd

Section "Total Commander ${TotalCmd.EXE}" totcom
  SectionIn 1 2 RO
  SetOutPath $INSTDIR

   IfFileExists $INSTDIR\WINCMD.INI +1 +3
     MessageBox MB_YESNO|MB_ICONQUESTION "Обнаружены старые файлы конфигурации. Использовать их?" IDYES +1 IDNO +2
     StrCpy $YN "Y"

!insertmacro usesave WINCMD.INI
!insertmacro usesave DEFAULT.BAR
!insertmacro usesave insert.bar
file Tcunzlib.dll
file UNACEV2.DLL
file WCMZIP32.DLL
file CABRK.DLL
file Totalcmd.inc
file TotalCmd.EXE
file CGLPT9X.VXD
  SetOutPath $INSTDIR\Plugins
file /r .\Plugins\wcx
file /r .\Plugins\wfx
file /r .\Plugins\wlx
file /r .\Plugins\wdx
  SetOutPath $INSTDIR
file /r .\AutoIt

WriteINIStr "$INSTDIR\Plugins\wlx\CADView.ini" General "SHX search paths" "$INSTDIR\Plugins\wlx;"
WriteINIStr "$INSTDIR\Plugins\wlx\CADView.ini" General "SHX default path" "$INSTDIR\Plugins\wlx;"

  SetOutPath $INSTDIR
file wincmd.key
file Totalcmd.hlp
file WCMD_RUS.LNG
file WCMD_RUS.MNU
file SFXHEAD.SFX
file CGLPTNT.SYS
file WinUtils.reg

file ListEdit.exe
!insertmacro usesave ListEdit.ini
!insertmacro usesave MacroRU.ini
!insertmacro usesave MultiCode.ini

file RarExt.dll
file WinRAR.exe
file Default.sfx
file rarreg.key
  WriteRegStr HKCU "SOFTWARE\WinRAR\Viewer" "ExternalViewer" "$INSTDIR\ListEdit.exe"

file i_view32.exe
!insertmacro usesave i_view32.ini

  SetOutPath $INSTDIR\Plugins
file Plugins\Effects.dll
file Plugins\Jpg_transform.dll
file Plugins\Paint.dll 
file Plugins\DjVu.dll

; Настройка путей к ini-файлам

  WriteRegStr HKCU "SOFTWARE\Ghisler\Total Commander" "IniFileName" "$INSTDIR\wincmd.ini"
  WriteRegStr HKCU "SOFTWARE\Ghisler\Total Commander" "FtpIniName" "$INSTDIR\wcx_ftp.ini"
  WriteRegStr HKCU "SOFTWARE\Ghisler\Total Commander" "InstallDir" "$INSTDIR"
    CreateDirectory $SMPROGRAMS\WinUtils
    CreateShortCut "$SMPROGRAMS\WinUtils\WinUtils.lnk" \
                   "$INSTDIR\TotalCmd.exe"
    CreateShortCut "$SMPROGRAMS\WinUtils\Uninstall.lnk" \
                   "$INSTDIR\Uninstall.exe"

; Занесение на панель базовых иконок и настройка Wincmd.ini

WriteINIStr "$INSTDIR\Default.bar" Buttonbar menu1 "ListEdit ${ListEdit.exe}"
WriteINIStr "$INSTDIR\Default.bar" Buttonbar menu8 "WinRAR ${WinRAR.exe}"
WriteINIStr "$INSTDIR\Default.bar" Buttonbar menu3 "IrfanView ${i_view32.exe}"
WriteINIStr "$INSTDIR\Default.bar" Buttonbar menu10 "Список процессов"
WriteINIStr "$INSTDIR\Default.bar" Buttonbar menu16 "Внутренние команды"

;WriteINIStr "$INSTDIR\insert.bar" Buttonbar button1 "$INSTDIR\TotalCmd.EXE,10"
;WriteINIStr "$INSTDIR\insert.bar" Buttonbar cmd1 "$INSTDIR\DEFAULT.BAR"
;WriteINIStr "$INSTDIR\insert.bar" Buttonbar path1 "$INSTDIR\"

WriteINIStr "$INSTDIR\insert.bar" Buttonbar button2 "$INSTDIR\TotalCmd.EXE,8"
WriteINIStr "$INSTDIR\insert.bar" Buttonbar cmd2 "cm_PackFiles"

WriteINIStr "$INSTDIR\insert.bar" Buttonbar button3 "$INSTDIR\TotalCmd.EXE,7"
WriteINIStr "$INSTDIR\insert.bar" Buttonbar cmd3 "cm_UnpackFiles"

WriteINIStr "$INSTDIR\insert.bar" Buttonbar button4 "$INSTDIR\WinRAR,2"
WriteINIStr "$INSTDIR\insert.bar" Buttonbar cmd4 "cm_TestArchive"

;WriteINIStr "$INSTDIR\insert.bar" Buttonbar button9 "$INSTDIR\Plugins\wfx\fr.wfx"
;WriteINIStr "$INSTDIR\insert.bar" Buttonbar cmd9 "cd \\\File Redirector"
;WriteINIStr "$INSTDIR\insert.bar" Buttonbar menu9 "File Redirector"

WriteINIStr "$INSTDIR\Wincmd.ini" Configuration Editor '"%COMMANDER_PATH%\ListEdit.exe"  /edit'
WriteINIStr "$INSTDIR\Wincmd.ini" Configuration InstallDir "$INSTDIR"
WriteINIStr "$INSTDIR\Wincmd.ini" Configuration LanguageIni "%COMMANDER_PATH%\WCMD_RUS.LNG"
WriteINIStr "$INSTDIR\Wincmd.ini" Configuration Mainmenu "%COMMANDER_PATH%\WCMD_RUS.mnu"
WriteINIStr "$INSTDIR\Wincmd.ini" Lister IViewPath "%COMMANDER_PATH%\i_view32.exe"
WriteINIStr "$INSTDIR\Wincmd.ini" PackerPlugins iso "0,%COMMANDER_PATH%\Plugins\wcx\iso.wcx"
WriteINIStr "$INSTDIR\Wincmd.ini" PackerPlugins nrg "0,%COMMANDER_PATH%\Plugins\wcx\iso.wcx"
WriteINIStr "$INSTDIR\Wincmd.ini" PackerPlugins bin "0,%COMMANDER_PATH%\Plugins\wcx\iso.wcx"
WriteINIStr "$INSTDIR\Wincmd.ini" PackerPlugins cue "0,%COMMANDER_PATH%\Plugins\wcx\iso.wcx"
WriteINIStr "$INSTDIR\Wincmd.ini" PackerPlugins img "0,%COMMANDER_PATH%\Plugins\wcx\iso.wcx"
WriteINIStr "$INSTDIR\Wincmd.ini" PackerPlugins msi "0,%COMMANDER_PATH%\Plugins\wcx\msi.wcx"
WriteINIStr "$INSTDIR\Wincmd.ini" PackerPlugins bz2 "27,%COMMANDER_PATH%\Plugins\wcx\bzip2dll.wcx"
WriteINIStr "$INSTDIR\Wincmd.ini" PackerPlugins chm "479,%COMMANDER_PATH%\Plugins\wcx\CHMDir.wcx"
WriteINIStr "$INSTDIR\Wincmd.ini" PackerPlugins its "479,%COMMANDER_PATH%\Plugins\wcx\CHMDir.wcx"
WriteINIStr "$INSTDIR\Wincmd.ini" PackerPlugins ppm "17,%COMMANDER_PATH%\Plugins\wcx\ppmd.wcx"
WriteINIStr "$INSTDIR\Wincmd.ini" PackerPlugins 7z "87,%COMMANDER_PATH%\Plugins\wcx\7zip.wcx"

WriteINIStr "$INSTDIR\Wincmd.ini" FileSystemPlugins "Task manager" "%COMMANDER_PATH%\Plugins\wfx\PROCFS.wfx"

WriteINIStr "$INSTDIR\Wincmd.ini" ContentPlugins 0 "%COMMANDER_PATH%\Plugins\wdx\media.WDX"

SectionEnd

0

4

Короткая секция со справкой

Код:
Section "help" help
  SectionIn 1
  SetOutPath $INSTDIR\help
file help\*.jpg
file help\*.htm

WriteINIStr "$INSTDIR\Default.bar" Buttonbar button18 "$INSTDIR\help\help.htm"
WriteINIStr "$INSTDIR\Default.bar" Buttonbar menu18 "help"
WriteINIStr "$INSTDIR\insert.bar" Buttonbar button11 "$INSTDIR\help\ListEdit.htm"
WriteINIStr "$INSTDIR\insert.bar" Buttonbar menu11 "Справка по ListEdit"

SectionEnd

0

5

Кусок кода, где ставятся вышеприведенные системные утилиты

Код:
SubSection "System utilites" SecContrib1

Section "Small CD-Writer 1.4"
  SectionIn 1
  SetOutPath $INSTDIR
file Wnaspi32.dll
file scdwriter.ini 
file SCDWriter.exe
WriteINIStr "$INSTDIR\Default.bar" Buttonbar menu7 "Small CD-Writer 1.4"
SectionEnd

Section "fitW 4.4"
  SectionIn 1
  SetOutPath $INSTDIR
file fitW.exe
file default.ftw

  SetOutPath $SYSDIR
file mswtif.dll

WriteINIStr "$INSTDIR\Default.bar" Buttonbar menu9 "Fine Tunning of Windows 4.4(fitW)"
SectionEnd

Section "Calculator 2.0"
  SectionIn 1
  SetOutPath $INSTDIR
file Calculator.exe
file calculator.ini
WriteINIStr "$INSTDIR\Default.bar" Buttonbar menu2 "Calculator 2.0"
SectionEnd

SubSectionEnd

0

6

Отдельно - универсальный плеер MPC. Вынесен отдельно как представитель класса мультимедиа.

Код:
Section "Media Player Classic HomeCinema 1.1.0.0"
  SectionIn 1
  SetOutPath $INSTDIR
file mplayerc.exe 
file mpcresources.ru.dll
WriteINIStr "$INSTDIR\Default.bar" Buttonbar menu5 "Media Player Classic HomeCinema 1.1.0.0"

SectionEnd

0

7

Отдельно же - ярлыки

Код:
Section "Создать ссылку в Start"
  SectionIn 1
    CreateShortCut "$STARTMENU\WinUtils.lnk" \
                   "$INSTDIR\TotalCmd.exe"
SectionEnd

Section "Создать ссылку в QuickLaunch"
  SectionIn 1
    CreateShortCut "$QUICKLAUNCH\WinUtils.lnk" \
                   "$INSTDIR\TotalCmd.exe"
SectionEnd

0

8

Кусок кода - подсказки к секциям

Код:
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${totcom} "Прекрасный файлменеджер"
!insertmacro MUI_DESCRIPTION_TEXT ${help} "Файл справки по ${PRODUCT}"
!insertmacro MUI_DESCRIPTION_TEXT ${SecContrib1} "Набор системных утилит"
;!insertmacro MUI_DESCRIPTION_TEXT ${SecContrib3} "Мультимедиа утилиты"
!insertmacro MUI_FUNCTION_DESCRIPTION_END

0

9

То, что должно производиться после всех манипуляций с файлами

Код:
Section -post

  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT}" \
                   "DisplayName" "${PRODUCT} (remove only)"
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT}" \
                   "UninstallString" '"$INSTDIR\uninstall.exe"'

  SetOutPath $INSTDIR
  WriteUninstaller $INSTDIR\uninstall.exe
    Exec '$WINDIR\regedit.exe /s winutils.reg'

SectionEnd

0

10

Секция, которую я сам сделал - прописывание кое-каких настроек системы, которые я обычно делал вручную

Код:
Function SetCustom

  !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_TITLE)" "$(TEXT_IO_SUBTITLE)"
  !insertmacro MUI_INSTALLOPTIONS_DISPLAY "io.ini"

  !insertmacro MUI_INSTALLOPTIONS_READ ${TEMP} "io.ini" "Field 2" "State"
  StrCmp ${TEMP} "1" "" +2

    Exec "$INSTDIR\TotalCmd.exe"

; Внесение изменений в реестр - более правильная работа системы
; Шаг 1 - анимацию окон изничтожить!

  !insertmacro MUI_INSTALLOPTIONS_READ ${TEMP} "io.ini" "Field 4" "State"
  StrCmp ${TEMP} "1" "" +3

  WriteRegStr HKCU "Control Panel\desktop" "MenuShowdelay" "0"
  WriteRegStr HKCU "Control Panel\desktop\WindowMetrics" "MinAnimate" "0"

; Шаг 2 - установка правильной кодировки системы - нет проблем с шрифтами

  !insertmacro MUI_INSTALLOPTIONS_READ ${TEMP} "io.ini" "Field 5" "State"
  StrCmp ${TEMP} "1" "" +9

   ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
   StrCmp $R0 "" "" +4

  WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\Nls\CodePage" "1250" "cp_1251.nls"
  WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\Nls\CodePage" "1251" "cp_1251.nls"
  WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\Nls\CodePage" "1252" "cp_1251.nls"

  WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\Nls\CodePage" "1250" "c_1251.nls"
  WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\Nls\CodePage" "1251" "c_1251.nls"
  WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\Nls\CodePage" "1252" "c_1251.nls"

FunctionEnd

0

11

Ну и конечно секция удаления. Очень простая до скуки, если кто захочет, можно будет расписывать до бесконечности. В данном случае удаляется все кроме файлов конфигурации и файлов меню - может у кого все было настроено, а тут швах и все - начинай сначала ))

Код:
Section "Uninstall"
  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT}"

  Delete $SMPROGRAMS\${PRODUCT}\*.lnk
  Delete $QUICKLAUNCH\${PRODUCT}.lnk 
  RMDir $SMPROGRAMS\${PRODUCT}
  Delete $INSTDIR\help\*.*
  RMDir /r $INSTDIR\help
  Delete $INSTDIR\Plugins\*.*
  RMDir /r $INSTDIR\Plugins
  Delete $INSTDIR\AutoIt\Include\*.*
  RMDir /r $INSTDIR\AutoIt\Include
  Delete $INSTDIR\AutoIt\AutoIt3.exe
  Delete $INSTDIR\*.dll
  Delete $INSTDIR\*.br2
  Delete $INSTDIR\*.exe
  Delete $INSTDIR\*.hlp
  Delete $INSTDIR\*.inc
  Delete $INSTDIR\*.key
  Delete $INSTDIR\*.lng
  Delete $INSTDIR\*.mnu
  Delete $INSTDIR\*.reg
  Delete $INSTDIR\*.sfx
  Delete $INSTDIR\*.sys
  Delete $INSTDIR\*.vxd

SectionEnd

0


Вы здесь » Личный хомяк Максима » NSIS » WinUtils - инсталляционный скрипт