Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
Николай М.
26-05-2013, 14:52
Шутку понял - смешно :)
С инсталом разобрался, а как быть с анисталом не разобрался :help:
Можете привести пример?
Erik Pilsits написал хедер GetFolderPath.nsh, который позволяет получить путь к предопределённой папке в ОС
Используются функции SHGetFolderPath (для WinXP) и SHGetKnownFolderPath (для Vista и выше) и ряд констант и ID для папок.
С этими функциями можно конечно получать пути и обычным образом. Например, для COMMON_APPDATA :
OutFile "GetFolderPath-test.exe"
!define CSIDL_COMMON_APPDATA "0x0023"
Section
System::Call "shell32::SHGetFolderPath(0, i ${CSIDL_COMMON_APPDATA}, 0, 0, t .r1)"
MessageBox MB_OK "$1"
SectionEnd
Но GetFolderPath.nsh более универсален и чуть упрощает код.
Для XP получение пути интереса не представляет, т.к. практически все переменные предопределённых папок, уже есть в самом NSIS. Разве что, как альтернатива получения пути. А вот для Win7 и 8, где большое разнообразие специализированных папок, может пригодиться.
Вот комплект-пример :
Для разнообразия оформления прогрессбара, существует занятная библиотека - SkinProgress.dll, использующая цвета из внешних bmp файлов.
!AddPluginDir ".\"
!include MUI2.nsh
Page custom fnc_Create
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
!define /math PBM_SETRANGE32 ${WM_USER} + 6
!define PB_EXSTYLE ${WS_EX_WINDOWEDGE}|${WS_EX_CLIENTEDGE}
!define PBS_MARQUEE 0x08
OutFile "test_ProgresBarSkin.exe"
Var dlg
Var PROGBAR
Function fnc_Create
nsDialogs::Create 1018
Pop $dlg
${NSD_CreateProgressBar} 0u 10u 100% 12u ""
Pop $PROGBAR
SkinProgress::Set $PROGBAR "$EXEDIR\color.bmp" "$EXEDIR\color_without_progress.bmp"
${NSD_CreateTimer} NSD_Timer.Callback 10 ; Need a timer to kickstart the marquee progressbar
nsDialogs::Show
FunctionEnd
Function NSD_Timer.Callback
SendMessage $PROGBAR ${PBM_SETMARQUEE} 1 50 ; start=1|stop=0 interval(ms)=+N
${NSD_KillTimer} NSD_Timer.Callback
SendMessage $PROGBAR ${PBM_SETRANGE32} 0 100
SendMessage $PROGBAR ${PBM_SETPOS} 20 0
Sleep 200
SendMessage $PROGBAR ${PBM_SETPOS} 30 0
Sleep 200
SendMessage $PROGBAR ${PBM_SETPOS} 40 0
Sleep 200
SendMessage $PROGBAR ${PBM_SETPOS} 50 0
Sleep 200
SendMessage $PROGBAR ${PBM_SETPOS} 60 0
Sleep 200
SendMessage $PROGBAR ${PBM_SETPOS} 100 0
SendMessage $PROGBAR ${PBM_SETMARQUEE} 0 0
FunctionEnd
Section
SectionEnd
Вот комплект-пример :
andryz80
31-05-2013, 09:53
не компилит
+ nsisdl::download
+ nsisdl::download_quiet
+ splash::show
!define: "MUI_INSERT_NSISCONF"=""
Changing directory to: "D:\SkinProgressBar"
Processing script file: "D:\SkinProgressBar\test_ProgresBarSkin.nsi" (ACP)
PluginDir: ".\"
+ SkinProgress::Set
!include: "C:\Program Files\NSIS\Include\MUI2.nsh" (ACP)
!include: "C:\Program Files\NSIS\Contrib\Modern UI 2\MUI2.nsh" (ACP)
NSIS Modern User Interface version 2.0 - Copyright 2002-2013 Joost Verburg (C:\Program Files\NSIS\Contrib\Modern UI 2\MUI2.nsh:9)
!include: closed: "C:\Program Files\NSIS\Contrib\Modern UI 2\MUI2.nsh"
!include: closed: "C:\Program Files\NSIS\Include\MUI2.nsh"
Page: custom (creator:fnc_Create)
!insertmacro: MUI_PAGE_INSTFILES
!insertmacro: end of MUI_PAGE_INSTFILES
!insertmacro: MUI_LANGUAGE
!insertmacro: end of MUI_LANGUAGE
!define: "PBM_SETRANGE32" already defined!
Error in script "D:\SkinProgressBar\test_ProgresBarSkin.nsi" on line 8 -- aborting creation process
Error in script "D:\SkinProgressBar\test_ProgresBarSkin.nsi" on line 8 -- aborting creation process »
Странно... Проверил скрипт на двух компах. Всё компилится без проблем.
line 8 в скрипте - это !define /math PBM_SETRANGE32 ${WM_USER} + 6
описано в http://nsis.sourceforge.net/NsDialogs_FAQ
kotkovets
31-05-2013, 13:09
!define: "PBM_SETRANGE32" already defined! »
не объявленная константа в NSIS 2.XX в файле WinMessages.nsh
поэтому ошибка!
В 3 версии NSIS добавлены много констант в хедер WinMessages.nsh
не объявленная константа в NSIS 2.XX в файле WinMessages.nsh »
Дык, и у меня нет конкретно такой константы в WinMessages.nsh ( Есть только !define PBM_SETRANGE 0x0401 )
И Nsis я испольтзовал v2.46...
If you do not set the range values, the system sets the minimum value to 0 and the maximum value to 100. Because this message expresses the range as a 16-bit unsigned integer, it can extend from 0 to 65,535. The minimum value in the range can be from 0 to 65,535. Likewise, the maximum value can be from 0 to 65,535.
To set a larger range, call PBM_SETRANGE32.
]If you do not set the range values, the system sets the minimum value to 0 and the maximum value to 100 - Означает ли это, что вообщем то не обязательно задавать эту константу ?
всем привет я хотел бы установить разные изображения в welcomepage и finishpage. и еще я хочу чтобы файлы для компиляци добовлять сразу одной папкой все файлы и подпапки как в inno setup с флагом ignoreversion recursesubdirs createallsubdirs , помогите пожалуйста , заранее спасибо .
Mafioza, а мы хотим, чтобы вы наконец-то хотя бы открыли наш Справочник по NSIS (http://forum.oszone.net/thread-168287.html)
K.A.V. вот я его отркрыл несколько раз но не нашел если вам не трудно не могли бы вы быть любезным и написать его здесь ?
K.A.V. вот я его отркрыл несколько раз но не нашел если вам не трудно не могли бы вы быть любезным и написать его здесь ? »
Если вам не трудно, включите проверку правописания, читать предложения без запятых нет желания
я хотел бы установить разные изображения в welcomepage и finishpage »
Справочник по NSIS => Оформление => Интерфейс Modern UI => Страница "Приветствия"
Насчет разных изображений точно сказать не могу, вроде бы здесь как-то описывали, как сделать 2 разных изображения (может кто и подскажет, либо ищите поиском по теме), но втыкнуть одно изображение и в "Приветствие" и в "Финишь" страницы можно, путь к страничке я указал, читайте там.
и еще я хочу чтобы файлы для компиляци добовлять сразу одной папкой все файлы и подпапки »
Справочник по NSIS => Перевод справки NSIS => File
Раз вы даже не знаете, как добавить файлы для упаковки, читайте полностью описание всех команд, ибо тыкать вас постоянно в справочник здесь никто не будет, мы здесь помогаем, а не делаем всё за вас
И в описании команды File, обратите внимание на команду SetOutPath, она задаёт, в какую папку будут распаковываться файлы
Так же, прочтите страничку Переменные NSIS (Variables)
wolkow70
01-06-2013, 20:52
вроде бы здесь как-то описывали, как сделать 2 разных изображения »
!define MUI_WELCOMEFINISHPAGE_BITMAP "1.bmp"
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "2.bmp"
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "2.bmp" »
:teeth:
Нее, я имел ввиду тот случай, когда при инсталляции используются разные изображения в приветствии и на странице финиша :)
vahe-91, есть кнопка "Удалить" в твоём комменте.
Попался такой код : Комбобокс-список выбора диска
!include "MUI2.nsh"
!include "WinCore.nsh"
!define __NSD_ComboBoxEx_CLASS ComboBoxEx32
!define __NSD_ComboBoxEx_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${CBS_DROPDOWN}
!define __NSD_ComboBoxEx_EXSTYLE 0
!define __NSD_DropListEx_CLASS ComboBoxEx32
!define __NSD_DropListEx_STYLE ${DEFAULT_STYLES}|${WS_TABSTOP}|${CBS_DROPDOWNLIST}
!define __NSD_DropListEx_EXSTYLE 0
!insertmacro __NSD_DefineControl ComboBoxEx
!insertmacro __NSD_DefineControl DropListEx
!define CBEM_INSERTITEM 0x00000401
!define CBEM_SETIMAGELIST 0x00000402
!define CBEM_GETIMAGELIST 0x00000403
!define CBEM_GETITEM 0x00000404
!define CBEM_SETITEM 0x00000405
!define CBEM_DELETEITEM ${CB_DELETESTRING}
!define CBEM_GETCOMBOCONTROL 0x00000406
!define CBEM_GETEDITCONTROL 0x00000407
!define CBEM_GETEXTENDEDSTYLE 0x00000409
!define CBEM_HASEDITCHANGED 0x0000040A
!define CBEM_SETEXTENDEDSTYLE 0x0000040E
!define CBEIF_TEXT 0x00000001
!define CBEIF_IMAGE 0x00000002
!define CBEIF_SELECTEDIMAGE 0x00000004
!define CBEIF_OVERLAY 0x00000008
!define CBEIF_INDENT 0x00000010
!define CBEIF_LPARAM 0x00000020
!define CBEIF_DI_SETITEM 0x10000000
!define SHGFI_SMALLICON 0x00000001
!define SHGFI_ICON 0x00000100
!define SHGFI_DISPLAYNAME 0x00000200
!define SHGFI_TYPENAME 0x00000400
!define SHGFI_SYSICONINDEX 0x00004000
Name "ComboBoxEx"
OutFile ComboBoxEx.exe
InstallDir $TEMP
Page custom CreatePage
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
Function CreatePage
!insertmacro MUI_HEADER_TEXT "ComboBoxEx control" "ComboBoxEx control created using nsDialogs plugin"
nsDialogs::Create 1018
Pop $0
StrCmp $0 error 0 +2
Abort
${NSD_CreateLabel} 0u 0u 300u 8u "Выбор диска"
Pop $0
${NSD_CreateDropListEx} 0u 12u 300u 140u "DropListEx"
Pop $1
SendMessage $1 ${CBEM_GETCOMBOCONTROL} 0 0 $0
System::Alloc 352
System::Call `shell32::SHGetFileInfo(in,in,isR1,i352,i${SHGFI_SMALLICON}|${SHGFI_SYSICONINDEX})i.R2`
SendMessage $1 ${CBEM_SETIMAGELIST} 0 $R2
System::Alloc 104
System::Call `kernel32::GetLogicalDriveStrings(i104,isR0)`
.while:
System::Call `kernel32::lstrlen(iR0)i.R3`
StrCmp $R3 0 .endwhile
System::Call `kernel32::GetDriveType(iR0)i.R4`
StrCmp $R4 3 0 .endif
SendMessage $0 ${CB_GETCOUNT} 0 0 $R6
System::Call `shell32::SHGetFileInfo(iR0,i0,iR1,i352,i${SHGFI_ICON}|${SHGFI_DISPLAYNAME}|${SHGFI_TYPENAME})`
System::Call `*$R1(i,i.R5,i,&t${MAX_PATH}.R4)`
System::Call `*(i${CBEIF_TEXT}|${CBEIF_IMAGE}|${CBEIF_SELECTEDIMAGE},iR6,tR4,i${NSIS_MAX_STRLEN},iR5,iR5,i,i,i)i. R7`
SendMessage $1 ${CBEM_INSERTITEM} 0 $R7
System::Free $R7
.endif:
IntOp $R0 $R0 + $R3
IntOp $R0 $R0 + 1
Goto .while
.endwhile:
SendMessage $0 ${CB_SETCURSEL} 0 0
System::Free $R1
System::Free $R0
nsDialogs::Show
FunctionEnd
Section
SectionEnd
Какое сжатие использовать, чтобы файлы из инсталлятора нельзя было вытащить при помощи 7-zip и прочих архиваторов?
Какое сжатие использовать, чтобы файлы из инсталлятора нельзя было вытащить при помощи 7-zip и прочих архиваторов? »
А при чём здесь сжатие ? И что за страх, если твои файлы "вытащат". Скрипт то никто не увидит и не изымит. А файлы и вытаскивать не надо - запустил инсталлятор, они и сами вытащаться...
А если уж так беспокоит неприкосновенность файлов в самом инсталляторе - засунь их в любой запароленный архив.
И извлекай файлы при инсталляции - командой разархивирования с паролем. Ну и запуск инсталлятора также сделай с паролем...
Какое сжатие использовать, чтобы файлы из инсталлятора нельзя было вытащить при помощи 7-zip и прочих архиваторов? » :) Для нас характерно http://sigismund.livejournal.com/221843.html , всё прятать (ныкать, маскировать)! Для нас, специально делают особые сборки, с возможностью превышения стандартной длины строк, при написании сценария http://sourceforge.net/projects/nsis/files/NSIS%203%20Pre-release/3.0a0/nsis-3.0a0-strlen_8192.zip/download , так как из-за незнания или непонимания определённых правил https://sites.google.com/site/nellistepanenko/home/razrabotki-urokov/urok-russkogo-azyka-1-klass-perenos-slov :) , мы не знаем иного способа и не хотим знать или понимать (упёртые)!
Awral, могу оказать Вам медвежью услугу по Вашему вопросу, так как один "горе-программист", специально для подобных случаев, произвел на свет программульку.
http://mpc-build.googlecode.com/svn/trunk/xexecute-hide/
http://mpc-build.googlecode.com/svn/trunk/xexecute-hide/0.6/xeh.exe
Описание от автора программульки:
Xexecute Hide - программа для скрытия структуру sfx-файлов 7z, RAR, NSIS от открытия 7-Zip, WinRAR и скрытия структуру упаковщика UPX, тоесть после её использования 7-Zip не сможет открыть для просмотра внутренние файлы инсталлятора сгенерированного 7z, RAR и NSIS (разработчики NSIS начиная с версии 2.0 убрали эту функцию).
для правильного использования в скрипте NSIS (nsi) добавить или изменить строку и поставить в это значение: CRCCheck Off
это нужно для отключения проверки заголовков exe-файла на ошибки.
поддерживаемые типы файлов: sfx 7z, sfx RAR и NSIS (exe), UPX (exe, ...)
параметры командной строки: xeh.exe [file] [file] ...
изменения после патча записываются в тотже файл.
Кстати, у этого автора, есть сборки NSIS, в которые он интегрировал своё "детище"!
То, что делает эта программулька (меняет кое-где AD на 7E), можно сделать с помощью NSIS. При этом, намного эффективнее и без посредников! :)
Всего-то, используйте свой оригинальный сценарий или задействуйте версию NSIS, ниже 2.0!
При выборе последнего предложенного варианта, перед всеми нами, очень скоро, может возникнуть проблема по поиску старых версий NSIS! :)
P.S. Я не призываю пользоваться программулькой, а наоборот, являюсь ее "противником", так как подобные задачи решаются с помощью NSIS, без посредников!
Доброго времени суток, кто подскажет по сообщению http://forum.oszone.net/post-2104519-323.html
Никак не могу понять в чем соль...
kotkovets
20-06-2013, 01:09
Никак не могу понять в чем соль... »
такая команда как - Reboot, на кастомных страничках в функции кнопки, очевидно, обрабатываются позже, во время установки..
а то, получается несвязно - ребутом прерывается внезапно..
поэтому все команды следует функции переносить в непосредственно во время установки..
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC