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

diakov
25-08-2012, 18:35
kotkovets, подскажи пожалста, вот например при установки проги я хочу запустить патч запускаю его через команду ExecWait например, соответственно он запускается и пользователю остается нажать на кнопку generate например, возможно ли что бы сам инсталлятор нажимал эту кнопку (тоесть эмулировать нажатие на кнопку самим нсис)...встречал такой инстальник но не на нсис...

И еще по аналогии вопрос..перепаковал я аимп и хочу запихнуть туда DFX Audio Enhancer например возможно ли включить в репак оригинальный файл .exe DFX Audio Enhancer и в тихом режиме его установить что бы не появлялись окна исталлятора DFX Audio Enhancer.. спасибо!

diakov
25-08-2012, 19:02
Вот пытаюсь перепаковать DFX Audio Enhancer 11.0.14 не получается поставить драйвер в папке плага есть файлы
dfx11_0ntamd64.cat
dfx11_0ntx86.cat
ptdevcon32.exe
ptdevcon64.exe
dfx11_0.inf
dfx11_0x64.inf
dfx11_0.sys
dfx11_0x64.sys
Соответственно под х64 и х86, пробовал так
ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\DFX\Universal\Drivers\dfx11_0.inf"
Не получается чето...

Vincent7
26-08-2012, 00:29
Возможно execwait в тихом режиме нужно выполнить

diakov
26-08-2012, 11:28
Возможно execwait в тихом режиме нужно выполнить »
Да не не то...

MKN
26-08-2012, 16:12
ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\DFX\Universal\Drivers\dfx11_0.inf" »
Касательно этой команды, можно попробовать указать путь $SYSDIR\RUNDLL32.EXE
Касательно конкретно установки Dfx драйвера - эта команда вряд ли его установит...
В дистрибутив не даром входят DevCon компоненты (ptdevcon32.exe и ptdevcon64.exe) а также похоже, что и сам установщик DfxSetupDrv.exe. Как всё это действует, знают только разрабы...
Можно конечно взять за основу "классический" DevCon http://support.microsoft.com/kb/311272
Или DPInst - http://msdn.microsoft.com/en-us/library/ff544775.aspx. Только сработает ли... Попробуй.
Также похоже, что учитывается и архитектура процессоров ( amd64 и x86-64), что требует соответствующего выбора при установке драйверов. Это можно определять кодом :
Section
System::Alloc 32
Pop $0
System::Call "Kernel32::GetNativeSystemInfo(i) v (r0)"
System::Call "*$0(&i2 .r1)"
System::Free $0

StrCmp $1 9 0 +2
DetailPrint PROCESSOR_ARCHITECTURE_AMD64

StrCmp $1 6 0 +2
DetailPrint PROCESSOR_ARCHITECTURE_IA64

StrCmp $1 0 0 +2
DetailPrint PROCESSOR_ARCHITECTURE_INTEL

StrCmp $1 0xffff 0 +2
DetailPrint PROCESSOR_ARCHITECTURE_UNKNOWN
SectionEnd
Вообще установка из NSIS "не типовых" драйверов - дело скользское... А для классической установки драйверов, давно назрела пора в плагине. Тот что имеется (http://nsis.sourceforge.net/InstDrv_plug-in), уж очень дремучий и не универсальный... По сути не рабочий...

wolkow70
26-08-2012, 19:09
Я для Revo Uninstaller под разную архитектуру так делал:

${If} ${RunningX64}
${DisableX64FSRedirection}
ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\revoflt.inf"
${EnableX64FSRedirection}
${Else}
ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\revoflt.inf"
${EndIf}

diakov
27-08-2012, 09:19
${If} ${RunningX64}
${DisableX64FSRedirection}
ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\revoflt.inf"
${EnableX64FSRedirection}
${Else}
ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\revoflt.inf"
${EndIf} »

Да в рево так работает тоже так делал...
А как на счет эмуляции нажатия на кнопки самим нсис?

wolkow70
27-08-2012, 12:43
А как на счет эмуляции нажатия на кнопки самим нсис? »
Не доводилось заниматься... Пока сочетаю с AutoIt. Хотя язык во многом схожий.

K.A.V.
27-08-2012, 13:51
А как на счет эмуляции нажатия на кнопки самим нсис? »


FindWindow $0 '#32770' 'Моя программа 1.0'
; Ищем окно инсталлятора
IsWindow $0 +2 0
MessageBox MB_OK|MB_ICONSTOP "Указанное окно не найдено" idOK error

GetDlgItem $1 $0 1
; Получаем дескриптор кнопки "Далее"

MessageBox MB_OK|MB_ICONINFORMATION "После нажатия на кнопку ОК будет нажата кнопка 'Далее'"

SendMessage $1 ${BM_CLICK} 0 0
; Нажимаем кнопку
error:




PS
Нужен инклуд библиотеки
!include "winmessages.nsh"

diakov
27-08-2012, 16:20
Однако разобрацо нада :)

Creator000
27-08-2012, 21:02
че такое http://i40.fastpic.ru/big/2012/0827/47/2be7679807639d7ccf22c6a886b3bc47.png
в HM NIS Edit. просто объекты в ini файле переставил местами.

K.A.V.
27-08-2012, 21:38
Однако разобрацо нада »
Ну...Давайте разберём вместе, раз вам мой пример мало чего дал :)

Для того, чтобы нажать на кнопку - нужно сначала узнать её дескриптор
Если вы хотите нажать на кнопку внешнего инсталлятора, то сначала вам необходимо найти дескриптор окна инсталлятора, чтобы потом получить дескриптор кнопки


FindWindow $0 '#32770' 'Моя программа 1.0'



Можете добавить проверку наличия окна командой IsWindow


IsWindow $0 +2 0
MessageBox MB_OK|MB_ICONSTOP "Указанное окно не найдено" idOK error




Если вам необходимо нажать на кнопку в своём инсталляторе, то можно не использовать вышеупомянутые 2 команды (поиск и проверка наличия окна), а сразу перейти к получения дискриптора кнопки


GetDlgItem $1 $HWNDPARENT 1



При исполнении команды GetDlgItem, мы помещаем в переменную $1 дескриптор элемента у которого идентификатор 1 (смотрите ID элементов непосредственно через программы просмотров ресурсов, такие как ResHacker и Restorator)
Переменная $HWNDPARENT - это дескриптор окна вашего пакета инсталлятора, если вы определяете дескриптор окна внешнего инсталлятора с использованием команды FindWindow, то замените $HWNDPARENT переменной $0

В нашем случае идентификатор под номером 1 в команде GetDlgItem - это кнопка Далее в диалогах NSIS

Вот и всё, после того как узнали дескриптор кнопки, эмулируем нажатие посылкой Win сообщения


SendMessage $1 ${BM_CLICK} 0 0



-------


че такое
Поисковик Google (http://lmgtfy.com/?q=Win32+Error+Code+5) ещё никто не отменял
Попробуйте запустить программу от имени администратора, может UAC балуется? :)

diakov
28-08-2012, 18:54
смотрите ID элементов непосредственно через программы просмотров ресурсов, такие как ResHacker и Restorator »
Ах воно оно что а тодумаю как конкретно узнать...спасибо буду експерементировать...

kotkovets
28-08-2012, 20:43
Ах воно оно что а тодумаю как конкретно узнать... »
Все это упрощенно и быстро можно узнать - http://forum.oszone.net/thread-129417.html
В пакет AutoIt входит весьма полезная утилитка - Au3Info.exe
Это программка наведением прицела на элемент диалога позволяет узнать все нужные параметры окошка
и параметры элементов диалога, остается фактически тока нужные "циферки" вставить в скрипт NSIS

Creator000
29-08-2012, 23:45
Где можно узнать больше о nsDialog? мне эта штука больше понравилась чем IO.
чтобы кто-то разжевал поподробней для чего и как работают эти функции.

MKN
30-08-2012, 10:15
Где можно узнать больше о nsDialog? »
Здесь : http://nsis.sourceforge.net/NsDialogs_FAQ\
http://nsis.sourceforge.net/Docs/nsDialogs/Readme.html
http://nsis.sourceforge.net/Include/nsDialogs.nsh
http://nsis.sourceforge.net/Category:NsDialogs_Examples

Creator000
30-08-2012, 17:31
MKN, а что нибудь по русски есть?

MKN
31-08-2012, 09:01
Creator000,
Есть Promt, Lingvo, Google Translate. Переведи док. и выложи здесь. :)

volk1234
31-08-2012, 12:48
Creator000

Перестаньте использовать форум как чат!

Creator000
31-08-2012, 20:28
мне не подходит инструкция. с помощью команды page мы создаем страницу. а мне нужно не страницу, а целый интерфейс пользователя, который я смог бы потом подключать в коде непосредственно самого установщика




© OSzone.net 2001-2012