Показать полную графическую версию : [архив].: NSIS - все вопросы :.
Зачем?
Простите за оффтом, но вот вам мануал (http://winreview.ru/Soft/405/Portable-Firefox-kak-sdelat-portativnim-populyarnij-brazuer) , как сделать это приложение портативным
хочу сделать портативным quake livе с запуском PRISM
как компилить обычный знаю, в посте вроде я все ясно написал, но все равно спс за мануал
Добрый день. Подскажите пожалуйста, как в NSIS узнать длину введенной строки (используется собственная страница с текстовым полем)
StrLen $0 "лопата"
в $0 Будет длина слова "лопата", т.е. 6
Справку смотрели? Там есть это.
мм.. спасибо. да смотрел, только не правильно понял справку.
hb860, извиняюсь за столь необычный вопрос, но хотелось уточнить, вдруг подскажите:
4.9.3.13 RegDLL
dllfile [entrypoint_name]
Loads the specified DLL and calls DllRegisterServer (or entrypoint_name if specified). The error flag is set if an error occurs (i.e. it can't load the DLL, initialize OLE, find the entry point, or the function returned anything other than ERROR_SUCCESS (=0)).
Use SetOutPath to set the current directory for DLLs that depend on other DLLs that are now in the path or in the Windows directory. For example, if foo.dll depends on bar.dll which is located in $INSTDIR use:
SetOutPath $INSTDIR
RegDLL $INSTDIR\foo.dll
Собственно интересует [entrypoint_name] , я правильно понял, что можно на DLL, прописать определённое имя раздела в HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID , например, {A7A63E5C-3877-4840-8727-C1EA9D7A4D50} или [entrypoint_name] для чего другого? Если я прав, то как правильно указать [entrypoint_name] , в каком формате?
Это оффтоп, но:
RegDLL file.dll ищет и вызывает в file.dll функцию DLLRegisterServer
Если функция регистрации называется по другому, используется entrypoint_name. Это всего лишь имя функции регистрации библиотеки в системе, и никак не свзянно с именем раздела или чем то таким.
RegDLL $INSTDIR\foo.dll MyRegFunc
я полагаю так надо это вызывать
hb860, На 64-битной системе не тестировал удаление ярлыков из Пуска еще?
SamLab, я себе делал сборку и на Win 7 64-bit , без проблем удалялось.. как из Пуск так из Пуск/Программы...
Может ты в скрипте ошибся малёха...
Ставлю (пример одного элемента)
RequestExecutionLevel admin
...
SetShellVarContext all
CreateDirectory "$SMPROGRAMS\SAM CoDeC Pack\Плееры"
CreateShortCut "$SMPROGRAMS\SAM CoDeC Pack\Плееры\Media Player Classic - HomeCinema.lnk" "$PROGRAMFILES64\SAM CoDeC Pack\Players\MPCHC\mpc-hc64.exe" '' "$PROGRAMFILES64\SAM CoDeC Pack\Players\MPCHC\mpc-hc64.exe" 0
CreateShortCut "$DESKTOP\MPC HomeCinema.lnk" "$PROGRAMFILES64\SAM CoDeC Pack\Players\MPCHC\mpc-hc64.exe"
Удаляю
SetShellVarContext all
RMDir /r "$SMPROGRAMS\SAM CoDeC Pack"
SamLab, внешне вроде нормально, должно удалять...
Я лично немного по другому делал
Var ICONS_GROUP
!define MUI_STARTMENUPAGE_NODISABLE
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "${PRODUCT_NAME} 10"
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}"
!insertmacro MUI_PAGE_STARTMENU Application $ICONS_GROUP
..............
Section -Post
;
; Create Shortcuts
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
SetShellVarContext all
CreateDirectory "$SMPROGRAMS\$ICONS_GROUP"
CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\${PRODUCT_NAME} 10.lnk" "$INSTDIR\PDVDLaunchPolicy.exe"
CreateShortCut "$DESKTOP\${PRODUCT_NAME} 10.lnk" "$INSTDIR\PDVDLaunchPolicy.exe"
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
..............
; UnInstalling
;
..............
!insertmacro MUI_STARTMENU_GETFOLDER "Application" $ICONS_GROUP
SetShellVarContext all
Delete "$DESKTOP\${PRODUCT_NAME} 10.lnk"
RMDir /r "$SMPROGRAMS\$ICONS_GROUP"
hb860, может подскажете как реализовать вот такое:
- необходимо сделать так, при установке инсталлятора, на странице инсталллятора выбора компонентов (секций), если не выбран ни один компонент (секции), то становится не активной (блокируется) кнопка "Далее" ("Next"), а если выбран хотябы один компонент (секция), то кнопка "Далее" ("Next"), активна, для продолжения настройки и установки инсталлятора.
hb860, может подскажете как реализовать вот такое: »
Я не знаю как это сделать со стандратной страницей компонентов, но для собственной страницы есть вот такое решение (http://forums.winamp.com/showthread.php?t=258920)
Samlab, Lisabon прав. Я установил х64 - у меня нет проблемы с ярлыками, они удаляются корректно. Код такой же как у тебя, только группа называется XnView
После недавнего общения с Lisabon,я созрел на написание нового материала по NSIS.
Встречайте: Создание своего инсталлятора на NSIS. Подробней о скрытых секциях. Скрытые группы секций. (http://winreview.ru/Skriptolozhestvo/441/Sozdanie-svoego-installyatora-na-NSIS.-Podrobnej-o-skritih-sektciyah.-Skritie-gruppi-sektcij.)
Добрый день. Подскажите пожалуйста, как в NSIS определить версию ОС под которой запущен инсталлятор?
требуется, т.к. на win2k, xp, vista немного отличаются сборки ПО, под который создается инсталлер.
==========
Сам отвечу. нашел.
!include WinVer.nsh
...
${If} ${IsWin2000}
...
${Else}
...
${EndIf}
hb860, есть ещё вопрос:
- есть SectionGroup 1 и SectionGroup 2, также в инсталляторе предусмотрено InstType Max и InstType Min . Я хочу чтобы при выборе InstType Max и InstType Min, все чекбоксы применялись только к SectionGroup 1, а SectionGroup 2 - была независима от SectionGroup 1 и от выбора InstType Max и InstType Min, и также по-умолчанию SectionGroup 2 - была выбрана. В SectionGroup 2, я убрал SectionIn, но при выборе InstType Max и InstType Min, изменяются чекбоксы в SectionGroup 2.
Если можно пример, для наглядности.
и все таки есть вопрос:
подскажите пожалуйста, как преобразовать к верхнему регистру:
делаю так:
!include StrFunc.nsh
... далее в функции
StrCpy $0 "$txtCSPSN1$txtCSPSN2$txtCSPSN3$txtCSPSN4$txtCSPSN5" ; собираем куски серийника в одну переменную
${StrCase} $SerialCSP $0 "U" ; преобразуем к верхнему регистру
на последней строке при компиляции получаю ошибку:
!insertmacro: FUNCTION_STRING_StrCase
!insertmacro: macro "FUNCTION_STRING_StrCase" requires 0 parameter(s), passed 3!
основывался на данной статье http://nsis.sourceforge.net/StrCase
====
сам отвечу: разобрался...
перед вызовом надо было описать функцию след образом:
# Описание используемых функций
${StrCase}
а потом ее только вызывать
Владельцы 64-битной Windows 7 попробуйте пожалуйста поставить и потом удалить SAM CoDeC Pack и посмотреть останется ли у вас в Пуск/Программы ветка SAM CoDeC Pack - http://samlab.ws/soft/samcp - не могу победить никак - не удаляется и все тут - может у меня в винде глюк...
SamLab, Владельцы 64-битной Windows 7 попробуйте пожалуйста поставить и потом удалить SAM CoDeC Pack и посмотреть останется ли у вас в Пуск/Программы ветка SAM CoDeC Pack - http://samlab.ws/soft/samcp - не могу победить никак - не удаляется и все тут - может у меня в винде глюк... »
Попробовал как SAM CoDeC Pack 32-битный, так и SAM CoDeC Pack 64-битный, также попробовал на 32 и 64-битной Windows 7, и в Пуск/Программы ветка SAM CoDeC Pack, удаляется полностью, тобищь отработало без проблем.
Lisabon,
SectionGroup 1
section "Section 1"
SectionIn 1 2
...
section "Section 2"
SectionIn 1 2
А для SectionGroup 2 не пишите вообще SectionIn, она и не будет зависеть от типа инсталляции.
Вообще, дайте-ка пример вашего кода. Я гляну чё вы там написали
Добрый день/ночь еще раз.
имеется следующее:
несколько установочных MSI файлов, которые инсталлятор должен устанавливать в определенном порядке, причем каждый MSI пакет должен ставиться c определенным серийником.
делаю так: собственная страница с запросом серийников (3 шт), далее где секция установки файлов вызываю установку MSI файлов.
подскажите пожалуйста, можно ли сделать так, что бы при некорректной установки MSI файла возвращало на страницу с серийником.
...
как это выглядит у меня в скрипте
!include "nsDialogs.nsh"
....
Page Custom GetSN
...
Var HWNDGetSN
Function GetSN
nsDialogs::Create 1018
Pop $HWNDGetSN
... ; тут создаются поля ввода серийников
nsDialogs::Show
FunctionEnd
...
Section ... ; секция установки
ExecWait 'MsiExec /i "1.msi" PIDKEY=$SN1' $0
... ; анализ кода возврата (как отсюда вернуться на кастомную страницу с вводом серийников?)
ExecWait 'MsiExec /i "2.msi" PIDKEY=$SN2' $0
... ; анализ кода возврата (как отсюда вернуться на кастомную страницу с вводом серийников?)
ExecWait 'MsiExec /i "3.msi" PIDKEY=$SN3' $0
... ; анализ кода возврата (как отсюда вернуться на кастомную страницу с вводом серийников?)
SectionEnd
===============
я правильно понимаю что копать надо в сторону ShowWindow $HWNDGetSN ${Команда} ?
только вот какую команду надо отправить? уже пробовал WM_ACTIVATE, WM_SETFOCUS, SW_SHOW , SW_SHOWNORMAL ... но не получается.
===============
Еще нашел функцию RelGotoPage (http://nsis.sourceforge.net/Go_to_a_NSIS_page), но инглиш мой немного хромает, подскажите плз, как ей пользоваться
===============
а почему если просто в месте перехода вызвать
Call GetSN
то инсталлер закрывается без каких либо вопросов?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC