Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Новый участник


Сообщения: 38
Благодарности: 4

Профиль | Отправить PM | Цитировать


Вот почти весь код (за исключением инклюдов..)
Правда, не думаю что он покажется вам легкочитаемым..
читать дальше »
Код: Выделить весь код
; Все это добро накалякал jackrv[jackrv.org.ua].
; Версия компилятора: NSIS-2.46[ANSI]
; Используются плагины:
; - UltraModernUI[NSISSheild]
;	- DotNetVer.nsh
; - Inetc
; При редактировании первое на что обратите внимание, так это строка [19] Константа {PRODUCT_PKG_DIR}
; Важно указать дирекотрию с исходными файлами продукта

; Следующие константы желательно подстроить под свой проект
  !define PRODUCT_NAME              "Etach Server"                                                           ; Имя проекта
  !define PRODUCT_VERSION           "3.1.1"                                                           ; Текущая версия
  !define PRODUCT_FILENAME          "Atott.Chat.Server.Manage.exe"                                    ; Имя исполняемого файла
  !define PRODUCT_UNFILENAME        "uninst.exe"                                                      ; Имя файла деинсталяции
  !define PRODUCT_PUBLISHER         "Etach Group"                                                     ; Компания
  !define PRODUCT_WEB_SITE          "http://etach.ru"                                                 ; Офф.Сайт
  !define PRODUCT_ICOFILE           "${NSISDIR}\project\EtachClient\Orange128.ico"                     ; Иконка установцика
  !define PRODUCT_UNICOFILE         "${NSISDIR}\project\EtachClient\Silver128.ico"                    ; Иконка деинсталятора
  !define PRODUCT_PKG_DIR           "D:\Applications\NSIS\project\EtachClient\source"                 ; Путь к проекту на ЖД
  !define URLDownloads              "http://etach.ru/Downloads/"                                      ; Адрес папки загрузки
  !define FileDotNet                "dotNetFx40_Full_x86_x64.exe"                                     ; Имя инсталятора .Net FrameWork 4.0
  !define URLEtachClient            ""                                                                ; Имя файла инсталятора клиента
  !define URLEtachServer            ""                                                                ; Имя файла инсталятора сервера

; Нижеследующие константы изменять не нужно
  !define PRODUCT_DIR_REGKEY        "Software\${PRODUCT_FILENAME}"                                    ; Ветвь реестра с доп.данными инсталятора
  !define PRODUCT_UNKEY             "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
  !define /date                     NOW "%d.%m.%Y"                                                    ; Формируем сегодняшнюю дату
  !define URLDotNet                 ${URLDownloads}${FileDotNet}

; Кое-какие переменные
  Var Dialog
  Var Label
  Var Text
  Var CheckBox
; --------------------------------------------------------------------------------------------------
; Установка компрессора
  SetCompress force
  SetCompressor /SOLID lzma
; --------------------------------------------------------------------------------------------------
; Основные настройки инсталятора
  Name                "${PRODUCT_NAME}"                                                               ; Имя програмы
  Caption             "$(LANG_CAPTION) ${PRODUCT_NAME} ${PRODUCT_VERSION}"                            ; Заголовок инсталятора
  BrandingText        "${PRODUCT_PUBLISHER}"                                                          ; Текст описания (на полоске, в низу)
  OutFile             "${PRODUCT_NAME}-${PRODUCT_VERSION}_build-${NOW}.exe"                           ; Имя файла после компиляции
  InstallDir          "$PROGRAMFILES\${PRODUCT_NAME}"                                                 ; Директория установки по-умолчанию
  ShowInstDetails     hide                                                                            ; Не отображать список копируемых файлов
  ShowUninstDetails   hide                                                                            ; Не отображать список удаляемых файлов

; Производим подключение вспомагательных скриптов
  !include "DotNetVer.nsh"                                                                            ; Проверка установленного .Net
  !include "UMUI.nsh"                                                                                 ; Подключаем стильный дизайн
  !include "LogicLib.nsh"                                                                             ; Подключаем разширеную логику
  !include "nsDialogs.nsh"                                                                            ; Подключаем дополнительный редактор окон
; !include "macro.nsi"                                                                                ; Мои макросы

; Настройки интерфейса
  ; Общие настройки
    !define MUI_ABORTWARNING                                                                          ; Подтвержление при выходе
    !define MUI_COMPONENTSPAGE_NODESC                                                                 ; MUI без описания (большая область для компонентов)
    !define UMUI_USE_INSTALLOPTIONSEX
    !define UMUI_PARAMS_REGISTRY_ROOT           HKCU                                                  ; Ветка реестра для записи доп.данных инсталятора
    !define UMUI_PARAMS_REGISTRY_KEY            "${PRODUCT_DIR_REGKEY}"                               ; Путь в реестре для доп.данных
    !define UMUI_INSTALLDIR_REGISTRY_VALUENAME  "InstallPath"                                         ; Имя переменной, хрянящей путь к инсталяции
    !define UMUI_LANGUAGE_REGISTRY_VALUENAME    "Language"                                            ; Имя переменной, зранящей язык установки
    !define UMUI_USE_ALTERNATE_PAGE
    !define UMUI_SKIN                           "NSISShield"
  ; Установки иконок файлов
    !define MUI_ICON                            "${PRODUCT_ICOFILE}"                                  ; Иконка инсталятора
    !define MUI_UNICON                          "${PRODUCT_UNICOFILE}"                                ; Иконка деинсталятора
; --------------------------------------------------------------------------------------------------
; Настройка страниц при установке
  ; Основные страницы
    !insertmacro UMUI_PAGE_MULTILANGUAGE                                                              ; Страница выбора языка
;   !insertmacro MUI_PAGE_LICENSE               "$(License)"                                          ; Страницв лицензии
    !insertmacro MUI_PAGE_DIRECTORY                                                                   ; Страница выбора директорий
    Page custom fnCustomInit fnCustomDestroy
    !insertmacro UMUI_PAGE_ADDITIONALTASKS addtasks_function
    ; Страница отображения сведений об установке
      !define UMUI_CONFIRMPAGE_TEXTBOX confirm_function
      !insertmacro UMUI_PAGE_CONFIRM                                                                  ; Страница сведений утановки
    !insertmacro MUI_PAGE_INSTFILES                                                                   ; Страница выполнения скрипта
  ; Страница завершения установки
    !define MUI_FINISHPAGE_NOAUTOCLOSE                                                                ; Не закрывать автоматичесски
    ; Чекбоксы на финишной странице, запуск программы и офф.сайт
      !define MUI_FINISHPAGE_RUN                RunProgram                                            ; Путь к программе
      !define MUI_FINISHPAGE_RUN_TEXT           "$(LANG_FINISHRUN)"                                   ; Текст на чекбоксе запуска
      !define MUI_FINISHPAGE_RUN_CHECKED                                                              ; По-умолчанию выбрано
      !define MUI_FINISHPAGE_LINK               "$(LANG_FINISHURL)"                                   ; Текст ссылки
      !define MUI_FINISHPAGE_LINK_LOCATION      "${PRODUCT_WEB_SITE}"                                 ; Адрес офф.сайта
    !insertmacro MUI_PAGE_FINISH                                                                      ; Финишная страница
    !insertmacro UMUI_PAGE_ABORT
; --------------------------------------------------------------------------------------------------
; Настройка деинсталятора
  !insertmacro MUI_UNPAGE_INSTFILES                                                                   ; Страница хода удаления
; --------------------------------------------------------------------------------------------------
; Настройка локализации
  !insertmacro MUI_LANGUAGE "Russian"                                                                 ; Подключаем Русс.яз.
  !insertmacro MUI_LANGUAGE "English"                                                                 ; Подключаем Англ.яз.
  !insertmacro MUI_LANGUAGE "Ukrainian"                                                               ; Подключаем Укр.яз.
  ; Так-же подключаем файлы определений/переопределений языковых строк
    !include "Language\ru.nsh"
    !include "Language\en.nsh"
    !include "Language\ua.nsh"
; --------------------------------------------------------------------------------------------------
; Макросы
  !macro DotNetInstall
    !insertmacro UMUI_ADDITIONALTASKS_IF_CKECKED DotNet
      inetc::get /CAPTION "Загрузка .NET Framework 4.0" /CANCELTEXT "Отмена" /HEADER "Загрузка .Net Framework 4.0" /POPUP "${URLDotNet}" ${URLDotNet} "C:\dotnetfx.exe" /END
      Pop $0
      StrCmp $0 "OK" InstDotNet
        Delete "C:\dotnetfx.exe"
        Abort "Установка отменена."
      InstDotNet:
        ExecWait "C:\dotnetfx.exe"
        Delete "C:\dotnetfx.exe"
    !insertmacro UMUI_ADDITIONALTASKS_ENDIF
  !macroend
; --------------------------------------------------------------------------------------------------
; Функция инициализации
  Function .onInit
    !insertmacro UMUI_MULTILANG_GET                                                                   ; Выбор языка установки
    !insertmacro MUI_INSTALLOPTIONS_EXTRACT "login.ini"
;   !insertmacro CheckDotNet                                                                          ; Проверка версии .Net
  FunctionEnd

; Функция старта деинсталяции
  Function un.onInit
    MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(LANG_unOnInit)" IDYES +2
    Abort
  FunctionEnd

  Function addtasks_function
    ${If} $R0 == ""
      MessageBox MB_ICONINFORMATION|MB_OK|MB_DEFBUTTON2 "Имя администратора будет admin$\nВы можете вернуться на предыдущую страницу и указать нужный вам логин!"
    ${EndIf}
    !insertmacro UMUI_ADDITIONALTASKSPAGE_ADD_LABEL "$(LANG_ADDITIONAL_ICONS)"
    !insertmacro UMUI_ADDITIONALTASKSPAGE_ADD_TASK DESKTOP 1 "$(LANG_DESKTOP_ICON)"
    !insertmacro UMUI_ADDITIONALTASKSPAGE_ADD_TASK QUICK_LAUNCH 0 "$(LANG_QUICK_LAUNCH_ICON)"
    !insertmacro UMUI_ADDITIONALTASKSPAGE_ADD_EMPTYLINE
    !insertmacro UMUI_ADDITIONALTASKSPAGE_ADD_LABEL "$(LANG_ADDITIONAL_DotNet)"
    !insertmacro UMUI_ADDITIONALTASKSPAGE_ADD_TASK DotNet 0 "$(LANG_DotNet_ICON)"
  FunctionEnd

; Функция отображения инфы об установке
  Function confirm_function
    StrCpy $R1 0
    !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE "$(UMUI_TEXT_INSTCONFIRM_TEXTBOX_DESTINATION_LOCATION)"
    !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE "    - $INSTDIR"
    !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE ""

    !insertmacro UMUI_ADDITIONALTASKS_IF_CKECKED DESKTOP
      StrCpy $R1 1
      !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE "$(LANG_ADD_ICONS)"
      !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE "    - $(LANG_ADD_ICONS_0)"
    !insertmacro UMUI_ADDITIONALTASKS_ENDIF

    !insertmacro UMUI_ADDITIONALTASKS_IF_CKECKED QUICK_LAUNCH
      ${If} $R1 = 0
        !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE "$(LANG_ADD_ICONS)"
        StrCpy $R1 1
      ${EndIf}
      !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE "    - $(LANG_ADD_ICONS_1)"
    !insertmacro UMUI_ADDITIONALTASKS_ENDIF
    ${If} $R1 = 1
      !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE ""
    ${EndIf}

    !insertmacro UMUI_ADDITIONALTASKS_IF_CKECKED DotNet
      !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE "$(LANG_ADD_PRGM)"
        ${If} ${HasDotNet4.0}
          MessageBox MB_ICONINFORMATION|MB_OK|MB_DEFBUTTON2 "$(LANG_CheckDotNet1)"
        ${EndIf}
        !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE "    - .Net Framework 4.0"
        Goto End
    !insertmacro UMUI_ADDITIONALTASKS_ENDIF
    ${If} ${HasDotNet4.0}
    ${Else}
      MessageBox MB_ICONINFORMATION|MB_OK|MB_DEFBUTTON2 "$(LANG_CheckDotNet0)"
    ${EndIf}
    
    ${If} $R0 == ""
      StrCpy $R0 "admin"
    ${EndIf}
      !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE "Админпанель"
      !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE "    - Логин суперпользователя: $R0"
    ${If} $R9 = 1
      !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE "    - Будет создан файл run.bat"
    ${EndIf}
      !insertmacro UMUI_CONFIRMPAGE_TEXTBOX_ADDLINE ""
    End:
  FunctionEnd
  
  Function RunProgram
    Exec "$INSTDIR\${PRODUCT_FILENAME} admin:$R0"
  FunctionEnd
  
  Function fnCustomInit
    nsDialogs::Create 1018
    Pop $Dialog
    SetCtlColors $Dialog "0x000000" "0x566978"
    ${NSD_CreateLabel} 5u 5u 100% 30u "Перед установкой вам необходимо указать логин будущего суперадминистратора.$\nЭтот пользователь будет иметь наивысшиее права, имейте это в виду!"
    Pop $Label
    SetCtlColors $Label "0xB4D3EA" "0x566978"
    ${NSD_CreateLabel} 25u 40u 150u 10u "Логин будущего суперадминистратора: "
    Pop $Label
    SetCtlColors $Label "0xB4D3EA" "0x566978"
    ${NSD_CreateText} 180u 38u 100u 15u ""
    Pop $Text
    SetCtlColors $Text "0xFFFFFF" "0x566978"
    ${NSD_CreateLabel} 5u 60u 100% 20u "По необходимости можно создать bat-файл$\nВ него будут занесены необходимые параметры для запуска сервера"
    Pop $Label
    SetCtlColors $Label "0xB4D3EA" "0x566978"
    ${NSD_CreateCheckBox} 10u 80u 100u 10u "Создать bat-файл"
    Pop $CheckBox
    SetCtlColors $CheckBox "0xB4D3EA" "0x566978"
    ${NSD_CreateLabel} 5u 100u 120% 30u "Важно!$\n  Сервер изначально не настроен, т.е. не содержит никаких данных абсолютно!$\n  Поэтому при первом входе вам нужно зарегистрироваться!"
    Pop $Label
    SetCtlColors $Label "0xFF9900" "0x566978"
    nsDialogs::Show
  FunctionEnd

  Function fnCustomDestroy
    ${NSD_GetText} $Text $R0
    ${NSD_GetState} $CheckBox $R9
  FunctionEnd
  
  Function WriteToFile
    Exch $0 ;file to write to
    Exch
    Exch $1 ;text to write

    FileOpen $0 $0 a #open file
     FileSeek $0 0 END #go to end
     FileWrite $0 $1 #write to file
    FileClose $0

    Pop $1
    Pop $0
  FunctionEnd

  !macro WriteToFile String File
    Push "${String}"
    Push "${File}"
    Call WriteToFile
  !macroend
  !define WriteToFile "!insertmacro WriteToFile"
; --------------------------------------------------------------------------------------------------
; Секции установки (компоненты)
  Section "!$(LANG_SECETACH)" SEC01
    !insertmacro DotNetInstall
    SetOutPath        "$INSTDIR"                                                                      ; Меняем паку распаковки
    File              "source\Atott.Core.dll"
    File              "source\Atott.Chat.Server.Manage.exe.config"
    File              "source\Atott.Chat.Server.Manage.exe"
    File              "source\Atott.Chat.Server.Core.dll"
    File              "source\Atott.Chat.Core.dll"
    File              "source\Atott.Chat.Client.Plugin.dll"
    File              "source\Atott.Chat.Client.Controls.dll"
    WriteUninstaller  "$INSTDIR\${PRODUCT_UNFILENAME}"                                                ; Создаем деинсталятор
    WriteIniStr       "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"   ; Создаем ярлык офф.сайта
    ; Ярлык на рабочем столе
        !insertmacro UMUI_ADDITIONALTASKS_IF_CKECKED DESKTOP
          CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_FILENAME}" "admin:$R0" "$INSTDIR\${PRODUCT_UNFILENAME}" 0 SW_SHOWNORMAL ALT|CONTROL|SHIFT|F4  "$(LANG_ShRUN) $(^Name)"
        !insertmacro UMUI_ADDITIONALTASKS_ENDIF
        
        !insertmacro UMUI_ADDITIONALTASKS_IF_CKECKED QUICK_LAUNCH
          CreateShortCut "$QUICKLAUNCH\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_FILENAME}" "admin:$R0" "$INSTDIR\${PRODUCT_UNFILENAME}" 0 SW_SHOWNORMAL ALT|CONTROL|SHIFT|F4  "$(LANG_ShRUN) $(^Name)"
        !insertmacro UMUI_ADDITIONALTASKS_ENDIF
    ; Создание файла Run.bat
      ${If} $R9 == 1
        ${WriteToFile} "Atott.Chat.Server.Manage.exe admin:$R0" "$INSTDIR\Run.bat"
      ${EndIf}
    ; Регистрация деинсталятора
      WriteRegStr HKCU "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\${PRODUCT_FILENAME}"
      WriteRegStr HKLM "${PRODUCT_UNKEY}" "DisplayName"      "$(^Name)"
      WriteRegStr HKLM "${PRODUCT_UNKEY}" "UninstallString"  "$INSTDIR\${PRODUCT_UNFILENAME}"
      WriteRegStr HKLM "${PRODUCT_UNKEY}" "DisplayIcon"      "$INSTDIR\${PRODUCT_FILENAME}"
      WriteRegStr HKLM "${PRODUCT_UNKEY}" "DisplayVersion"   "${PRODUCT_VERSION}"
      WriteRegStr HKLM "${PRODUCT_UNKEY}" "URLInfoAbout"     "${PRODUCT_WEB_SITE}"
      WriteRegStr HKLM "${PRODUCT_UNKEY}" "Publisher"        "${PRODUCT_PUBLISHER}"
  SectionEnd
; --------------------------------------------------------------------------------------------------
; Секции деинсталятора
  Section Uninstall
    Delete "$INSTDIR\*.*"
    Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
    RMDir /r "$INSTDIR"

    DeleteRegKey HKLM "${PRODUCT_UNKEY}"
    DeleteRegKey HKCU "${PRODUCT_DIR_REGKEY}"
  SectionEnd
; --------------------------------------------------------------------------------------------------
; Информация о файле (о том что после компиляции появляется)
  VIProductVersion ${PRODUCT_VERSION}.0
  VIAddVersionKey /LANG=${LANG_RUSSIAN} ProductName     "${PRODUCT_NAME}"
  VIAddVersionKey /LANG=${LANG_RUSSIAN} ProductVersion  "${PRODUCT_VERSION}"
  VIAddVersionKey /LANG=${LANG_RUSSIAN} CompanyName     "${PRODUCT_PUBLISHER}"
  VIAddVersionKey /LANG=${LANG_RUSSIAN} CompanyWebsite  "${PRODUCT_WEB_SITE}"
  VIAddVersionKey /LANG=${LANG_RUSSIAN} FileVersion     "${PRODUCT_VERSION}"
  VIAddVersionKey /LANG=${LANG_RUSSIAN} FileDescription "${PRODUCT_PUBLISHER}"
  VIAddVersionKey /LANG=${LANG_RUSSIAN} LegalCopyright  "Copyright © ${PRODUCT_PUBLISHER}"
  VIAddVersionKey /LANG=${LANG_RUSSIAN} Comments        "Windows XP, Vista, Win7 $\t .Net Framework 4.0"
  VIAddVersionKey /LANG=${LANG_RUSSIAN} OriginalFilename "${PRODUCT_FILENAME}"

Отправлено: 23:45, 27-02-2011 | #969