Показать полную графическую версию : [архив].: NSIS - все вопросы :.
Krinkels
07-02-2012, 08:19
Иногда и такое, но редко такое условие возникает: »
Ух, больно сложно. Наверняка можно сделать намного проще.
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"
неверного пути к 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...
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
Есть пхп скрипт который модифицирует файл инсталера.
Подскажите пожалуйста, как можно подписать файл деинсталятора?
»
я не подписывал деинсталляторы, но наверно так же, после создания (по скрипту) деинсталлятора.
я не подписывал деинсталляторы, но наверно так же, после создания (по скрипту) деинсталлятора. »
но как я могу это сделать? Ведь инсталер создается у меня локально, а файл деинсталятора инсталер создает на машине пользователя?
kotkovets
07-02-2012, 19:42
но как я могу это сделать? »
можно упаковать подписанный готовый инсталер(который будет выполнять функции деинсталера) в основной установщик.
Если переменная $0 = 0 - то все в порядке »Оно всегда ноль. Даже если установилось с ошибками.
Если только процесс убить. Тогда будет не ноль...
Что бы отобразить окно деталей »По скрину видно что у меня это написано.
Ладно проехали... Либо Вы меня не так поняли, либо это невозможно.
Спасибо за помощь.
kotkovets
08-02-2012, 09:13
Оно всегда ноль. Даже если установилось с ошибками »
Может быть проблема запускаемого сетапа,
который не транслирует лог установки и соответственно...
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, льстишь... :)
Вот что здесь может быть неправильного?
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC