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

Krinkels
07-02-2012, 08:19
Иногда и такое, но редко такое условие возникает: »
Ух, больно сложно. Наверняка можно сделать намного проще.

BuZzOFF
07-02-2012, 08:57
kotkovets
Спасибо. Всё получилось :)

Ещё один вопрос...
При запуске инсталлятора в тихом режиме из командной строки, он (инсталлятор) выдаёт такое:
http://s1.directupload.net/images/120207/temp/99rvuksb.png (http://s1.directupload.net/images/120207/99rvuksb.png)
Благодаря чему можно узнать как прошла установка...

Можно как-то сделать чтоб это отображалось тут?
http://s14.directupload.net/images/120207/temp/eq6etm44.png (http://s14.directupload.net/images/120207/eq6etm44.png)

Пробовал примерно так:
nsExec::ExecToLog '"cmd.exe" START /WAIT setup.exe --mode=Silent --deploymentFile=install.xml'
Pop $0
Pop $1
DetailPrint "$1"
DetailPrint "Возвращенное значение: $0"
Но ничего не отображалось.
Пробовал запускать bat'ник таким же макаром. Но тоже глухо.

Копирование/удаление файлов через командную строку показывает, а Exit Code не хотит.

kotkovets
07-02-2012, 14:16
Ух, больно сложно. Наверняка можно сделать намного проще. »
4 строчки кода - для выяснения объема физ. памяти! куда уж проще! :)
Но ничего не отображалось.
Пробовал запускать bat'ник таким же макаром. Но тоже глухо.
Копирование/удаление файлов через командную строку показывает, а Exit Code не хотит. »
cmd ничего не передал плагину, возможно из-за неверного пути к setup.exe
И чему равно, значение кода возврата, если оно не равно нулю, что то не то...
И вообще для запуска внешних приложений в режиме ожидания есть команда ExecWait:
ExecWait `"Путь к \setup.exe" --mode=Silent --deploymentFile=install.xml'` $0
DetailPrint "Возвращенное значение: $0"

BuZzOFF
07-02-2012, 14:32
неверного пути к setup.exe »Не в этом проблема :dont-know
Всё устанавливается.. Но не отображается.
nsExec::ExecToLog '"cmd.exe" /C CD $WINDIR&CD TEMP&CD ADBEAFETCS4_LS7&START /WAIT setup.exe --mode=Silent --deploymentFile=install.xml'
Пробовал даже так :laugh:
Отображаются команды CD, потом пустота (хотя приложение установилось) ну и далее удаление файлов...

И вообще для запуска внешних приложений в режиме ожидания есть команда ExecWait »Да это я знаю.
Так и делал.
Просто хотелось бы чтоб код отображался. Потому как приложение может не установиться и не будешь знать куда копать.
А так глянул в LOG-файл. Ага Exit Code: 0. Значит всё Ok..
Exit Code: 7. Значит ниOk...

yyv
07-02-2012, 15:17
Nsis и цифровая подпись.
Мы добавляем к нашему инсталеру цифровую подпись. Есть пхп скрипт который модифицирует файл инсталера.
Стали делать деинсталятор и увидели что файл деинсталятора по итогу остается не подписанным.
Подскажите пожалуйста, как можно подписать файл деинсталятора?

kotkovets
07-02-2012, 15:42
А так глянул в LOG-файл. Ага Exit Code: 0. Значит всё Ok.. »
ну так я писал:
ExecWait `"Путь к \setup.exe" --mode=Silent --deploymentFile=install.xml'` $0
DetailPrint "Возвращенное значение: $0"
Если переменная $0 = 0 - то все в порядке
Что бы отобразить окно деталей `сразу` пишем вне секции или функции:
ShowInstDetails show
Есть пхп скрипт который модифицирует файл инсталера.
Подскажите пожалуйста, как можно подписать файл деинсталятора?
»
я не подписывал деинсталляторы, но наверно так же, после создания (по скрипту) деинсталлятора.

yyv
07-02-2012, 18:38
я не подписывал деинсталляторы, но наверно так же, после создания (по скрипту) деинсталлятора. »

но как я могу это сделать? Ведь инсталер создается у меня локально, а файл деинсталятора инсталер создает на машине пользователя?

kotkovets
07-02-2012, 19:42
но как я могу это сделать? »
можно упаковать подписанный готовый инсталер(который будет выполнять функции деинсталера) в основной установщик.

BuZzOFF
08-02-2012, 08:32
Если переменная $0 = 0 - то все в порядке »Оно всегда ноль. Даже если установилось с ошибками.
Если только процесс убить. Тогда будет не ноль...

Что бы отобразить окно деталей »По скрину видно что у меня это написано.

Ладно проехали... Либо Вы меня не так поняли, либо это невозможно.
Спасибо за помощь.

kotkovets
08-02-2012, 09:13
Оно всегда ноль. Даже если установилось с ошибками »
Может быть проблема запускаемого сетапа,
который не транслирует лог установки и соответственно...

BuZzOFF
08-02-2012, 09:33
kotkovets, Да ладно. Не так критично :) просто хотелось как лучше...

Другой теперь вопрос. Про установку на x64.
В справочнике не нашёл. Может плохо искал...

Если так делать:
InstallDir "$PROGRAMFILES\прога"
То в x64 показывает Program Files (x86).
Как сделать чтоб в x86 и x64 показывал Program Files.

И как сделать чтоб запускался msi нужной разрядности?

Кто-то тут уже приводил пример кода. Потерялось у меня...
Как-то так вроде было.
Section
SetOutPath "$TEMP"
ExecWait '"msiexec.exe" /i $\"${OutDir}\прога.msi$\" /qb INSTALLDIR=$\"$INSTDIR$\"'
${If} ${RunningX64}
ExecWait '"msiexec.exe" /i $\"${OutDir}\прога_x64.msi$\" /qb INSTALLDIR=$\"$INSTDIR$\"'
${EndIf}
SectionEnd
Что не правильно?
У меня ошибку выдаёт...
!insertmacro: _If
!insertmacro: macro "_If" requires 4 parameter(s), passed 2!
Error in script "H:\package\W7M.nsi" on line 70 -- aborting creation process

kotkovets
08-02-2012, 09:55
То в x64 показывает Program Files (x86).
Как сделать чтоб в x86 и x64 показывал Program Files. »
кстати цитата из справки:
http://forum.oszone.net/post-1848691-2264.html
И как сделать чтоб запускался msi нужной разрядности?
Кто-то тут уже приводил пример кода »
ну здесь только я отвечаю в основном :)
!include "x64.nsh"
;---
Section
SetOutPath "$TEMP"
${If} ${RunningX64}
ExecWait "msiexec /i $\"$OutDir\прога_x64.msi$\" /qb INSTALLDIR=$\"$INSTDIR$\""
${Else}
ExecWait "msiexec /i $\"$OutDir\прога.msi$\" /qb INSTALLDIR=$\"$INSTDIR$\""
${EndIf}
SectionEnd

Krinkels
08-02-2012, 13:01
ну здесь только я отвечаю в основном »
Потому что других гуру здесь нету :)

kotkovets
08-02-2012, 16:23
Krinkels, льстишь... :)

Paval
09-02-2012, 13:55
Вот что здесь может быть неправильного?

IfFileExists ${pkgdir_x64}\*.* 0 NoFiles
File /r /x *.pdb "${pkgdir_x64}\"
Goto Packed
NoFiles:
File /r /x *.pdb "${pkgdir}\"
Packed:

wolkow70
09-02-2012, 15:22
kotkovets,

Подскажите как проверить наличие ключа на наличие, при внесении в реестр записей.
Хочу руссифицировать контекстное меню MPC -HC для типов файлов после установки K-Lite. Примерно так:

если существует ключ HKLM SOFTWARE\Classes\mplayerc.avi , то
WriteRegStr HKLM "SOFTWARE\Classes\mplayerc.avi\shell\Open" "" "&Воспроизвести в MPC-HC"
WriteRegStr HKLM "SOFTWARE\Classes\mplayerc.avi\shell\Enqueue" "" "Добавить в плейлист MPC-HC"
иначе перейти к следующему типу и т.д.

wolkow70
09-02-2012, 15:54
Как вариант сделал пока так:

!macro ContextLocalization extenstion
Push $0
StrCpy $ClassName "mplayerc.${extenstion}"
;
ReadRegStr $0 HKLM "SOFTWARE\Classes\$ClassName\shell\Open" ""
StrCmp $0 "&Play with MPC" 0 +5
DeleteRegValue HKLM "SOFTWARE\Classes\$ClassName\shell\Open" ""
DeleteRegValue HKLM "SOFTWARE\Classes\$ClassName\shell\Enqueue" ""
WriteRegStr HKLM "SOFTWARE\Classes\$ClassName\shell\Open" "" "&Воспроизвести в MPC-HC"
WriteRegStr HKLM "SOFTWARE\Classes\$ClassName\shell\Enqueue" "" "Добавить в плейлист MPC-HC"
Pop $0
!macroend

!insertmacro ContextLocalization "AVI"

kotkovets
09-02-2012, 16:59
Подскажите как проверить наличие ключа »
удобно из справочника использовать библиотеку RegistryFunc.nsh
${If} ${KeyExists} "${HKCU}\Software\7-zip"
# здесь выполняются команды, если ключ существует
DetailPrint "Ключ есть!"
${Else}
# здесь выполняются команды, если ключа не существует
DetailPrint "Ключа не существует!"
${EndIf}
Вот что здесь может быть неправильного? »
IfFileExists ${pkgdir_x64}\*.* 0 NoFiles
IfFileExists - команда времени инсталляции, вы же пытаетесь всунуть папку
определенную времени компиляции, что для команды file подходит успешно - время компиляции.

wolkow70
09-02-2012, 17:11
удобно из справочника использовать библиотеку RegistryFunc.nsh »

Там есть только Registry.nsh

kotkovets
09-02-2012, 17:22
wolkow70, читайте » Работа с реестром с помощью NSIS
пример конструкции не учитывает значение ключа, только наличие ключа в реестре.




© OSzone.net 2001-2012