Показать полную графическую версию : [архив].: NSIS - все вопросы :.
kotkovets
07-05-2011, 13:55
но при выборе другой папки или диска терялась \XXX , переписал заново вроде всё работает, но я не уверен полностью. »
Function .onInit
${If} ${AtLeastWinVista} ;начиная от WinVista и выше
Var /global SysDrive ; иницилизируем здесь, в ниже версиях Windows SysDrive - не используется
StrCpy $SysDrive $WINDIR 2
StrCpy $INSTDIR "$SysDrive\Games\XXX"
${Else}
StrCpy $INSTDIR "$PROGRAMFILES\XXX"
${EndIf}
FunctionEnd
InstallDir "$INSTDIR\XXX"
Запускается генератор и все, что дальше делать не понятно.... »
и мне не понятно, что вы дальше хотите сделать
wolkow70
07-05-2011, 15:09
и мне не понятно, что вы дальше хотите сделать »
Создать INI файл со сценарием установки... И разобраться в процессе его создания.
kotkovets
07-05-2011, 20:07
Создать INI файл со сценарием установки... И разобраться в процессе его создания »
Вот накидал небольшой примерчик, с описанием на основе фейса MUI2, генератор файла ответов через ключ /G
!include "MUI2.nsh"
!include "TextFunc.nsh"
!include "WordFunc.nsh"
!include "LogicLib.nsh"
OutFile "setup.exe"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW SHOWWELCOME ;функция при открытии стр. приветствия
!insertmacro MUI_PAGE_WELCOME
!define MUI_PAGE_CUSTOMFUNCTION_SHOW SHOWDIRECTORY ;функция при открытии стр. приветствия
!insertmacro MUI_PAGE_DIRECTORY
!define MUI_PAGE_CUSTOMFUNCTION_SHOW SHOWCOMPONENTS ;функция при открытии стр. компонентов
!insertmacro MUI_PAGE_COMPONENTS
!define MUI_PAGE_CUSTOMFUNCTION_PRE PREINSTFILES ;функция перед открытием стр. установки
!insertmacro MUI_PAGE_INSTFILES
!define MUI_PAGE_CUSTOMFUNCTION_SHOW SHOWFINISH
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "Russian"
Var GMODE
Var CAPTION
Var INIFILE
Var SysDrive
Var SUCCES_SECTION
InstallDir "$PROGRAMFILES\SOFT"
Function .OnInit
StrCpy $SysDrive $WINDIR 2
StrCpy $GMODE 0 ;если обычный режим, то $GMODE = 0
StrCpy $CAPTION "Обычный режим"
${WordReplace} "$EXEFILE" ".exe" ".ini" "+" "$INIFILE" ;подменяем расширение на ini c тем же именем, что и установщик
StrCpy $INIFILE "$EXEDIR\$INIFILE" ;$INIFILE - путь, где будет создан файл конфигурации
${GetOptions} $CMDLINE "/G" $0
${IfNot} ${Silent} ; условие работы генератора, если не тихий режим
${AndIfNot} ${Errors} ; И не установлен флаг ошибки
;здесь команды выполняться будут в режиме генератора, до конца конструкции ${EndIf}
StrCpy $GMODE 1 ;с ключом /G, $GMODE = 1, режим генератора
StrCpy $CAPTION "Генератор ответов" ;меняем название заголовка
;------bla..bla
;------bla..bla
IfFileExists "$INIFILE" 0 +2
Delete "$INIFILE" ;удаляем предыдущий файл конфигурации
${EndIf}
FunctionEnd
Caption "$CAPTION"
;==========================================================================================
Function SHOWWELCOME
${If} $GMODE = 1 ;режим генератора
${NSD_SetText} $mui.WelcomePage.Title "Добро пожаловать! Это генератор ответов."
${NSD_SetText} $mui.WelcomePage.Text "Описание возможностей генератора:$\nbla..bla$\nbla..bla"
${EndIf}
FunctionEnd
;==========================================================================================
Function SHOWDIRECTORY
${If} $GMODE = 1 ;режим генератора
${NSD_SetText} $mui.DirectoryPage.Text \
"Программа запишет в файл конфигурации путь установки программы.$\r\
Этот путь подхватится в тихом режиме запуска установщика.$\r\
Файл конфигурации создатся с таким же именем, как и установщик.$\r\
Вы можете изменить путь выбора папки установки кнопкой «Обзор...»"
${EndIf}
FunctionEnd
;==========================================================================================
Function SHOWCOMPONENTS
${If} $GMODE = 1 ;режим генератора
${NSD_SetText} $mui.ComponentsPage.Text \
"Выберите компоненты которые вы хотите устанавливать в тихом режиме$\n\
Нажмите кнопку «Создать» , что бы создать файл конфигурации установки"
GetDlgItem $0 $HWNDPARENT 1
${NSD_SetText} $0 "Создать"
${EndIf}
FunctionEnd
;=========================================================================================
Function SHOWFINISH
${If} $GMODE = 1 ;режим генератора
${NSD_SetText} $mui.FinishPage.Title "Завершение работы Мастера создания файла ответов."
${NSD_SetText} $mui.FinishPage.Text "Файл ответов готов!"
${EndIf}
FunctionEnd
;=========================================================================================
Function PREINSTFILES ;это функция будет выполнена только в режиме генератора
${If} $GMODE = 1 ;режим генератора
WriteINIStr "$INIFILE" "DIRECTORY" "ISTALLDIR" "$INSTDIR" ;создаем файл конфигурации
${EndIf}
FunctionEnd
;===========================================================================================
; УСЛОВИЕ ВЫПОЛНЕНИЯ ВСЕХ КОМАНД В СЕКЦИИ ТОЛЬКО, ЕСЛИ ПЕРЕМЕННАЯ $SUCCES_SECTION = 1 !
;===========================================================================================
/* МАКРОС ЗАПИСИ ОТМЕЧЕННЫХ СЕКЦИЙ В ФАЙЛ КОНФИГУРАЦИИ
${GetSecWriteSucces} индетификатор_секции
пример:
[Sections]
Test=1 - секция отмечена
Test=0 - секция не отмечена
Если не отмечена секция, то записи в файле конфигурации не будет, т.е равносильно тому,
что переменная $SUCCES_SECTION = 0
*/
;==========================================================================================
!define GetSecWriteSucces "!insertmacro _WriteSection"
!macro _WriteSection secID
StrCpy $SUCCES_SECTION 1 ;по умолчанию ставим $SUCCES_SECTION = 1
StrCmp $GMODE 1 WriteMode ;проверяем режим установки, если $GMODE = 1, режим генератора
IfSilent 0 EndMarco ;проверяем тихий режим, если не тихий режим - выход из макроса
IfFileExists "$INIFILE" 0 EndMarco ;проверяем наличие файла конфигурации
ClearErrors ;очищаем флаг ошибки прунудительно, перед чтением файла конфигурации
ReadINIStr $SUCCES_SECTION "$INIFILE" "Sections" "${secID}" ;состояние секкций помещаем в $SUCCES_SECTION
IfErrors 0 +2 ;проверка на ошибки в чтении файла конфигурации
StrCpy $SUCCES_SECTION 0 ;в случае ошибки $SUCCES_SECTION = 0
Goto EndMarco
WriteMode:
StrCpy $SUCCES_SECTION 0 ; в режиме генератора $SUCCES_SECTION = 0
WriteINIStr $INIFILE Sections ${secID} 1
EndMarco:
!macroend
;==========================================================================================
; УСЛОВИЕ ВЫПОЛНЕНИЯ ВСЕХ КОМАНД В СЕКЦИИ ТОЛЬКО, ЕСЛИ ПЕРЕМЕННАЯ $SUCCES_SECTION = 1 !
;==========================================================================================
Section "-Install"
;чтение из файла ответов путь установки и перезапись значения $INSTDIR
;Условие чтения и перезаписи:
; ТОЛЬКО НЕ В РЕЖИМЕ ГЕНЕРАТОРА И ТОЛЬКО В ТИХОМ РЕЖИМЕ И ПРИ НАЛИЧИИ ФАЙЛА ОТВЕТОВ
${If} $GMODE = 0
${AndIf} ${Silent}
${AndIf} ${FileExists} "$INIFILE"
ClearErrors
ReadINIStr "$R0" "$INIFILE" "DIRECTORY" "ISTALLDIR"
${WordReplace} $R0 "%programfiles%" "$PROGRAMFILES" "+" $R1
${WordReplace} $R1 "%windir%" "$WINDIR" "+" $R0
${WordReplace} $R0 "%appdata%" "$APPDATA" "+" $R1
${WordReplace} $R1 "%systemdrive%" "$SysDrive" "+" $R0
StrCpy $INSTDIR $R0
${EndIf}
${If} $GMODE = 0 ;выполнение всегда, только не в режиме генератора
;--------
/*
тут ваш код!, эта секция всегда должна выполняться
команды пишем до конца конструкции ${EndIf}
*/
;--------
${EndIf}
SectionEnd
Section "Test" Test ; Test - индетификатор секции
${GetSecWriteSucces} Test
${If} $SUCCES_SECTION = 1
;MessageBox MB_OK "Test = $SUCCES_SECTION" IDOK
;--------
/*
здесь пишите свои команды
до конца конструкции ${EndIf}
*/
;--------
${EndIf}
SectionEnd
Section "Test1" Test1 ; Test1 - индетификатор секции
${GetSecWriteSucces} Test1
${If} $SUCCES_SECTION = 1
;MessageBox MB_OK "Test1 = $SUCCES_SECTION" IDOK
;--------
/*
здесь пишите свои команды
до конца конструкции ${EndIf}
*/
;--------
${EndIf}
SectionEnd
Section "Test2" Test2 ; Test2 - индетификатор секции
${GetSecWriteSucces} Test2
${If} $SUCCES_SECTION = 1
;MessageBox MB_OK "Test2 = $SUCCES_SECTION" IDOK
;--------
/*
здесь пишите свои команды
до конца конструкции ${EndIf}
*/
;--------
${EndIf}
SectionEnd
wolkow70
08-05-2011, 12:05
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ »
Получается, что это нам надо сказать:
Спасибо Вам, за то, что тратите свое время, что бы ПОМОЧЬ НАМ!
wolkow70
11-05-2011, 12:30
kotkovets,
Делаю установщик на программу FlylinkDC++.
В общем на XP она и в Program Files хорошо ставится и работает.
А на Windows 7 рекомендуют ставить папку с программой в корень диска.
Я так понимаю, что вышеприведенный пример:
Function .onInit
${If} ${AtLeastWinVista} ;начиная от WinVista и выше
Var /global SysDrive ; иницилизируем здесь, в ниже версиях Windows SysDrive - не используется
StrCpy $SysDrive $WINDIR 2
StrCpy $INSTDIR "$SysDrive\Games\XXX"
${Else}
StrCpy $INSTDIR "$PROGRAMFILES\XXX"
${EndIf}
FunctionEnd
InstallDir "$INSTDIR\XXX"
можно попробовать????
kotkovets
11-05-2011, 13:47
можно попробовать???? »
Попробовать можно все, если религия позволяет...
А на Windows 7 рекомендуют ставить папку с программой в корень диска »
Рекомендуют из-за прав(привелегий) пользователя в Vista/Win7
http://forum.oszone.net/post-1459797-559.html и здесь продолжение http://forum.oszone.net/post-1460492-563.html
К тому же пример определения права пользователя и сколько прав у пользователя (а значит меняем папку распаковки) есть в справочнике по NSIS.
wolkow70
11-05-2011, 18:39
К тому же пример определения права пользователя и сколько прав у пользователя (а значит меняем папку распаковки) есть в справочнике по NSIS. »
Пробовал я так сделать, на семерке дает добро в Программы.. Почему-то....
kotkovets
11-05-2011, 21:49
Пробовал я так сделать, на семерке дает добро в Программы.. Почему-то.... »
потому что, пользователь с правами админа, а если пользователь без прав админа(и его наследников), то винда вам не даст установить в папку %PROGRAMFILES% ничего и недаст добро в реестре запись (изменение) на корневую ветку HKEY_LOCAL_MACHINE
Определить какими правами обладает пользователь поможет стандартный плагин в составе NSIS
UserInfo::GetOriginalAccountType
Pop $0
MessageBox MB_OK "$0"
wolkow70
12-05-2011, 08:22
Товарищи, подскажите, что поправить :
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Веб-сайт ${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
Ярлык интернета создается и работает, но характерная интернет-иконка в меню Пуск отсутствует. Просто никакой значок. Мне надо, чтобы иконку интернета подключить к ссылке.
kotkovets
12-05-2011, 10:40
Просто никакой значок. Мне надо, чтобы иконку интернета подключить к ссылке »
А чем плох ОБЫЧНЫЙ ярлык?
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Сайт ${PRODUCT_NAME}.lnk" "http://wwww.aimp.ru" "" "$PROGRAMFILES\Internet Explorer\iexplore.exe" 1
wolkow70
12-05-2011, 10:49
А чем плох ОБЫЧНЫЙ ярлык? »
1. Полагал, что значок интернета должен сам отражаться на ярлыках url.
2. Браузер по умолчанию Opera.
3. Как обычно все сделал сложнее:
- создал интернет-иконку нейтрального вида, а далее:
!define PRODUCT_WEB_SITE "http://www.xnview.com"
!macro CreateInternetShortcut FILENAME URL ICONFILE ICONINDEX
WriteINIStr "${FILENAME}.url" "InternetShortcut" "URL" "${URL}"
WriteINIStr "${FILENAME}.url" "InternetShortcut" "IconFile" "${ICONFILE}"
WriteINIStr "${FILENAME}.url" "InternetShortcut" "IconIndex" "${ICONINDEX}"
!macroend
!insertmacro CreateInternetShortcut \
"$SMPROGRAMS\${PRODUCT_NAME}\Веб-сайт ${PRODUCT_NAME}" \
"${PRODUCT_WEB_SITE}" \
"$INSTDIR\url.ico" "0"
SectionEnd
Получилось здорово!
wolkow70
12-05-2011, 17:37
kotkovets,
Внедряю функцию сохранения настроек для Opera. Столкнулся с проблемой:
Section "PreInstall" sec01
IfFileExists "$APPDATA\Opera\Opera\*.ini" 0 check_localappdata
MessageBox MB_YESNO|MB_ICONQUESTION "Файлы настроек Opera обнаружены в профиле Пользователя. Выполнить резервное копирование файлов настроек для дальнейшего использования? (Будут находиться в каталоге $DOCUMENTS\Opera Backup)" IDNO no_backup
CreateDirectory "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$APPDATA\Opera\Opera\*.adr" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$APPDATA\Opera\Opera\*.ini" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$APPDATA\Opera\Opera\*.xml" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$APPDATA\Opera\Opera\*.dat" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$APPDATA\Opera\Opera\*.js" "$DOCUMENTS\Opera Backup\"
check_localappdata:
IfFileExists "$LOCALAPPDATA\Opera\Opera\cache" 0 check_programdir
MessageBox MB_YESNO|MB_ICONQUESTION "Кэш браузера, файлы почты и иные данные обнаружены в профиле Пользователя. Выполнить резервное копирование данных для дальнейшего использования? (Будут находиться в каталоге $DOCUMENTS\Opera Backup)" IDNO no_backup
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\cache\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\mail\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\application_cache\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\icons\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\thumbnails\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\widgets\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\vps\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\opcashe\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\temporary_downloads\*" "$DOCUMENTS\Opera Backup\"
goto no_backup
check_programdir:
IfFileExists "$INSTDIR\profile\*.ini" 0 no_backup
MessageBox MB_YESNO|MB_ICONQUESTION "Файлы настроек Opera обнаружены в папке назначения. Выполнить резервное копирование файлов настроек для дальнейшего использования? (Будут находиться в каталоге $PROGRAMFILES\Opera Backup)" IDNO no_backup
CreateDirectory "$PROGRAMFILES\Opera Backup\"
CopyFiles "$INSTDIR\Profile\*.xml" "$PROGRAMFILES\Opera Backup\"
CopyFiles "$INSTDIR\Profile\*.ini" "$PROGRAMFILES\Opera Backup\"
CopyFiles "$INSTDIR\Profile\*.adr" "$PROGRAMFILES\Opera Backup\"
CopyFiles "$INSTDIR\Profile\*.dat" "$PROGRAMFILES\Opera Backup\"
CopyFiles "$INSTDIR\Profile\*.js" "$PROGRAMFILES\Opera Backup\"
no_backup:
В общем, резервные копии создаются, но в этом месте:
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\cache\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\mail\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\application_cache\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\icons\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\thumbnails\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\widgets\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\vps\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\opcashe\*" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\temporary_downloads\*" "$DOCUMENTS\Opera Backup\"
копируются как сами папки , так и еще файлы в них содержащиеся отдельно. В результате получается каша...
Хочу посоветоваться в чем может быть дело?
kotkovets
12-05-2011, 18:09
wolkow70, вечно вы все перевернете с головы на ноги в тех местах, где совершенно не нужно..рекурсия знаете ли вы...
ну чего уж проще...
CopyFiles /silent "C:\Documents and Settings\АТС\Рабочий стол\договор" "C:\"
целиком папка договор (и все, что в ней находится) с рабочего стола окажется на диске С:\
wolkow70
12-05-2011, 18:36
попроще можно жешь...
Код:
CreateDirectory "$INSTDIR\config\BACKUP\"
CopyFiles /silent "$INSTDIR\config\*" "$INSTDIR\config\BACKUP" »
Не ваша ли рекомендация?
И мне не надо всю папку копировать, а выборочно папки из нее. Поэтому попробовал так.
Убрал \* и нормально стало копироваться.
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\cache" "$DOCUMENTS\Opera Backup\"
CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\mail" "$DOCUMENTS\Opera Backup\"
kotkovets
12-05-2011, 21:58
wolkow70,
исходя из-за каких задач...
CreateDirectory "$INSTDIR\config\BACKUP"
CopyFiles /silent "$INSTDIR\config\*" "$INSTDIR\config\BACKUP"
одно и тоже но... разницу видете - я думаю, что вы не видете :lol:
CreateDirectory "$INSTDIR\config\BACKUP"
CopyFiles /silent "$INSTDIR\config" "$INSTDIR\config\BACKUP"
wolkow70
13-05-2011, 06:31
wolkow70,
исходя из-за каких задач...
CreateDirectory "$INSTDIR\config\BACKUP"
CopyFiles /silent "$INSTDIR\config\*" "$INSTDIR\config\BACKUP"
одно и тоже но... разницу видете - я думаю, что вы не видете
CreateDirectory "$INSTDIR\config\BACKUP"
CopyFiles /silent "$INSTDIR\config" "$INSTDIR\config\BACKUP" »
Разница в наличии \*
Вот я и написал, что убрал и все заработало.
А что касается задач, то про эту же задачу и шла речь.
Насколько я помню \* означает, что папка будет копироваться со всем вложенным.
Оно и копировалось, только почему-то дублировалось - копировались папки с файлами, и еще файлы отдельно....
Прошу прощения за возможный флуд. :help:
Меня интересует реальный пример заказной страницы с использованием MUI2 и nsDialog.
Страница должна содержать две ${NSD_CreateCheckBox} с поддержкой флагов и памятью,
для выбора ярлыков на Рабочий стол и Быстрый запуск и ниже две радио кнопки для выбора текущего или всех пользователей.
И возможно ли это реализовать без дополнительных секций?
Так же, хотелось бы увидеть имитацию страницы директории в nsDialog с нормальной кнопкой Обзор...
За ранее благодарен! :clapping:
kotkovets
13-05-2011, 23:28
Так же, хотелось бы увидеть имитацию страницы директории в nsDialog с нормальной кнопкой Обзор... »
Все есть и примеры в папке NSIS\Examples\nsDialogs и читать тут обязательно NSIS\Docs\nsDialogs\Readme.html
В общем пример для всех.
!include "MUI2.nsh"
!include "FileFunc.nsh"
!insertmacro MUI_PAGE_WELCOME
Page custom fnCustomShow fnCustomLeave
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
OutFile "nsdSetup.exe"
ShowInstDetails show
InstallDir "$PROGRAMFILES"
Var Text
Var Dialog
Var Radio1
Var Radio2
Var Check1
Var Check2
Var CheckBox1
Var CheckBox2
Var RadioButton1
Var RadioButton2
Var BrowseButton
Function fnCustomShow
!insertmacro MUI_HEADER_TEXT "O-па!" \
"Вот оно чё Михалыч!"
nsDialogs::Create 1018
Pop $Dialog
/******************************************************************************/
${NSD_CreateCheckBox} 0u 0u 100u 10u "Ярлык на рабочий стол"
Pop $CheckBox1
${NSD_OnClick} $CheckBox1 CheckBox1 ;обработка события на клик
${If} $Check1 == 1
${NSD_SetState} $CheckBox1 1
${ElseIf} $Check1 == 0
${NSD_SetState} $CheckBox1 0
${Else}
${NSD_SetState} $CheckBox1 1
${EndIf}
/******************************************************************************/
${NSD_CreateCheckBox} 0u 15u 140u 10u "Ярлык на панель быстрого запуска"
Pop $CheckBox2
${NSD_OnClick} $CheckBox2 CheckBox2
${If} $Check2 == 1
${NSD_SetState} $CheckBox2 1
${ElseIf} $Check2 == 0
${NSD_SetState} $CheckBox2 0
${Else}
${NSD_SetState} $CheckBox2 0
${EndIf}
/******************************************************************************/
${NSD_CreateRadioButton} 192u 0u 120u 10u "Для текущего пользователя"
Pop $RadioButton1
${NSD_OnClick} $RadioButton1 RadioButton1
/******************************************************************************/
${NSD_CreateRadioButton} 192u 15u 120u 10u "Для всех пользователей"
Pop $RadioButton2
${NSD_OnClick} $RadioButton2 RadioButton2
/******************************************************************************/
${If} $Radio1 == 1
${OrIf} $Radio2 == 0
${NSD_SetState} $RadioButton1 1
${NSD_SetState} $RadioButton2 0
${ElseIf} $Radio1 == 0
${OrIf} $Radio2 == 1
${NSD_SetState} $RadioButton1 0
${NSD_SetState} $RadioButton2 1
${Else}
${NSD_SetState} $RadioButton1 1
${NSD_SetState} $RadioButton2 0
${EndIf}
${NSD_CreateBrowseButton} 250u 70u 50u 13u "Обзор..."
Pop $BrowseButton
${NSD_OnClick} $BrowseButton BrowseButton
/******************************************************************************/
${NSD_CreateText} 0u 70u 80% 13u "$INSTDIR"
Pop $Text
System::Call `shlwapi::SHAutoComplete(i$Text,i1)`
${NSD_OnChange} $Text DirChange
/******************************************************************************/
nsDialogs::Show
FunctionEnd
/******************************************************************************/
Function CheckBox1
Pop $CheckBox1
${NSD_GetState} $CheckBox1 $Check1
FunctionEnd
Function CheckBox2
Pop $CheckBox2
${NSD_GetState} $CheckBox2 $Check2
FunctionEnd
Function RadioButton1
Pop $RadioButton1
${NSD_GetState} $RadioButton1 $Radio1
${NSD_GetState} $RadioButton2 $Radio2
FunctionEnd
Function RadioButton2
Pop $RadioButton2
${NSD_GetState} $RadioButton1 $Radio1
${NSD_GetState} $RadioButton2 $Radio2
FunctionEnd
/******************************************************************************/
Function BrowseButton
Pop $BrowseButton
nsDialogs::SelectFolderDialog "Выберите папку..." "$INSTDIR"
Pop $INSTDIR
${IfNot} $INSTDIR == "error"
${NSD_SetText} $Text "$INSTDIR"
${EndIf}
FunctionEnd
/******************************************************************************/
Function DirChange
Pop $Text
GetDlgItem $0 $HWNDPARENT 1
${NSD_GetText} $Text `$INSTDIR`
${GetRoot} $INSTDIR $1
${If} $INSTDIR == ""
${OrIf} $1 == ""
EnableWindow $0 0
${Else}
EnableWindow $0 1
${EndIf}
FunctionEnd
/******************************************************************************/
Function fnCustomLeave
${NSD_GetText} $Text "$INSTDIR"
${If} $INSTDIR == ""
Abort
${EndIf}
${NSD_GetState} $CheckBox1 $Check1
${NSD_GetState} $CheckBox2 $Check2
${NSD_GetState} $RadioButton1 $Radio1
${NSD_GetState} $RadioButton2 $Radio2
FunctionEnd
/******************************************************************************/
/******************************************************************************/
Section Test
DetailPrint "$$INSTDIR = $INSTDIR"
DetailPrint ""
/**********/
${If} $Check1 = 1
DetailPrint '"Ярлык на рабочий стол"'
DetailPrint ""
${EndIf}
/**********/
${If} $Check2 = 1
DetailPrint '"Ярлык на панель быстрого запуска"'
DetailPrint ""
${EndIf}
/**********/
${If} $Radio1 = 1
DetailPrint '"Для текущего пользователя"'
DetailPrint ""
${EndIf}
/**********/
${If} $Radio2 = 1
DetailPrint '"Для всех пользователей"'
DetailPrint ""
${EndIf}
SectionEnd
В общем пример для всех.
Большое человеческое спасибо!
Но я имел ввиду две разных (отдельных) страницы, но и этого с головой хватит как основа, там разберёмся.
NSIS\Docs\nsDialogs\Readme.html (http://rghost.ru/6285361) - мне пока плохо даётся освоить его.
Как то я у вас спрашивал на счёт редактора форм для nsDialogs, вы тогда ответили, что такого нет.
За чем обманывать наивных людей, недавно мне попался NSIS Dialog Designer (http://coolsoft.altervista.org/en/nsisdialogdesigner),
но к сожалению он заточен только под Unicode, но это не беда.
kotkovets
14-05-2011, 09:51
Как то я у вас спрашивал на счёт редактора форм для nsDialogs, вы тогда ответили, что такого нет. »
хех, а кто обманывал, первичный релиз 18.04.2011, а когда вы спрашивали?
Сначала почитайте, а потом обвиняйте!!!что за народ пошел ни хрена сами не могут ниче сделать, дай все готовое...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC