Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
kotkovets
04-03-2013, 23:40
MessageBox MB_ICONEXCLAMATION|MB_OK "После нажатия на кнопку ОК компьютер автоматически перезагрузится."
Reboot
Goto Done »
нормально нужен писать код, а не выше бред - Goto Done
который никогда... эээ...
почему бред - не буду описывать, ибо справка есть..
пишите на логических констукциях - потеряться и запутаться стремится к нулю
kotkovets, а если так:
Function ClickButton1
pop $btn1
IfFileExists "$SYSDIR\drivers\sptd.sys" 0 NotFiles
MoreInfo::GetFileVersion "$SYSDIR\drivers\sptd.sys"
Pop $1
${StrFilter} "$1" "1" "." "()" $0
MessageBox MB_USERICON|MB_YESNO 'Обнаружена установленная версия драйвера SPTD $0.$\n Хотите обновить драйвер до версии 1.83? $\n$\n (В конце установки ПК будет автоматически перезагружен.)' IDYES +2 IDNO
Abort
${If} ${RunningX64}
ExecWait '"$PLUGINSDIR\SPTD64.exe" add /q'
${Else}
ExecWait '"$PLUGINSDIR\SPTD86.exe" add /q'
${EndIf}
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" "Setup" '"$EXEPATH"'
MessageBox MB_ICONEXCLAMATION|MB_OK "После нажатия на кнопку ОК компьютер автоматически перезагрузится."
Reboot
NotFiles:
${If} ${RunningX64}
ExecWait '"$PLUGINSDIR\SPTD64.exe" add /q'
${Else}
ExecWait '"$PLUGINSDIR\SPTD86.exe" add /q'
${EndIf}
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" "Setup" '"$EXEPATH"'
MessageBox MB_ICONEXCLAMATION|MB_OK "После нажатия на кнопку ОК компьютер автоматически перезагрузится."
Reboot
FunctionEnd
То тоже перезагрузка только после того как закрыть установщик...
Как сделать что бы установщик после нажатия на кнопку ок закрывался сам и комп перезагружался?
Господа, подскажите пожалуйста
Возможно ли при установки приложени дополнять установщик своими ключами
Например
myprogram.exe -c=full
myprogram.exe -c=short
И если да, то как с ними работать?
Возможно ли при установки приложени дополнять установщик своими ключами »
попугаи mode on
Читайте справочник
Справочник по NSIS (http://forum.oszone.net/thread-168287.html) => » GetOptions: обрабатываем значение ключа в параметре запуска инсталлятора
Это как определить, указан ли конкретный ключ при запуске инсталлера, а насчет
как с ними работать? »
зависит уже исключительно от ваших потребностей и фантазии
Ребят может кто то подскажет что с моим кодом нет так?
Иногда в NSIS коде встречается такое : ${SegmentFile} ${SegmentInit} ${SegmentPreExecPrimary} и др ${Segment ***
Что это и для чего ?
MKN, гугл рулит, и вот нашел что-то: http://portableapps.com/manuals/PortableApps.comLauncher/advanced/custom.html#writing-a-custom-segment
Пока на английском.
alert30,
Это я уже читал (переводил). Яснсти нет. (Что за Custom.nsh ? Где он есть, что содержит ? )
Или ${Segment - это местная для portableapps, специфика ?
kotkovets
12-03-2013, 18:52
${SegmentFile} »
это в основном макрос или константа, объявляется в самом теле скрипта, либо (если очень много команд) в
заголовочном файле *.nsh
Естественно заголовочный файл включается в тело скрипта:
!include "путь к файлу nsh"
Tamias Ive
12-03-2013, 21:59
В скрипте есть несколько секций. Как сделать так, чтоб в зависимости от разрядности системы (32-bit, 64-bit) выполнялись те или иные секции, а ненужные даже не отображались в окне выбора компонентов.
Сорри если ответ уже был, но перечитывать 350 страниц форума нет возможности.
kotkovets
12-03-2013, 23:45
В скрипте есть несколько секций. Как сделать так, чтоб в зависимости от разрядности системы (32-bit, 64-bit) выполнялись те или иные секции, а ненужные даже не отображались в окне выбора компонентов.
Сорри если ответ уже был, но перечитывать 350 страниц форума нет возможности. »
Да пожалуйста:
!include "MUI2.nsh"
!include "x64.nsh"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE english
ShowInstDetails show
outfile test.exe
Section "x86" sec_86
SectionEnd
Section "x64" sec_64
SectionEnd
Function .OnInit
${If} ${RunningX64} ;running on x64
!insertmacro UnselectSection ${sec_86} ;снимаем отметку с секции х86
!insertmacro SetSectionFlag ${sec_86} ${SF_SUBSECEND} ;скрываем секцию х86
${Else} ;running on x86
!insertmacro UnselectSection ${sec_64}
!insertmacro SetSectionFlag ${sec_64} ${SF_SUBSECEND}
${EndIf}
FunctionEnd
хотя я так не делаю - НЕУДОБНО!
в любой секции пишу вот такой макрос:
${If} ${RunningX64}
;тут всегда выполняются команды, если разрядность системы 64-битная
${Else}
;тут всегда выполняются команды, если иная разрядность системы
${EndIf}
Tamias Ive
13-03-2013, 00:25
kotkovets, спасибо.
А есть возможность сделать тоже самое, только добавить определение версии Windows. Нужно, чтобы определялась Windows 8.
wolkow70
13-03-2013, 07:49
Кто нибудь может подсказать как изменить текст на странице стартового меню?
пробую так:
var $mui.StartMenuPage.Text
Function SHOWSTARTMENU
${If} $GMODE = 1
StrCpy $mui.StartMenuPage.Text "$(MUI_STARTMENUPAGE_TEXT_TOP)"
${NSD_SetText} $mui.StartMenuPage.Text \
"Выберите папку в меню $\"Пуск$\", куда будут помещены ярлыки программы. Вы также можете ввести другое имя папки. Для продолжения нажмите кнопку $\"Создать$\""
GetDlgItem $0 $HWNDPARENT 1
${NSD_SetText} $0 "Создать"
${EndIf}
FunctionEnd
На кнопке надпись изменяется, а текст нет.
А есть возможность сделать тоже самое, только добавить определение версии Windows. Нужно, чтобы определялась Windows 8. »
Изучайте Справочник по NSIS (http://forum.oszone.net/thread-168287.html)
Кто нибудь может подсказать как изменить текст на странице стартового меню? »
Справочник по NSIS (http://forum.oszone.net/thread-168287.html) => Оформление => Интерфейс Modern => Страница меню "Пуск"
Либо используйте SendMessage (WM_SETTEXT) с указанием handle элемента, ID элемента узнайте сами, смотря с помощью чего вы там страничку делаете
wolkow70, Вы вроде бы не первый день с NSIS работаете, а справочник так и не пробовали весь полностью прочитать?
wolkow70
13-03-2013, 08:42
Вы вроде бы не первый день с NSIS работаете, а справочник так и не пробовали весь полностью прочитать? »
Справочник я читал, там дана такая рекоммендация:
Команда MUI_STARTMENUPAGE_TEXT_TOP помещает текст над списком меню "Пуск".
!define MUI_STARTMENUPAGE_TEXT_TOP "Здесь может быть Ваш текст описания выбора в меню $\"Пуск$\" папки:"
Меня интересует можно ли это реализовать чрез ${NSD_SetText} в функции, так как текст должен меняться только в G-mode.
поэтому и пробовал прописать
StrCpy $mui.StartMenuPage.Text "$(MUI_STARTMENUPAGE_TEXT_TOP)"
StrCpy $mui.StartMenuPage.Text "$(MUI_STARTMENUPAGE_TEXT_TOP)"
${NSD_SetText} $mui.StartMenuPage.Text \ »
Вы поняли, что назначаете этой переменной?
В команде ${NSD_SetText} должно же быть указание handle, а по вашему коду полчается что? А ничего, вы сначала переменной $mui.StartMenuPage.Text назначаете текст, который уже определён в $(MUI_STARTMENUPAGE_TEXT_TOP), затем указываете эту переменную ($mui.StartMenuPage.Text) в команде ${NSD_SetText} :o
Хотя за место неё должно быть указание handle элемента, разве не?
Т.е. по вашему коду должно быть тип такого (где $TextHandle - дескриптор элемента с текстом):
${NSD_SetText} $TextHandle $mui.StartMenuPage.Text
wolkow70
13-03-2013, 09:04
Хотя за место неё должно быть указание handle элемента »
Применительно к другим страницам такая команда (например ${NSD_SetText} $mui.DirectoryPage.Text) работает.
Оказалось, что в отличии от других страниц в хедере StartMenu.nsh переменная $mui.StartMenuPage.Text стандартно не объявлена.
Поэтому пришлось ее объявлять и действительно ей придется предварительно назначать handle, пока я не разобрался как это делается.
Для других страниц в хедерах содержатся такие команды типа:
GetDlgItem $mui.DirectoryPage.Text $mui.DirectoryPage 1006
Поэтому пришлось ее объявлять и действительно ей придется предварительно назначать handle, пока я не разобрался как это делается.
Для других страниц в хедерах содержатся такие команды типа: »
Откройте *.nsh файл, где прописываются настройки для данного диалога старт-меню (для Modern UI это файл System.nsh, для Modern UI 2 это StartMenu.nsh)
Для Modern UI
Ищем команду в System.nsh
Pop $MUI_HWND
После неё вставляем:
var /global mui.StartMenuPage.Text
GetDlgItem $mui.StartMenuPage.Text $MUI_HWND 1003
SendMessage $mui.StartMenuPage.Text ${WM_SETTEXT} 0 "STR:Handle этого элемента с текстом теперь в переменной mui.StartMenuPage.Text"
Для Modern UI 2
Ищем команду в StartMenu.nsh
Pop $mui.StartMenuPage
После неё вставляем:
var /global mui.StartMenuPage.Text
GetDlgItem $mui.StartMenuPage.Text $mui.StartMenuPage 1003
SendMessage $mui.StartMenuPage.Text ${WM_SETTEXT} 0 "STR:Handle этого элемента с текстом теперь в переменной mui.StartMenuPage.Text"
Теперь можете использовать переменную $mui.StartMenuPage.Text, в ней - handle элемента с текстом ;)
wolkow70
13-03-2013, 10:31
K.A.V.,
Все заработало.
Вот эта строка
SendMessage $mui.StartMenuPage.Text ${WM_SETTEXT} 0 "STR:Handle этого элемента с текстом теперь в переменной mui.StartMenuPage.Text"
оказалось не нужна.
Работает так:
var /global mui.StartMenuPage.Text
GetDlgItem $mui.StartMenuPage.Text $mui.StartMenuPage 1003
${NSD_SetText} $mui.StartMenuPage.Text \
"Выберите папку в меню $\"Пуск$\ ...."
Странно, но Au3Info.exe показывает ID 1006, но правильно работает с 1003.
Вот эта строка
SendMessage $mui.StartMenuPage.Text ${WM_SETTEXT} 0 "STR:Handle этого элемента с текстом теперь в переменной mui.StartMenuPage.Text"
оказалось не нужна. »
Это конечно же не нужно, просто для примера вам привёл (я же выше говорил о WM_SETTEXT)...
Странно, но Au3Info.exe показывает ID 1006, но правильно работает с 1003. »
Главное у нас заработало, да и ладно :biggrin:
а так, для назначения текста там же dll используется, пролистинте чуть выше по коду в *.nsh файле, может та dll что-то делает :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC