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

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"

hb860
24-09-2010, 18:10
URL-файл перед повторным созданием удалять пробовали?

kotkovets
24-09-2010, 19:43
URL-файл перед повторным созданием удалять пробовали? »
hb860 я пробывал скриптом, и все также, если ручками удалить, то бывает спустя некоторое время обновится ссылка.
или сразу обновится ссылка после перезагрузки проводника...$RefreshShellicon не выручает.

hb860
24-09-2010, 23:21
А чем плох ОБЫЧНЫЙ ярлык?
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 года! зато узнал :)

MKN
25-09-2010, 11:40
Как в 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

MKN
26-09-2010, 09:46
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)

MKN
26-09-2010, 16:34
kotkovets,
Такой вопрос : Возможно ли реализовать при выборочной установке, гиперссылку на всплывающее или просто открывающееся новое окно с текстом-описанием выбранного компонента ?

Например, выбирая какой-нибудь компонент из секции установки, рядом с его описанием присутствует и фраза "Подробнее", являющееся своеобразной гиперссылкой, при клике на которой открывается окно с описанием этого выбранного компонента. И возможно ли в этом окне, кроме текстового описания, поместитть ещё и рисунок (рисунки) ?

Было бы очень полезно для визуализации выбора вариантов устанавливаемых Templates для DVD меню, скинов и многого другого,

Если такое не реально сделать средствами NSIS_а, то хотя бы реализовать открытие в отдельном окне (с заданными размерами) файла типа html или графического файла.

Вопрос 2 : Возможно ли реализовать выбор компонентов не с помощью галок чекбоксов, а с помощью стандартных кликабельных кнопок.
При нажатии на кнопку, чтобы менялся её цвет или на ней появлялся символ галки, свидетельствующий о выполнении ?
Или при нажатии на кнопку, сменялось одно изображение на другое, рядом находящееся с кнопкой, если не возможно это сделать на самой кнопке...
Типа, как это часто делают в AutоIT скриптах.

kotkovets
26-09-2010, 16:44
MKN, в предыдущем посте я вам дал ссылку к справочнику, там есть пример (на примере Оперы) при наведении курсора мышки читаем описание компонента.
Вопрос : Возможно ли реализовать выбор компонентов не с помощью галок чекбоксов, а с помощью стандартных кликабельных кнопок. »
Модуль nsDialogs:Создаем нестандартные страницы.
Если такое не реально сделать средствами NSIS_а, то хотя бы реализовать открытие в отдельном окне (с заданными размерами) файла типа html или графического файла. »
Не делал такое, но можно попробовать, через функцию .onSelChange
Как нибудь пробну реализовать... :)

MKN
26-09-2010, 17:00
при наведении курсора мышки читаем описание компонента. »
Это не оч. удобно, т.к нет фиксации. Стронул мышку и пропало описание... И как насчёт рисунков в описании ?

kotkovets
26-09-2010, 17:04
И как насчёт рисунков в описании ? »
Картинки-превьюшки для радиокнопок (http://forum.oszone.net/post-1343128-395.html)

MKN
26-09-2010, 17:11
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"

В справочнике, что я вам давал все это есть!
Читайте внимательно!

MKN
29-09-2010, 13:28
Это переменные , которые , не нужно обЪявлять! »
Если их не нужно объявлять, значит они уже кем то "объявлены" и что то означают ? Что ? Про это ни слова. Или совершенно не "по-русски" написано, что сразу и не поймёшь... Как ими пользоваться то и что они означают конкретно ?
Если хотим объявить свою переменную »
Или это "оно" и есть ?

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