|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
.: NSIS - все вопросы :. часть 2.
|
Ветеран Сообщения: 1216 |
Профиль | Отправить PM | Цитировать
Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
------- Отправлено: 12:02, 09-12-2012 |
Пользователь Сообщения: 110
|
Профиль | Сайт | Отправить PM | Цитировать Цитата K.A.V.:
Спасибо еще раз. Возник вопрос по удалению папки установленной программы. Например, файлы устанавливаются в C:\Program Files (x86)\Aleo Software\Flash Intro and Banner Maker\ = $INSTDIR, по умолчанию. Для того, чтобы удалить папку [Aleo Software], приходится устанавливать (как написано в Руководстве) текущий рабочий каталог, являющийся родителем папки [Aleo Software], т.е. C:\Program Files (x86): А если я не знаю, куда пользователь захочет установить программу? Нужно будет извлекать пользовательский путь, отсекать каталог установки, оставляя путь к "родительской" папке и назначать как SetOutPath. Или я опять чего-то не учитываю (несу чушь)? |
|
Отправлено: 09:26, 03-06-2015 | #1651 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Kopejkin:
Так, например, удаление не сработает: Хотя если указать ключ /r то содержимое папки $TEMP\dir всё-равно будет очищено полностью Т.е. перед удалением какой-либо папки можете установить текущим каталогом левую папку, например временную папку $TEMP Цитата Kopejkin:
Ничего отсекать/отрезать не нужно от пути установки, выполняйте действия только с $INSTDIR и не придумывайте лишнего, по-крайней мере, так безопасней для личных файлов пользователя, вам потом спасибо не скажут за удаление файлов, не относящихся к программе, запомнят ваш ник и не будут потом ставить от вас репаки |
||
------- Отправлено: 10:00, 03-06-2015 | #1652 |
Пользователь Сообщения: 110
|
Профиль | Сайт | Отправить PM | Цитировать Цитата K.A.V.:
|
|
Отправлено: 21:05, 03-06-2015 | #1653 |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Kopejkin:
В голову пришла такая идея, можно реализовать опять же циклом такую штуку: проверяем, является ли каталог пустым, начиная с $INSTDIR, если пустой - удаляем и "поднимаемся вверх" по дереву папок, делая аналогичную проверку, если папка снова пустая - снова удаляем и ползём ещё выше разомни пальчики комбинациями ctrl+c и ctrl+v StrCpy $0 "$INSTDIR" ${While} $0 != "" ; если $0 = пустое значение, значит каталог либо с файлами, либо не существует ${DirState} "$0" $1 ; получаем статус директории (пустая/с файлами) ${If} $1 == "1" ; если с файлами, то обнуляем $0 и тем самым выходим из цикла ${OrIf} $1 == "-1"" ; или если папка не существует, то обнуляем $0 и тем самым выходим из цикла DetailPrint "папка '$0' с файлами или не существует => прекращаем проверку" StrCpy $0 "" ; обнуляем переменную с путём, чтобы завершить цикл ${ElseIf} $1 == 0 ; если папка пустая RMDir "$0" ; удаляем пустую папку DetailPrint "папка '$0' пустая => удаляем" ${GetParent} "$0" $0 ; получаем родителя папки, которую удалили, записываем значение в эту же переменную DetailPrint "следующая папка => '$0'" ${EndIf} ${EndWhile} |
|
------- Отправлено: 21:40, 03-06-2015 | #1654 |
Пользователь Сообщения: 110
|
Профиль | Сайт | Отправить PM | Цитировать Цитата K.A.V.:
Function .onVerifyInstDir Var /Global MyPath StrCpy $MyPath "$PROGRAMFILES\Aleo Software\Flash Intro and Banner Maker" StrLen $0 $MyPath StrCpy $0 $INSTDIR $0 StrCmp $0 $MyPath PathGood 0 Abort PathGood: FunctionEnd В итоге, страница выбора папки установки в инсталляторе была отключена И не затрется ничего. |
|
Отправлено: 22:27, 03-06-2015 | #1655 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Доброго времени всем! Прошу помощи - второй день только разбираю NSIS и столкнулся с, на мой взгляд, неразрешимой проблемой
Требуется в процессе работы инсталлятора создать ярлык на рабочем столе, который будет содержать следующую команду, к примеру: При этом часть: будет в виде переменной и может принимать разные значения (разные браузеры). Может есть какое-то решение? Вообще конечная цель - ярлык на рабочем столе, который будет открывать определенный URL с помощью конкретно указанного браузера, отличного от дефолтного. Может есть какой-то обходной путь? |
Отправлено: 21:42, 17-06-2015 | #1656 |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата WesternLight:
Приходите с прочитанным справочником, кидать вам код таких простых команд - не вижу смысла |
|
------- Отправлено: 05:01, 18-06-2015 | #1657 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Цитата K.A.V.:
Справочник по NSIS изучил в нужной для этого части в первую очередь (и сразу заметил некоторые неточности), много прочел в других источниках. Видимо, проблему придется описать подробнее. Мой код: Скрытый текст
; Define your application name !define APPNAME "Полезные ссылки" !define APPNAMEANDVERSION "Полезные ссылки 1.0" ; Main Install settings Name "${APPNAMEANDVERSION}" InstallDir "$PROGRAMFILES\Полезные ссылки" InstallDirRegKey HKLM "Software\${APPNAME}" "" OutFile "d:\Links\Полезные ссылки.exe" ; Modern interface settings !include "MUI.nsh" !include "LogicLib.nsh" !include "nsDialogs.nsh" !define MUI_WELCOMEPAGE_TITLE_3LINES !define MUI_ABORTWARNING !insertmacro MUI_PAGE_WELCOME Page custom fnCustomInit fnCustomDestroy !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES ; Set languages (first is default language) !insertmacro MUI_LANGUAGE "Russian" !insertmacro MUI_RESERVEFILE_LANGDLL Var Dialog Var Label1 Var Label2 Var Label3 Var Label4 Var Label5 Var Label6 Var RadioButton1 Var RadioButton2 Var RadioButton3 Var RadioButton4 Var RadioButton5 Var Browser Function fnCustomInit nsDialogs::Create 1018 Pop $Dialog ;Label 1 ${NSD_CreateLabel} 0 0 100% 15u "Выберите браузер, в котором будет открываться страница $\"Полезные ссылки$\":" Pop $Label1 ;RadioButton 1 ${NSD_CreateRadioButton} 0 20 100% 15u "В браузере по умолчанию (рекомендуется*)" Pop $RadioButton1 ;Если файл есть, то создаем RadioButton 2, иначе создаем надпись, что браузер не установлен IfFileExists "$PROGRAMFILES\Google\Chrome\Application\chrome.exe" 0 notcreate2 ${NSD_CreateRadioButton} 0 50 100% 15u "В Google Chrome" Pop $RadioButton2 Goto rb3 notcreate2: ${NSD_CreateLabel} 0 55 100% 15u " X Браузер Google Chrome не установлен" Pop $Label2 rb3: ;Если файл есть, то создаем RadioButton 3, иначе создаем надпись, что браузер не установлен IfFileExists "$PROGRAMFILES\Mozilla Firefox\firefox.exe" 0 notcreate3 ${NSD_CreateRadioButton} 0 80 100% 15u "В Mozilla Firefox" Pop $RadioButton3 Goto rb4 notcreate3: ${NSD_CreateLabel} 0 85 100% 15u " X Браузер Mozilla Firefox не установлен" Pop $Label3 rb4: ;Если файл есть, то создаем RadioButton 4, иначе создаем надпись, что браузер не установлен IfFileExists "$PROGRAMFILES\Opera\launcher.exe" 0 notcreate4 ${NSD_CreateRadioButton} 0 110 100% 15u "В Opera" Pop $RadioButton4 Goto rb5 notcreate4: ${NSD_CreateLabel} 0 115 100% 15u " X Браузер Opera не установлен" Pop $Label4 rb5: ;Если файл есть, то создаем RadioButton 5, иначе создаем надпись, что браузер не установлен IfFileExists "$PROGRAMFILES\Internet Explorer\iexplore.exe" 0 notcreate5 ${NSD_CreateRadioButton} 0 140 100% 15u "В Internet Explorer" Pop $RadioButton5 Goto rb6 notcreate5: ${NSD_CreateLabel} 0 145 100% 15u " X Браузер Internet Explorer не установлен" Pop $Label5 rb6: ${NSD_CreateLabel} 0 170 100% 35u "* Браузер, выбранный по умолчанию в системе. Пользователь в любой момент может его изменить и после этого страница может перестать открываться корректно. Если это произойдет, просто запустите программу установки еще раз и выберите нужный браузер." Pop $Label6 nsDialogs::Show FunctionEnd Function fnCustomDestroy ;Состояние RadioButton 1 ${NSD_GetState} $RadioButton1 $RadioButton1 ;Если файл есть, то получаем состояние RadioButton 2, иначе идем далее IfFileExists "$PROGRAMFILES\Google\Chrome\Application\chrome.exe" 0 +2 ${NSD_GetState} $RadioButton2 $RadioButton2 ;Если файл есть, то получаем состояние RadioButton 3, иначе идем далее IfFileExists "$PROGRAMFILES\Mozilla Firefox\firefox.exe" 0 +2 ${NSD_GetState} $RadioButton3 $RadioButton3 ;Если файл есть, то получаем состояние RadioButton 4, иначе идем далее IfFileExists "$PROGRAMFILES\Opera\launcher.exe" 0 +2 ${NSD_GetState} $RadioButton4 $RadioButton4 ;Если файл есть, то получаем состояние RadioButton 5, иначе идем далее IfFileExists "$PROGRAMFILES\Internet Explorer\iexplore.exe" 0 +2 ${NSD_GetState} $RadioButton5 $RadioButton5 IntCmp $RadioButton1 1 equal1 notequal1 equal1: StrCpy $Browser "" Goto End1 notequal1: IntCmp $RadioButton2 1 equal2 notequal2 equal2: StrCpy $Browser "$PROGRAMFILES\Google\Chrome\Application\chrome.exe" Goto End1 notequal2: End1: FunctionEnd Section "Полезные ссылки" Section1 ;Set Section properties SetOverwrite on ;Set Section Files and Shortcuts SetOutPath "$INSTDIR\" File "Links\fs.ico" ;Создание файлов SetShellVarContext all CreateShortCut "$DESKTOP\Полезные ссылки.lnk" "$Browser http://google.com" "" "$INSTDIR\fs.ico" "0" CreateDirectory "$SMPROGRAMS\Полезные ссылки" CreateShortCut "$SMPROGRAMS\Полезные ссылки\Полезные ссылки.lnk" "$Browser http://google.com" "" "$INSTDIR\fs.ico" 0 CreateShortCut "$SMPROGRAMS\Полезные ссылки\Uninstall.lnk" "$INSTDIR\uninstall.exe" SectionEnd Section -FinishSection WriteRegStr HKLM "Software\${APPNAME}" "" "$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "DisplayName" "${APPNAME}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" "UninstallString" "$INSTDIR\uninstall.exe" WriteUninstaller "$INSTDIR\uninstall.exe" SectionEnd ;Uninstall section Section Uninstall ;Remove from registry... DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" DeleteRegKey HKLM "SOFTWARE\${APPNAME}" ;Delete self Delete "$INSTDIR\uninstall.exe" ;Delete Shortcuts SetShellVarContext all Delete "$DESKTOP\Полезные ссылки.lnk" Delete "$SMPROGRAMS\Полезные ссылки\Полезные ссылки.lnk" Delete "$SMPROGRAMS\Полезные ссылки\Uninstall.lnk" ;Clean up Полезные ссылки Delete "$INSTDIR\Полезные ссылки.url" Delete "$INSTDIR\fs.ico" ;Remove remaining directories RMDir "$SMPROGRAMS\Полезные ссылки" RMDir "$INSTDIR\" SectionEnd ;On initialization Function .onInit !insertmacro MUI_LANGDLL_DISPLAY ;Предотвращает множественость запуска инсталлятора System::Call 'kernel32::CreateMutexA(i 0, i 0, t "$(^Name)") i .r1 ?e' Pop $R0 ${IfNot} $R0 == 0 MessageBox MB_OK|MB_ICONEXCLAMATION "Вы уже запустили установку $(^Name)! Проверьте открытые окна!" Abort ${EndIf} FunctionEnd ; eof Первый вопрос риторический - я читал ваш справочник? Отвечать не нужно. А второй вопрос, за которым я обратился к мудрости участников этого форума заключается в том, что команды выделенные жирным, при выборе пункта "В Google Chrome" не создают ярлык на рабочем столе, у которого в свойствах в поле объект будет присутствовать следующая строка (обратите внимание на кавычки): Мало того, что все команды попадают только в одни кавычки "" (я пробовал ставить дополнительные кавычки, экранируя их - не помогло), которые объединяют путь к исполняемому файлу с URL, так еще из URL удаляются двоеточие и слэши. Как следствие, такой ярлык не выполняет своего назначения - открыть указанную страницу в выбранном браузере, т.е. попросту не работает. Вот и прошу помощи... |
|
Отправлено: 17:32, 18-06-2015 | #1658 |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата WesternLight:
Цитата WesternLight:
Цитата WesternLight:
Ещё раз откройте описание команды CreateShortCut и прочтите её описание Цитата Справочник по NSIS:
Путь до папки ярлыка+его имя+расширение lnk 2-ой параметр Путь до файла, который существует на диске, к которому создаётся ярлык 3-тий параметр параметры запуска В вашем случае, адрес сайта - это параметр запуска CreateShortCut "$DESKTOP\Полезные ссылки.lnk" "$Browser" "http://google.com" "$INSTDIR\fs.ico" "0" Цитата WesternLight:
|
|||||
------- Отправлено: 18:00, 18-06-2015 | #1659 |
Новый участник Сообщения: 6
|
Профиль | Отправить PM | Цитировать Спасибо!!! Просто в вашем справочнике про создание ярлыка очень мало написано - там упоминаются параметры запуска, но нет примера использования... Не сообразил, что URL нужно передавать как параметр... Еще раз спасибо!
|
Отправлено: 19:10, 18-06-2015 | #1660 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 2 | dimadr | Наборы обновлений для Windows XP/2003/Windows 7 | 267 | 14-02-2020 08:25 | |
[архив].: NSIS - все вопросы :. | kotkovets | Автоматическая установка приложений | 3387 | 09-12-2012 11:56 | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 1 | jameszero | Наборы обновлений для Windows XP/2003/Windows 7 | 1491 | 22-07-2011 22:42 | |
Выбор|модернизация процессора .:[все вопросы]:. Часть I | Myxa | Выбор отдельных компонентов компьютера и конфигурации в целом | 1845 | 01-01-2011 19:18 | |
Вопросы по создателю инсталляций NSIS | MaxDELETE | Программное обеспечение Windows | 14 | 04-07-2007 10:01 |
|