|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
|
.: NSIS - все вопросы :. часть 2.
|
|
Ветеран Сообщения: 1216 |
![]() Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
|
------- Отправлено: 12:02, 09-12-2012 |
|
Пользователь Сообщения: 117
|
Профиль | Сайт | Отправить 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 |
|
Пользователь Сообщения: 117
|
Профиль | Сайт | Отправить 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 |
|
Пользователь Сообщения: 117
|
Профиль | Сайт | Отправить 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 | |
|