Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
kotkovets
12-12-2012, 01:40
В данном лаунчер - это NSIS, значит необходимые изменения вносим перед запуском приложения, т.е в самой
первой стандартной функции - .OnInit
запускаем процесс без ожидания процесса, если процесс не найден - закрываем лаунчер,
далее nsis ждет завершения процесса, по завершении процесса - удаляем следы.
лаунчер нужно сделать, чтобы запускался скрытно, в функции .OnInit SetSilent silent
В принципе весь код можно всунуть в .OnInit по завершении всех инструкций пишем:Quit
тогда необязательно писать - SetSilent silent
как то так - один из множества вариантов.
Ну в принципе понятно...а после какой команды в .OnInit писать инструкции по заметанию следов?
дошло дело до создания лаунчера...как я понимаю данная технология заключается в том что когда прога запускается лаунчер вносит необходимые изменения в систему, а когда закрыть, тот самый лаунчер удаляет все следы присутствия в системе »
Простейший вариант псевдопортабла :
После запуска (по сути инсталляции) нужной программы, её "разворачивания" в ОС и запуска - из неё же , вслед запускается маленький exe-скрипт, контролирующий процесс запущенной программы . Как только программа закрывается, (т.е. процесс прекращён) , этот фискальный скрипт-uninstaller подчищает все следы установки программы, и самоликвидируется.
Ессно можно организовать установку-запуск программы и из фискального скрипта-uninstaller_а (пусть будет лаунчер).
kotkovets
12-12-2012, 18:52
а после какой команды в .OnInit писать инструкции по заметанию следов? »
логично блин, рассуждайте, после найденного и завершенного нужного процесса - это два важных условия.
завершенного нужного процесса »
Это понятно...но как в самой ф-ции .OnInit это определить (то есть если процесс завершен => удаление следов)
Мож как то прикрутить возможно из статьи вашей Запуск внешних приложений в режиме ожидания завершения приложения
.но как в самой ф-ции .OnInit это определить (то есть если процесс завершен => удаление следов) »
Справку то, пробовали читать нашу? Запуск процесса, пауза пару секунд, далее определяете, запущен ли процесс, и если не запущен - заметате следы
Справочник по NSIS => Примеры кодов => Работа с процессами
хм, даже не знаю, что ещё объяснять, вам Вячеслав уже всё расписал, осталось только ткнуть вас в файл справки, что я уже сделал...
пауза пару секунд, далее определяете, запущен ли процесс, и если не запущен - заметате следы »
А если пользователь запустит портативную прогу и будет в ней работать часа 2-3 тогда сколько цыклов проверки по пару секунд нужно?
Может так например
${ExecWait} "приложение.exe [parametr1]...[parametr2]" $5
${If} $5 == 1 (1 - код возврата при закрытии приложения)
Заметаем следы
${EndIf}
А если пользователь запустит портативную прогу и будет в ней работать часа 2-3 тогда сколько цыклов проверки по пару секунд нужно? »
${ExecWait} "приложение.exe [parametr1]...[parametr2]" $5 »
если уж используете команду ExecWait, то проверка на наличие процесса не нужна, т.к. данная команда предполагает, что ваш скрипт будет ждать завершения запущенного приложения и не перейдёт на исполнение следующей команде в скрипте...
Читайте справку
Вы пишите команды, не понимая их функционал...
Вы пишите команды, не понимая их функционал... »
K.A.V., если бы все всё понимали то тут бы не спрашивали и данной ветки бы не существовало!
Ну вообще это как бы правильно будет или можно как то по другому сделать?
K.A.V., если бы все всё понимали то тут бы не спрашивали »
Если бы все новички читали наш справочник, то...
то тут бы не спрашивали »
о командах, которые описаны в файле справке
Давайте не будем оффтопить, а то получится как с участником Creator (точно ник не помню), которому раз 20 за день говорили одно и то же - Читайте справочник, а он упорно не хотел видеть эти слова
Просто возьмите и пролистайте файл справки, найдёте что-то нужное, более чем уверен
И описания команд Exec и ExecWait там есть...
Возможно ли изменить цвет полоски ProgressBar_а, скажем с зелёненького на красненький или синенький ? :)
Пытался делать по мотивам http://stackoverflow.com/questions/12613534/change-loading-bar-colour-in-nsis-installer
Не работает...
Возможно ли изменить цвет полоски ProgressBar_а, скажем с зелёненького на красненький или синенький ?
Пытался делать по мотивам http://stackoverflow.com/questions/1...nsis-installer
Не работает...
»
У кого как ;)
Попытался сделать по тем же мотивам, получилось :)
; Script generated by the HM NIS Edit Script Wizard.
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "Моя программа"
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER "Моя компания, LLC."
!define PRODUCT_WEB_SITE "http://www.mycompany.com"
; MUI 1.67 compatible ------
!include "MUI2.nsh"
!include WinMessages.nsh
XPStyle on
; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
; Welcome page
#!insertmacro MUI_PAGE_WELCOME
; Directory page
#!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!insertmacro MUI_PAGE_FINISH
; Language files
!insertmacro MUI_LANGUAGE "Russian"
; MUI end ------
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "setup.exe"
InstallDir "$TEMP"
ShowInstDetails show
; -------------------------
; Получаем Handle прогресса
Section -SetProgressColor
Var /Global HWNDProgress
FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $0 $0 1004
System::Call UxTheme::SetWindowTheme(ir0,w"",w"")
StrCpy $HWNDProgress $0
SectionEnd
Section "MainSection" SEC01
; ------------------------- Устанавливаем цвет прогресса
SendMessage $HWNDProgress 1033 0 0x00FFFF
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
; ------------------------- Устанавливаем цвет прогресса
SendMessage $HWNDProgress 1033 0 0xFF00FF
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
sleep 500
; ------------------------- Устанавливаем цвет прогресса
SendMessage $HWNDProgress 1033 0 0x80FF00
sleep 3000
SectionEnd
Section -Post
SectionEnd
Вообщем весь функционал в секциях, я там чуть изменил, сделал более удобно, создал переменную, и можно на проятжении всего скрипта менять цвет прогресс бара, ну так, для забавы :)
Limonica
13-12-2012, 20:19
есть ли в NSIS какая то переменная для 64 систем в папку system32, $SYSDIR идёт в SysWOW64.
Habetdin
13-12-2012, 22:45
Limonica, пример Wow64DisableWow64FsRedirection:
!include x64.nsh
${If} ${RunningX64}
${DisableX64FSRedirection}
; Нужный код...
; SetOutPath "$SYSDIR"
; File /r "Files64\*.*"
${EndIf}
[hr]
Еще, может быть полезным для переключения между 32/64-битными разделами реестра для записи:
SetRegView 32
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\My App.exe" "" "$SYSDIR\My App.exe"
SetRegView 64
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\My App.exe" "" "$SYSDIR\My App.exe"
У кого как »
Я это пытался реализовать на кастомной странице в nsdialogs...
ну так, для забавы »
Вообщем конечно забава, как и всё связанное с украшением-оформлением... Но для разнообразия и демонстрации - наглядно и красочно :)
Я это пытался реализовать на кастомной странице в nsdialogs... »
Ну, сам функционал я написал, думаю там уже не сложно будет под nsdialogs подогнать, или не работает? :)
Вообщем конечно забава, как и всё связанное с украшением-оформлением... Но для разнообразия и демонстрации - наглядно и красочно »
Это понятно, нужно выделяться из серой массы унылых инсталляторов :biggrin:
Оказывается, умельцы с форума winamp.com смогли приспособить известную в Inno Setup, оформительскую botva2.dll для NSIS.
Примечательно, что для оформления, к примеру, кнопки, код занимает по сути, всего одну строку ! В отличии от загородки из кучи кода в NSIS...
!include "MUI2.nsh"
Page custom custom.Create
!insertmacro MUI_LANGUAGE "English"
OutFile Test_botva2dll.exe
Function custom.Create
nsDialogs::Create 1018
Pop $0
InitPluginsDir
File /oname=$PLUGINSDIR\botva2.dll botva2.dll
File /oname=$PLUGINSDIR\Google.png Google.png
System::Call "botva2::BtnCreate(ir0,i0,i0,i157,i15,t'$PLUGINSDIR\Google.png',i0,i0)i.R0"
nsDialogs::Show
FunctionEnd
/*
;Functions declaration in Inno Setup Script
botva2::BtnCreate(hParent:HWND; Left,Top,Width,Height:integer; FileName:PAnsiChar; ShadowWidth:integer; IsCheckBtn:boolean):HWND;
botva2::BtnGetChecked(h:HWND):boolean;
botva2::BtnGetEnabled(h:HWND):boolean;
botva2::BtnGetPosition
botva2::BtnGetText
botva2::BtnGetVisibility
botva2::BtnRefresh(h:HWND);
botva2::BtnSetChecked(h:HWND; Value:boolean);
botva2::BtnSetCursor(h:HWND; hCur:Cardinal);
botva2::BtnSetEnabled(h:HWND; Value:boolean);
botva2::BtnSetEvent(h:HWND; EventID:integer; Event:Longword);
botva2::BtnSetFont(h:HWND; Font:Cardinal);
botva2::BtnSetFontColor(h:HWND; NormalFontColor, FocusedFontColor, PressedFontColor, DisabledFontColor: Cardinal);
botva2::BtnSetPosition(h:HWND; NewLeft, NewTop, NewWidth, NewHeight: integer);
botva2::BtnSetText(h:HWND; Text:PAnsiChar);
botva2::BtnSetTextAlignment(h:HWND; HorIndent, VertIndent:integer; Alignment:DWORD);
botva2::BtnSetVisibility(h:HWND; Value:boolean);
botva2::GetSysCursorHandle(id:integer):Cardinal;
botva2::ImgApplyChanges(h:HWND);
botva2::ImgGetVisibility(img:Longint):boolean;
botva2::ImgLoad(Wnd :HWND; FileName :PAnsiChar; Left, Top, Width, Height :integer; Stretch, IsBkg :boolean) :Longint;
botva2::ImgRelease(img :Longint);
botva2::ImgSetPosition(img :Longint; NewLeft, NewTop, NewWidth, NewHeight :integer);
botva2::ImgSetVisibility(img :Longint; Visible :boolean);
botva2::gdipShutdown();
*/
Section
SectionEnd
Как бы использовать ВСЕ возможности этой DLL в NSIS ? Тут нужны спецы по API... Может помогут расшифровать эту DLL и показать на примерах её прочие возможности...
И , конечно здорово было бы иметь подобную DLL, заточенную конкретно под NSIS... Почему то никто до сих пор не сделал такой замечательной полезности ...
kotkovets
15-12-2012, 12:38
Как бы использовать ВСЕ возможности этой DLL в NSIS ? Тут нужны спецы по API... Может помогут расшифровать эту DLL и показать на примерах её прочие возможности... »
а че ее расшифровывать, обычное API, что легко делать через system.dll
изучаешь API - и все тебе прелести, поэтому никто не делал, никто не хочет читать изучать - дай нам две строчки кода и отвали!
изучаешь API - и все тебе прелести, поэтому никто не делал, никто не хочет читать изучать - дай нам две строчки кода и отвали! »
Не верная интерпретация вопроса. :) Специализированные плагины-DLL , макросы, хедеры и пр. : избавляют NSIS-пользователей (при чём, как новичков, так и гуру) от рутинных действий в написании тонн кода. Лень тут не при чём. :) На хрена пользоваться логарифмической линейкой, когда есть калькулятор (если конечно есть...). Здесь уже - целесообразность и здравый смысл.
Кто изучил и разбирается в API - молодец ! Кто делится этими познаниями с другими и на их базе создаёт инструментарий облегчающий жизнь NSIS-пользователям - два, нет, двадцать два раза - молодец ! :)
А позыв к углублённому познанию вопроса - дело тонкое и добровольно-индивидуальное. Тут, как поэта, муза должна посетить. А муза приходит не всегда и не к каждому... (что мы вообще знаем про NSIS-музу ? :) )
kotkovets
15-12-2012, 14:38
MKN, предлагаю тебе написать, посидеть, попотеть - узнаешь много нового :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.