PDA

Показать полную графическую версию : [архив].: NSIS - все вопросы :.


Страниц : 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 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170

K.A.V.
10-12-2009, 17:55
Инстолятор не мой поэтому внести в него изменения не могу, просто хочу увидеть что делает инсталятор во время установки »
так...это что получается, имеем инсталлятор на NSIS, и после его запуска хотим перехватить этот текст и записать в файл?
Так что сложного? :)
В строчке
FindWindow $0 "#32770" "" $HWNDPARENT
вставляем что-то типа этого
FindWindow $0 "#32770" "Это заголовок окна инсталлятора" ""

p.s.
Не тестил, но работать должно :)

hb860
10-12-2009, 19:13
Цитата XCV:Инстолятор не мой поэтому внести в него изменения не могу, просто хочу увидеть что делает инсталятор во время установки » »
Это не совсем в тему, но тут не NSIS нужен, a Sysinternals ProcMon. Вот им всё можно увидеть

XCV
11-12-2009, 10:19
Это не совсем в тему, но тут не NSIS нужен, a Sysinternals ProcMon. »
ProcMon если я правильно понимаю может отследить изменения в реестре и файловой системе, а мне надо лог который пишет nsis при установке, в том числе какие файлы запускались и с какими ключами

XCV
11-12-2009, 10:45
вот к примеру скрин (первый попавшийся) как увидеть окончание последней строчки?

K.A.V.
11-12-2009, 13:08
XCV, в посте 219 я объяснил как это сделать в собственном инсталляторе
Как перехватить информацию, когда инсталлятор не ваш, описал я в посте 221, просто это будет отдельный ваш EXEшник, который будет копировать информацию из диалога...что не понятно?
Или вам написать готовый EXE файл может?

hb860
11-12-2009, 13:33
в том числе какие файлы запускались и с какими ключами »
Так в процмоне же есть коммандная строка процесса. Чем плох вариант ?

XCV
11-12-2009, 14:57
описал я в посте 221 »
сори пропустил

KSE
19-12-2009, 19:22
Всем добрый день!
Подскажите пожалуйста.

Есть две custom pages
При запуске первой выводиться 3 Radio Buttons

Выбиретие вариант
1. Мастер
2. По умолчанию
3 Без изменений

При выборе одного из вариантов активируется кнопка "далее"
Мне нужно сделать, чтобы в случае выбора 1-го варианта запускалась вторая custom page, ну и при выборе 2 или 3 варианта, вторая страница пропускалась. Никак не получается сделать.

KSE
20-12-2009, 00:11
Еще вопрос касательно поста выше

4.9.14.5 FindWindow
user_var(hwnd output) windowclass [windowtitle] [windowparent] [childafter]

Searches for a window. Behaves like the win32 FindWindowEx(). Searches by windowclass (and/or windowtitle if specified). If windowparent or childafter are specified, the search will be restricted as such. If windowclass or windowtitle is specified as "", they will not be used for the search. If the window is not found, the user variable returned is 0. To accomplish old-style FindWindow behavior, use FindWindow with SendMessage.
FindWindow $0 "#32770" "" $HWNDPARENT
FindWindow $0 "my window class" "my window title"

GetDlgItem
user_var(output) dialog item_id

Retrieves the handle of a control identified by item_id in the specified dialog box dialog. If you want to get the handle of a control on the inner dialog, first use FindWindow user_var(output) "#32770" "" $HWNDPARENT to get the handle of the inner dialog.
GetDlgItem $0 $HWNDPARENT 1 # next/install button

Я так понял можно как то воспользоваться этой инструкцией. Только тут не совсем все понятно!

FindWindow $0 "#32770" "название окна"
GetDlgItem $0 $0 "тут цифра"
IntCmp $0 1 Goto 0 0
Abort
Goto:

Вопрос. Как узнать название моего окна или как присвоить моему окну (конкретно первому custom page) название? И как узнать под какой какой цыфрой будет допустим первая Radio Button?

K.A.V.
20-12-2009, 12:09
KSE, сейчас занят, попозже напишу скрипт и отвечу на все ваши вопросы ;)

K.A.V.
20-12-2009, 13:52
KSE, в прикрелпённом архиве скрипт для вас ;)

или как присвоить моему окну (конкретно первому custom page) название? »
В файле конфигурации диалога (в INI файле), пропишите в секцию Settings имя параметра Title и присвойте данному параметру имя желаемого окна, например:

[Settings]
Title=Это мой заголовок окна


И как узнать под какой какой цыфрой будет допустим первая Radio Button?
В файле конфигурации диалога, Field X, где X - ваша цифра

Мне не понятно, для чего вам использование:

FindWindow $0 "#32770" "название окна"
GetDlgItem $0 $0 "тут цифра"

В InstallOptions это врядли вам пригодится

ALaN_1
20-12-2009, 20:20
Люди, может быть создать что типа программы для создания скриптов с настройками чтоб написал и все. Не поймите меня не правильно просто я не разбираюсь в этом скриптовом языке. А сама программка классная. Сам не чем помочь не могу, т.к. не очень хорошо понимаю в программировании,только начинаю его изучать.

Habetdin
20-12-2009, 20:23
ALaN_1, HM NIS EDIT - лучший редактор сценариев для NSIS с открытым исходным кодом (http://hmne.sourceforge.net/) »
Запускаете, жмете Ctrl+W - запускается мастер создания сценария, заполняете поля.. Profit! :)

ALaN_1
22-12-2009, 14:13
ALaN_1,



Цитата hb860:




HM NIS EDIT - лучший редактор сценариев для NSIS с открытым исходным кодом (http://hmne.sourceforge.net/) » (http://forum.oszone.net/post-452038.html#post452038)

Запускаете, жмете Ctrl+W - запускается мастер создания сценария, заполняете поля.. Profit!
Хорошо так говорить когда понимаешь скриптовый язык программы. А я хочу создать "гибкий" инсталятор. И вообще освоить его. Но не учебников и ничего подобного по нему нет, а зря-ведь программа заслуживает этого.

K.A.V.
22-12-2009, 14:58
А я хочу создать "гибкий" инсталятор »
Гибкий можно создать только вручную редактируя скрипт, ИМХО

Но не учебников и ничего подобного по нему нет »
Знаете, когда я начал изучать NSIS (это было где-то года 3 назад), я начинал именно с HM NIS EDIT, и его функция мастера сценариев мне очень помогла, к тому же, я не знал английского языка (да и сейчас не знаю :lol:), и к тому же, у меня тогда не было интернета, открывал пару раз файл справки, было очень страшно :laugh: там же всё по английскому написано...НО там есть примеры всех команд, и разобраться не так уж и сложно окозалось...главное необходимо желание, и...усиленные тесты! ;)

К тому же, в данное время, много кто уже знаком с NSIS довольно хорошо (например даже я, весь мой софт написан чисто на NSIS :) ), и данная тема созданна именно для решения проблем, пишем сюда все ваши вопросы, и не сомневайтесь, мы постараемся вам помочь, насколько хватит знанинй ;)
Чем больше вы будете задавать вопросов, стараться разобраться, тем быстрей вы освоите данный язык :)

KSE
23-12-2009, 18:03
Вопрос по созданию ярлыка.

Var freq
StrCpy $freq "60"

...

CreateShortCut "$DESKTOP\blablabla.lnk" "$INSTDIR\blablabla.exe" \
"-freq $freq" "$INSTDIR\blablabla\blablabla.ico" 0 SW_SHOWNORMAL \
ALT|CONTROL|SHIFT|F5 "запустить blablabla"

Пишет, invalid command "-freq $freq"
Как втулить в параметры запуска значение из переменной?

Из документации мало что можно взять

CreateDirectory "$SMPROGRAMS\My Company"
CreateShortCut "$SMPROGRAMS\My Company\My Program.lnk" "$INSTDIR\My Program.exe" \
"some command line parameters" "$INSTDIR\My Program.exe" 2 SW_SHOWNORMAL \
ALT|CONTROL|SHIFT|F5 "a description"

KSE
23-12-2009, 18:28
Все, я разобрался, синтаксис был у меня правильный. Оно матюкалось на комментарий. Его там ставить нельзя было.
Неправильно:
CreateShortCut "$DESKTOP\blablabla.lnk" "$INSTDIR\blablabla.exe" \ ;Мой коммент
"-freq $freq" "$INSTDIR\blablabla\blablabla.ico" 0 SW_SHOWNORMAL \
ALT|CONTROL|SHIFT|F5 "запустить blablabla"

Правильно:
;Мой коммент
CreateShortCut "$DESKTOP\blablabla.lnk" "$INSTDIR\blablabla.exe" \
"-freq $freq" "$INSTDIR\blablabla\blablabla.ico" 0 SW_SHOWNORMAL \
ALT|CONTROL|SHIFT|F5 "запустить blablabla"

Все получилось :)

KSE
24-12-2009, 05:41
Подкскажите пожалуйста! Как можно максимально упросить данный код?

Пример:

${If} $mon == 1
${AndIf} $2 == 1
${AndIf} $R1 == 1
StrCpy $freq "60"
${EndIf}

${If} $mon == 1
${AndIf} $2 == 1
${AndIf} $R2 == 1
StrCpy $freq "75"
${EndIf}

${If} $mon == 1
${AndIf} $1 == 1
${AndIf} $R1 == 1
StrCpy $freq "100"
${EndIf}

...

И так 90 вариантов! :)

Буду очень признателен!

ЗЫ:
Видел, что так можно делать, но у меня почему то не получается.


${If} $mon == 1
${If} $2 == 1
${If} $R1 == 1
StrCpy $freq "60"
${EndIf}
${If} $R2 == 1
StrCpy $freq "75"
${EndIf}
${EndIf}
{If} $3 == 1
${If} $R1 == 1
StrCpy $freq "65"
${EndIf}
${If} $R2 == 1
StrCpy $freq "85"
${EndIf}
${EndIf}
${ElseIf} $mon == 2
${If} $2 == 1
${If} $R1 == 1
StrCpy $freq "55"
${EndIf}
${If} $R2 == 1
StrCpy $freq "45"
${EndIf}
${EndIf}
${If} $3 == 1
${If} $R1 == 1
StrCpy $freq "35"
${EndIf}
${If} $R2 == 1
StrCpy $freq "25"
${EndIf}
${EndIf}
${EndIf}

K.A.V.
24-12-2009, 10:37
Подкскажите пожалуйста! Как можно максимально упросить данный код?
Пример:
${If} $mon == 1
${AndIf} $2 == 1
${AndIf} $R1 == 1
StrCpy $freq "60"
${EndIf} »

StrCmp $mon "1" 0 +4
StrCmp $2 "1" 0 +3
StrCmp $R1 "1" 0 +2
StrCpy $freq "60"

p.s.
KSE, почему не отписываемся о проделанной мною работы, по вашей проблемы с поста #220, или я зря тратил своё время?

KSE
24-12-2009, 16:53
Отписываю.

Я хотел сделать так, чтобы до выбора одного из вариантов кнопка "далее" была неактивна.
После выбора варианта - активировать кнопку "далее". При нажатии кнопки далее осуществлялся переход на ту или иную страницу в зависимости от выбора.
Проблему решил след. образом


...
; Мои две custom страницы
Page custom configurring
Page custom configmaster
...
переменные и т.д.
...

Function configurring
StrCpy $Reservefiles "0" ; По умолчанию файлы не резервируются

!insertmacro MUI_HEADER_TEXT "Мастер кофигурирования параметров" ""
nsDialogs::Create 1018
Pop $Dialog1
${If} $Dialog1 == error
Abort
${EndIf}

; Деактивация кнопки далее, и тот и тот вариант работает.
;GetDlgItem $0 $HWNDPARENT 1
;EnableWindow $0 0
EnableWindow $mui.Button.Next 0

${NSD_CreateRadioButton} 0 0 100% 10u "&Запустить мастер кофигурирования параметров (рекомендуется)"
Pop $Confmaster
${NSD_OnClick} $Confmaster confway
${NSD_CreateLabel} 17 10u 100% 20u "&С помощью ....."
Pop $Description

${NSD_CreateRadioButton} 0 36u 100% 10u "&Сконфигурировать по умолчанию"
Pop $Confdefault
${NSD_OnClick} $Confdefault confway
${NSD_CreateLabel} 17 46u 100% 10u "&Все настройки будут установлены по умолчанию."
Pop $Description

${NSD_CreateRadioButton} 0 65u 100% 10u "&Не изменять конфигурацию"
Pop $Confstay
${NSD_OnClick} $Confstay confway
${NSD_CreateLabel} 17 75u 100% 10u "&Все параметры и файлы конфигурации будут оставлены без изменений."
Pop $Description

${NSD_CreateCheckBox} 0 98u 100% 10u "&Сделать резервную копию игры."
Pop $Reserve
${NSD_OnClick} $Reserve Reserve
${NSD_CreateLabel} 17 108u 100% 100% "&Предыдущая версия игры будет скопирована в папку backup. В случае деинсталяции данного пачта все файлы и ключи будут востановлены."
Pop $Description

nsDialogs::Show

FunctionEnd

Function confway
Pop $Confmaster
${NSD_GetState} $Confmaster $0
Pop $Confdefault
${NSD_GetState} $Confdefault $1
Pop $Confstay
${NSD_GetState} $Confstay $2
${If} $0 == 1
EnableWindow $mui.Button.Next 1
StrCpy $master "1"
${EndIf}
${If} $1 == 1
EnableWindow $mui.Button.Next 1
StrCpy $master "2"
${EndIf}
${If} $2 == 1
EnableWindow $mui.Button.Next 1
StrCpy $master "3"
${EndIf}
FunctionEnd

Function Reserve
Pop $Reserve
${NSD_GetState} $Reserve $3
${If} $3 == 1
StrCpy $Reservefiles "1"
EnableWindow $mui.Button.Next 0
${Else}
StrCpy $Reservefiles "0"
EnableWindow $mui.Button.Next 0
${EndIf}
FunctionEnd

Function configmaster
IntCmp $master 1 Goto 0 0 ; Если переменная $master равно 1, то перейти к .. и т.д.
Abort
Goto:
!insertmacro MUI_HEADER_TEXT "&Мастер кофигурирования параметров" ""
nsDialogs::Create 1018
Pop $Dialog2
${If} $Dialog2 == error
Abort
${EndIf}

EnableWindow $mui.Button.Next 0

; Выбор монитора (заголовок)
${NSD_CreateLabel} 0 0 220u 10u "....."
.....


Конечно я выбрал немного инной способ
я использовал logiclib и nsDialogs


K.A.V.
Насчет моего предыдущего поста я не сильно понял, как

StrCmp $mon "1" 0 +4
StrCmp $2 "1" 0 +3
StrCmp $R1 "1" 0 +2
StrCpy $freq "60"
такой код может быть проще? Как я уже говорил, таких вот столбиков

${If} $mon == 1
${AndIf} $2 == 1
${AndIf} $R1 == 1
StrCpy $freq "60"
${EndIf}

У меня будет очень много! Где то 90!

Какая может быть замена такому варианту. Так как он выглядит убедительней, но работать не хочет.

${If} $mon == 1
${If} $2 == 1
${If} $R1 == 1
StrCpy $freq "60"
${EndIf}
${If} $R2 == 1
StrCpy $freq "75"
${EndIf}
${EndIf}
{If} $3 == 1
${If} $R1 == 1
StrCpy $freq "65"
${EndIf}
${If} $R2 == 1
StrCpy $freq "85"
${EndIf}
${EndIf}
${ElseIf} $mon == 2
${If} $2 == 1
${If} $R1 == 1
StrCpy $freq "55"
${EndIf}
${If} $R2 == 1
StrCpy $freq "45"
${EndIf}
${EndIf}
${If} $3 == 1
${If} $R1 == 1
StrCpy $freq "35"
${EndIf}
${If} $R2 == 1
StrCpy $freq "25"
${EndIf}
${EndIf}
${EndIf}




© OSzone.net 2001-2012