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.
04-10-2012, 08:53
вроде так и не сказали как сделать заголовок на странице »
Если не прописывали инклудинк, то пропишите в начале скрипта
!include "WinMessages.nsh"

В функции создания элементов пропишите
SendMessage $HWNDPARENT ${WM_SETTEXT} 0 "STR:Мой новый заголовок"

у меня проблема. когда просто навожу мышкой на элемент рамка ломается »
Это не рамка ломается, это слишком большой размер другого элемента вы указали при создании, толи у вас там Text, толи какой-нибудь чекбокс просто при наведении курсора становится поверх этой рамки

Creator000
04-10-2012, 20:08
K.A.V., все прекрасно, только я наверно не правильно сказал. Мне нужно изменить http://i25.fastpic.ru/big/2012/1004/20/dbdfeeb813fde26f3d6e26aa832a4d20.png
Простите, что задаю такие тупые вопросы, просто ничего не понимаю англоязычной документации с минимум комментариев. Если аналогично заголовку - ткните пальцем. Я пытался, у меня ничего не выходит.

K.A.V.
04-10-2012, 21:19
Creator000, сделайте так
Узнайте ID элементов, откройте с помощью ResHacker ресурс инсталлера (диалог 105)
Затем эти ID подставляете в команды...


GetDlgItem $0 $HWNDPARENT 1037
SendMessage $0 ${WM_SETTEXT} 0 "STR:Мой текст строки №1"

GetDlgItem $0 $HWNDPARENT 1038
SendMessage $0 ${WM_SETTEXT} 0 "STR:Мой текст строки №2"

kotkovets
04-10-2012, 22:24
Затем эти ID подставляете в команды... »
излишне в библиотеке уже есть готовый макрос:
те же яйца вид сбоку:
http://forum.oszone.net/post-1446111-524.html
страничка для просмотра чтения:
http://forum.oszone.net/thread-67386-53.html

Creator000
04-10-2012, 22:39
K.A.V., спасибо Вам.

dix75
05-10-2012, 14:14
Добрый день!
Как узнать есть ли в файле искомая строка.

делаю так
${LineFind} "prefs.txt" "" "1:-1" "un.Findt"
${If} $R1 == "true"
MessageBox MB_OK "Cool"
${Else}
MessageBox MB_OK "Not Cool"
${EndIf}
Function un.Find
${WordFind} "$R9" "text" $R0
IntCmp $R0 0 nofind
StrCpy $R1 "true"
Push "StopLineFind"
nofind:
Push $0
FunctionEnd
Все работает. Но если строки в файле нет 2 раза вылетает окно "Not Cool";
Если строка есть то вылетает "Not Cool" и "Cool"
Почему 2 раза, как это исправить

Пардон нашел ошибку

kotkovets
05-10-2012, 17:14
dix75, ну можно так, "обнулять" переменную $R0 в цикле перед каждым использованием:

StrCpy $R0 -1
${LineFind} "prefs.txt" "/NUL" "1:-1" "un.Findt"
${If} $R0 == "true"
MessageBox MB_OK "cool"
${Else}
MessageBox MB_OK "not cool"
${EndIf}

Function un.Findt
${WordFind} "$R9" "text" "#" $R0
${If} $R0 > 0
StrCpy $R0 "true"
Push "StopLineFind"
${Else}
StrCpy $R0 -1
Push $0
${EndIf}
FunctionEnd

Creator000
06-10-2012, 00:41
А кто нибудь может дать пример скрипта в котором использовали nsdialog?

MKN
06-10-2012, 09:37
пример скрипта в котором использовали nsdialog »
Настройка темы\ Версия для печати\ Поиск "nsdialog" = тьма примеров
Google\ Поиск "nsdialog " = море страниц с примерами
Наконец, справка (уже в сотый раз). Начиная с http://nsis.sourceforge.net/Docs/nsDialogs/Readme.html
"Примеряй" на здоровье. :)

Creator000
06-10-2012, 21:29
MKN, если бы :(

Limonica
08-10-2012, 11:49
Срочно нужна помощь, нужен скрипт проверяющий архитектуру системы и в зависимости от неё выполнял действия, пример:

проверка архитектуры:
x86=x86 inst
x64=x64 inst

x86 inst:
...
...
....

x64 inst:
....
....
...
...

и аналогичный пример нужен на проверку ОС (XP\7).... надеюсь на оперативную помощь

Begin2Fly
08-10-2012, 12:00
!include "x64.nsh"

${If} ${RunningX64}
MessageBox MB_OK "ОС - 64-битная"
${Else}
MessageBox MB_OK "ОС - 32-битная"
${EndIf}

По поводу определения ОС можно прочитать в справочнике NSIS из шапки в разделе 'Примеры кодов > Определение ОС'

Limonica
08-10-2012, 16:26
Спасибо большое, сделала чуть иначе но принцип тот же, спасибо. Ещё вопрос есть ли плагин NSIS для создания нового пользователя?

А так же можете пояснить для чего этот плагин http://nsis.sourceforge.net/UAC_plug-in

Creator000
08-10-2012, 17:55
Где можно почитать про авторвыбор разрядности системы?

Интересно, с помощью nsis можно сделать такой установщик? Установщик-командная строка.
http://i26.fastpic.ru/big/2012/1008/77/6f050cc4ccf4e90fb9e01782e1e8f677.png

K.A.V.
08-10-2012, 18:36
есть ли плагин NSIS для создания нового пользователя? »
UserMgr plug-in (http://nsis.sourceforge.net/UserMgr_plug-in) - Полное управление учетными записями (создание, удаление, изменение), создание/удалене групп, добавление/удаление пользователей из групп и т.д.

diakov
08-10-2012, 20:14
Добрый вечер господа! Вот пример:

Есть бутон и соответственно функция нажатия такая:


Function ClickButton
pop $btn
InitPluginsDir
ExecWait "$PLUGINSDIR\uninstall.exe"
MessageBox MB_USERICON|MB_OK "Денсталляция завершена!"
FunctionEnd


Запускается деинсталлятор предыдущей версии проги, но если нажать в нем кнопку удалить (в самом запущенном деинсталляторе) то потому идет меседжбокс Денсталляция завершена, но если его закрыть (тоесть он не отрабатывает) то вылазить тот же меседжбокс но деинсталяция не отрабатывает...как то не красиво получается :)

Как сделать что бы если пользователь просто закрыл запущенный автономный деинсталлятор вылазил например меседж Денсталляция прервана или не состоялась!
Спасибо!

kotkovets
08-10-2012, 22:02
Как сделать что бы если пользователь просто закрыл запущенный автономный деинсталлятор вылазил например меседж Денсталляция прервана или не состоялась! »
Здесь зависит, что возвращает деинсталлятор в случае удачного или неудачного завершения...
На примере запуск блокнота...
ExecWait notepad.exe $0
MessageBox MB_OK "$0" IDOK
так вот, если закрыть блокнот, обычным способом, код возврата: $0 = 0
через диспетчер задач: $0 = 1
бывает приложения ничего не возвращают...
если свое приложение, можно заставить приложение нужную циферку возвращать в разных условиях...
читайте в справке: » Работа с процессами с помощью NSIS

Painkiller
08-10-2012, 22:52
Народ, подскажите , направьте . Была раньше статья о реализации дополнительных ключей в NSIS . Сейчас страница недоступна =((

diakov
08-10-2012, 22:56
kotkovets, все получилось если жму на крестик пишет 1039 а если кнопку выход 0. Все гуд спасибо!

ExecWait "$PLUGINSDIR\uninstall.exe" $0
MessageBox MB_OK "$0" IDOK

kotkovets нарисовалась новая проблемка, код возврата у кнопки готово в конце процесса деинсталяции, и кнопки выход в начале деинсталера одинаковый 0, и потому когда делаю так

Function ClickButton
pop $btn
InitPluginsDir
${ExecWait} "$PLUGINSDIR\uninstall.exe" $6
${If} $6 == 0
MessageBox MB_ICONINFORMATION|MB_OK "Гусь отменил установку"
${ElseIf} $6 == 1039
MessageBox MB_ICONINFORMATION|MB_OK "Гусь отменил установку"
${EndIf}
FunctionEnd
Получается в конце деинсталляции выскакивает ненужное сообщение как быть? :)

kotkovets
08-10-2012, 23:19
Была раньше статья о реализации дополнительных ключей в NSIS »
маленький пример, с ключом /eng:
!include "mui2.nsh"
!include "filefunc.nsh"

OutFile "example.exe"
!insertmacro MUI_PAGE_INSTFILES

!insertmacro MUI_LANGUAGE Russian
!insertmacro MUI_LANGUAGE English

Function .onInit
ClearErrors
${GetOptions} $CMDLINE /eng $R9
IfErrors +2 ;если с ключом запускать, то флага ошибки нет...
StrCpy $Language 1033
FunctionEnd

Section
${If} $Language == 1033
MessageBox MB_OK "english version" IDOK
${ElseIf} $Language == 1049
MessageBox MB_OK "русская версия" IDOK
${EndIf}
SectionEnd
Получается в конце деинсталляции выскакивает ненужное сообщение как быть? »
иногда никак... я же говорил!
проверяйте, что возвращает $6 - просто сообщением (в различных ситуациях), без логики - а то на вашем примере одинаковые по читаемости сообщения...
Если свой деинсталлятор, то можно заставить деинсталлятор записывать...
например в реестр... некое значение - при отмене или удачном завершении.
ну... а затем прочитать значение из реестра...




© OSzone.net 2001-2012