Показать полную графическую версию : [архив].: NSIS - все вопросы :.
Caymanroc
22-09-2010, 13:01
Привет!
На днях развлекался с nsis и наткнулся на интересную особенность. Есть пример (http://nsis.sourceforge.net/Create_Internet_Shorcuts_during_installation) , как создавать url ссылку. Запускаем первый раз - все нормально работает. Второй раз меняем адрес ссылки, например
....
!insertmacro "CreateURL" "Nsis Website" "http://nsis.sourceforge.net/Create_Internet_Shorcuts_during_installation" "Visit NSIS Website"
...
и получаем ссылку на первый адрес, т.е. на http://nsis.sf.net. Есть какие-нибудь предположения, что надо сделать, чтобы ссылка обновлялась?
kotkovets
23-09-2010, 12:09
чтобы ссылка обновлялась? »
Дело в проводнике, что именно не знаю, достаточно изменить
имя url-ярлыка:
!insertmacro "CreateURL" "Web" "http://nsis.sourceforge.net/Create_Internet_Shorcuts_during_installation" "Visit NSIS Website"
URL-файл перед повторным созданием удалять пробовали?
kotkovets
24-09-2010, 19:43
URL-файл перед повторным созданием удалять пробовали? »
hb860 я пробывал скриптом, и все также, если ручками удалить, то бывает спустя некоторое время обновится ссылка.
или сразу обновится ссылка после перезагрузки проводника...$RefreshShellicon не выручает.
А чем плох ОБЫЧНЫЙ ярлык?
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Сайт ${PRODUCT_NAME}.lnk" "http://wwww.aimp.ru" "" "$PROGRAMFILES\Internet Explorer\iexplore.exe" 1
Вот такой например?
kotkovets
24-09-2010, 23:33
Дык ничем :)
AIMPу 4 года! зато узнал :)
Как в NSIS реализовать функцию проверки установленного ПО из MSI, по его коду ?
К примеру, в Setup Factory проверку установлен ли VC++2005sp1 я проверяю с помощью :
-- Get the product's installed state.
nState = MSI.QueryProductState("{837b34e3-7c30-493c-8f6a-2b0f04e2912c}");
if (INSTALLSTATE_DEFAULT ~= nState) then
result = File.Run(SessionVar.Expand("%TempLaunchFolder%\\vc.exe"), "", "", SW_SHOWNORMAL, false);
end
Каким будет аналог этого скрипта в NSIS ?
И ещё вопрос : Каким образом лучше реализовать поиск перед установкой, запущенного процесса (программы) и его закрытия в случае обнаружения ?
Обнаружил несколько плагинов вроде как для этих целей, но сомневаюсь...
kotkovets
25-09-2010, 14:07
Как в NSIS реализовать функцию проверки установленного ПО из MSI, по его коду ? »
Я проверку по реестру делаю, на примере 7-zip упакованный в MSI:
OutFile OutFile.exe
Section
ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{23170F69-40C1-2701-0916-000001000000}" "DisplayName"
StrCmp $0 "" +3 #если в переменной $0 "какое то значение" , то выполняем ниже 2 строчки кода
MessageBox MB_ICONINFORMATION|MB_OK "$0 установлен!"
Quit
MessageBox MB_ICONINFORMATION|MB_OK "7-zip не установлен!"
SectionEnd
0916 - версия 7-zip. Эти цифры меняются в зависимости от версии.
Чтобы сделать проверку на все версии, делаю цикл.
kotkovets
25-09-2010, 14:56
И ещё вопрос : Каким образом лучше реализовать поиск перед установкой, запущенного процесса (программы) и его закрытия в случае обнаружения ? »
На примере плагина http://nsis.sourceforge.net/Processes_plug-in
Function .onInit
Processes::FindProcess "Explorer.exe"
Pop $R0
StrCmp $R0 1 0 +3
MessageBox MB_OK "Explorer запущен($R0)"
Processes::KillProcess "Explorer.exe"
StrCmp $R0 0 0 +2
MessageBox MB_OK "Explorer не запущен($R0)"
FunctionEnd
предпочитаю http://nsis.sourceforge.net/NsProcess_plugin
OutFile OutFile.exe
Function .onInit
nsProcess::_FindProcess /NOUNLOAD "explorer.exe"
Pop $R0
StrCmp $R0 0 0 +3
MessageBox MB_OK "$R0 | Explorer запущен"
nsProcess::_KillProcess /NOUNLOAD "explorer.exe"
StrCmp $R0 603 0 +2
MessageBox MB_OK "$R0 | Explorer не запущен"
Quit
FunctionEnd
kotkovets, подскажи пожалуйста :
Что означает в скриптах +2 , +3 (и где про это узнать подробнее и по русски ) ?
И как организовать после определения наличия (или отсутствия) установленного ПО ? :
1. Если ПО не установлено, то запуск необходимого приложения из $Temp с последующим удалением исходного файла запуска после установки.
(Если установлено - продолжение установки без всяких сообщений.)
и такой вариант :
2. Если ПО не установлено, то вызов сообщения : "Приложение такое то не установлено". И в нём же (в его окне) выбор кнопок : "Установить ?" (А затем его запуск) " Отмена" и " Продолжить установку".
kotkovets
26-09-2010, 13:47
MKN я сообщения использую для отладки скриптов! Никто же вам не мешает их убирать с моих примерах!
Что означает в скриптах +2 , +3 »
На примере команды сравнения значений:
StrCmp [значение 1] [значение 2] 0 +5, если [значение 1]=[значение 2], то выполнить ниже 4 строчки кода
StrCmp [значение 1] [значение 2] +5, если [значение 1]=[значение 2], то не выполнять ниже 4 строчки кода
Если ПО не установлено, то вызов сообщения : "Приложение такое то не установлено". И в нём же (в его окне) выбор кнопок : "Установить ? »
На примере 7-zip
Function .onInit
ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{23170F69-40C1-2701-0916-000001000000}" "ModifyPath"
StrCmp $1 "" +3
ExecWait "$1" ;запуск с ожиданием, что прочитали в реестре
Quit ;выход
MessageBox MB_ICONQUESTION|MB_YESNO "Приложение не установлено!$\n$\rУстановить?" IDYES YES IDNO NO
YES: # метка перехода
SetOutPath "$TEMP"
File "soft.exe"
ExecWait "$TEMP\soft.exe"
Delete "$TEMP\soft.exe"
NO:
FunctionEnd
Если нужно изменить название кнопок качаем http://nsis.sourceforge.net/MessageBox_plug-in
Командой Pop снимаем коды возврата кнопок, и по кодам, с помощью StrCmp, назначаем функции кнопкам. В описании плагина там есть пример.
Коды снимаем стандартными сообщениями:
....
messagebox::show ..................
Pop $9
MessageBox MB_OK "$9"
Если ПО не установлено, то запуск необходимого приложения из $Temp с последующим удалением исходного файла запуска после установки.
(Если установлено - продолжение установки без всяких сообщений.)»
Function .onInit
ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{23170F69-40C1-2701-0916-000001000000}" "ModifyPath"
StrCmp $1 "" 0 Next ;Если ПО установлено, то переходим к метке Next
SetOutPath "$TEMP"
File "soft.exe"
ExecWait "$TEMP\soft.exe"
Delete "$TEMP\soft.exe"
Next:
FunctionEnd
Добавлю в справочник.
Справочник по NSIS (http://forum.oszone.net/showpost.php?p=1489320)
kotkovets,
Такой вопрос : Возможно ли реализовать при выборочной установке, гиперссылку на всплывающее или просто открывающееся новое окно с текстом-описанием выбранного компонента ?
Например, выбирая какой-нибудь компонент из секции установки, рядом с его описанием присутствует и фраза "Подробнее", являющееся своеобразной гиперссылкой, при клике на которой открывается окно с описанием этого выбранного компонента. И возможно ли в этом окне, кроме текстового описания, поместитть ещё и рисунок (рисунки) ?
Было бы очень полезно для визуализации выбора вариантов устанавливаемых Templates для DVD меню, скинов и многого другого,
Если такое не реально сделать средствами NSIS_а, то хотя бы реализовать открытие в отдельном окне (с заданными размерами) файла типа html или графического файла.
Вопрос 2 : Возможно ли реализовать выбор компонентов не с помощью галок чекбоксов, а с помощью стандартных кликабельных кнопок.
При нажатии на кнопку, чтобы менялся её цвет или на ней появлялся символ галки, свидетельствующий о выполнении ?
Или при нажатии на кнопку, сменялось одно изображение на другое, рядом находящееся с кнопкой, если не возможно это сделать на самой кнопке...
Типа, как это часто делают в AutоIT скриптах.
kotkovets
26-09-2010, 16:44
MKN, в предыдущем посте я вам дал ссылку к справочнику, там есть пример (на примере Оперы) при наведении курсора мышки читаем описание компонента.
Вопрос : Возможно ли реализовать выбор компонентов не с помощью галок чекбоксов, а с помощью стандартных кликабельных кнопок. »
Модуль nsDialogs:Создаем нестандартные страницы.
Если такое не реально сделать средствами NSIS_а, то хотя бы реализовать открытие в отдельном окне (с заданными размерами) файла типа html или графического файла. »
Не делал такое, но можно попробовать, через функцию .onSelChange
Как нибудь пробну реализовать... :)
при наведении курсора мышки читаем описание компонента. »
Это не оч. удобно, т.к нет фиксации. Стронул мышку и пропало описание... И как насчёт рисунков в описании ?
kotkovets
26-09-2010, 17:04
И как насчёт рисунков в описании ? »
Картинки-превьюшки для радиокнопок (http://forum.oszone.net/post-1343128-395.html)
kotkovets,
Ещё вопрос (я чувствую, что уже превысил лимит твоего терпения, но всё же... :) )
Как бы продолжить большое и оч. полезное дело с GUI для NSIS_а. Не те обрубки c минимальными возможностями, что уже имеются в сети, а полнофункциональный и расширяемый GUI. Типа, что начал делать K.A.V. http://forum.oszone.net/thread-151756.html, но к сожалению не завершил...
Цены бы не было такому проекту. (У меня в голове уже каша от обилия разномастной скриптоинформации для разных приложений и случаев... :) )
kotkovets
26-09-2010, 17:20
Как бы продолжить большое и оч. полезное дело с GUI для NSIS_а »
Я им не пользуюсь, ибо самый гибкий скрипт, создается, только ручками!
И исходников у меня нет...И не гуру в программировании С++ или Delphi
У меня в голове уже каша от обилия разномастной скриптоинформации для разных приложений и случаев... »
Бывает, по началу у меня было такое.. :)
Я разбиваю одну сложную задачу, на несколько простых задач и решаю их, потом все собираю в одно целое...
Неплохие редакторы с мастером создания скриптов:
http://forum.oszone.net/post-1078220-114.html
kotkovets
29-09-2010, 12:52
MKN, просил же... :)
$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $R0, $R1, $R2, $R3, $R4, $R5, $R6, $R7, $R8, $R9 ? че за звери? :o
Это переменные , которые , не нужно обЪявлять!, для хранения каких либо значений, что очень удобно!
Если хотим объявить свою переменную, то пишем:
Var MKN
...
StrCpy $MKN "Справочник по NSIS" ;помещаем значение в переменную $MKN
MessageBox MB_OK "$MKN"
В справочнике, что я вам давал все это есть!
Читайте внимательно!
Это переменные , которые , не нужно обЪявлять! »
Если их не нужно объявлять, значит они уже кем то "объявлены" и что то означают ? Что ? Про это ни слова. Или совершенно не "по-русски" написано, что сразу и не поймёшь... Как ими пользоваться то и что они означают конкретно ?
Если хотим объявить свою переменную »
Или это "оно" и есть ?
kotkovets
29-09-2010, 14:23
Если их не нужно объявлять, значит они уже кем то "объявлены" и что то означают ? Что ? »
открываем ${NSISDIR}\Include\defines.nsh.
В этой папке хранятся заголовочные файлы - библиотеки(инклюиды)Как ими пользоваться то »
ну уж можно понять...если мы храним значение, то можно и сравнить, и вывести и изменить...
ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion" "ProgramFilesDir"
MessageBox MB_OK "$1"
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC