Показать полную графическую версию : [архив].: NSIS - все вопросы :.
SergioPoverony
14-10-2011, 11:18
Доброго времни суток, вопрос такоей, как можно сконвертить CMD/BAT файл в nSIS
Вот пример файла... просто после миллениумовской версии винды, параметр CHOICE не рабоатет.
В частности не на XP не на более выше не идет +(
Кто сможет помочь? Сразу скажу не нуб в этом деле, делаю портайбл прилоджения на nSIS но вот это привело в тупик!
@echo off
echo Now yo can look short info about your OS Windows:
systeminfo | findstr /r "Microsoft"
systeminfo | findstr /r "based"
systeminfo | findstr /r "64-based" > nul
set os=%errorlevel%
CHOICE /M "Do you want to install ZTE driver?"
if errorlevel 2 goto recovery
echo Install driver section
start /wait Drivers\%os%dpinst.exe
:recovery
adb kill-server
adb start-server
echo Please plug in your "ZTE Racer" to back usb hub.
pause
adb wait-for-device
adb shell cat /proc/mtd | findstr /R "0048" > nul
if errorlevel 1 goto gen2
echo Your Phone is Generation1 (gen1)
goto fastboot
:gen2
echo Your Phone is Generation2 (gen2), or unknown Generation.
pause
:fastboot
adb reboot bootloader
:first
echo Select your recovery
echo 1. - CWM Gen1
echo 2. - CWM Gen2
echo 3. - FTM Gen1
echo 4. - FTM Gen2
CHOICE /C 1234 /M "Enter the number of recovery or FTM"
set mode=%errorlevel%
CHOICE /M "Are you sure? Your choice is %mode%"
if errorlevel 2 goto first
fastboot flash recovery recovery%mode%.img
fastboot reboot
adb wait-for-device
adb reboot recovery
adb kill-server
echo You did it! All complete! Enjoy.
pause
exit
Заранее благодарю за помошь.
Вот такая задача : необходимо чтобы на кастомной странице, на которой имеются несколько чекбоксов и кнопка (по умолчанию не активная) - эта кнопка становилась и оставалась активной, при отметке любого чекбокса (одного, нескольких или всех).
Когда же все отметки сняты кнопка ессно перестаёт быть активной.
В примерах имеется код только для одного чекбокса и кнопки :
!include "nsDialogs.nsh"
!include "winmessages.nsh"
!include "logiclib.nsh"
OutFile "test.exe"
Page Custom pre
var dialog
var hwnd
var button
Function pre
nsDialogs::Create 1018
Pop $dialog
${NSD_CreateCheckbox} 0 0 50% 16% "При отметке кнопка станет активной"
Pop $hwnd
${NSD_OnClick} $hwnd EnDisableButton
${NSD_CreateButton} 25% 45% 50% 50% "Кнопка"
Pop $button
EnableWindow $button 0 # start out disabled
nsDialogs::Show
FunctionEnd
Function EnDisableButton
Pop $hwnd
${NSD_GetState} $hwnd $0
${If} $0 == 1
EnableWindow $button 1
${Else}
EnableWindow $button 0
${EndIf}
FunctionEnd
Section ""
SectionEnd
Как откорректировать код для логики поставленной задачи ?
kotkovets
14-10-2011, 12:12
Как откорректировать код для логики поставленной задачи ? »
!include "nsDialogs.nsh"
!include "winmessages.nsh"
!include "logiclib.nsh"
OutFile "test.exe"
Page Custom pre
var dialog
var Checkbox
var Checkbox1
var Check
var Check1
var button
Function pre
nsDialogs::Create 1018
Pop $dialog
${NSD_CreateCheckbox} 0 0 50% 20% "При отметке кнопка станет активной"
Pop $Checkbox
${NSD_OnClick} $Checkbox fnCheckbox
${NSD_CreateCheckbox} 0 25% 50% 20% "При отметке кнопка станет активной"
Pop $Checkbox1
${NSD_OnClick} $Checkbox1 fnCheckbox1
${NSD_CreateButton} 25% 45% 15% 10% "Кнопка"
Pop $button
EnableWindow $button 0 # start out disabled
nsDialogs::Show
FunctionEnd
Function DisableButton
${NSD_GetState} $Checkbox $Check
${NSD_GetState} $Checkbox1 $Check1
;${NSD_GetState} $Checkbox2 $Check2 ;если примеру еще добавить чекбокс нужно
;${NSD_GetState} $Checkbox3 $Check3
${If} $Check == 1
${OrIf} $Check1 == 1 ;логика ИЛИ
;${OrIf} $Check2 == 1 ;если примеру еще добавить чекбокс нужно
;${OrIf} $Check3 == 1 ;если примеру еще добавить чекбокс нужно
EnableWindow $button 1
${Else}
EnableWindow $button 0
${EndIf}
FunctionEnd
Function fnCheckbox
Pop $Checkbox
Call DisableButton
FunctionEnd
Function fnCheckbox1
Pop $Checkbox1
Call DisableButton
FunctionEnd
Section ""
SectionEnd
Сразу скажу не нуб в этом деле, делаю портайбл прилоджения на nSIS »
Я так понял здесь драйвер ставится, останавливается служба и заводится снова
Есть плагин на офф. сайте по работе с сервисами, ссылка в шапке.
SergioPoverony
14-10-2011, 13:02
Есть плагин на офф. сайте по работе с сервисами, ссылка в шапке. »
Так плагины я скачал а вот как правильно скрипт собрать... недоумеваю... тяжелая неделя сказывается +(
Набросай пожалуйста если есть время...
Тут смысл в том... что снавал определяется версия разрядности винды.. 32 или 64 (плагин GetVersion) потмо запускается установщик дров майкрософтовский из Sdk мелгомягких (не спрашивайте от куда я его открутил, это очень долгая история), но от версии винды меняется имя уставнощика, После того как драва установились... дальше идет работа скрипта, запускается ADB процесс (работает обчно с командной строки) - (приложение для работы с Android смартфонами) оно определяет, какой структуры файловая система смртфона, если Generation 1 - то далее вопрос какой файл устанавливать.. CLW или FTM также если у тея Generatoion2... вот какбы так установка на смартфон идет также через ADB (с командной строки)... вот както так... ну и в конце сообщение - энжой! и перегружается тело...
kotkovets
14-10-2011, 13:53
Тут смысл в том... что снавал определяется версия разрядности винды.. 32 или 64
разрядность опр. так:
!include "x64.nsh"
;--
${If} ${RunningX64}
MessageBox MB_OK "running on x64"
${Else}
MessageBox MB_OK "running on x32"
${EndIf}
Установка дров:
ExecWait `Путь к \dpinst.exe "Ключи запуска"` $0
в $0 - код возврата
смотрим ключи запуска dpinst.exe /? или как то dpinst.exe /help
Cоответственно dpinst.exe заводим соответствущий разрядности системы.
Далее заводим приложение для смартфона, что оно возвращает без понятия (код возврата)
Код возврата нужен для точного определения структуры файловой системы смартфона
Затем анализируем код возврата, строим логику какой файл устанавливать в зависимости, что
возвращается и ребутимся. План таков - деталей я не знаю, это все, чем я могу помочь...
SergioPoverony
14-10-2011, 15:40
Спасибо да, разобрался +) сделал через ( GetVersion::WindowsPlatformArchitecture) все сделал, остался вопрос на последок.. как в MessageBox кнопкам присовить свои названия, чтобы не оК и Отмена а к примеру Проверка 1 и ПРОверка 2 ?
вопрос про картинки в nsis
Я знаю что из "коробки" nsis понимает только BMP
для загрузки картинок в контрол используются следующие методы
NSD_SetImage - загрузить картинку как есть
NSD_SetStretchedImage - загрузить подогнав ее под размеры контрола
что бы использовать другие форматы например jpg
можно инклюдить файлns Dialogs_setImageOle
и использовать NSD_SetImageOLE
NSD_SetImageOLE загружает картинку как есть
вопрос в следующем, есть ли аналоги SetStretchedImage но для jpg?
что бы можно было загрузить jpg картинку и подогнать ее под размеры контрола?
с помощью takeown.exe сделать текущего пользователя владельцем файла »
Это я знаю, и часто использовал для этого плагин ExecCmd, но не всегда это проходит для не исполняемых файлов.
ExecCmd::exec /TIMEOUT=1000 'takeown.exe /F $SYSDIR\Файл.sss'
Pop $0
ExecCmd::exec /TIMEOUT=1000 '%comspec% /c cacls.exe $SYSDIR\Файл.sss /G %username%:F'
Pop $0
Delete "$SYSDIR\Файл.sss"
В WinXP есть скрытая папка где хранятся резервные копии, в Win 7 - это более мудрёно и запутано, но не в этом дело.
kotkovets
14-10-2011, 16:39
как в MessageBox кнопкам присовить свои названия, чтобы не оК и Отмена а к примеру Проверка 1 и ПРОверка 2 ? »
Стандартно не получится - ресурсы мессаджбоксов берутся из системной библиотеки user32.dll
Был такой плагин - messagebox v0.98 beta 3, погуглите, под рукой этого плагина нету, если не найдете выложу позже.
В WinXP есть скрытая папка где хранятся резервные копии, в Win 7 - это более мудрёно и запутано, но не в этом дело»
В WinXP механизм восстановления срабатывает, в специальной делке хранятся списки защищенных файлов их можно вывести из защиты утилиткой - поищите по форуму.
В Win7 попробуйте для начало командной строкой, через апи очень сложно это делать(многие апишки дают отбой намеренно, нужно эти апи вызывать в привелегированном режиме, это не то, типа запуск от админа, хотя тоже нужен :)).
вирус в итоге получится сделать...это я об антивирусных программах - завизжат, как пить дать!!!
можно инкдюдить файлns Dialogs_setImageOle
А вы вот гляньте содержимое этого хидера,
по названию вызываемой функции - найдете прототип, соответственно описание принимаемых аргументов :)
инкдюдить - наверно нельзя :lol:
kotkovets,
хм, я следовал этой логике до того как задал вопрос.. но дело в том что я или не понял или не то нашел...
сначала я посмотрел как это делается с SetStretchedImage
там сначала с помощью GetClientRect узнают требуемые координаты, а затем подставляют их в LoadImage
HANDLE WINAPI LoadImage (
__in_opt HINSTANCE HINST,
__in LPCTSTR lpszName,
__in UINT uType,
__in Int cxDesired,
__in Int cyDesired,
__in UINT fuLoad
);
те сюда
__in Int cxDesired,
__in Int cyDesired,
Dialogs_setImageOle использует OleLoadPicturePath
HRESULT OleLoadPicturePath (
__in LPOLESTR szURLorPath,
__in LPUNKNOWN punkCaller,
__in DWORD dwReserved,
__in OLE_COLOR clrReserved,
__in REFIID riid,
__out LPVOID * ppvRet
);
и здесь я или не нашел подобия этого...
__in Int cxDesired,
__in Int cyDesired,
или чего то недопонимаю...
выходит используя OleLoadPicturePath я не могу сделать то что мне нужно?
kotkovets
14-10-2011, 17:56
или чего то недопонимаю...
выходит используя OleLoadPicturePath я не могу сделать то что мне нужно? »
http://msdn.microsoft.com/en-us/library/windows/desktop/ms678485(v=vs.85).aspx
Судя по описанию функции - нельзя
Как узнать, что это:
System::Call 'oleaut32::OleLoadPicturePath(w"${IMAGE}", i0, i0, i0, g"${IID_IPicture}", *i .r0)i.r1'
Посчитайте сколько аргументов микрософт пишет и в примере, 6 аргументов
w"${IMAGE}" -> szURLorPath
и по порядку
Судя по описанию функции - нельзя »
ну я так и догадался в начале.. просто думал может есть еще варианты..)
kotkovets
14-10-2011, 18:17
ну я так и догадался в начале »
Привел ссылки, в качестве доказательства, для пользы :)
SergioPoverony
14-10-2011, 20:52
kotkovets :Beer: спасибо за направление на путь вот собрал :)
Name "Recovery Install System"
OutFile "InstallRecovery.exe"
ShowInstDetails hide
!include "LogicLib.nsh"
Function .onInit
GetVersion::WindowsPlatformArchitecture
pop $R0
${If} $R0 == "32"
DetailPrint "You have 32 bit"
MessageBox MB_ICONQUESTION|MB_YESNO "You have 32 bit system, %\n install drivers?" IDNO "detectgen"
ExecWait "$EXEDIR/drivers/1dpinst.exe"
Goto detectgen
${Else}
DetailPrint "You have 64 bit"
MessageBox MB_YESNO "You have 64 bit system, install drivers?" IDNO "detectgen"
ExecWait "$EXEDIR/drivers/0dpinst.exe"
Goto detectgen
${EndIf}
FunctionEnd
Section "Detect Phone Generation and install recovery"
detectgen:
MessageBox MB_OK|MB_ICONEXCLAMATION "Please plug in your ZTE Racer to back usb hub and press OK button."
ExecWait "$EXEDIR/adb.exe kill-server"
ExecWait "$EXEDIR/adb.exe start-server"
ExecWait "$EXEDIR/adb.exe wait-for-device"
ExecWait "$EXEDIR/adb.exe shell cat /proc/mtd | findstr /R '0048'" $0
${If} $0 == "0048"
DetailPrint "You have Generation 1"
MessageBox MB_OK|MB_ICONINFORMATION "You phone is Generation 1 press OK button for install Recovery"
Goto generation1
Abort
${Else}
DetailPrint "You have Generation 2"
MessageBox MB_OK|MB_ICONINFORMATION "You phone is Generation 2 press OK button for install Recovery"
Goto generation2
Abort
${EndIf}
; Generation1 section
generation1:
ExecWait "$EXEDIR/adb.exe reboot bootloader"
MessageBox MB_OK|MB_ICONINFORMATION "After reload you phone press OK button"
messagebox::show MB_ICONINFORMATION|MB_DEFBUTTON1 "" "" "Select Generation 1 Recovery for install to you phone!" "Clockworck Mode" "Standart FTM"
Pop $0
StrCmp $0 "1" 0 generation_ftm1 ; pressed "Standart FTM"
StrCmp $0 "2" 0 generation_clw1 ; pressed "Clockworck"
generation_clw1:
ExecWait "$EXEDIR/fastboot.exe erase recovery"
ExecWait "$EXEDIR/fastboot.exe flash recovery recovery1.img"
ExecWait "$EXEDIR/fastboot.exe reboot"
ExecWait "$EXEDIR/adb.exe kill-server"
ExecWait "$EXEDIR/adb.exe wait-for-device"
ExecWait "$EXEDIR/adb.exe reboot recovery"
ExecWait "$EXEDIR/adb.exe kill-server"
MessageBox MB_OK|MB_ICONEXCLAMATION "ClockworckMode recovery installed."
Abort
generation_ftm1:
ExecWait "$EXEDIR/fastboot.exe erase recovery"
ExecWait "$EXEDIR/fastboot.exe flash recovery recovery3.img"
ExecWait "$EXEDIR/fastboot.exe reboot"
ExecWait "$EXEDIR/adb.exe kill-server"
ExecWait "$EXEDIR/adb.exe wait-for-device"
ExecWait "$EXEDIR/adb.exe reboot recovery"
ExecWait "$EXEDIR/adb.exe kill-server"
MessageBox MB_OK|MB_ICONEXCLAMATION "Standart FTM recovery installed"
Abort
; Generation2 section
generation2:
ExecWait "$EXEDIR/adb.exe reboot bootloader"
MessageBox MB_OK|MB_ICONINFORMATION "After reload you phone press OK button"
messagebox::show MB_ICONINFORMATION|MB_DEFBUTTON1 "" "" "Select Generation 2 Recovery for install to you phone!" "Clockworck Mode" "Standart FTM"
Pop $0
StrCmp $0 "1" 0 generation_ftm2 ; pressed "Standart FTM"
StrCmp $0 "2" 0 generation_clw2 ; pressed "Clockworck"
generation_clw2:
ExecWait "$EXEDIR/adb.exe kill-server"
ExecWait "$EXEDIR/fastboot.exe erase recovery"
ExecWait "$EXEDIR/fastboot.exe flash recovery recovery2.img"
MessageBox MB_OK|MB_ICONEXCLAMATION "Recovery installed."
ExecWait "$EXEDIR/fastboot.exe reboot"
ExecWait "$EXEDIR/adb.exe wait-for-device"
ExecWait "$EXEDIR/adb.exe reboot recovery"
ExecWait "$EXEDIR/adb.exe kill-server"
MessageBox MB_OK|MB_ICONEXCLAMATION "ClockworckMode recovery installed."
Abort
generation_ftm2:
ExecWait "$EXEDIR/adb.exe kill-server"
ExecWait "$EXEDIR/fastboot.exe erase recovery"
ExecWait "$EXEDIR/fastboot.exe flash recovery recovery4.img"
MessageBox MB_OK|MB_ICONEXCLAMATION "Recovery installed."
ExecWait "$EXEDIR/fastboot.exe reboot"
ExecWait "$EXEDIR/adb.exe wait-for-device"
ExecWait "$EXEDIR/adb.exe reboot recovery"
ExecWait "$EXEDIR/adb.exe kill-server"
MessageBox MB_OK|MB_ICONEXCLAMATION "Standart FTM recovery installed"
Abort
SectionEnd
Возможно ли изменить параметры шрифта в MessageBox ?
kotkovets
15-10-2011, 12:37
MKN,
Нет и также это касается переименованием кнопок,
все ресурсы MessageBox берутся из системной библиотеки user32.dll
kotkovets,
А возможно ли вместо стандартных неприкосновенных MessageBox, вызывать-запускать сообщения, в виде всплывающего собственного окна-странички с текстом или, на худой конец в виде графической картинки ?
kotkovets
15-10-2011, 14:26
MKN, плагин нужен писать, не умеет nsis четко работать "напрямую" через api callback (с функциями обратными вызовами) , я имею ввиду, чтобы все получалась красиво и без глюков :beta:
Здравствуйте всем! Скажите пожалуйста, есть ли в NSIS возможность вызова окна диалога не как следующей или предыдущей страница (по кнопкам next/prev), а по нажатию кнопки, например, advanced или browse (для дополнительных настроек в отдельном окне или выбора файла в диалоге openfile).
kotkovets
17-10-2011, 14:51
Здравствуйте всем! Скажите пожалуйста, есть ли в NSIS возможность вызова окна диалога не как следующей или предыдущей страница (по кнопкам next/prev), а по нажатию кнопки, например, advanced или browse (для дополнительных настроек в отдельном окне или выбора файла в диалоге openfile) »
Создавать свои странички, в шапке справочник по NSIS, пролистайте 10 - 15 страничек темы назад - кучу примеров найдете.
#960 (http://forum.oszone.net/post-1618278-960.html)
или так #956 (http://forum.oszone.net/post-1617904-956.html)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC