|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » [архив].: NSIS - все вопросы :. |
|
[архив].: NSIS - все вопросы :.
|
Ветеран Сообщения: 1216 |
|
|
Отправлено: 23:35, 17-06-2006 |
Новый участник Сообщения: 27
|
Профиль | Отправить PM | Цитировать Доброго времени суток!
Соблаговолите помочь советом "любителю". Познакомился со скриптами довольно давно (на примерах от Авторов NSIS), уже несколько лет иногда собираю то что сам себе и дочкам русифицирую и чем сам постоянно пользуюсь. Вопрос возник давно, но всё никак не мог нигде найти внятных объяснений. Сейчас много чего перечитал на Озоне, но пока тоже не нашел то что ищу: Интересует проверка при установке - не установлена-ли уже старая/более новая версия устанавливаемой программы. -Например оригинальный установщик NSIS перед установкой идёт в Реестр, проверяет, не стоит-ли более новая, или старая версия NSIS и предлагает переустановиться. -В оригинале скрипта makensis.nsi (в папке с примерами) всё вроде прописано. Пробую на той-же NSIS, - например стояла 2.15 , в разделе Uninstall реестра значится 2.15, пробую ставить их сборку 2.45 - она предупреждает, предлагает переустановиться. Проставляю номер версии в скрипте, всё упаковывается, но новый мой инсталлятор ничего не проверяет и молча всё перезаписывает... И корневую папку и Реестр. -Ткните, пожалуйста носом что делаю не так? -А если ещё подскажете возможно-ли прописывать в деинсталлятор команду принудительно убивать деинсталлируемую программу (если она запущена) - вообще мне мёд будет :-) Стараюсь НАНОСИТЬ добро... и ПРИЧИНЯТЬ пользу... |
Отправлено: 14:09, 20-05-2011 | #1191 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Пользователь Сообщения: 89
|
Профиль | Отправить PM | Цитировать Чаще всего следует читать в реестре номер версии
Или прочесть из INI файла Если исполняемый или DLL файл содержит номер версии ;Ваше определения! !define VERSION 5.5.5.0 # версия. В скрипте будет выглялеть вот так ${VERSION} !define APP_NAME "программа" # Имя программы. В скрипте будет выглялеть вот так ${APP_NAME} ;----------------! GetDllVersion "$INSTDIR\XXX.exe" $R0 $R1 IntOp $R2 $R0 / 0x00010000 IntOp $R3 $R0 & 0x0000FFFF IntOp $R4 $R1 / 0x00010000 IntOp $R5 $R1 & 0x0000FFFF StrCpy $R1 "$R2.$R3.$R4.$R5" ; в $R1 - будет инфо о версии! ; дальше можно выполнить код с использованием $R1 , пример ниже IfFileExists "$INSTDIR\XXX.exe" 0 +3 MessageBox MB_YESNO|MB_ICONEXCLAMATION "У вас уже установлена программа - ${APP_NAME} ${VERSION} \ $\nВы хотите удалить предыдущую версию ${APP_NAME} $R1" IDNO +3 IfFileExists "$INSTDIR\unins000.exe" 0 +3 ExecWait '"$INSTDIR\unins000.exe" /S _?=$INSTDIR' # удаление старой версии для InnoSetup инсталлятора! GoTo noNext ; Ваш дальнейший код! noNext: Чтобы убить файл или процесс, следует подходить творчески, прежде всего надо узнать какая сволочь его держит и потом выбрать решение. Лучше всего узнать класс и придушить его, но для этого нужен отдельный софт Пример, как по хамски придушить ReserveFile "${NSISDIR}\Plugins\KillProcDLL.dll" ;----------------! KillProcDLL::KillProc "explorer.exe" ; только в крайнем случае! ;Ваше определения! !define Unclose_1 "XXX.exe" ;- имя запущенного процесса! ;----------------! ReserveFile "${NSISDIR}\Plugins\KillProc.dll" ;----------------! return_1: StrCpy $0 "${Unclose_1}" KillProc::FindProcesses StrCmp $1 "-1" wooops_1 StrCmp $0 "0" completed_1 Sleep 1500 MessageBox MB_ICONQUESTION|MB_YESNOCANCEL "У Вас в Трее всё ещё запущен ${Unclose_1} $\nЗавершить этот процесс сейчас?" IDYES +4 IDCANCEL +2 MessageBox MB_ICONINFORMATION|MB_OKCANCEL "Для продолжения деинстоляции следует выбрать 'Да'" IDOK +2 Abort Goto return_1 StrCpy $0 "${Unclose_1}" KillProc::KillProcesses StrCmp $1 "-1" wooops_1 Goto completed_1 wooops_1: Abort completed_1: |
Отправлено: 16:13, 20-05-2011 | #1192 |
Новый участник Сообщения: 27
|
Профиль | Отправить PM | Цитировать sawe
Признателен за ответ Я не программист, поэтому пока стараюсь переварить и попробую на скрипте NSIS С Вашего позволения если что не допру письну в ПМ ? |
Отправлено: 20:30, 21-05-2011 | #1193 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать Уважаемый kotkovets,
Воспользовался вашими рекомендациями по созданию генератора ответов. Собрал сборку. Проблема вот в чем: Формирую такой файл ответов: [DIRECTORY] ISTALLDIR=E:\Program Files\JetAudio [Sections] StartMenu=1 Desktop=1 QuickLaunch=1 AU=1 AMS=1 AMF=1 AIF=1 AIFF=1 AAC=1 AC3=1 APE=1 DTS=1 DMF=1 DBM=1 FLAC=1 F4A=1 FAR=1 IT=1 IMS=1 KAR=1 M4A=1 M4B=1 M4R=1 MID=1 MIDI=1 MKA=1 MP+=1 MP2=1 MP3=1 MPC=1 MPP=1 MTM=1 MT2=1 MOD=1 MED=1 MDL=1 M3U=1 M3U8=1 OFR=1 OFS=1 OGA=1 OGG=1 OKT=1 PLS=1 RA=1 PTM=1 RMI=1 SPX=1 SND=1 S3M=1 TAK=1 TTA=1 UMX=1 ULT=1 W64=1 WAV=1 WMA=1 WV=1 XM=1 669=1 Context=1 Программу ставлю в тихом режиме /S Сама программа ставится нормально. Секции : StartMenu=1 Desktop=1 QuickLaunch=1 нормально отрабатывают, а вот файловые ассоциации не производятся. Хотя в ручном режиме проблем нет. Секции для типов файлов однотипные : Section "MP3" MP3 SectionIn 2 3 4 ${GetSecWriteSucces} MP3 ${If} $SUCCES_SECTION = 1 WriteRegStr HKCU "Software\Classes\.MP3" "" "jetAudio.ASSOC.Audio" ${EndIf} SectionEnd Для ярлыков примерно также, но работает. В чем дело не пойму... Section "Ярлык на Рабочем столе" Desktop SectionIn 1 2 3 4 ${GetSecWriteSucces} Desktop ${If} $SUCCES_SECTION = 1 SetOutPath "$INSTDIR" CreateShortCut "$Desktop\JetAudio.lnk" "$INSTDIR\JetAudio.exe" ${EndIf} SectionEnd Может подскажите в чем может быть дело? |
------- Последний раз редактировалось wolkow70, 24-05-2011 в 12:27. Отправлено: 12:06, 24-05-2011 | #1194 |
Ветеран Сообщения: 1216
|
Профиль | Отправить PM | Цитировать Попробуйте так, если сообщение появится, значит секция отрабатывает, либо проблема в
SectionIn 2 3 4 - вероятно получается по умолчанию не отмечена секция, т.е расставьте флаги так, что бы эта секция была по умолчанию отмечена. Цитата wolkow70:
|
|
------- Отправлено: 12:53, 24-05-2011 | #1195 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать Нет, сообщение не появлялось, зато появлялись сообщения из работающих секций ярлыков. Отсюда вывод: проблема была во флагах.
Попробовал везде выставить 1 2 3 4, и все нормально заработало. Не понятно почему флаги на это влияют, ведь файл ответов я создаю в ручную, и сам выставляю галочки в чекбоксах? Можно ли в тихом режиме подавить значение этих флагов, потому, что я хочу по умолчанию, наоборот, без ассоциаций? И еще проблема, во время создания файла ответов, идет распаковка файлов в директорию. Можно ли сделать только эмуляцию? |
------- Отправлено: 14:24, 24-05-2011 | #1196 |
Ветеран Сообщения: 1216
|
Профиль | Отправить PM | Цитировать Цитата wolkow70:
Отсюда вывод: принудительно в тихом режиме, командами устанавливать все секции в отмеченное состояние - далее читается файл конфигурации и от его ответов зависит, что ставить, а что нет. Цитата wolkow70:
|
||
------- Отправлено: 15:46, 24-05-2011 | #1197 |
Пользователь Сообщения: 58
|
Профиль | Отправить PM | Цитировать здраствуйте.
Нужна опять ваша помощь Интересует страница лицензии. используеться !insertmacro MUI_PAGE_LICENSE "nsis/license.txt" Воопрос собственно в чем. сейчас дя создания страницы лицензии файл license.txt должен уже существовать локально, до процесса компиляции. мне же требуется что бы строка была типа такой !insertmacro MUI_PAGE_LICENSE "$PLUGINSDIR/license.txt" или !insertmacro MUI_PAGE_LICENSE "$TEMP/license.txt" Те что бы файл лицензии подтягивался уже на стороне пользователя. На сколько это реально осуществить? PS сам спросил сам отвечу, вдруг кому надо будет. есть плагин который это позволяет сделать http://nsis.sourceforge.net/CustomLicense_plug-in в ветке обсуждения плагина также приводят пример http://nsis.sourceforge.net/External_License_file Работают оба варианта. |
Последний раз редактировалось yyv, 24-05-2011 в 16:32. Отправлено: 15:55, 24-05-2011 | #1198 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать Понял, что моя ошибка заключалась в том, что я по умолчанию поставил "минимальный" тип установки. Переделал на "полный" тип, и все с ассоциациями наладилось.
Цитата kotkovets:
Section "!${PRODUCT_NAME}" Install SectionIn 1 2 3 4 RO ${If} $GMODE = 0 ${AndIf} ${Silent} ${AndIf} ${FileExists} "$INIFILE" ClearErrors ReadINIStr "$R0" "$INIFILE" "DIRECTORY" "ISTALLDIR" ${WordReplace} $R0 "%programfiles%" "$PROGRAMFILES" "+" $R1 ${WordReplace} $R1 "%windir%" "$WINDIR" "+" $R0 ${WordReplace} $R0 "%appdata%" "$APPDATA" "+" $R1 ${WordReplace} $R1 "%systemdrive%" "$SysDrive" "+" $R0 StrCpy $INSTDIR $R0 ${EndIf} SetOutPath "$INSTDIR" File "${pkgdir}\JetAudio\_fileext.dll" File "${pkgdir}\JetAudio\_fileext.RUS" File "${pkgdir}\JetAudio\_fileext2.dll" и далее как всегда... |
|
------- Отправлено: 17:21, 24-05-2011 | #1199 |
Ветеран Сообщения: 3206
|
Профиль | Отправить PM | Цитировать kotkovets
В общем, что получается?.. Выполняются все комманды в секции "!${PRODUCT_NAME}" после ${EndIf} и до конца секции, в том числе: 1. Копируются файлы; 2. Регистрируются dll; 3. Вносятся записи в реестр... Посмотрел в скрипте AIMP, там так: StrCpy $INSTDIR $R0 NotSilent: SetOutPath "$INSTDIR\" то есть у них вместо EndIf используется NotSilent: Но при этом у них макрос несколько иной... |
------- Отправлено: 19:44, 24-05-2011 | #1200 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Мультимедиа - WinAmp .:[ обсуждение всех версий ]:. | ssaram | Программное обеспечение Windows | 406 | 12-02-2022 19:45 | |
WinstyleMonitor .:[все вопросы]:. | Mr dUSHA | Проект WinStyle | 331 | 12-02-2014 13:15 | |
Delphi - Delphi .: [все вопросы] :. | Serega | Программирование и базы данных | 94 | 04-05-2013 18:45 | |
Доступ - Никак не удаляются файлы (AVI и все остальные форматы) .:[все вопросы]:. | Microsoft Windows 2000/XP | 105 | 30-06-2010 11:58 | ||
Вопросы по создателю инсталляций NSIS | MaxDELETE | Программное обеспечение Windows | 14 | 04-07-2007 10:01 |
|