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

» NSIS (Nullsoft Scriptable Install System)

Автор: betssaf
Дата сообщения: 23.03.2014 17:56
И не только компактнее, не все могут прожки создания портабле! Я нуб в с плас плас. Сам проект такой не напишу, по шаблону докумекать сумею. Шаблон собственно и прошу, далее только подменить назв файлов.
Портабле для разной разрядности говорят лучше в нсис, портабле малваре-антималваре хочу сделать для 86-64, пока нормально отрабатывает упакованная в спуне только на 86
Автор: Victor_VG
Дата сообщения: 23.03.2014 23:49
betssaf

А тут хватит комплекта что выше переложил. HM NIS создаст заготовку, дальше добавляем записи Реестра и где надо по логике алгоритма зовём плагин Registry не забывая подключить его макросы через !include "Registry.nsh".
Там же код прост как три копейки! Например у [more=SumatraPDF]
SetCompressor /solid lzma
!define HAVE_UPX
!ifdef HAVE_UPX
!packhdr tmpexe.tmp "upx --ultra-brute --compress-icons=0 -q tmpexe.tmp"
!endif
!define SUMVER "2.5"
!addplugindir bin
!include MUI2.nsh
!include FileFunc.nsh
!define MUI_ICON "SumatraPDF.ico"
XpStyle on
!define APP "SumatraPDF"
!define EXE "SumatraPDF.exe"
!define REG_PATH_UNINST "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP}"
Name "SumatraPDF"
OutFile "SumatraPDF-${SUMVER}-install.exe"
InstallDirRegKey HKLM "Software\${APP}" "Install_Dir"
InstallDir $PROGRAMFILES\${APP}
!define MUI_COMPONENTSPAGE_NODESC
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_FINISHPAGE_RUN "$INSTDIR\${EXE}"
!define MUI_FINISHPAGE_RUN_TEXT "Launch SumatraPDF"
!define MUI_FINISHPAGE_RUN_NOTCHECKED
!define MUI_FINISHPAGE_NOREBOOTSUPPORT
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
Section "SumatraPDF" SecMain
SectionIn RO
Processes::KillProcessAndWait "${EXE}"
Sleep 1000
SetOutPath $INSTDIR
File "SumatraPDF.exe"
File "..\source\mupdf\resources\fonts\droid\DroidSansFallback.ttf"
File "libmupdf.dll"
File "npPdfViewer.dll"
File "PdfFilter.dll"
File "PdfPreview.dll"
RegDLL "$INSTDIR\PdfFilter.dll"
WriteUninstaller "$INSTDIR\Uninstall.exe"
SetShellVarContext all
CreateShortCut "$SMPROGRAMS\SumatraPDF.lnk" "$INSTDIR\${EXE}" "" "$INSTDIR\${EXE}" 0
WriteRegStr HKLM SOFTWARE\${APP} "Install_Dir" "$INSTDIR"
WriteRegStr HKLM "${REG_PATH_UNINST}" "DisplayName" "${APP}"
WriteRegStr HKLM "${REG_PATH_UNINST}" "DisplayVersion" ${SUMVER}
WriteRegStr HKLM "${REG_PATH_UNINST}" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegStr HKLM "${REG_PATH_UNINST}" "DisplayIcon" "$INSTDIR\${EXE}"
WriteRegStr HKLM "${REG_PATH_UNINST}" "Publisher" "Krzysztof Kowalczyk"
WriteRegStr HKLM "${REG_PATH_UNINST}" "UrlInfoAbout" "http://blog.kowalczyk.info/software/sumatrapdf/"
WriteRegDWORD HKLM "${REG_PATH_UNINST}" "NoModify" 1
WriteRegDWORD HKLM "${REG_PATH_UNINST}" "NoRepair" 1
${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
IntFmt $0 "0x%08X" $0
WriteRegDWORD HKLM "${REG_PATH_UNINST}" "EstimatedSize" "$0"
SectionEnd
Section /o "Use SumatraPDF as my default PDF reader" SecDefault
Exec '"$INSTDIR\${EXE}" -register-for-pdf'
SectionEnd
Function .onInit
ClearErrors
ReadRegStr $0 HKCR ".pdf" ""
${If} ${Errors}
${OrIf} $0 == "${APP}"
SectionSetFlags ${SecDefault} ${SF_SELECTED}
${EndIf}
FunctionEnd
Section "Uninstall"
Processes::KillProcessAndWait "${EXE}"
Sleep 1000
UnRegDLL "$INSTDIR\PdfFilter.dll"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP}"
DeleteRegKey HKLM "Software\${APP}"
ClearErrors
ReadRegStr $0 HKLM "Software\Classes\${APP}" "previous.pdf"
${IfNot} ${Errors}
WriteRegStr HKLM "Software\Classes\.pdf" "" $0
${Else}
ClearErrors
ReadRegStr $0 HKLM "Software\Classes\.pdf" ""
${IfNot} ${Errors}
${AndIf} $0 == "SumatraPDF"
DeleteRegValue HKLM "Software\Classes\.pdf" ""
${EndIf}
${EndIf}
DeleteRegKey HKLM "Software\Classes\${APP}"
ClearErrors
ReadRegStr $0 HKCU "Software\Classes\${APP}" "previous.pdf"
${IfNot} ${Errors}
WriteRegStr HKCU "Software\Classes\.pdf" "" $0
${Else}
ClearErrors
ReadRegStr $0 HKCU "Software\Classes\.pdf" ""
${IfNot} ${Errors}
${AndIf} $0 == "SumatraPDF"
DeleteRegValue HKCU "Software\Classes\.pdf" ""
${EndIf}
${EndIf}
DeleteRegKey HKCU "Software\Classes\${APP}"
DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdf" "ProgId"
SetShellVarContext all
Delete "$SMPROGRAMS\SumatraPDF.lnk"
Delete "$INSTDIR\${EXE}"
Delete "$INSTDIR\PdfFilter.dll"
Delete "$INSTDIR\npPdfViewer.dll"
Delete "$INSTDIR\libmupdf.dll"
Delete "$INSTDIR\DroidSansFallback.ttf"
Delete "$INSTDIR\Uninstall.exe"
RMDir /r "$INSTDIR"
SectionEnd[/more]. Главное понимать что надо сделать и правильно построить алгоритм. А дальше обработки исключений и прочее уже делается не сложно поскольку понятно куда вставить этот блок. А пока алгоритм на уровне идеи он и будет пугать как Кащеево царство - все про него слыхали, но кто ходил не вернулся. А чего боятся? Может сам Кащей давно уже мифом стал коим детей пугают, а люди не возвращаются поскольку им там жить вольготнее?

Автор: betssaf
Дата сообщения: 24.03.2014 02:24

Цитата:
HM NIS создаст заготовку

это плагин (HM) к проге? запуская Nsis такого не вижу.

Цитата:
Например у SumatraPDF

теный лес )) буду изучать что куда и почему.
пока рожал 2 месяца как решить проблему, кит уже смотрячили малваре портабле версии 2.0 мультиленг для обеих разрядностей. Опередили
Автор: Victor_VG
Дата сообщения: 24.03.2014 03:23
betssaf

Редактор кода и он же IDE. В архиве есть. Каталог HM NIS 2.03. Можно использовать и среду Exlips, но та более громоздка.
Автор: betssaf
Дата сообщения: 24.03.2014 03:33

Цитата:
Редактор кода и он же IDE

буду мучить! (не плохой у вас наборчик! я то голым дистриб пробывал ) кит хорошо сделали, правда не одним файлом.
Автор: Victor_VG
Дата сообщения: 24.03.2014 03:45
betssaf

Это специально - обновление всегда можно перебрать.
Автор: betssaf
Дата сообщения: 24.03.2014 03:48
хорошо сделали, а то есть наборы но там все по кит
вас AutoIT интересует? справка у кит обновилась Ссылка может кто переведет.
Автор: Victor_VG
Дата сообщения: 24.03.2014 05:15
betssaf

АутоИТ-м я не пользуюсь - это в основном вин-пакет, а я 90% времени работаю под UNIX.
Автор: betssaf
Дата сообщения: 24.03.2014 05:23

Цитата:
а я 90% времени работаю под UNIX

чуть поменьше )) в слаке от испанцев сборка.
Автор: Victor_VG
Дата сообщения: 24.03.2014 05:30
betssaf

Ясно, но мы отвлекаемся от темы. Основная идея такова - написали алгоритм, запустили HM NIS, затем мастера создания нового скрипта, задали ему файлы, деинсталляцию, после сохраняем скрипт с относительными путями, и используя утилиту reg2nsis конвертируем реестровые скрипты в NSIS. Убираем лишнее, вставляем реестровые записи или в секцию post, или лучше в отдельную секцию после установки файлов, но до неё, если надо подключаем плагины, компилируем и проверяем полученное.
Автор: betssaf
Дата сообщения: 24.03.2014 05:45

Цитата:
написали алгоритм

вот здесь дебри непроходимые... )) никогда ничего не писал с нуля, только по шаблону догонял )) я так понимаю, чтобы написать надо знать си плас плас, хотя бы 1 месяц штудируя книжку!
[more=из данной заготовки кит]
##1
##2
##
!define NAME "Winly-USB-installer"
!define DISTRO "Winly-USB-installer"
!define FILENAME "Winly-USB-installer"
!define VERSION "0.2"
!define MUI_ICON "pe.ico"
RequestExecutionLevel highest ;Установите права пользователей высокие
SetCompressor LZMA ;формат сжатия
CRCCheck On
XPStyle on ;Если хр системе адаптироваться к стилю XP
ShowInstDetails show
BrandingText "Winly-USB-installer?
CompletedText "Установка завершена, добро пожаловать к использованию и коллекции инструментов - Shendiao teasiu"
InstallButtonText "Создание "; переименован кнопку Далее, чтобы создать
Name "${NAME}-${VERSION}"
OutFile "${FILENAME}-${VERSION}.exe" ;Exe имя файла генерируется
!include "nsDialogs.nsh"
!include "MUI2.nsh"
!include "FileFunc.nsh"
!include "WordFunc.nsh" ;Список дисков
; Установите заголовок страницы
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "pe-logo.bmp"
!define MUI_HEADERIMAGE_BITMAP_NOSTRETCH
!define MUI_HEADERIMAGE_RIGHT ;Логотип значок отображается справа, а затем к левой СЛЕВА
; Определите переменные
Var DestDriveTxt
Var DestDrive
Var DestDisk
Var LabelDrivePageText
Var LabelDriveSelect
Var Format
Var FormatMe
Var Hddmode ;В этом примере я заменил режим Syslinux
Var Zipmode ;В этом примере я заменил режим grub4dos
Var HddmodeMe
Var ZipmodeMe
Var Warning
Var Soft
Var Link
Var Links
Var Image
Var hImage
Var Iso
Var ISOFileTxt
Var ISOSelection
Var TheISO
Var ISOTest
Var ISOFile
var BootDir

Page custom drivePage ;определяет

!define MUI_INSTFILESPAGE_COLORS "00FF00 000000"
; Instfiles page
!define MUI_TEXT_INSTALLING_TITLE $(Install_Title)
!define MUI_TEXT_INSTALLING_SUBTITLE $(Install_SubTitle)
!define MUI_TEXT_FINISH_SUBTITLE $(Install_Finish_Sucess)
!insertmacro MUI_PAGE_INSTFILES
; Language files
!insertmacro MUI_LANGUAGE "SimpChinese" ;поддержка руского
LangString DrivePage_Title ${LANG_SIMPCHINESE} "USB-диска для запуска программы установки."
LangString DrivePage_Title2 ${LANG_SIMPCHINESE} "Во-первых, вставить диск USB, а затем открыть программу."
LangString DrivePage_Text ${LANG_SIMPCHINESE} "Этот программа сделает ваш USB диск загрузочным."
LangString DrivePage_Input ${LANG_SIMPCHINESE} "Шаг 1: Кликните на выпадающем меню, чтобы выбрать USB диск."
LangString Soft_Text ${LANG_SIMPCHINESE} "Шаг 2: Выберите ваш ISO встроенный в режиме загрузки..."
LangString Iso_Text ${LANG_SIMPCHINESE} "Шаг 3: Выберите файл ISO образа."
LangString WarningPage_Text ${LANG_SIMPCHINESE} ""Примечание: Убедитесь, что данные скрытого раздела сохранены, устройство будет полностью перезаписано, исходные данные, не подлежат возмещению.!""
LangString Creation ${LANG_SIMPCHINESE} "Выполняется распаковка образа на диск, пожалуйста, подождите."
LangString Install_Title ${LANG_SIMPCHINESE} "установка ${DISTRO}"
LangString Install_SubTitle ${LANG_SIMPCHINESE} "Пожалуйста, подождите ${NAME} установка ${DISTRO} к $DestDisk"
LangString Install_Finish_Sucess ${LANG_SIMPCHINESE} "$\t ${NAME} Установка невозможна${DISTRO}к$DestDisk"
LangString IsoFile ${LANG_SIMPCHINESE} "ISO файл образа*.iso"
LangString Syslinux_Warning ${LANG_SIMPCHINESE} "ошибка ($R8) Происходит, когда установкаsyslinuxвремя.$\r$\nвашUSBПривод не будет загружаться..$\r$\nМы рекомендуем вам заменить диск или отформатировать, попробовать еще раз."
LangString grub4dos_Warning ${LANG_SIMPCHINESE} "ошибка ($R8) Происходит, когда установкаgrub4dosвремя.$\r$\nвашUSBПривод не будет загружаться..$\r$\nМы рекомендуем вам заменить диск или отформатировать, попробовать еще раз."

Function .onInit
InitPluginsDir
SetOutPath "$PLUGINSDIR" ;Будет настраиваться на всех ресурсов в начале временной папки напрямую перезвонить
File /r "src\*.*"
FunctionEnd

Function drivePage
!insertmacro MUI_HEADER_TEXT $(DrivePage_Title) $(DrivePage_Title2)
nsDialogs::Create 1018
${If} $DestDrive == ""
GetDlgItem $6 $HWNDPARENT 1 ; Система управления ручки к следующему шагу
EnableWindow $6 0 ; Закрыть кнопка Далее
${EndIf}
; Создание растрового BMP изображения
${NSD_CreateBitmap} 75% 0 20% 100% ""
Pop $Image
${NSD_SetImage} $Image $PLUGINSDIR\ad.bmp $hImage

${NSD_CreateLabel} 0 0 70% 30 $(DrivePage_Text)
Pop $LabelDrivePageText

${NSD_CreateLabel} 0 20 70% 15 $(DrivePage_Input)
Pop $LabelDriveSelect
SetCtlColors $LabelDriveSelect /Branding 0000BD ; Синий шрифт
;Создать выпадающее меню
${NSD_CreateDroplist} 0 40 30% 25 ""
Pop $DestDriveTxt
${NSD_OnChange} $DestDriveTxt db_select.onchange
${GetDrives} "FDD" driveList ;FDD сказал съемный диск, который отображает только диск U, HDD указывает, что жесткий диск отображается локально, ВСЕ показать все диски
${If} $DestDrive != ""
${NSD_CB_SelectString} $DestDriveTxt $DestDrive
${EndIf}
; Увеличение помощь или обновить веб-ссылки
${NSD_CreateLink} 85% 195 15% 14 "Обновление программного обеспечения".
Pop $Link
${NSD_OnClick} $Link onClickMyLink
; параметры форматирования
${NSD_CreateButton} 32% 38 38% 22 "(Необязательно) FAT32 формат этот диск"
Pop $Format
${NSD_OnClick} $Format FormatIt
; подпись
${NSD_CreateLabel} 0 70 70% 15 $(Soft_Text) ;Программное наполнение, кронштейны переведен обратно на русский
Pop $Soft
SetCtlColors $Soft /Branding 0000BD ;синий
${NSD_CreateLabel} 0 115 70% 15 $(Iso_Text) ;содержание
Pop $Iso
SetCtlColors $Iso /Branding 0000BD ;синий
${NSD_CreateText} 0 135 50% 20 "Обзор загружен *. выберете файл iso"
Pop $ISOFileTxt
${NSD_CreateBrowseButton} 53% 135 65 20 "Обзор"
Pop $ISOSelection
${NSD_OnClick} $ISOSelection ISOBrowse
; Параметры режима загрузки диска
${NSD_CreateCheckBox} 0 90 36% 15 "Режим запуска Syslinux."
Pop $Hddmode
${NSD_Check} $Hddmode ; по умолчанию
${NSD_OnClick} $Hddmode HddmodeIt
${NSD_CreateCheckBox} 38% 90 36% 15 "Режим запускаGrub4dos."
Pop $Zipmode
${NSD_OnClick} $Zipmode ZipmodeIt
; Предупредительные надписи
${NSD_CreateLabel} 0 190 80% 14 $(WarningPage_Text)
Pop $Warning
EnableWindow $Format 0 ;Закрыть Советы
EnableWindow $Hddmode 0
EnableWindow $Zipmode 0
EnableWindow $ISOFileTxt 0
EnableWindow $ISOSelection 0
ShowWindow $Warning 0
GetDlgItem $6 $HWNDPARENT 3
ShowWindow $6 0 ; назад
nsDialogs::Show
${NSD_FreeImage} $hImage ; Растровый выпуска
FunctionEnd

Function ISOBrowse
nsDialogs::SelectFileDialog open "$EXEDIR" $(IsoFile) ;Если программное обеспечение в той же директории, где файл ISO, автоматический выбор
Pop $TheISO
${NSD_SetText} $ISOFileTxt $TheISO
SetCtlColors $ISOFileTxt 009900 FFFFFF
StrCpy $ISOTest "$TheISO"
StrCpy $ISOFile "$TheISO" ; Выберите файл ISO, для того, чтобы извлечь сзади
${NSD_SetText} $Iso "Третий шаг завершен, ваш файл ISO образ выбран."
${NSD_CreateLabel} 0 165 75% 14 "Хорошо, вы можете нажать создать."
GetDlgItem $6 $HWNDPARENT 1 ; Система управления ручки к следующему шагу
EnableWindow $6 1 ; Нажмите Далее
FunctionEnd
Function onClickMyLink
Pop $Links ; Чтобы избежать ошибок,pop количественный
ExecShell "open" "http://www.ecoo168.com"
FunctionEnd

Function db_select.onchange
Pop $DestDriveTxt
${NSD_GetText} $DestDriveTxt $0
StrCpy $DestDrive "$0"
StrCpy $DestDisk "$DestDrive" -1
EnableWindow $Format 1 ;打开提示
EnableWindow $Hddmode 1
EnableWindow $Zipmode 1
EnableWindow $ISOFileTxt 1
EnableWindow $ISOSelection 1
ShowWindow $Warning 1
SetCtlColors $Warning /Branding FF0000
Call HddmodeIt
Call ZipmodeIt
FunctionEnd
;Уравнение список Письмо
Function driveList
;SendMessage $DestDriveTxt ${CB_ADDSTRING} 0 "STR:$9$R1$R6"
SendMessage $DestDriveTxt ${CB_ADDSTRING} 0 "STR:$9"
Push 1
FunctionEnd
Function HddmodeIt
${NSD_GetState} $Hddmode $HddmodeMe
${If} $HddmodeMe == ${BST_CHECKED}
${NSD_Check} $Hddmode
StrCpy $HddmodeMe "Да"
${NSD_SetText} $Hddmode "(Выберите) режим запуска Syslinux"
${NSD_Uncheck} $Zipmode
StrCpy $ZipmodeMe "Нет"
${NSD_SetText} $Zipmode "Режим запуска Grub4dos"
${ElseIf} $HddmodeMe == ${BST_UNCHECKED}
${NSD_Uncheck} $Hddmode
StrCpy $HddmodeMe "Нет"
${NSD_SetText} $Hddmode "Режим запуска Syslinux"
${NSD_Check} $Zipmode
StrCpy $ZipmodeMe "Да"
${NSD_SetText} $Zipmode "(Выберите) режим запуска Grub4dos"
${EndIf}
FunctionEnd
Function ZipmodeIt ; Set Format2 Option
${NSD_GetState} $Zipmode $ZipmodeMe
${If} $ZipmodeMe == ${BST_CHECKED}
${NSD_Check} $Zipmode
StrCpy $ZipmodeMe "Да"
${NSD_SetText} $Zipmode "(Выберите) режим запуска Grub4dos"
${NSD_Uncheck} $Hddmode
StrCpy $HddmodeMe "Нет"
${NSD_SetText} $Hddmode "Режим запуска Syslinux"
${ElseIf} $ZipmodeMe == ${BST_UNCHECKED}
${NSD_Uncheck} $Zipmode
StrCpy $ZipmodeMe "Нет"
${NSD_SetText} $Zipmode "Режим запуска Grub4dos"
${NSD_Check} $Hddmode
StrCpy $HddmodeMe "Да"
${NSD_SetText} $Hddmode "(Выберите) режим запуска Syslinux"
${EndIf}
FunctionEnd
Function FormatIt ; Параметры Форматирования
Pop $FormatMe
MessageBox MB_YESNO "Форматировать все пространство, - продолжить?" IDYES true IDNO false
true:
Goto next
false:
MessageBox MB_OK|MB_ICONSTOP "Не отформатирован, бросить"
Abort
next:
MessageBox MB_YESNO "Продолжить форматирование? (Пожалуйста, убедитесь, что данных на диске были сохранены, при форматирование данные стираются, U)" /SD IDYES IDNO false2
Goto next2
false2:
MessageBox MB_OK|MB_ICONSTOP "Не отформатирован, бросить"
Abort
next2: ;отформатирован команду DOS, подробные инструкции, С: представление и hd0, hd1 представление
nsExec::ExecToLog '"cmd" /c "echo y|$PLUGINSDIR\fbinst $DestDisk format --raw --force --fat32"'
MessageBox MB_OK "Форматирование завершено, восстановить все пространство U диска."
FunctionEnd
Function InstallEYes
SetShellVarContext all
StrCpy $R0 $DestDrive -1 ; 将盘符后面的'\'字符截去,表示为如D: 再定义为$R0
ClearErrors
${If} $HddmodeMe == "Да"
DetailPrint "Создание Syslinux на $ DestDisk, пожалуйста, подождите
ExecWait '$PLUGINSDIR\syslinux.exe -maf $R0' $R8 ; Это SYSLINUX командной строки DOS, пожалуйста, обратитесь к официальному описанию
DetailPrint "SyslinuxИнформация обнаруженное значение возврата Установка=$R8 , 0Указывает успех"
Banner::destroy
${If} $R8 != 0 ; Если возвращаемое значение не равно 0, то всплывающее окно с сообщением предупреждение
MessageBox MB_ICONEXCLAMATION|MB_OK $(Syslinux_Warning)
DetailPrint "Пожалуйста, попробуйте еще ??раз, или заменить диск."
${EndIf}
Call syscopyfile
${ElseIf} $ZipmodeMe == "Да"
DetailPrint "Создание Grub4dos на $ DestDisk, пожалуйста, подождите"
ExecWait '$PLUGINSDIR\BOOTICE.EXE /DEVICE=$R0 /mbr /install /type=grub4dos /auto' $R8 ; bootice Поддержка командной строки, есть много использования, обратитесь к должностному лицу
DetailPrint "Grub4dosИнформация обнаруженное значение возврата Установка=$R8 , 0Указывает успех"
Banner::destroy
${If} $R8 != 0 ; Если возвращаемое значение не равно 0, то всплывающее окно с сообщением предупреждение
MessageBox MB_ICONEXCLAMATION|MB_OK $(grub4dos_Warning)
DetailPrint "Пожалуйста, попробуйте еще ??раз, или заменить диск."
${EndIf}
Call grubcopyfile
${EndIf}
FunctionEnd
Function syscopyfile
${If} ${FileExists} "$BootDir\syslinux.cfg"
;Ничего не делать
${ElseIf} ${FileExists} "$BootDir\syslinux\syslinux.cfg"
;Ничего не делать
${ElseIf} ${FileExists} "$BootDir\boot\syslinux\syslinux.cfg"
;Ничего не делать
${ElseIf} ${FileExists} "$BootDir\boot\isolinux\isolinux.cfg"
Rename "$BootDir\boot\isolinux\" "$BootDir\boot\syslinux\"
Rename "$BootDir\boot\syslinux\isolinux.cfg" "$BootDir\boot\syslinux\syslinux.cfg"
${ElseIf} ${FileExists} "$BootDir\isolinux\isolinux.cfg"
Rename "$BootDir\isolinux\" "$BootDir\syslinux\"
Rename "$BootDir\syslinux\isolinux.cfg" "$BootDir\syslinux\syslinux.cfg"
${ElseIf} ${FileExists} "$BootDir\isolinux.cfg"
Rename "$BootDir\isolinux.cfg" "$BootDir\syslinux.cfg"
${Else} ; Вышеуказанные документы иногда нет
DetailPrint "Стандартный конфигурационный файл syslinux.cfg не найден Syslinux"
DetailPrint "Вы можете быть установлены вместо использования Syslinux загрузки ISO,"
DetailPrint "Или файл загрузки изменяется для других имен, которые я не могу идентифицировать,"
DetailPrint "请尝试其他启动方式或者手动寻找并编辑引导文件。"
${EndIf}
; Продолжить, чтобы обнаружить меню графического Syslinux, в целях достижения той же версии
${If} ${FileExists} "$BootDir\vesamenu.c32"
CopyFiles "$PLUGINSDIR\vesamenu.c32" "$BootDir\vesamenu.c32"
${ElseIf} ${FileExists} "$BootDir\syslinux\vesamenu.c32"
CopyFiles "$PLUGINSDIR\vesamenu.c32" "$BootDir\syslinux\vesamenu.c32"
${ElseIf} ${FileExists} "$BootDir\boot\syslinux\vesamenu.c32"
CopyFiles "$PLUGINSDIR\vesamenu.c32" "$BootDir\boot\syslinux\vesamenu.c32"
${EndIf}
FunctionEnd
Function grubcopyfile
;Если вы хотите скопировать файл в нем, пожалуйста, добавить соответствующий файл в пакете ресурсов, скопируйте следующую команду
# CopyFiles "$PLUGINSDIR\grldr" "$BootDir\grldr"
# CopyFiles "$PLUGINSDIR\menu.lst" "$BootDir\menu.lst"
${If} ${FileExists} "$BootDir\grldr"
${ElseIf} ${FileExists} "$BootDir\grub\grldr"
${ElseIf} ${FileExists} "$BootDir\boot\grub\grldr"
${ElseIf} ${FileExists} "$BootDir\grub.exe"
${ElseIf} ${FileExists} "$BootDir\boot\grub.exe"
${ElseIf} ${FileExists} "$BootDir\boot\grub\grub.exe"
${Else} ; Если любой из этих документов не являются, следующие советы
DetailPrint "Стандартный конфигурационный файл grldr grub4dos не найден"
DetailPrint "Вы не могли бы использовать Grub4dos руководство по установке ISO,"
DetailPrint "Или файл загрузки изменяется для других имен, которые я не могу идентифицировать,"
DetailPrint "请尝试其他启动方式或者手动寻找并编辑引导文件。"
${EndIf}
FunctionEnd
Section "Install" main
StrCpy $BootDir $DestDrive -1 ; 将盘符后面的'\'字符截去,表示为如D: 再定义为bootdir
StrCpy $BootDir "$BootDir"
DetailPrint $(Creation)
ExecWait '"$PLUGINSDIR\7zG.exe" x "$ISOFile" -o"$BootDir" -y -x![BOOT]*' ;встроенный 7z автоматически извлекать файл ISO-образ на диск
DetailPrint "Стандарты в настоящее время обнаружены и настроены файлы запуска, пожалуйста, подождите."
Call InstallEYes
SectionEnd

[/more]
для записи в скрытый раздел флехи, догнал только перевод и пару значений ))
Victor_VG, вы не могли бы сделать видео простого приложения портабле. чтобы было хотя бы наглядно что докумекивать под свои нужды.
мастер сценариев, требует указать язык, в окне настроек курсор не перевести
Автор: Victor_VG
Дата сообщения: 24.03.2014 22:50
betssaf

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

А алгоритм это просто расписанная по шагам последовательность операций ведущая к поставленной нами цели. Машина - это большая железная дура и ей надо всё расписывать по шагам.
Автор: betssaf
Дата сообщения: 25.03.2014 03:16

Цитата:
Машина - это большая железная дура и ей надо всё расписывать по шагам.

да это понимаю, как то сидел над книжкой по си )) а вот язык не могу выбрать никак...писали на другом форуме что надо редактор поменять на версию предыдущую.
Автор: Victor_VG
Дата сообщения: 25.03.2014 12:57
betssaf

Я дал нормальный рабочий пакет. Документация есть, примеры там же. Остальное решается элементарно "Отбрасываем страхи и садимся за книжки!" иначе толку будет ноль.
Автор: FanIT
Дата сообщения: 15.04.2014 18:25
Всем привет! Помогите. Я создаю формы при помощи nsDialogs. Как можно задать размер моей форме?
Автор: MKN
Дата сообщения: 16.04.2014 10:12
FanIT

Цитата:
Я создаю формы при помощи nsDialogs. Как можно задать размер моей форме?

Если имеется ввиду размер формы страницы, то либо редактированием ресурсов MUI (что проще), либо с помощью API и системного плагина.
Если имеется ввиду размер форм элемнтов на странице (текст/чек-боксы, кнопки, картинки и т.д.) - то либо штаным образом http://nsis.sourceforge.net/Docs/nsDialogs/Readme.html, либо, если этого не достаточно, опять же, с помощью соответствующих плагинов.
Автор: FanIT
Дата сообщения: 16.04.2014 12:03

Цитата:
Если имеется ввиду размер формы страницы, то либо редактированием ресурсов MUI (что проще), либо с помощью API и системного плагина.

Да. Я именно это и имел ввиду. А не скажите, что именно там нужно редактировать в MUI? Или может где-то уже написано.
Автор: MKN
Дата сообщения: 16.04.2014 12:23
FanIT
редактируем размер ресурса 105 \NSIS\Contrib\UIs\modern.exe
Автор: FanIT
Дата сообщения: 16.04.2014 19:45

Цитата:
редактируем размер ресурса 105 \NSIS\Contrib\UIs\modern.exe

Спасибо! Получилось. А не подскажите. Я делаю инсталлятор. Все отображается на русском, но почему-то надпись на кнопке которую я создал отображается иероглифами.
Автор: Victor_VG
Дата сообщения: 16.04.2014 20:03
FanIT

Можете показать заголовочный фрагмент кода включая функцию .onInit? Вероятно что причины в этой части скрипта. Там должен присутствовать похожий код:

!include "MUI.nsh"

; Language Selection Dialog Settings
!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"

; Language files
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "German"
!insertmacro MUI_LANGUAGE "Russian


Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd

если его не будет то MUI не подключится и тогда подобные явления возможны....
Автор: FanIT
Дата сообщения: 16.04.2014 20:46
Victor_VG, Теперь почему-то на эту строчку ругается
!insertmacro MUI_LANGDLL_DISPLAY
Автор: Victor_VG
Дата сообщения: 16.04.2014 20:54
FanIT

А что у вас в коде? Дефайны объявлены? инклюд подключён? Какое сообщение об ошибке выводит компилятор ?
Автор: FanIT
Дата сообщения: 16.04.2014 21:39
Victor_VG
Компилятор пишет такое Error in macro MUI_LANGDLL_DISPLAY on macroline 10
Вот мой скрипт:

!include "MUI.nsh"
!include "nsDialogs.nsh"

XPStyle on
SetCompress off

Name "Test"
OutFile "Test.exe"

!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"

!define PRODUCT_NAME ""
!define PRODUCT_VERSION ""
!define pkgdir ""
!define MUI_ABORTWARNING

!define MUI_CUSTOMFUNCTION_GUIINIT aeroGUI
Page custom fnc_Welcome_Show
Page custom fnc_SelectPath_Show
Page custom fnc_Install_Show
!insertmacro MUI_LANGUAGE "Russian"

Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd

Function aeroGUI
Aero::Apply [/btnold]
FunctionEnd

Section
SetAutoClose false
SectionEnd

Я пока только изучаю. Так, что мог что-то пропустить.
Автор: Victor_VG
Дата сообщения: 16.04.2014 22:05
FanIT

Правильно ругается - синтаксическая ошибка:

!define PRODUCT_NAME ""
!define PRODUCT_VERSION ""
!define pkgdir ""

!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}}"

должно быть

!define PRODUCT_NAME "имя_приложения"
!define PRODUCT_VERSION "версия_приложения, число"
!define pkgdir "переменная_NSIS"

!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
Автор: FanIT
Дата сообщения: 16.04.2014 22:31
Victor_VG
Все сделал, но все равно на эту строчку ругается. Убираю её и все нормально компилится.
Автор: Victor_VG
Дата сообщения: 16.04.2014 23:54
FanIT

Да, я упустил из виду что ваш скрипт одноязычный. Я привык писать скрипты на паре языков, и там вывод запроса выбора языка нужен.
Автор: FanIT
Дата сообщения: 17.04.2014 10:34
Victor_VG
И мне теперь убрать эту строчку? Ну тогда главная проблема с иероглифами не решена.
Автор: MKN
Дата сообщения: 17.04.2014 10:50
FanIT

Цитата:
Компилятор пишет такое Error in macro MUI_LANGDLL_DISPLAY on macroline 10

Ты забыл добавить :
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_PATH_REGKEY "Software\MyApp"
Автор: Victor_VG
Дата сообщения: 17.04.2014 10:53
MKN

Цитата:
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_PATH_REGKEY "Software\MyApp"

эти дифайны нужны только если мы используем деинсталлятор, если нет - их макросы зря забьют память.
Автор: MKN
Дата сообщения: 17.04.2014 10:57
Victor_VG
Это так. Но FanIT в своём примере скрипта использует :
!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}}"
а без вышедобавленного ессно будет ошибка

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364

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


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