PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [20] 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146

Николай М.
26-05-2013, 14:52
Шутку понял - смешно :)
С инсталом разобрался, а как быть с анисталом не разобрался :help:
Можете привести пример?

MKN
28-05-2013, 12:37
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, где большое разнообразие специализированных папок, может пригодиться.
Вот комплект-пример :

MKN
30-05-2013, 11:18
Для разнообразия оформления прогрессбара, существует занятная библиотека - 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

MKN
31-05-2013, 10:17
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

MKN
31-05-2013, 15:11
не объявленная константа в 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 - Означает ли это, что вообщем то не обязательно задавать эту константу ?

Mafioza
01-06-2013, 13:23
всем привет я хотел бы установить разные изображения в welcomepage и finishpage. и еще я хочу чтобы файлы для компиляци добовлять сразу одной папкой все файлы и подпапки как в inno setup с флагом ignoreversion recursesubdirs createallsubdirs , помогите пожалуйста , заранее спасибо .

K.A.V.
01-06-2013, 13:39
Mafioza, а мы хотим, чтобы вы наконец-то хотя бы открыли наш Справочник по NSIS (http://forum.oszone.net/thread-168287.html)

Mafioza
01-06-2013, 13:46
K.A.V. вот я его отркрыл несколько раз но не нашел если вам не трудно не могли бы вы быть любезным и написать его здесь ?

K.A.V.
01-06-2013, 17:12
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"

K.A.V.
01-06-2013, 21:12
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "2.bmp" »
:teeth:

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

alert30
08-06-2013, 16:12
vahe-91, есть кнопка "Удалить" в твоём комменте.

MKN
11-06-2013, 17:28
Попался такой код : Комбобокс-список выбора диска
!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

Awral
12-06-2013, 16:31
Какое сжатие использовать, чтобы файлы из инсталлятора нельзя было вытащить при помощи 7-zip и прочих архиваторов?

MKN
12-06-2013, 18:41
Какое сжатие использовать, чтобы файлы из инсталлятора нельзя было вытащить при помощи 7-zip и прочих архиваторов? »
А при чём здесь сжатие ? И что за страх, если твои файлы "вытащат". Скрипт то никто не увидит и не изымит. А файлы и вытаскивать не надо - запустил инсталлятор, они и сами вытащаться...
А если уж так беспокоит неприкосновенность файлов в самом инсталляторе - засунь их в любой запароленный архив.
И извлекай файлы при инсталляции - командой разархивирования с паролем. Ну и запуск инсталлятора также сделай с паролем...

Dan557
19-06-2013, 03:17
Какое сжатие использовать, чтобы файлы из инсталлятора нельзя было вытащить при помощи 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, без посредников!

diakov
19-06-2013, 21:55
Доброго времени суток, кто подскажет по сообщению http://forum.oszone.net/post-2104519-323.html
Никак не могу понять в чем соль...

kotkovets
20-06-2013, 01:09
Никак не могу понять в чем соль... »
такая команда как - Reboot, на кастомных страничках в функции кнопки, очевидно, обрабатываются позже, во время установки..
а то, получается несвязно - ребутом прерывается внезапно..
поэтому все команды следует функции переносить в непосредственно во время установки..




© OSzone.net 2001-2012