Войти

Показать полную графическую версию : .: 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

kotkovets
12-12-2012, 01:40
В данном лаунчер - это NSIS, значит необходимые изменения вносим перед запуском приложения, т.е в самой
первой стандартной функции - .OnInit
запускаем процесс без ожидания процесса, если процесс не найден - закрываем лаунчер,
далее nsis ждет завершения процесса, по завершении процесса - удаляем следы.
лаунчер нужно сделать, чтобы запускался скрытно, в функции .OnInit SetSilent silent
В принципе весь код можно всунуть в .OnInit по завершении всех инструкций пишем:Quit
тогда необязательно писать - SetSilent silent
как то так - один из множества вариантов.

diakov
12-12-2012, 09:34
Ну в принципе понятно...а после какой команды в .OnInit писать инструкции по заметанию следов?

MKN
12-12-2012, 17:36
дошло дело до создания лаунчера...как я понимаю данная технология заключается в том что когда прога запускается лаунчер вносит необходимые изменения в систему, а когда закрыть, тот самый лаунчер удаляет все следы присутствия в системе »
Простейший вариант псевдопортабла :
После запуска (по сути инсталляции) нужной программы, её "разворачивания" в ОС и запуска - из неё же , вслед запускается маленький exe-скрипт, контролирующий процесс запущенной программы . Как только программа закрывается, (т.е. процесс прекращён) , этот фискальный скрипт-uninstaller подчищает все следы установки программы, и самоликвидируется.
Ессно можно организовать установку-запуск программы и из фискального скрипта-uninstaller_а (пусть будет лаунчер).

kotkovets
12-12-2012, 18:52
а после какой команды в .OnInit писать инструкции по заметанию следов? »
логично блин, рассуждайте, после найденного и завершенного нужного процесса - это два важных условия.

diakov
13-12-2012, 14:42
завершенного нужного процесса »
Это понятно...но как в самой ф-ции .OnInit это определить (то есть если процесс завершен => удаление следов)
Мож как то прикрутить возможно из статьи вашей Запуск внешних приложений в режиме ожидания завершения приложения

K.A.V.
13-12-2012, 16:20
.но как в самой ф-ции .OnInit это определить (то есть если процесс завершен => удаление следов) »
Справку то, пробовали читать нашу? Запуск процесса, пауза пару секунд, далее определяете, запущен ли процесс, и если не запущен - заметате следы

Справочник по NSIS => Примеры кодов => Работа с процессами

хм, даже не знаю, что ещё объяснять, вам Вячеслав уже всё расписал, осталось только ткнуть вас в файл справки, что я уже сделал...

diakov
13-12-2012, 16:37
пауза пару секунд, далее определяете, запущен ли процесс, и если не запущен - заметате следы »
А если пользователь запустит портативную прогу и будет в ней работать часа 2-3 тогда сколько цыклов проверки по пару секунд нужно?

Может так например

${ExecWait} "приложение.exe [parametr1]...[parametr2]" $5
${If} $5 == 1 (1 - код возврата при закрытии приложения)
Заметаем следы
${EndIf}

K.A.V.
13-12-2012, 17:14
А если пользователь запустит портативную прогу и будет в ней работать часа 2-3 тогда сколько цыклов проверки по пару секунд нужно? »
${ExecWait} "приложение.exe [parametr1]...[parametr2]" $5 »
если уж используете команду ExecWait, то проверка на наличие процесса не нужна, т.к. данная команда предполагает, что ваш скрипт будет ждать завершения запущенного приложения и не перейдёт на исполнение следующей команде в скрипте...

Читайте справку

Вы пишите команды, не понимая их функционал...

diakov
13-12-2012, 17:26
Вы пишите команды, не понимая их функционал... »

K.A.V., если бы все всё понимали то тут бы не спрашивали и данной ветки бы не существовало!
Ну вообще это как бы правильно будет или можно как то по другому сделать?

K.A.V.
13-12-2012, 17:31
K.A.V., если бы все всё понимали то тут бы не спрашивали »
Если бы все новички читали наш справочник, то...
то тут бы не спрашивали »
о командах, которые описаны в файле справке

Давайте не будем оффтопить, а то получится как с участником Creator (точно ник не помню), которому раз 20 за день говорили одно и то же - Читайте справочник, а он упорно не хотел видеть эти слова

Просто возьмите и пролистайте файл справки, найдёте что-то нужное, более чем уверен
И описания команд Exec и ExecWait там есть...

MKN
13-12-2012, 18:49
Возможно ли изменить цвет полоски ProgressBar_а, скажем с зелёненького на красненький или синенький ? :)
Пытался делать по мотивам http://stackoverflow.com/questions/12613534/change-loading-bar-colour-in-nsis-installer
Не работает...

K.A.V.
13-12-2012, 19:30
Возможно ли изменить цвет полоски 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"

MKN
14-12-2012, 09:03
У кого как »
Я это пытался реализовать на кастомной странице в nsdialogs...
ну так, для забавы »
Вообщем конечно забава, как и всё связанное с украшением-оформлением... Но для разнообразия и демонстрации - наглядно и красочно :)

K.A.V.
14-12-2012, 10:03
Я это пытался реализовать на кастомной странице в nsdialogs... »
Ну, сам функционал я написал, думаю там уже не сложно будет под nsdialogs подогнать, или не работает? :)

Вообщем конечно забава, как и всё связанное с украшением-оформлением... Но для разнообразия и демонстрации - наглядно и красочно »
Это понятно, нужно выделяться из серой массы унылых инсталляторов :biggrin:

MKN
15-12-2012, 10:35
Оказывается, умельцы с форума 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 - и все тебе прелести, поэтому никто не делал, никто не хочет читать изучать - дай нам две строчки кода и отвали!

MKN
15-12-2012, 14:02
изучаешь API - и все тебе прелести, поэтому никто не делал, никто не хочет читать изучать - дай нам две строчки кода и отвали! »
Не верная интерпретация вопроса. :) Специализированные плагины-DLL , макросы, хедеры и пр. : избавляют NSIS-пользователей (при чём, как новичков, так и гуру) от рутинных действий в написании тонн кода. Лень тут не при чём. :) На хрена пользоваться логарифмической линейкой, когда есть калькулятор (если конечно есть...). Здесь уже - целесообразность и здравый смысл.

Кто изучил и разбирается в API - молодец ! Кто делится этими познаниями с другими и на их базе создаёт инструментарий облегчающий жизнь NSIS-пользователям - два, нет, двадцать два раза - молодец ! :)
А позыв к углублённому познанию вопроса - дело тонкое и добровольно-индивидуальное. Тут, как поэта, муза должна посетить. А муза приходит не всегда и не к каждому... (что мы вообще знаем про NSIS-музу ? :) )

kotkovets
15-12-2012, 14:38
MKN, предлагаю тебе написать, посидеть, попотеть - узнаешь много нового :)




© OSzone.net 2001-2012