![]() |
[архив].: NSIS - все вопросы :.
|
desperate
Извиняюсь, а чем Inno не устраивает? |
boss911
ответ прост - Inno я вообще в глаза не видел(саму прогу для сборки инсталяторов) |
desperate
Компилятор - Inno Setup + русификатор Дополнительная программа для удобного редактирования скрипта Inno - ISTool |
boss911
Inno Setup убился после установки руссификатора на него.... где можно взять русский help??? |
|
boss911
мне все же хотелось бы узнать про NSIS больше |
desperate
Я могу помочь. Было бы чем. Поставь задачу себе, а я тебе помогу ее выполнить. Надо решить для себя какой режим инсталятора использовать. В данном случае лучше конечно использовать стандартный а не MUI-интерфейс, экономия нескольких килобайт. |
kirillkr
у меня есть задача... ПРЕПАКОВАТЬ ВИНАМП, сделать его, как говориться под себя, добавить руссификатор сразу и по умолчанию, и чтобы при установке была ассоциация с файлами. Да и вообще, а его примере разобраться как работать с NSIS |
desperate
А почему именно NSIS? Если особых навыков нет можно начать с какого нибудь простенького инсталятора, например VSIC (http://www.vsic-online.com/eng/index.htm) -для русских бесплатно. Делов-то 5 сек. Добавить в проект папку с файлами и рег файлик. Тихо ставится с ключом /s. |
vek
делов то, а как ты предлагаешь с него винамп ставить??? |
desperate
Цитата:
Чем он мне ненравитса, так ето его скриптовый язык (для меня сложно и не понятно) , да из nsis'а (инсталятора) невозможно вытащить скрипт для последующиго его редактирования под свои нужды и он не очень гибок с ключами для автоустановок, нельзя указать тот или инной компонент, задачу и ярлыки, которые ты хочеш\нехочеш ставить!! Начни сперва с чего-то простого (прадва Inno я не считаю уж таким простым, если не вникать в паскаль), а потом глядиш и научишся создавать свои msi'ашки!! :) |
boss911
спасибо за совет Pascal, я знаю с 7 класса... все - таки меня интересует NSIS и где взять скрипт, с помощью которого собирался инсталятор winampa (интересует меня именно то, что откуда и куда добавляеться, прописываеться и инсталируеться) |
desperate
Цитата:
Цитата:
|
Цитата:
Для тех, кто знает Паскаль, лучше пользоваться Inno. Я вот Паскаль не перевариваю, поэтому использую NSIS, если каких-либо возможностей в нем не хватает - можно за 5 минут написать плагин на C++ - не намного сложнее, чем написать код на Паскаль для Inno. |
vampik
Цитата:
|
Вот примеры моих простеньких плагинов, которые мне понадобились при создании некоторых инсталляшек, с исходниками (под VS 2003) -
http://vampik.net.ru/files/time.7z http://vampik.net.ru/files/proc.7z http://vampik.net.ru/files/cpu.7z И таких при необходимости можно настрочить десятками. В принципе, отдельные функции из библиотек можно вызывать и стандартными средствами, часто используемый пример - Код:
System::Call 'shell32::SHChangeNotify(i 0x08000000, i 0, i 0, i 0) v' A LogicLib.nsh позволяет писать NSIS-скрипты с использованием конструкций типа if...else, switch...case...endswitch, select...case...endselect, операторов do, while, for. Скрипт для Winamp у меня для себя есть, но пока очень простой - только установка всех файлов, кроме Winamp Agent, запись данных в реестр, подхватывание серийника из ini-файла и ярлыки в меню "Пуск". Никаких ассоциаций файлов, параметров и т.п. |
vampik
спасибо за идею...буду браться и клепать на С++ плагины для NSIS... потому что с самим инсталятором, чую никто не поможет |
desperate
Цитата:
|
desperate
А смысл перепаковать. Вообще хороший скрипт идет с самим NSIS'ом. Если бы знать, что делает WinAmp при установке, то и скрипт можно с нуля написать, но я им не пользуюсь. |
Если честно то некоторые здесь задолбали со своим Inno!!!
Вопрос остался открытым - скрипт для перепаковки Winamp нужен или софтина какая вытаскивающая сей скрипт из дистриба. Софта я пока такого не нашел. Есть идеи - пишите. |
coderman
Цитата:
|
Вопрос... Возможно при автоматической установки выбирать компоненты? в NSIS...
Или как ниудь отредактировать ехе сделаный в nsis? |
Lesder2, нужна конкретная задача, какую программу, версию и т.д.
|
unikum111, Вот например Регет поменял свой инсталятор на NSIS... Теперь настройки его хранятся в ini файлах которые при запуске распаковываются... Я бы хотел как нибудь их изменить... Просто что менять я знаю... как распаковыть тоже =)... А вот как редактить... ну или хотябы запаковать после распаковки... незнаю..
|
Lesder2, расскажи
Цитата:
Собрал инсталлятор для Strong DC++ 2.11, прокомментировал и выложил скрипт сюда: |
Master of Magic
7zip\м расспаковывается =)))) Но скрипта нету =( |
7zip и плагином в тотал командаре, это я и сам знаю, скриптик нужен...
Кстати, что 7zip, что плагин в Total-е только частично поддерживают распаковку NSIS |
Master of Magic, Следующий код:
Код:
File data\changelog-dc.txt Код:
File /r "data\*.*" |
В принципе монжо и так :)
|
HM NIS EDIT: A Free NSIS Editor/IDE
Неплохой инструмент в помощь "начинающему писателю" скриптов NSIS На сайте программы есть также конвертер инносетапа в нсис(если оно надо кому-то, в чём лично я сомневаюсь) Русский язык включен. Сайт программы |
hb860, Тогда уж лучше EclipseNSIS.
|
Никто так и не ответил на вопрос: возможно ли вытащить скрипт из инсталлятора? Я склоняюсь к отрицательному ответу...
|
unikum111, Нельзя. Можно только скомпилированный скрипт вытащить и прочитать буквально крупицы исходника - например текстовую информацию, но восстановить первоначальный исходник невозможно.
|
simplix, я так и понял, восстановить можно только по снимкам системы (файловой системы + реестра).
|
unikum111, Именно, можно накатать собственно ручно скрипт, который будет делать тоже самое. Надо просто знать что делает оригинал(всего-то :-))
|
Можно ли как в командой строке запретить запуск приложения и посещение сайта программы (например при установке последней врсии ReGet Personal)?
|
Если я правильно понял вопрос, то многоуважаемый (мной, по крайней мере) SamLab имеет ввиду, нет ли у NSIS какого-либо ключа, способного подавить указанные в посте действия. Изначально - нет, но в NSIS существует возможность расширять коммандные ключи исталятора,например, setup.exe /S /Bla /bla2=1.
Эти расширения задаются в процессе написания скрипта, и если создатель инсталлятора ReGet Personal заложил такую возможность, то теоретически она есть, но лично мне она не известна. |
Цитата:
Код:
${RefreshShellIcons} Цитата:
|
Цитата:
Перед собственно запуском инсталлятора копируем в c:\Program Files\ReGet Software\ReGet Deluxe\ файл defaultlang.dll после чего запускаем установки и окно IE не открывается. |
boss911, а как создавать .MSI файлы?
Вот несколько довольно простых инсталляторов: - Inno Setup Inno Setup (далее IS) обладает скриптовой логикой, но снабжен мастером создания скриптов. Обладает неограниченными возможностями. - CreateInstall CreateInstall (далее CI) - простой инсталлятор для начинающих. Free-версия бесплатна В IS создавать Setup труднее. Но, они более сложные! В CI все просто. Советую начать с CI! |
Подскажите пожалуйста по поводу ключа для тихой установки программ созданных с помощью инсталятора NSIS!
Конкретно интересует Maxthon 2.09. Дело в том, что предыдущие версии Maxthon 2, упакованные NSIS, запускались тихо с ключом /S. А версия 2.09 не хочет. Хотя тоже упакована NSIS. В чём может быть проблема? Заранее спасибо! |
Цитата:
/Silent пробовал ? |
hb860, нет, если открыть, то пишет ## NullSoft Installer ##
Как быть? |
Дай-ка ссылку
Гляну на досуге |
hb860, держи, это новый, но такая же ерунда получается.
http://maxthon.cachefly.net/mx_2.1.0.1595.exe |
МИШАНЧИК, NSIS
Зачем то прижали тихую установку, непонятно, зачем. Наверно надо перепаковывать или использовать AutoIt P.S. Помоему мы тут флудим. |
Всем привет. Подскажите, как можно с помощью данного установщика провести такое:
1. необходимо распаковать архив, запустить там ехе с параметром, потом установочные файлы удалить (настройка впн соединения) дождаться когда завершиться и перейти дальше 2. распаковать программу и запустить настройщик (strongDC) возможно еще 1 программу распаковать необходимо будет |
Бррр
Как всё сложно 1. Код:
|
hb860, по второму пункту,
надо скопировать содержимое в папку (к примеру в c:/strongDC) и запустить от туда софтинку (c:/strongDC/setting/editor.exe) после этого создать пару ярлычков на раб столе и линков на вебсайты и закрыть инсталятор |
Хорошо
Продолжение того что я там понаписал Код:
SetOutPath "c:\strongDC\" |
Цитата:
Кто-нибудь знает как это сделать? |
Я могу попробовать помочь
Так исторически сложилось что я никогда не пользовался Strong DC++, поэтому место расположения Цитата:
Если они находятся в PROGRAM FILES\STRONGDC++, то меняешь Код:
RmDir /rebootok "$INSTDIR" Код:
RmDir /r "$INSTDIR" Попробуй |
Цитата:
|
Цитата:
Код:
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\StrongDC" "SetupDir" "$INSTDIR" Код:
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\StrongDC" "SetupDir" Долбим так(без перезагрузки): Код:
RmDir "$0" Код:
MessageBox MB_YESNO "Удалять всё остальное?" IDYES true IDNO next |
Подскажите пожалуйста!
Можно ли как-то вскрывать инсталяторы NSIS? Примерно как с инсталяторами Inno, чтоб извлекался файл конфигурации и компоненты. Если да, то как? Заранее спасибо. |
Сто раз уже обсуждалось. Никак нельзя
Можно распаковать 7-zip'ом, вытащить все файлы Дальше придется писать свой скрипт |
hb860, Почему это? Может стоит попробывать Universal Extractor? Или он не позволяет?
|
Цитата:
Локализация такая, что я лежал под столом Получил .NSI файл. В нем написан бред, и он не копилится(декомпилировал им свою сборку Winrar). На оригинал НИКАКИМ местом не похоже. А то что он распаковал инсталятор, так Цитата:
|
Теперь понятно, спасибо. Я просто не имел пока дела с NSIS.
|
|
Скрипты с комментариями. Всё проверено. Раз для автоустановки форум-то без вопросов всё ставится с ключом /S.
Скоро еще выложу... |
Цитата:
|
Цитата:
Кстати, форум проповедует принцип одна тема- одна программа. Если вываливание скриптов допустимо в данном топике оптом, то я за обеими руками! |
Цитата:
Цитата:
значит и все, с ним связаное. верно? В том числе и скрипты. И нет причин создавать новую тему. :yes: Цитата:
|
Вложений: 1
Что-ж, раз на то пошло дело, выкладываю свою коллекцию скриптов
Код:
Artweaver.nsi - оно и есть И ещё, некторые скрипты содержат ошибки, строго не пинать, нахожу - исправляю. Они не критичные. Текст в инсталере фара содержит не мою функцию StrLoc, однако в коментах ничего нет, взято с вики нсиса, иметь ввиду первоисточник при копировании. Другие мои скрипты, не представленные здесь, можно найти в соответсвующих программам топиках. Если есть вопросы - пишите. |
hb860, скрипты продолжаем выкладывать? ;)
|
пока ничё стоящего :)
|
hb860, спасибо за то, что указали на редактор скриптов "HM NIS Edit 2.0.3" (я имею ввиду текст комментария в коде скрипта :) )
Вот я выложу скрипт для установки XPTweaker-а: |
Котяра, я им только пару раз пользовался, если честно. Я щас пишу всё в Notepad++. Отличная штука. А константры из скрипта в скрипт копирую просто каждый раз и коментариии не убираю.
|
Цитата:
|
Котяра, пригодится скрипт))
hb860, секции exclude как сделать? взаимоисключения. |
эээ, всмысле ? поподробней ПЛЗ
Мой новый скрипт, кстати http://forum.oszone.net/thread-120962.html Хороший пример работы с XML файлами |
вот еще скрипт DC++ (более продвинутый)
два бота закомментированы-с ними еще не разобрался просто. |
Скрипт установки "Средства удаления вредоносных программ" (это такой антивирусный сканер от Microsoft):
Деинсталлятор отключен, устанавливается файл "mrt.exe" в папку "system32". |
Цитата:
P.S. Котяра, тебе говоришь тоже полезно это узнать ? Смотри там же :) c:\Program Files\NSIS\Examples\one-section.nsi |
Цитата:
|
Вложений: 1
Скрипт для упаковки KM Player. Не идеален, но работает. Проблемы: при открытии файла не начинает воспроизведение (необходимо нажать Play), на некоторых файлах спрашивает, с помощью какой программы открыть. Буду рад помощи в доработке. В аттаче, т.к. сообщение слишком большое.
|
Комсомолец, Зачем убрал
Код:
Вот это бред: Код:
|
|
|
Цитата:
|
Мой новый скрип для перепаковки GOM Player
http://forum.oszone.net/thread-122263.html |
не могу удалить с помощью uninstall.exe c рабочего стола и с меню "Пуск" ярлыки
делаю так: Delete "$DESKTOP\ХХХХХ.lnk" Delete "$SMPROGRAMS\ХХХХ\ХХХХХ.lnk" делаю все под админом, а оно не удаляется |
bobick, попробуй так:
Код:
SetShellVarContext Current Код:
SetShellVarContext all |
hb860, большое спасибо - заработало
|
подскажите кто нибудь, как можно проверить наличие определенной ветки реестра с помощью ф-й NSIS
|
Вот так:
Код:
ReadRegStr $0 HKLM "Software\MyProgram" "SetupPath" Код:
ReadRegStr $0 HKLM "Software\MyProgram" "" |
Хоть бы раз "Полезное сообщение" ткнул...ммм.. ну да ладно.
Вот такой вот скрипт ставит оперу 10 альфа на русском тихо с ключом /S Код:
; HM NIS Edit Wizard helper defines |
А вот с такой проблемой при инсталляции кто - нибудь сталкивался?
Собственно сама проблема, но сначала постановка. 1. Мне надо что то инсталлировать, допустим один файл приложение и конфигурационный файлик; 2. Но этот конфигурационный файлик может быть различным, а в зависимости от него приложение будет выглядеть по разному или делать по разному, не суть важна, важно другое - при инсталляции можно выбирать. Как это делать примеров много. 3. Мне же надо во время инсталляции прочитать другой файлик (почему другой - вопрос требует обстоятельного ответа, если нужно - могу описать) и в зависимости от того что там есть - подкорректировать диалог для выбора компонент, во время инсталляции, что то скрыть, чек боксы по другому активировать, много чего можно придумать. Так вот сама проблема, для самодеятельных диалогов вроде это можно сделать: при инициализации скрипта писать в ИНИ с описанием диалога - а как это сделать для МУИ приложения? Кто нибудь знает? Оказалось всё очень просто, надо было лишь более или менее внимательно мануал почитать. Обьясняю: Есть такие две функции - SectionSetFlags / SectionGetFlags . Они то как раз и позволяют делать то что требуется. Там правда какая - то мутота с номерами секций - хотел свои имена - ну и начались, то синтаксические ошибки, то логические. Но со стандартными именами SEC01, SEC02,... проходит всё на ура. Если будет нужно - могу полный пример смастерить. |
|
Здравсвуйте, господа.
Есть скринсэйвер Dream Aquarium 1.07, запакованный NSIS. Установка автоматом проходит с ключом /s, однако потом появляются 3 окошка: 1. Запустить Dream Aquarium 1.07? 2. Добавить иконку на рабочий стол? 3. Сделать скрином по умолчанию? Мне нужно ответить: 1. Нет 2. Нет 3. Да Вопрос: как это сделать в автомате, чтобы окна не появлялись? Спасибо. |
Вам надо написать скрипт AutoIT
Подробнее тут: http://forum.oszone.net/thread-98914.html |
Вот тут лежит перевод справки для NSIS ,немного кривой правда . Все же лучше чем ничего.
|
katok888, переложи на ifolder, плиз. я с локалки.
|
Комсомолец, возьми, я положил на Ifolder
|
Цитата:
daqua.cmd 1. daqua.exe /verysilent 2. DEL иконку с рабочего стола жмешь все в 7zSFX с запуском daqua.cmd при распаковке. Я так сделал инстал Daqua для автоматической установки, и запускаю в SVCPACK (вроде так, но уже не помню) вобщем на готовый, если интересно разберешься, если нет, просто будешь использовать... http://depositfiles.com/files/5tte3ps7p Про NSYS Я бы поубивал тех кто его написал, у него ключи кроме /S и /D еще есть стандартные? Или только т которые добавляет создатель архива? Тогда как их узнать? Мне нужна установка приложения VERYSILENT NORESTART, чтобы он вообще не показывался, а /S всеравно выдает пару окон и просит нажать ОК. |
Есть ли у кого скрипт для утановки кодеков (особенно интересует ffdshow) или может программа которая из готового установщика сможет выдрать хотя бы часть скрипта?
|
А чем K-Lite не подходит? Создайте ini файл с необходимыми настройками, укажите что именно вы хотите установить и устанавливайте в тихую с уже заданными настройками.
Или это принципиально? |
Цитата:
SamLab, Код:
Строка : Output directory: C:\Program Files\ffdshow |
sibbear, В чем и дело - в K-Lite куча ненужного, а нужного нет!
hb860, НЕ думал что так все просто - я думал идет регистрация не одного ffdshow.ax и прописываются значения в реестр |
SamLab, ну я регмон не стал гонять... при желании можно, конечно, и его натравить на инсталятор, но я думаю это лишнее
|
SamLab, ну уж ffdshow там в полном комплекте:-)
|
Цитата:
|
Подскажите ключ для тихой инсталляции, запаковано Install System v2.28
|
VoodooHaker, если имеется ввиду NULLSOFT SCRIPT Install System v2.28, то попробуйте
Приложение.ехе /S /S - обязательно большая |
hb860 я пробовал не хочет с этим ключом
Файл Ключей так и не нашел, решил свою задачу с помощью AutoIT |
дело в том, что в данном случае нсис выполняет роль простого архиватора(дикость какая-то). Он распаковывает программу установки софта для модема во временную папку и оттуда запускает setup.exe.
А его ключей я не могу лично найти. Надо обратититься к производителю софта на форум |
для setup.exe, который получается после распаковки инсталлятора nsis есть такие ключи
Код:
-skip_copy -targetdir -msi_mode -s -quiet проверил и на оригинальном файле Starcom_UM150.exe ключ -quiet тоже работает и ключ -s работает (проверял c маленькой s :) ) |
ZaV
Итак после запуска файла Starcom_UM150.exe он распаковывает свое содержимое в папку темп, создает свою папку DGPX600 в которой содержится исполняющий setup.exe и для 64 битной винды файл Setup64.exe теперь пробую применить ключи, который вы выше привели. Файл вроде бы хавает этот ключ но никакой инсталляции не происходит, пуск>выполнить> "x:\DGPX600\setup.exe" /quiet после нажатия "Ок" больше ничего не просходит подскажите где я неправильно пишу) |
VoodooHaker, обсуждайте установку этой программе в специацьной теме, пожалуйста
http://forum.oszone.net/thread-131163.html Текущая тема предназначена для решения общих вопросов по инсталятору NSIS, а не какой-либо конкретной программы. |
Всем привет! тут такой вопрос: как сделать так что бы во время установки пользователю предоставлялся выбор создавать иконку на рабочем столе или нет, и чтобы по умолчанию она была отключена, т.е. чтобы вовремя тихой установки она не создавалась ??
что и где надо добавить или исправить?? ; Shortcuts SetShellVarContext all !insertmacro MUI_STARTMENU_WRITE_BEGIN Application CreateDirectory "$SMPROGRAMS\$ICONS_GROUP" CreateShortCut "$SMPROGRAMS\$ICONS_GROUP\MyApp.lnk" "$INSTDIR\MyApp.exe" CreateShortCut "$DESKTOP\MyApp.lnk" "$INSTDIR\MyApp.exe" !insertmacro MUI_STARTMENU_WRITE_END SectionEnd Заранее всем спасибо !!! |
Кажется, так:
Код:
Section /o "Ярлыки в меню пуск" Далее, есть ещё такой вариант: Код:
Section "Ярлыки в меню пуск" |
Здравствуйте, решил посмотреть, что такое NSIS. Попытался скачать HM NIS EDIT, а у меня не получается. Попробовал с сайта, результат такой же.
Просьба, может кто-нибудь перезальёт? Интересует: HM NIS EDIT, утилита iss2nsi и было бы вообще шоколадно, если у кого-то, чисто случайно завалялся исходник HM NIS EDIT... |
|
Тема на руборде http://forum.ru-board.com/topic.cgi?...0595&start=740
|
katok888 спасибо, а утилы iss2nsi случайно нет?
|
Цитата:
|
Комсомолец, нормально она работает, просто кой-чё руками надо поправить после неё. Я помню Download master от Baw17 перегонял. Лишь некоторые строки поправил
|
hb860, может уточнишь что именно? я строк 20 скрипта правил по ее подсказкам-так и не добился ничего((
volk1234, спасибо за оформление темы и ссылки! Прикрепи, пожалуйста, и ISS2NSI в ссылки. |
вложение удалено.
|
Комсомолец, спасибо! скачал!
|
Комсомолец, что именно мне уточнить ?
|
hb860, как перегнать iss в nsi.
|
Цитата:
|
hb860, извините, но решил повторить ваше сообщение, переведя его на русский, насколько я понял:
Цитата:
|
hb860, Serega_, я это давно сделал. Но при попытке конвертировать скрипт всегда шибка. Причем даже устранение ошибки в ISS не помогает((
|
Комсомолец, прежде всего, так тяжело понять о чём речь...
Вы можете привести конкретный пример, а именно пример скрипта ISS и пример уже преобразованного скрипта в формат NSIS. Я думаю, так будет наглядней. |
Serega_, да забил я на это и удалил их уже. лучше дальше нсис буду юзать.
|
Комсомолец
Добавил, спасибо ! Даже такие есть конверторы... Надеюсь ничего, что с задержкой. |
volk1234, отлично то, что вообще за тему кто-то взялся! А остальное не так и важно)))
|
Всё не успокоюсь насчет The KMPlayer. Кто поможет с оптимизацией?
unregassoc.nsh во вложении Для ассоциациий взял пример с темы плеера на inno. Там sfx-архив рапаковывается в темп и добавляет записи в реестр (которые unregassoc.nsh как раз и удаляет). Архив во вложении (.exe форум не разрешает, поэтому упаковал). Начал переводить его в формат nsis, но пока нет времени продолжать. Мусору в скрипте достаточно. Буду рад помощи... |
Комсомолец, удали строку №65, она ни к чему
А ассоциации сдери из аимпа, там универсальная функция. Куда удобней чем файлики подключать Примерно так: Код:
;custom filetype registration function |
hb860, ок. посмотрю.
▬ Господа! Избегайе такого затратного использования постов! Можно же отписатся по результатам. Неужто комуто интересно будет читать 50 страниц постов - Я сейчас чай пью и тд ....Давайте боротся за форум высокой культуры слога! - Ваш volk1234 volk1234, вот и результат :) А вот и все в одном посте Комсомолец ! :) |
Доброго времени суток.
Подскажите, как прописать ключ в реестр такого вида: Код:
[HKEY_LOCAL_MACHINE\SOFTWARE\Компания\Прога] Код:
WriteRegStr HKLM "SOFTWARE\Компания\Прога" "Manual" "dword:00000001" [HKEY_LOCAL_MACHINE\SOFTWARE\Компания\Прога] "Manual"="forum.oszone.net" p.s на значения ключей не смотрите это просто для примера. |
Impeck,
Код:
WriteRegStr HKLM "SOFTWARE\Nullsoft\Winamp" "regname" "Name" |
Цитата:
Код:
WriteRegDWORD HKLM "SOFTWARE\Компания\Прога" "Manual" 00000001 Код:
WriteRegDWORD HKLM "SOFTWARE\Компания\Прога" "Manual" 1 |
Impeck, nullsoft=company. winamp=proga. manual=ключ. значение=как сам задашь. главное чтобы прога его поняла.
|
Комсомолец, ты сам то понял что ты ему ответил ?
Impeck, вот так прокатит: Код:
WriteRegDWORD HKLM "SOFTWARE\Компания\Прога" "Manual" 1 |
hb860, всё верно. разжевал предыдущее.
WriteRegStr HKLM "SOFTWARE\Nullsoft\Winamp" "regname" "Name" WriteRegStr HKLM "SOFTWARE\Nullsoft\Winamp" "regkey" "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" а уже как он все напишет-тут никто не помешает. |
Комсомолец, я так понял нажать спасибо в запад.., т.е. тяжело... Извините, если, что не так, т.е. за мою откровенность...
|
Спокойно, не ругаемся. Спасибки, даже для других, выпрашивать нехорошо :)
Вы посчитали ценным сообщение - поставили, другой человек не считает сообщение стоящего отметки. У всех разные критерии оценки.... |
Serega_,Полезного для себя ничего не увидел. Это раз. Нажатие полезного сообщения-дело добровольное. Это два.
|
Комсомолец и hb860 спасибо за ответ.
Возник другой вопрос... Нужна дополнительная страница на которой запрашивается имя пользователя, пользователь пишет User. После инсталляции всех файлов это имя пользователя (User) дописывается в опред. секцию [User_0] в ini файл. Код:
[User_0] |
Можно. Увы, я так ещё ни разу не делал. Но я работаю на этим вопросом! Я пишу новый скрипт для аимпа, там будет пара нестандартных страниц, которые будут делать примерно тоже самое.
Пока по теме могу написать вот что: 1. в ини файл писать так Код:
WriteINIStr "с:\мой_ини_файл.ini" Секция параметр значение C:\Program Files\NSIS\Docs\Modern UI 2\Readme.html А также, цитата оттуда(литературно переведено): Код:
Если вы хотите использовать нестандартные страницы в скрипте, вы можете напихать |
Всем доброго времени суток. Вопрос к тем кто давно работает с NSIS. есть вообще какойнить ман по самому языку? чистому без плагинов к нему?
Вот например две строчки !define MUI_FINISHPAGE_RUN "$INSTDIR\blabla.exe" !insertmacro MUI_PAGE_FINISH А если я хочу чтобы кроме запуска программы предлагалось ещё и риадми файл прочитать? MUI_FINISHPAGE_RUN - это константа языка или как? какую нагрузку несёт? Вот об этом всём где можно прочитать? или моя проблема в том что я до этого не пересекался со скриптовыми языками и чего-то принципиального не понимаю? |
hastur, справка по нему - лучший источник информации
Также советую полазить по его офф.сайту, там много полезных примеров Ну и на край полазить в файле "MUI.nsh" :) MUI_FINISHPAGE_RUN берется именно оттуда :) |
Всем привет!здесь прочёл всё, и есть вопросик-прога тихо ставится NSISом с ключом /S, но при обычной установке-предлагает установить ярлыки(надо отметить галочками) , а при тихой -ярлыков нет...есть ли добавка какая к тихому ключу в таких случаях?заранее благодарен...
|
Otop Ris, заранее можно указать ключи командной строки. если вы про это. Или ненужным ярлыкам приписываем if silent +3. Тогда они не ставятся при тихой установке.
|
Ясно, а если не сам собирал NSIS-установщик, а только знаю ключ тихого инсталла...по идее может быть добавка к ключу(пример?), если заложена изначально?
Или получается что корректировкой команд тихого инсталла для NSIS уже ничего не изменить для готового установщика? |
Otop Ris, посмотри тут пример указания ключей в скрипте. А стандартные в собранном инсталляторе уже не изменить.
|
Otop Ris, если автор скрипта заложил в скрипт обработку параметров командной строки - то такая возможность есть.
Если он этого не делал - то исталлер будет поддерживать только /S, /D, /NOCRC. И более того, даже эти ключи можно заставить работать не так как надо. Если сборка не ваша - надо спрашивать у автора, что умеет/не умеет его инсталятор. Цитата:
|
Огромное спасибо Всем, особенно за ссылки!!!
|
NSIS умеет выставлять права на папки? Ситуация такая:
под вистой в Program Files создается каталог и туда разворачивается некая сборка. В конце инсталляции появляется запрос с предложением запустить установленную программу. Если сказать "да", всё отлично отрабатывает, прога запускается и работает. До закрытия. Оказывается, виста распознает нсису и при отработке инсталлятора автоматом присваивает ему уровень привилегий admin (соответственно если прогу запустить из-под инсталлятора, то права унаследуются на одну сессию). Дальнейшие попытки запустить программу не из инсталлятора приводят к появлению дебильного для висты запроса "непонятная прога.. чо делать бум? запускать?" А всё потому, что у юзера нет прав на полноценную работу с этим каталогом. Хотелось бы научить nsis выставить полные права на папку для user. |
wcp, запросы на запуск программы зависят от того, что эта программа собирается делать. Инсталятор тут ни при чем, и согласно новой модели безопасности операционной системы, права на програмфайлс давать программе не рекомендуется. Скорее всего, Ваша программа пытается читать/писать какие то файлы в своей папке установке %programfiles%\programdir
Если уж очень хочется, надо выполнить: Код:
ExecWait "cmd.exe /c takeown /f $\"$INSTDIR$\" /r /d y && icacls $\"$INSTDIR$\" /grant %username%:F /t" |
hb860, спасибо!
|
Всем добрый вечер. Решил собрать себе диск необходимых программ, для работы, но вот проблема, попало в руки пару программ упакованых инсталлятором Nullsoft Install System. Новую тему решил не заводить, так как производитель вроде тот же, но ключи тихой установки не подходят. Перебрал все извесные мне ключи тихой установки, но увы...
![]() Если кого интересует ссылка на программу упакованую этим инсталятором, могу бросить в личку. Заранее благодарен. |
GenLaden, в этом исталяторе отключена тихая установка. Зачем - непонятно. Стандартный ключ /S в данном случае не работает. Надо либо перепаковывать, либо на AutoIT кнопки нажимать.
|
Товарищи, подскажите есть ли возможность запустить NSISовский uninstaller в тихом режиме? И какие ключи для этого использовать?
|
AlexThePeacemaker, так же с ключом /S.
Uninstall.exe /S |
|
Serega,
|
Habetdin, справку я прочитал. С WriteRegBin и WriteRegDWORD, в принципе понятно, но вот остальные ключи?
Повторюсь: Цитата:
|
Serega,
Мож и не стоит изобретать велосипед-то ? Reg2Nsis utility мои потребности, например, удовлетворяет. |
Цитата:
Извините, вопрос снят. |
Здравствуйте форумчане. Я только начал разбираться с программой дайте ответ на 2 вопроса
1, как запустить установленное приложения после установки. 2, как интегрировать файл реестровый файл когда идет установка Заранее спасибо |
onis, именно реестровый файл так:
Код:
ExecWait "regedit.exe /S $\"$OUTDIR\lines98.reg$\"" Чтобы запустить установленное приложение в конце установки, читаем справку: Цитата:
Вот оттуда код: Код:
!define MUI_FINISHPAGE_LINK "Visit the NSIS site for the latest news, FAQs and support" |
hb860, Большое спасибо
|
Порадую вас кодом проги Roof Builder
ее сайт www.roof-builder.ru Код:
/* |
Для Комсомольца, и всех остальных, кому интересно. Диск, на котором установлена винда, я определяю так:
Код:
Var SysDrive |
Доброго времени суток всем! Сделал инсталлятор на NSIS. Ставит несколько программ и создает/меняет некоторые ключи реестра.
Под ХР работает, а под вистой и семеркой не хочет ни в какую писать ключи реестра в раздел HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\ (контекстное меню Мой компьютера). Туда удобно ставить ссылки на некоторые программы, чтоб не мешались и одновременно были под рукой в нужный момент. Пробовал RequestExecutionLevel admin и highest, одновременно с указанием SetShellVarContext all в секциях установщика и анинсталла. Не помогает, независимо от способа запуска - ни просто так, ни от имени админа. Все файлы и остальные ключи записываются нормально, только в указанный раздел ничего не добавляется. Зато, если создать reg-файл с этими ключами и запускать его вручную после установки, то все добавляется. Но такой способ мне совсем не нравится. С таким же успехом можно обойтись и без установщика, копируя файлы вручную :-\ Помогите советом, как заставить мой инсталлятор правильно работать? |
nRoof, давай код скрипта поглядим. Хотя бы ту часть которая пишет в реестр.
|
Разобрался сегодня сам. Проблема была совсем не в правах доступа.
Моя ошибка была в том, что я не учел разрядность висты и 7, они у меня 64-битные. А у Windows x64 систем реестр делится на 64 и 32-разрядные разделы. Мониторинг процесса установки моего инсталлера ProcessMonitor'ом показал, что ключи все-таки добавляются, но не в HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\, а в HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell. Стало очевидно, что инсталлер обращается к 32-разрядным разделам вместо 64-разрядных. Поиск в справке NSIS привел к инструкции SetRegView 32|64|lastused, которая и определяет, к какой разрядности разделам обращаться установщику. Добавление в скрипт SetRegView 64 решило проблему. Теперь под XP-32 и под Vista-64/7-64 собранный мной установщик работает правильно :) . Буду рад если этот пост кому-то поможет. |
Подскажите, как nsis'ом определить расположение ранее установленной программы.
Занести пусть в переменную и использовать ее при конфигурировании. Например: Определяем куда установлен µTorrent Определили что он установлен в C:\Program Files\uTorrent\ занесли это в переменную $instor и потом Код:
WriteINIStr $TEMP\something.ini section1 something $instor\utorrent.exe |
Impeck, из справки NSIS:
Цитата:
|
нашел пример использования
Код:
SearchPath $1 notepad.exe но если ставить например Код:
SearchPath $1 firefox.exe |
тогда уж так
The DeleteRegKey problem is probably a windows bug and not nsis, either way, using SetRegView 64 on 32 bit systems is not supported To detect x64, include x64.nsh ${If} ${RunningX64} MessageBox MB_OK "running on x64" ${EndIf} edit: gah too slow, kichik beat me to it |
Ребят, вы чёт загнались тут конкретно!
Короче, умейте читать справку! Uses SearchPath() to search the system paths for the file. СИСТЕМНЫЕ ПУТИ!!! системные пути это %windir%, %path% etc. Я вообще не понял суть вопроса с поиском. Если функция нужна - используйте это: http://nsis.sourceforge.net/Search_For_a_File ИЛИ ЭТО http://nsis.sourceforge.net/FindIt:_...le_/_directory Если надо ПРОСТО УЗНАТЬ, установлен юторрент установлен или нет, то прочитайте ветку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\uTorrent, ключ "UninstallString"="\"C:\\Program Files\\uTorrent\\uTorrent.exe\" /UNINSTALL" или этот "InstallLocation"="C:\\Program Files\\uTorrent" (я рекомендую читать первый) и проверьте наличия файла P.S. А ещё можно в аппдата поглядеть, есть ли профиль юторрента. Если есть - значит он он есть(ну или был когда то 100%) |
ну если это ко мне адресовано то я ответил на пост 173 nRoof
|
MDinc, да пришлось сталкиваться с таким. Ключи реестра добавлялись на обоих системах, но при деинсталле удалялись только на одной, в зависимости от значения SetRegView. Как проверять разрядность системы нашел поиском на англоязычном форуме винампа.
Добавил такой кусочек кода: Код:
!include "x64.nsh" |
Подскажите - как задать директорию для программы в меню пуск? например - программа.ехе /S что дальше?
|
Bond01, вроде бы никак :dont-know
В справке только такие ключи: Цитата:
|
Жалко, я тоже ничего не нашел. Хочу прибраться в меню пуск, а то все программу кто-куда устанавливаются.
А есть русик на сам компилятор, что-то с ним немогу разобраться. |
|
У NSIS есть поиск по реестру, только чтобы поиск подразделы тоже в себя включал?
|
Archius, воспользуйтесь плагином Registry для NSIS
http://nsis.sourceforge.net/Registry_plug-in |
Подскажите пожлуйста как можно сделать инсталяшку на nsis чтоб она инсталировалась у пользователе без прав админа
|
SlavikGol, попробуйте добавить в начале кода:
Код:
RequestExecutionLevel user |
K.A.V., Продовал при компиляции выдает ошибку
Код:
Invalid command: RequestExecutionLevel |
эту строчку надо добавлять перед описанием всех функций, но после инклудинка библиотек, если всё равно ошибки- обновите свою версию NSIS, команда 100% валидная
|
K.A.V., Спасибо! Старая версия NSIS стояла
|
Может глупые вопросы, но всё же нигде не нашел на них ответ:
1. Можно ли в NSIS сделать так чтобы при установке проги ставился или 1-й её компонент, или 2-й (тоесть при выборе 2-го галочка с 1-го автоматически снималась и наоборот)? 2. Может ли NSIS различать в какой ОС запущен инсталятор и в зависимости от этого выполнять те или иные действия? 3. При создании инстолятора делаю секцию "ярлыки" которая и создает при установке эти самые ярлыки... Создаётся папка с ярлыками в меню пуск в которой ярлычки на некоторые компоненты устанавливаемой проги, если при установке отменить выбор некоторых компонентов то ярлыки на них всё равно создаются, если создавать ярлыки в той же секции где устанавливается сам компонент то пропадает возможность выбора, создавать ярлыки или нет. Можно ли с этим както бороться? Если у кого-то есть положительные ответы на эти вопросы, то, если можно, дайте пример.... Заранее благодарен всем. |
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Определение операционной системы
Один компонент для установки Создаём ярлыки в зависимости отметки компонета |
|
Impeck, сам показ диалога, картинки и всего текста отображенного на изображении реализовать не составляет никакого труда...для меня :)...но вот какие действия происходят если отмечена галочка "Установить яндекс бар", т.е. что именно выполняется для установки бара, здесь я вам подсказать не смогу (впринципе уже не по теме установка яндекс бара :))...могу лишь помочь вам в создании диалога
|
K.A.V., да это и интересует, с установкой тулбара сам разберусь.
|
Вложений: 1
Судя по скриншоту, мне кажется что использовался инсталлер не от NSIS по некоторым особенностям...
Но всё же, качайте прикреплённый архив, если чего не поймёте - спрашивайте не стесняйтесь ;) |
Цитата:
Section "!${PRODUCT_NAME}" SectionIn 1 2 3 RO SetOutPath "$INSTDIR" File /r "prog\*.*" WriteUninstaller "$OUTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$OUTDIR\prog.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$OUTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" SectionEnd ;=================================================================================================== ====================== SectionGroup "Цветовая тема оформления" Section /o "Белая" ID_1 SetOutPath "$INSTDIR" File /r "White\*.*" SectionEnd Section "Чёрная" ID_2 SetOutPath "$INSTDIR" File /r "Black\*.*" SectionEnd SectionGroupEnd Function .onSelChange !insertmacro StartRadioButtons $1 !insertmacro RadioButton ${ID_1} !insertmacro RadioButton ${ID_2} !insertmacro EndRadioButtons FunctionEnd По идее всё нормально, при инстоляции по умолчанию "Чёрная" "Цветовая тема оформления", но если попытаться переставить галочку на "Белая" то галочка вместо того чтобы пропасть с "Чёрная" пропадает с "!${PRODUCT_NAME}", и вернуть её туда не удаётся :(, хотя при повторном нажатиии на "Белая" галочка с "Чёрная" пропадает, но на "!${PRODUCT_NAME}" не появляется. Подскажите в чем моя ошибка плиз... |
|
Помогите плиз решить задачу:
1. Надо устанавливать кучу компонентов но 2 из них для своей работы требуют стороний продукт. создаю вот такую группу: Код:
SectionGroup /e group1 знаю что надо подписаться на .onSelChange а вот что написать внутри - без понятия. 2. установку service можно проверить через реестр и допустим если он уже стоит надо пропускать его установку. это можно на этапе самой установки, т.е галочка чекнута а по реестру видим что всё стоит то просто пропустить. |
Цитата:
Цитата:
Код:
Section "MyService" |
первое вроде как реализовал, вернее нашёл пример на nsis. За второе ОГРОМНОЕ спасибо. Может кому пригодиться:
Код:
Section "Section 2" Sec2 |
надо чтобы инстолятор nsis перед началом установки проверил установлен ли в системе к примеру netframework или другой нужный компонент (его наличие можно проверить по определённому файлу или ключу в реестре), и затем выдал окошко в котором предложил бы: если компонет установлен то переустановить его или продолжить установку, а если нет то установить его...
возможно ли это реализовать? |
Код:
ReadRegStr $R0 HKLM "Software\МойСофт" "МойАдскийКлюч" |
Какая проблема в етом файле:
|
Файлы дистрибутивов NSIS декомпиляции не подлежат. Уже неоднократно обсуждалось, что получить исходный NSI-файл не получится, максимум - извлечь файлы дистрибутива. Пишите свой скрипт, если нужна помощь, обращайтесь, поможем. Или выпросите скрипт у автора продукта, как вариант.
|
Извиняюсь забыл сделать обьявление -
Посоветовавшись с предыдущим автором темы desperate сделал куратором темы (и новым автором темы) hb860 Предыдущий автор не мог уделять много времени поддержке этой темы. Куратор может редактировать только шапку и свои сообщения - в остальном все как обычно... |
Цитата:
|
Vsirf,
Начните отсюда, например: http://www.winreview.ru/news.php?extend.33.11 http://www.markelov.net/articles.php?lng=ru&pg=39 http://www.compdoc.ru/bd/other/nsis/ Есть ещё http://nsis.narod.ru/nsis_help, но он неполный и мне не нравится. |
Вложений: 1
помогите пожалуйста! создал инсталлятор для StrongDC++ запускаю его а он мне вон че пишет (смотрим аттачмент)...
как этого издателя сделать? что прописать нуно??? сразу пишу не нужно мне напоминать о том, что в панели управления винды7 можно это отключить, чтоб издатель не проверялся... не все пользователи это будут делать - а эта штука так и будет вылетать! после нажатия ОК все работает и устанавливается, но не приятен сам факт существования этого нелепого окна =( и вот ещё что, эта же программа StrongDC++ когда установится, при запуске не чего такого не пишет, а в свойствах файла во вкладке Подробнее тоже самое прописано - наверное там с этим всё в порядке, а тут... =((((( огромное спасибо заранее! |
Во-первых, сам запрос с "издателем" ничего общего не имеет. Операционная система понимает, что вы запускаете инсталлятор, и требует от вас потверждения установки программы. Проверяется не издатель, а потенциальная опасность действий приложения.
Во-вторых, раз оригинальный инсталлятор Стронга не требует повышенных привелегий на установку, а ваш - требует, значит, их действия различны. Вы в своем что-то меняете - пишете в реестр, копируете файлы или что-то такое, чего в оригинальном не делается. Проанализируйте разницу в действиях вашего и оригинального инсталляторов. В третьих, чтобы прописать издателя, необходимо подключить этот плагин:http://nsis.sourceforge.net/Version_...heets_for_NSIS. Там же пример использования, а вот вам ещё один, если певрого мало,где указывается "издатель". Если остались вопросы - пишите, разберемся. |
hb860, ок спасибо, посмотрел уже. вот тока не понятно зачем это, зачем лесть через ResHacker в .exe и сохранять .res файл? (как написано в readme.txt что лежал в архиве VIT.zip) что это даёт? и зачем это? если можно в скрипте прописать следующее:
Код:
VIProductVersion "0.7.0.8" и да скорее всего эта фишка с издателем вызвана иза "потенциальная опасности" приложения... но опять же это не у всех инсталляторов - не у всех у которых есть цифровая подпись и нет её (так же как у меня просто "Свойства => Подробно") - но видать чего то все таки не хватает, и этого просто не достаточно для подтверждения издателя. |
В ресхакер лезть не надо, он вызывается из скрипта и сгененрирует нужный бинарный блок для вашего инсталлятора
Вот тут: Код:
!packhdr tmp.dat '"c:\program files\reshack\reshacker.exe" -addoverwrite tmp.dat, tmp.dat, vit.res, versioninfo,1,' |
|
Цитата:
и ещё такой вопрос, при установке инсталятора созданного в nsis (если нажать кнопочку детали) показывается что делает инсталятор, но в конце установки выскакивает окошко финиш которое всё закрывает, можно ли как нибудь выдрать этот лог установки? |
Цитата:
Цитата:
В самую последнюю секцию (-POST) прописываем +Нам необходимо добавить функцию |
Цитата:
Цитата:
|
Цитата:
Так что сложного? :) В строчке Код:
FindWindow $0 "#32770" "" $HWNDPARENT Код:
FindWindow $0 "#32770" "Это заголовок окна инсталлятора" "" Не тестил, но работать должно :) |
Цитата:
|
Цитата:
|
вот к примеру скрин (первый попавшийся) как увидеть окончание последней строчки?
|
XCV, в посте 219 я объяснил как это сделать в собственном инсталляторе
Как перехватить информацию, когда инсталлятор не ваш, описал я в посте 221, просто это будет отдельный ваш EXEшник, который будет копировать информацию из диалога...что не понятно? Или вам написать готовый EXE файл может? |
Цитата:
|
Цитата:
|
Всем добрый день!
Подскажите пожалуйста. Есть две custom pages При запуске первой выводиться 3 Radio Buttons Выбиретие вариант 1. Мастер 2. По умолчанию 3 Без изменений При выборе одного из вариантов активируется кнопка "далее" Мне нужно сделать, чтобы в случае выбора 1-го варианта запускалась вторая custom page, ну и при выборе 2 или 3 варианта, вторая страница пропускалась. Никак не получается сделать. |
Еще вопрос касательно поста выше
4.9.14.5 FindWindow user_var(hwnd output) windowclass [windowtitle] [windowparent] [childafter] Searches for a window. Behaves like the win32 FindWindowEx(). Searches by windowclass (and/or windowtitle if specified). If windowparent or childafter are specified, the search will be restricted as such. If windowclass or windowtitle is specified as "", they will not be used for the search. If the window is not found, the user variable returned is 0. To accomplish old-style FindWindow behavior, use FindWindow with SendMessage. FindWindow $0 "#32770" "" $HWNDPARENT FindWindow $0 "my window class" "my window title" GetDlgItem user_var(output) dialog item_id Retrieves the handle of a control identified by item_id in the specified dialog box dialog. If you want to get the handle of a control on the inner dialog, first use FindWindow user_var(output) "#32770" "" $HWNDPARENT to get the handle of the inner dialog. GetDlgItem $0 $HWNDPARENT 1 # next/install button Я так понял можно как то воспользоваться этой инструкцией. Только тут не совсем все понятно! FindWindow $0 "#32770" "название окна" GetDlgItem $0 $0 "тут цифра" IntCmp $0 1 Goto 0 0 Abort Goto: Вопрос. Как узнать название моего окна или как присвоить моему окну (конкретно первому custom page) название? И как узнать под какой какой цыфрой будет допустим первая Radio Button? |
KSE, сейчас занят, попозже напишу скрипт и отвечу на все ваши вопросы ;)
|
Вложений: 1
KSE, в прикрелпённом архиве скрипт для вас ;)
Цитата:
Цитата:
Мне не понятно, для чего вам использование: Код:
FindWindow $0 "#32770" "название окна" |
Люди, может быть создать что типа программы для создания скриптов с настройками чтоб написал и все. Не поймите меня не правильно просто я не разбираюсь в этом скриптовом языке. А сама программка классная. Сам не чем помочь не могу, т.к. не очень хорошо понимаю в программировании,только начинаю его изучать.
|
ALaN_1,
Цитата:
|
Цитата:
|
Цитата:
Цитата:
К тому же, в данное время, много кто уже знаком с NSIS довольно хорошо (например даже я, весь мой софт написан чисто на NSIS :) ), и данная тема созданна именно для решения проблем, пишем сюда все ваши вопросы, и не сомневайтесь, мы постараемся вам помочь, насколько хватит знанинй ;) Чем больше вы будете задавать вопросов, стараться разобраться, тем быстрей вы освоите данный язык :) |
Вопрос по созданию ярлыка.
Var freq StrCpy $freq "60" ... CreateShortCut "$DESKTOP\blablabla.lnk" "$INSTDIR\blablabla.exe" \ "-freq $freq" "$INSTDIR\blablabla\blablabla.ico" 0 SW_SHOWNORMAL \ ALT|CONTROL|SHIFT|F5 "запустить blablabla" Пишет, invalid command "-freq $freq" Как втулить в параметры запуска значение из переменной? Из документации мало что можно взять CreateDirectory "$SMPROGRAMS\My Company" CreateShortCut "$SMPROGRAMS\My Company\My Program.lnk" "$INSTDIR\My Program.exe" \ "some command line parameters" "$INSTDIR\My Program.exe" 2 SW_SHOWNORMAL \ ALT|CONTROL|SHIFT|F5 "a description" |
Все, я разобрался, синтаксис был у меня правильный. Оно матюкалось на комментарий. Его там ставить нельзя было.
Неправильно: CreateShortCut "$DESKTOP\blablabla.lnk" "$INSTDIR\blablabla.exe" \ ;Мой коммент "-freq $freq" "$INSTDIR\blablabla\blablabla.ico" 0 SW_SHOWNORMAL \ ALT|CONTROL|SHIFT|F5 "запустить blablabla" Правильно: ;Мой коммент CreateShortCut "$DESKTOP\blablabla.lnk" "$INSTDIR\blablabla.exe" \ "-freq $freq" "$INSTDIR\blablabla\blablabla.ico" 0 SW_SHOWNORMAL \ ALT|CONTROL|SHIFT|F5 "запустить blablabla" Все получилось :) |
Подкскажите пожалуйста! Как можно максимально упросить данный код?
Пример: ${If} $mon == 1 ${AndIf} $2 == 1 ${AndIf} $R1 == 1 StrCpy $freq "60" ${EndIf} ${If} $mon == 1 ${AndIf} $2 == 1 ${AndIf} $R2 == 1 StrCpy $freq "75" ${EndIf} ${If} $mon == 1 ${AndIf} $1 == 1 ${AndIf} $R1 == 1 StrCpy $freq "100" ${EndIf} ... И так 90 вариантов! :) Буду очень признателен! ЗЫ: Видел, что так можно делать, но у меня почему то не получается. Код:
${If} $mon == 1 |
Цитата:
Код:
StrCmp $mon "1" 0 +4 KSE, почему не отписываемся о проделанной мною работы, по вашей проблемы с поста #220, или я зря тратил своё время? |
Отписываю.
Я хотел сделать так, чтобы до выбора одного из вариантов кнопка "далее" была неактивна. После выбора варианта - активировать кнопку "далее". При нажатии кнопки далее осуществлялся переход на ту или иную страницу в зависимости от выбора. Проблему решил след. образом Код:
... я использовал logiclib и nsDialogs K.A.V. Насчет моего предыдущего поста я не сильно понял, как StrCmp $mon "1" 0 +4 StrCmp $2 "1" 0 +3 StrCmp $R1 "1" 0 +2 StrCpy $freq "60" такой код может быть проще? Как я уже говорил, таких вот столбиков ${If} $mon == 1 ${AndIf} $2 == 1 ${AndIf} $R1 == 1 StrCpy $freq "60" ${EndIf} У меня будет очень много! Где то 90! Какая может быть замена такому варианту. Так как он выглядит убедительней, но работать не хочет. Код:
${If} $mon == 1 |
Цитата:
я про это и говорил... Цитата:
Цитата:
Цитата:
Ну если бы вы могли объяснить, какая задача перед вами стоит, я возможно бы понял о чем идёт речь... |
Нет не зря. Я очень благодарен. Но в Вашем примере, ув. K.A.V., при нажатии на один из радибуттонов сразу происходит переход на след. страницу
О чем идет речь я объяснить могу, но не хочу вылаживать полностью весь код сюда. Если можно связаться со мной по асе 3853535, был бы очень признателен так как Ваша не отвечает :) |
Цитата:
1. А форум для чего? 2. Вы думаете, что у меня столько свободного времени, что я могу каждому персонально выделять время и общаться он-лайн? Цитата:
|
Ув. K.A.V., я с Вами полностью согласен.
И так, предыдущая проблема была решена. Как оказалось все оч. просто Это правильный код: Код:
${If} $mon == 1 Код:
${If} $mon == 1 ${If} $0 == 1 ... ${ElseIf} $1 == 1 ... ${EndIf} Можно так ${If} $0 == 1 ... ${EndIf} ${If} $1 == 1 ... ${EndIf} ${ElseIf} работает только с одной переменной |
помогите пожалуйста решить следующую задачу, надо при установке проверить есть ли рядом с инстолятором reg файл, если есть то импортировать его.
и второе проверить есть ли рядом с инстолятором ini файл, если есть скопировать его в папку с установленной программой (по идее это одна и таже задача) |
Цитата:
Код:
IfFileExists "$EXEPATH\MyFile.reg" 0 +2 Цитата:
Код:
IfFileExists "$EXEPATH\MyFile.ini" 0 +2 |
как удалить ключь автозагрузки при деинсталяции? например:
Код:
HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "имя проги" "$INSTDIR\прога.exe" Код:
DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "имя проги" "$INSTDIR\прога.exe" Код:
DeleteRegKey HKLM "${PRODUCT_UNINST_KEY}" |
Код:
DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "имя проги" |
Есть дистрибутив контры и патч отдельным файлом, решил объединить их при помощи NSIS, но вот проблема: установка не работает, отрабатывает только NSIS, а установочник и патч не запускаются. В чем проблема?
Код:
;имя приложения |
Попробуйте
Код:
ExecWait "$TEMP\CS\cs16full_v4+zbot.exe /sms" |
Результат тотже
|
для cs16full_v4+zbot.exe должно быть
Код:
ExecWait "$TEMP\CS\cs16full_v4+zbot.exe /s /sms" Для патча не знаю что и предположить. Расскажите про него - чем он упакован? |
|
Измените страницы скрипта на такие:
Код:
!insertmacro MUI_PAGE_WELCOME Код:
... NSIS в логе напишет, запускается ли установка вообще. |
Отлично, все заработало
|
hb860, Здравствуйте! Нужна ваша помощь в NSIS. Делаю инсталяшку для плеера. Хочу наладить ассоциацию файлов с ним. Как мне это сделать ? И плизз не могу допереть с выбором компонентов. То есть при выборе чтобы они копировались в папку программы. Если можно на примерчиках . Заранее спасибо!
|
ммм, вот этот примерчик подойдет ? - http://forum.oszone.net/thread-101182.html
|
Цитата:
|
С выбором компонентов почитайте это.
Регистрация ассоциаций: Код:
!macro RegisterExtension extenstion |
hb860, Ваши уроки очень помогли. Надеюсь они не последние. У меня ещё один вопросик , как шкуру надеть ?
|
Цитата:
Шкуру надеть на инсталлятор ? |
Цитата:
|
Шкуры я сам никогда не надевал. Сегодня вечером попробую и напишу, как это делается.
|
Скачиваем SkinCrafter Plugin, устанавливаем, в функции .onInit прописываем
Код:
NSIS_SkinCrafter::skin /NOUNLOAD "<Полный путь к файлу скина>" И не забудьте скачать сам скин :) :) :) |
K.A.V. ,hb860, почему то у меня не получается.
Если так : Function .onInit SetOutPath $TEMP NSIS_SkinCrafter::skin /NOUNLOAD $TEMP\V-touch.skf FunctionEnd. Компилируется но никаких внешних изменений нету. Если так : Function .onInit SetOutPath $TEMP File /oname=V-touch.skf "V-touch.skf" NSIS_SkinCrafter_Plugin::skin /NOUNLOAD $TEMP\V-touch.skf Delete $TEMP\V-touch.skf FunctionEnd Выбивает ошибку при компиляции . Что делать? Помогите? |
hb860, я никогда не пользовался программой NSIS , но возник такой вопрос: можно ли с помощью NSIS создать Welcom Center ( запуск программ из него , или запуск компонентов панели управления ) для Windows XP , если да , то где можно почитать про команды и компиляцию , у меня есть уже готовый ( разковыряный ) , но что то подобное мне создать никак не удается ? заранее благодарен
|
Инструкция по использованию скинов :)
1. Качаем с этой странички "Unicode/ANSI NSIS SkinCrafter Plugin" (если скин не подгружается, попробуйте эту библиотеку), открываем загруженный архив, распаковываем библиотеку "NSIS_SkinCrafter_Plugin.dll" в каталог с плагинами NSIS (\Program Files\NSIS\Plugins) 2. Загружаем какой-либо файл скина из библиотеки 3. Добавляем данный кусок кода в NSIS Код:
Function .onInit Код:
Function .onGUIEnd Для того, чтобы скин подгружался и в деинсталляторе, добавьте следующие функции Код:
Function un.onInit P.S. На некоторых сборках ОС скин может не примениться, т.к. удалены некоторые библиотеки На момент редактирования поста мной выявлена 1 DLL, без которой скины не подгружаются - mfc71.dll, она должна находиться в директории System32 Если вы не уверены, что данная библиотека присутствует в системе, то добавьте данную библиотеку в пакет инсталлятора и пропишите команду распаковки данной библиотеки в System32 каталог перед тем, как вызовите функцию загрузки скина Можно конечно обойтись без распаковки библиотеки в системный каталог, для этого поместите mfc71.dll в одну директорию с пакетом инсталлятора Painkiller, ваши ошибки |
K.A.V., добавил в шапку
|
hb860, у меня вызывает ошибку при компиляции именно вот эта строчка :
File /oname=V-touch.skf "V-touch.skf" Вот что пишет об ошибке : Function: ".onInit" SetOutPath: "$TEMP" File: "V-touch.skf" -> no files found. Usage: File [/nonfatal] [/a] ([/r] [/x filespec [...]] filespec [...] | /oname=outfile one_file_only) Error in script "C:\2.nsi" on line 94 -- aborting creation process А вот мой код : Function .onInit SetOutPath $TEMP File /oname=V-touch.skf "V-touch.skf" NSIS_SkinCrafter_Plugin::skin /NOUNLOAD "$TEMP\V-touch.skf" FunctionEnd Function .onGUIEnd NSIS_SkinCrafter_Plugin::destroy FunctionEnd |
Painkiller,
Цитата:
|
Habetdin , большое спасибо! Вот в чём собака зарыта. Его нужно возле скрипта держать. Вот моя ошибка была сс самого начало. Я же его держал в папке которую я назначил за $TEMP. Но жалко то что скин на семёрке не пашит :(
|
K.A.V. , странно почему то скин и на чистой xp sp2 не пашит :(
|
Попробуйте использовать эту библиотеку
И ещё, в системе должна присутствовать (в System32 каталоге) библиотека mfc71.dll, если её нет, то скин подгружаться не будет |
K.A.V. , скин заработал как я подменил на вашу предложенную библиотеку на семёрке, но только один. А остальные видно что просто не поддерживаются. У них классический вид . В System32 библиотека mfc71.dll в семёрке присутствует .
Возможно установщик защитить паролем от распаковки ? |
Цитата:
|
Цитата:
|
Самый простой пример, это с использованием плагина DialogsEx
Код:
${InputPwdBox} "Заголовок" "Введите пароль" "" "10" "" "" 0 Число 0, в самом конце первой строчки означает, что введёное пользователем значение следует поместить в переменную $0 |
Эxх. Побольше бы такой информации и уроков !!!
|
Цитата:
Спрашивайте, а мы ответим/поможем на сколько знаний хватит ;) |
K.A.V. , я просто не знаю возможностей языка NSIS. Можете хоть описать хоть в вкратце что ещё можно прикрутить к установщику ? Хотя знаю что всё описать не возможно, но из самое интересного?
|
У каждого своё понимание "интересного" :)
Много возможностей добавляют плагины для NSIS, например... Мне проще отвечать на вопросы, чем начинать перечисление :) Так что, с вас вопрос - с меня ответ, возможно это или нет ;) (здесь ещё необходимо учитывать, что я всего про NSIS не знаю :) ) |
Добрый вечер. Совсем недавно наткнулся на Nsis выбирая из программ подобного рода, т.к. стояла задача сделать одним файлом инсталлятор. Есть база размер около 4Gb, много файлов, папок, подпапок и т.д.(так же присутствуют програмы без которых она работать не будет или будет, но некорректно). Ограничение в Nsis не более 2 Gb. Как и что будет ставиться и куда распаковываться я уже понял, т.е. осталось решить совсем чуть-чуть.
а. Как сделать что-бы обойти размер в 2 Gb. если нельзя, то как реализовать по другому b. Защитить от распаковки и просмотра , вроде как это делает DcryptDll Plugin (на данный момент пытаюсь разобраться) Мелочи: с. Как изменить цвет текста в BrandingText /TRIMLEFT "Здесь текст" d. Как изменить цвет галочек(он всегда зелёный) в SectionGroup f. Как сделать uninstall с таким же скином как и установщик? Буду благодарен всем ответившим. |
Цитата:
Для распаковки можно использовать плагины. Для 7-ZIP архивов, для ZIP архивов Цитата:
Цитата:
Затем, перед строкой Код:
!insertmacro MUI_PAGE_WELCOME Код:
!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit Код:
Function myGuiInit Цитата:
Код:
!define MUI_COMPONENTSPAGE_CHECKBITMAP "<путь к файлу с галочками>" Цитата:
Код:
Function un.onInit |
Всё получилось, огромное спасибо. Но почему-то деинсталлятор не хочет быть таким как инсталятор, пример который с плагином работает нормуль, а вот у меня не хочет.
Так что бы выбирал пользователь, т.е. буху одно, одному отделу другое и т.д. Соль в том что каждый раз(т.е. 1-2 раз в неделю) устанавливать им это пипец(КАЖДОМУ), а так как все постоянно сносят чего то, то места не хватает, то вирусы, то ещё чего-то. А так будет висеть на сервере общедоступен, клац выбрал, что нужно сиди кури пока ставиться. |
Цитата:
Цитата:
дальше что вы написали, мне не совсем понятно, суть вопроса...даёте четкий вопрос, получаете четкий ответ ;) |
Цитата:
Так как пишу сам, бывает и ошибаюсь :gulp: Так ну уже почти всё понятно, вот только осталось немного...как сразу распаковывать, на лету, т.е. из exe файла скомпелированного nsis'ом нужно , что бы сразу распаковывался в С:\Папка, а не переписывался туда архив.7z, распавовывался там , а потом удалялся. Делается это скорее всего каким то ключом, вот тока не могу понять каким. |
да, не читал я документацию на плагин распаковки архивов 7-Zip, неудобный какой-то написали :(
Тогда взамен плагина используйте для распаковки консольную версию архиватора 7-zip, передадите в параметры программы какой архив и в какую папку извлечь ;) |
или 7z sfx, как вариант. Модифицированный модуль вроде переменные окружения поддерживает даже. Его наличие позволило мне отказаться от коммерческого Winrar
|
Добрый день! Ребят, как создать установщик для Adobe Photoshop Elements 8.0 или Adobe Photoshop CS4?? интересует как можно интегрировать серийный ключ продукта.. Может у кого-то есть уже созданные скрипты на основе программ Adobe Photoshop Elements 8.0 или Adobe Photoshop CS4??
|
Цитата:
Цитата:
Цитата:
Подскажите в чём может быть причина RMDir /r $INSTDIR не удаляет папку в которую ставится программа, т.е. С:\Папка, так и остаётся на диске С:\ после деинсталяции. Спасибо огромное! Только что всё закончил, правда сыровато, не красиво так как хотелось бы, но главное получилось, осталось за малым. |
It4a,
Цитата:
eugeny-nn, Автоматическая установка Adobe Photoshop CS4 |
Подскажите в чём может быть причина RMDir /r $INSTDIR не удаляет папку в которую ставится программа, т.е.
С:\Папка, так и остаётся на диске С:\ после деинсталяции. Цитата:
CreateDirectory "$SMPROGRAMS\Dir" создаёт в C:\Documents and Settings\Имя пользователя\ папку ├ыртэюх ьхэ■ в ней ╧ЁюуЁрьь√ и только там Dir, а там где нужно(т.е. C:\Documents and Settings\Имя пользователя\Главное меню\Программы - нет.) . Я так понимаю - это проблема с кодировкой, но появилась она после использования 7z плагина, если отключить секцию отвечающую за распаковку, тогда всё норм, но уже поздно, т.к. всё везде настроенно и переделывать я уже чего то просто не в состоянии. Есть у кого какие идеи. |
|
Цитата:
Цитата:
|
Плагин вдвойне неудачный...
Как выход из ситуации, прописывайте распаковку после создания директорий :) |
K.A.V. , подскажите как заменить картинку в установщике сбоку и сверху ?
|
Сверху
Код:
!define MUI_HEADERIMAGE Код:
!define MUI_WELCOMEFINISHPAGE_BITMAP "C:\Program Files\NSIS\Contrib\Graphics\Wizard\orange-uninstall.bmp" |
Цитата:
Если закоментировать StrCpy $2 ${g2o1} то происходит какой-то безпредел с 1-й группой компонентов... Я так понимаю что вот это: StrCpy $2 ${g2o1} заставляет ставить галку при первом действии мышкой в любой секции, даже если установлен параметр /o на всех компонентах. Что делать? Ума не приложу. Должно же быть что-то подобное этому StrCpy $2 ${g2o1} но только что бы не включало, а наоборот отключало K.A.V., Помогите плиз |
Цитата:
Код:
SectionIn RO Цитата:
|
В первом случае меня все полностью устраивает.
А во втором случае мне нужно что бы по умолчанию ни на одном компоненте не стояла галка... Да. На первый взгляд все вроде в порядке, но все остается в порядке пока не начинаешь выбирать компоненты мышкой... Даже если не трогать компоненты во второй группе, а выбирать компоненты только в первой, то автоматом во второй группе ставится галка. А я хочу что бы вторая группа оставалась без изменений. K.A.V., Вы сможете меня понять когда скомпилите этот скрипт который я выложил... Этот скрипт - простой пример и ничего не потребует при компиляции. И вот еще одну не совсем понятную вещицу нашел. Если мышкой нажать на квадратик группы (именно на квадратик группы а не копонента) то выбирается 2 компонента из трех, хотя должен выбираться только один. |
Попробуйте удалить:
Код:
StrCpy $1 ${g1o1} Цитата:
|
Цитата:
Цитата:
Цитата:
Народ! Пожалуйста! Помогите решить эти проблемки: 1. тут 2. тут |
Здраствуйте, я только начал изнучать NSIS. У меня два вопроса:
1. Как сделать выбор языка перед установкой? 2. Как сделать разное описание секций для разных языков? Заранее спасибо! |
Цитата:
NoName01.cpp, если вдруг узнаешь ответ на свой вопрос, отпишись тут пожалуйста. |
dracosha, не знаю, может это и глюк NSIS...
Если секций не много, то думаю, что можно организовать ручную проверку, т.е. самому прописать команды на снятие/отметку галочек с секций, с использованием команд SectionGetFlags и SectionSetFlags :) Цитата:
Добавить в функцию OnInit (данный макрос вызовет диалог выбора языка) Цитата:
P.S. Новичкам очень рекомендую заглянуть в каталог "\Program Files\NSIS\Examples", там много разных примеров ;) |
Цитата:
Секций на самом деле много... Примерно около 100-120. И это еще не предел... Но компонентов которые подлежат выбору один из 2 или более будет примерно около пяти-семи точно не помню. Я Вас еще буду мучать что бы Вы мне помогли разобраться с добавлением окон :blush2: и при этом буду просить что бы Вы мне помогли нарисовать или изменить положение деталей в этих окнах :blush2: Цитата:
|
Цитата:
Цитата:
Цитата:
Код:
!insertmacro MUI_LANGDLL_DISPLAY Код:
strcpy $LANGUAGE "1033" Цитата:
|
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Код:
!insertmacro MUI_LANGDLL_DISPLAY Код:
strcpy $LANGUAGE "1049" Код:
HKEY_USERS\.DEFAULT\Control Panel\International Готовый код: Код:
Function .onInit |
Цитата:
Я не ставлю задачу выбрать язык. Я просто отписался, что автоматом не выбирается. Вот на это: Цитата:
|
Цитата:
Цитата:
Код:
!insertmacro MUI_LANGUAGE "Russian" ;) |
K.A.V. ,hb860 , у меня такой вопрос. Можно ли сделать чтобы в названии секции было ещё и количество компонентов входящих в эту секцию ???
|
Цитата:
Может пригодится: |
Здраствуйте, мой инсталлятор ставит 3 программы, то есть у меня 3 секции, которые ставят 3 разных деинсталлятора для каждой программы. Что-то типа такого:
Section "Sec1" Sec1 ... WriteUninstaller "$INSTDIR\Sec1\uninstall.exe" SectionEnd Section "Sec2" Sec2 ... WriteUninstaller "$INSTDIR\Sec2\uninstall.exe" SectionEnd Section "Sec2" Sec2 ... WriteUninstaller "$INSTDIR\Sec2\uninstall.exe" SectionEnd Как мне прописать что должен делать каждый из 3 деинсталляторов? И куда поместить код, который будет выполнятся в любом случае, независимо от того какую программу выбрал юзер? Заранее благодарю) |
Цитата:
Вообще, когда вы создаёте инсталляционный пакет, то принято считать, что вы делаете инсталлятор для 1-ой программы, и деинсталлятор расчитан на 1 программу :) Цитата:
Если да, то все действия необходимо прописывать в секцию Uninstall |
Цитата:
Цитата:
|
Посмотрите, может это то, что вам нужно :)
|
Цитата:
Код:
Section Uninstall secidx01 |
Цитата:
HTML код:
Section "-post" |
Цитата:
dracosha, задавайте вопросы. Слушаем. Уважаемые модераторы, попрошу не рассматривать мои публикации как рекламу ресурса. В случае необходимости, я готов перепостить информацию на сайт Oszone или даже прямо в этот форум. Просто сообщите мне об этом, я и учту все рекомендации |
K.A.V. ,hb860 , изменю свой вопрос. Как сделать чтобы в названии секции с компонентами было указано ещё и количество выбранных компонентов?
|
Цитата:
Если не понятно, объянснил, то могу код сделать :) Сейчас сделаю ;) :) |
Вот еще возникло 3 вопроса...
Вопрос 1 Вобщем есть страничка лицензии !insertmacro MUI_PAGE_LICENSE "files\LicenseRU.rtf" а у меня еще есть файл лицензии LicenseEN.rtf И если пользователь выбрал аннглийский язык, то мне очень хотелось бы чтоб ему отобразился текст из LicenseEN.rtf Вопрос 2 Получается что какой бы язык пользователь не выбрал при инсталяции, в любом случае будет копировться файлик с русским языком... И если этот файлик копируется то при запуске прога будет запускаться на русском языке. Как бы сделать так что бы при выборе русского языка копировался файл с русским языком, а при выборе английского языка чтоб ничего не копировалось? Вопрос 3 В скрипт добавил вот такую функцию: (зы взял код отсюда ) Код:
Function .onInit Дайте плиз примерчики на это дело. Цитата:
К сожалению в 4-м примере для меня все оказалось очень сложно. Наверное потаму что я не знаю ниодного языка програмирования... Я очень хочу изменить страничку !insertmacro MUI_PAGE_COMPONENTS И хочу что бы она выглядела вот так: ![]() Если Вас не затруднит помогите мне пожалуйста с этим. И ко всему этому я хочу добавить еще одну точно такую же страничку но на ней уже будут не компоненты а настройки. Правда там точно так же будут копироваться файлы как и в компонентах. Т.е. пользователь поставил птичку значит копироваться, нет значит не копироваться. Если у Вас возникло сомнение или вопрос зачем еще одно такое же окно если там тоже будут копироваться файлы... Дело в том что настройки - это инифайлы, которые при запуске проги автоматически будут удаляться... А точнее прога при первом запуске подхватит все настройки которые прописаны в ини и сразу же их удалит. |
Здраствуйте, K.A.V. Я задавал вопрос о трех деинсталляторах. Вы мне предложили следущий код:
Но 3 последних функции не вызываются. Проверил значение $EXEPATH. Там совсем не тот путь: C:\Users\836D~1\AppData\Local\Temp\~nsu.tmp То есть условие не срабатывает(((( |
Цитата:
Цитата:
Цитата:
В коде вашего примера, за прозрачный цвет отвечает 4-ый параметр, т.е. -1, необходимо заменить "-1" на HEX значение прозрачного цвета, например, при указании 0xFFFFFF, за прозрачный цвет будет белый Цитата:
Цитата:
А сам скрипт вам не позволит две разные COMPONENTS странички, если вы пропишите дважды данную команду, у вас просто продублируется данный диалог... С группами и галочками (но без описания) можно сделать такой диалог при помощи плагина EmbeddedLists Цитата:
Правильно будет так: |
Цитата:
Если так то меня все таки это немного не устраивает... Дело в том что файл копируется еще до выбора папки куда устанавливать прогу (копируется конешно же в указанную папку по умолчанию). Может есть какое-то другое решение? Цитата:
|
Цитата:
Какие вопросы задаёте, такие ответы и получаете :drug: |
Цитата:
Вобщем вот тестовый скрипт: Вобщем когда запускается инсталятор, то сразу после заставки (вобщем в самом начале) файл russian.lng копируется в папку по умолчанию... Тут же возникает вопрос... А если пользователь выберет другой путь для установки программы (MUI_PAGE_DIRECTORY)? При тестировании я собственно так и сделал... И в той папке которую я выбрал, файла russian.lng естественно не оказалось. Вобщем мне нужно что бы файл копировался туда куда пользователь решит. Цитата:
-1 изменил 0xFFFFFF получилось вот так: advsplash::show 1500 2500 250 0xFFFFFF $TEMP\spl скомпилил но вместо прозрачного выводится черный цвет 0xFFFFFF изменил на 0 получилось вот так: advsplash::show 1500 2500 250 0 $TEMP\spl теперь прозрачность есть, но фрагменты изображения на которых изпользуется прозрачность цвета не выводятся с прозрачностью... И в итоге картинка получается не совсем мягкая по бокам :( Я думаю что есть таки плагины которые позволяют вставлять прозрачные картинки типа png? K.A.V., может подскажете какой-нить русский ресурс с кучей плагинов для nsis? |
Вам нужно поместить данную команду в секцию, а не в функцию, которая выполняется при запуске инсталлятора, пример кода:
Код:
Section -post Цитата:
Русскоязычный только nsis.narod.ru, только он не обновляется уже давно и там нет ничего полезного (по крайней мере для меня)... |
K.A.V., спасибо за 3 деинсталлятора! Но еще одна проблемка нарисовалась: не могу удалить папку в которую установлена программа. (Ярлыки удаляются, из реестра тоже)
Код: Может папка не удаляется, потому-что в ней деинсталлятор, или потому-что в ней еще есть папки? Хотя в примерах скриптов вроде все точное так же. |
Цитата:
Скорее всего, в данной папке есть файлы, которые используются системой/программами К тому же, у вас ошибка в скрипте :) Должно быть так: Код:
RMDir /r "$INSTDIR" Код:
RMDir /r "$R0\Sec1" |
K.A.V., Спасибо Вам большое.
Цитата:
А какой код у английского? |
|
Цитата:
|
Цитата:
Но из функций я этот код убрал... Дабавил секцию полностью скопировав твой пример... А оно работать не хочет :cry: Неработает - всмысле не копируется файл russian.lng. |
dracosha, ну ей богу... :)
Команда "CopyFiles" копирует файл, который есть на жестком диске, а у нас файл упакованный в инсталлятор, значит прописывать надо так: Код:
SetOutpath $INSTDIR Добавил позже Цитата:
Использовать несколько инсталляторов NSIS, главный файл будет инсталлятором (маленький размер, чисто для запуска других), остальные будут как архивы (можно изменить на любое расширение отличное от EXE), каждый из инсталлеров будет принимать от главного инсталлера путь, куда следует распаковать файлы и будет их распаковывать :) |
K.A.V., я думал если Вы мне поможете с копированием файла russian.lng при выборе русского языка, то я смогу догадаться как мне остальные файлы распределить по языкам...
Но к сожалению я разобраться не смог. Извините что сразу не ввел Вас вкурс того что мне еще надо. Вобщем при выборе русского языка мне нужно что бы копировался russian.lng в корневую папку (с этим Вы мне уже помогли т.е. вопрос закрыт) и set.dll в папку $INSTDIR\settings а при выборе английского языка что бы копировался тоже set.dll в папку $INSTDIR\settings но это уже другой файл т.е. внутренности етого файла для русской версии проги отличаются хотя названия файлов одинаковые... Файлы эти при компиляции естественно лежат в разных местах... И вот собственно то что я сделал: Но в итоге при выборе русского языка файл для английского все равно копируется а при выборе английского файл russian.lng копируется в папку $INSTDIR\settings что за глюки такие... понятия не имею. :( Помогите плиз |
В выделенном тексте, везде где написано 0 +2 замените на 0 +3
Кстати не обязательно для каждого файла создавать новую секцию, всё можно прописать в одну |
Цитата:
Когда разбирался с языками для названия секций я просек тему что в nsis можно присваивать переменные а потом объявлять для них перевод... После чего решил попробовать на MUI_PAGE_LICENSE И к моему большому удивлению у меня все получилось... может кому пригодится |
Народ!
Нужно добавить еще 2 странички на которых хочу разместить следующее: страничка 1 "возможность изменять название папки в меню пуск" и "кнопка - создавать папку в меню пуск или нет" страничка 2 тут я хочу разместить кнопки для создания ярлыков на рабочем столе и в панели быстрого запуска Если возможно то я бы и на одной страничке все это дело разместил Господа ГУРУ помогите плиз. |
Цитата:
http://nsis.sourceforge.net/Docs/nsDialogs/Readme.html http://www.winreview.ru/comment.php?comment.news.241.11 Но есть у меня вопрос. В моем инсталляторе 3 секции. Как мне сделать так, чтобы страница появлялась только при условии, что выбрана например первая секция. Какое условие мне сюда добавить: Function nsDialogsPage nsDialogs::Create 1018 nsDialogs::Show FunctionEnd Заранее спасибо! |
Вложений: 1
Цитата:
Цитата:
Цитата:
|
K.A.V., а почему InstallOptions, а не nsDialogs ?
Цитата:
|
hb860, спасибо большое за статью NSIS. Создаем собственные страницы инсталлятора , теперь знаю с чего хоть начинать надо... Но как это обычно бывает осталась масса вопросов.
Все было понятно до выставления координат у элементов, дальше пошли сплошные термины, расчитанные, имхо, на продвинутых нсисников. Страница в инсталяторе появилась, но как сделать, чтобы всё это заработало? Не хватает живого примера на конкретной программе, как вы делали это в предыдущих статьях. Что непонятно: - почему в статье доп. страница названа Page custom fnCustomInit fnCustomDestroy, а в том же скрипте к AIMP2 вы использовали более традиционное Page custom nsDialogsPage nsDialogsPageLeave. - как добавить надписи в шапку, сейчас у меня отображается надпись предыдущей страницы, а это "Выбор папки установки". - зачем, вообще, в инсталяторе нужен MessageBox MB_OK $R1 (в статье это такое маленькое диалоговое окно). - главное, как связать (в моем случае) чекбоксы с ярлыками и файлами инсталируемой программы. В переменных, пока еще, как свинья в апельсинах. Мой кусок неправильного скрипта, кто сможет выправите, пожалуйста. А, если будут комментарии (пригодиться на будущее) - благодарность будет безмерной... K.A.V. спасибо за shortcuts.ini, но хотелось бы разобраться с nsDialogs. |
Цитата:
Может кто-то знает, что нада сделать, чтобы инсталлятор был вот такого вида (я имею ввиду окно на заднем плане): ![]() Уже решил этот вопрос: BGGradient |
K.A.V., спасибо большое!
В ini текст только на русском языке. Но меня стало смущать вот это: Цитата:
K.A.V., помню что у Вас куча работы и Вы пишете новый проект с нуля, но в основном Вы мне и помогаете :) Пожалуйста! Помогите решить мои 2 вопроса при помощи nsDialogs и с возможностью вывода всего текста на окошках на разных языках. ps Можно ли осуществить то что я хочу на одной страничке? Если можно то лучше конешно же все на одной. |
Делаю тихую установку приложения с ключом /S. Всё нормально, но в самом конце программа запускается, а мне это не надо. Есть ли ключ, отменяющий запуск? Или как прописать для такого случая тихую установку без запуска программы?
|
ChVL,
Нет ключа Код:
дистрибутив.exe /s |
hb860, может Вы мне с этим поможете используя nsDialogs? Совсем не понимаю как мне это сделать.
|
hb860
Спасибо. Действительно, дистрибутив и исполняемый файл имеют разные названия. Для чего тогда вводить задержку? |
Цитата:
Цитата:
Цитата:
Код:
Function nsDialogsPage Цитата:
Цитата:
Код:
Function nsDialogsPageLeave Цитата:
Цитата:
|
Цитата:
|
NoName01.cpp, hb860, спасибо огроменное! :up
Когда разжуют, кажется всё таким простым... Взял на вооружение метод hb860: минимум символов и буковок - работоспособность 100%. Шапка с "Опа-опа" "Вот оно чё, Михалыч(с)" смотрится классно :lol: . |
hb860, совершенно случайно узнал что в nsis есть стандартная страничка MUI_PAGE_STARTMENU. Вобщем эту страничку я добавил... Но еще нужна страничка с возможностью добавления ярлыков на рабочий стол и панель быстрого запуска.
|
Цитата:
Цитата:
|
|
Цитата:
Код:
SectionGroup "Ярлыки" Цитата:
|
Цитата:
|
hb860,
Цитата:
В идеале надо бы предотвратить запуск исполняемого файла. Но, похоже, слишком многого хочу… |
Без перепаковки не получится. Окно можно скрыть при помощи утилит cmdow.exe и hidecon.exe. Предотвратить не получится
|
Цитата:
Цитата:
hb860, может поможете мне вот с этим: Мне нужно что бы при выборе компонента 1, стали активными для выбора компонент 2 компонент 3 и компонент 4, и в тоже время компоненты 2, 3 и 4 не должны выбираться 1 из 3, (т.е. что бы можно было поставить галочки на все компоненты 2 ,3 и 4). Если компонент 1 не выбран значит компоненты 2, 3 и 4 должны быть неактивными Цитата:
Народ! Пожалуйста! Растолкуйте для новичка весь этот скрипт... Чтоб было понятно что тут за что отвечает. Может тогда мне станет понятно как решить мою задачку. |
Вложений: 1
Цитата:
Нужно что бы было одним файлом, но оказалось что несколькими удобней(даже помоему лучше так, как приложения некоторые не всем нужны), но это не суть. 1. Хотел бы поинтересоваться как в BrandingText сделать тест ссылкой на ресурс кликабельной. 2. При выборе компонент(где галки ставим/снимаем) появляется текст, в пределах окна, компоненту описывающий, а вот возможно сделать рамку с другой стороны которая показывала бы изображения по такому же принципу. |
Цитата:
1. Так сказать "многотомные" архивы :) 2. Обойти ограничение в 2 Гб, сохранив всю гибкость в установке ;) 3. Можно удалять эти отдельные архивы, как вы и сказали, когда разные архивы содержат разные компоненты (как например дополнения в Photoshop CS3) Цитата:
Цитата:
Как делать я сейчас с ходу не вспомню, т.к. того кода вроде нет...а может и есть, не знаю :) Помню, что я правил файл MUI.nsh а конкретно функцию "onMouseOverSection" :) |
может не в тему, но все же про nsis. Подскажите, а есть ли какие нибудь ключи для при запуске деинсталятора nsis для "тихого " удаления программы?
Пробовал /S - не пошло. |
drynpavel, как раз должно было пойти.
Если в деинсталляторе не отключена тихая установка, то пойдет Код:
uninstall.exe /S |
Цитата:
|
Господа ГУРУ! Неужели для Вас это сложный вопрос?
K.A.V., hb860, помогите пожалуйста :help: |
Здраствуйте!
Имеется 3 секции. Одна секция RO. В функции .onSelChange я в зависимости от состояния активных секций меняю состояние неактивной(RO). У меня такая проблемка: после запуска инсталлятора неактивная секция "бледного" цвета. Но когда я меняю ее состояния на SF_SELECTED или наоборот, то она выделяется, продолжает оставаться RO, но становится зеленой. Можно ли сделать чтобы RO секция всегда оставалась бледной??? И еще: как сделать неактивной кнопку Далее на странице компонентов? (Мне нада это впихнуть в функцию .onSelChange) Решил этот вопрос: GetDlgItem $0 $HWNDPARENT 1 EnableWindow $0 0 Заранее спасибо! |
Ладно... Оставлю этот вопрос на потом.
Но сразу же хочу попросить помощи о создании странички выбора скина. Нужно что бы слева шли названия скинов, а справа чтоб при наведении на имя или хотя бы при выборе скина показывалась картинка скина. Чекбоксов для выбора скинов будет 10 штук (т.к. скинов всего 10 штук :) ) ну и надо что бы выбор работал 1 из 10. Помогите пожалуйста. |
Возможно, сейчас я скажу слова, на которые обидятся некоторые участники, но просить прощения я не собираюсь, говорю только от себя
Цитата:
Цитата:
Цитата:
А теперь, вы задаёте следующий вопрос #370 Цитирую отдельно: Цитата:
Цитата:
А теперь вы задаёте такой же "вопрос", но так сказать о "просьбе" всё-таки написать этот код Цитата:
dracosha, лично вы, что сделали для реализации нужной вам возможности? Ничего...я ведь прав? А зачем вообще нужна справка по NSIS? И не нужно говорить, что там всё написано на английском языке, я начал изучать NSIS в лет 16-17 не зная английского языка (и сейчас не знаю) и никакого языка программирования, с использованием справки и примеров в папки NSIS\Examples Это так сложно? Ввести в "указатель" в файле справки нужную вам команду и прочитать её описание? Там на все команды написаны подробнейшие примеры Этими словами я не обращаюсь к кому-то конкретно и не хочу сказать, что лично я не собираюсь отвечать/помогать в разрешении вопросов, но посмотрите, как называется наша тема? NSIS - все вопросы, а не NSIS - скажите, что вам нужно, а мы напишем за вас готовый код На написание данного поста меня натолкнуло: 1. У меня сейчас, в данный момент, просто катастрофически не хватает времени 2. Цитата:
Вроде всё. |
K.A.V., Вы конешно имеете полное право на такие высказывания, но Вас же никто не заставляет помогать! Вас просят о помощи, но помогать или нет это решать Вам.
И по-поводу английского языка хочу сказать что я имею полное право говорить о том что я не знаю английского... Да! Вы можете сказать в ответ что есть куча переводчиков и можно воспользоваться ими... Но переводчики не умеют переводить такие специфические тексты как положено. Так что новичку без знания английского с этим разобраться нереально... Если бы переводчики могли переводить все как положено на русский то уже давным давно был бы готовый для скачивания русский хелп по nsis. Я бы сам лично его сделал. Однако его до сих пор нет. И таких примеров как давали Вы лично мне в справке нет. Там конешно же есть похожие примеры в 3 строки, но в этих трех строчках я разобраться не могу, т.к. не понимаю за что отвечает каждый элемент. Примеров с прогой идет конешно же тоже много, но того что мне надо я не нашел, хотя скомпилил полностью все примеры которые были с nsis. Да что тут далеко ходить... Вы сами говорите что еще не все знаете, а что тогда говорить о новичках? Тот скрипт который у меня уже есть на сегодняшний день написан только благодаря Вам и hb860. hb860 сделал отличные примеры на практике. Очень жаль что примеров там еще мало. Форум же для того и существует что бы помогать друг другу. И помощи от Вас я конешно же очень жду, :blush2: а поможете Вы мне или нет это безусловно Ваше право. |
Под постом K.A.V. я подписался
Цитата:
Цитата:
Цитата:
От вас лично требуется взять блокнот, попихать в него примеры из справки и скомпилить. Увидя, как они работают на практике, необходимо реализовать некий алгоритм, последовательность действий, где вы сможете применить этот функционал команд. Вот что требуется. Цитата:
dracosha, попробую завтра пописать для вас. |
Цитата:
И я все больше и больше понимаю что для того что бы я мог разобраться с предстоящими задачами по выбору компонентов мне нужно все таки понимать смысл всех переменных. А я их непонимаю. И то что в хелпе написано для меня непонятно, а когда переводчиком перевожу мне становиться плохо от того как переводится этот текст. |
Цитата:
Цитата:
Цитата:
Не скажу, что всё получалось сразу, даже сейчас не всё получается с первого раза, но усилия, которые прилагаются для реализации нужной возможности не оказываются напрасными, просто нужно запастись побольше терпением и желанием :) Цитата:
Всё, на этом предлагаю прекратить оффтоп :) |
Здраствуйте! У меня вопрос по поводу плагина MSSQL OLEDB plug-in.
Я подключаюсь к sql серверу, делаю запрос и получаю результат с помощью MSSQL_OLEDB::SQL_GetRow. После этого возвращается строка. И если запрос возвращает не одно значение а несколько(можна сказать структуру), то строка будет примерно вот такого типа: Value1|Value2|... Тоесть разделитель это символ | Проблема в том, что мне нужно получить только одно конкретное значение(например первое), а не всю строку. Как мне разбить эту строку? Видел в интернете !insertmacro GET_STRING_TOKEN. Но у меня компилятор его не нашел, и оно я так понял разделяет строку с пробелами. |
Цитата:
Там нужно добавить целую страницу кода :) И как покзано в том коде, ещё нужно создать пару переменных с помощью !define: Код:
!define PART "" Но могу представить на обозрение собственный механизм ;) dracosha, с секциями можно вот так реализовать: Раз уж всем нужна возможность показывать картинки на странице выбора компонентов, то попозже попробую поискать свой код, который я когда-то писал... |
Люди, как сделать чтобы при запуске денисталлятора автоматом выбирался язык который юзер выбрал при запуске инсталлятора?
Записывать выбранный язык в реестр? |
Цитата:
|
Подскажите, пожалуйста!
Нашел в примерах такое System::Call '${sysSetupCopyOEMInf}?e (R1, R2, ${SPOST_PATH}, 0, 0, 0, 0, 0) .r0' Я так понимаю, что таким образом формируется список параметров. Ткните носом, где можно найти описание такого синтаксиса передачи параметров. Ни в документации на nsis.sourceforge.net, ни поиском не могу по этому поводу ничего найти. Наверное не везет :search: |
|
У меня такая проблемка.
Можно ли прочитать имена (не значения) всех параметров одного из разделов реестра? |
NoName01.cpp,
Код:
StrCpy $0 0 Новая статейка: Создание своего инсталлятора на NSIS. Ассоциации файлов. Макросы. Если есть что дополнить - пишите. |
Доброго дня.
Подскажите кто нибудь сумел прикрутить библиотеку 7z.dll к nsis? Меня интересует как использовать функции которые она содержит: - 7z::CreateObject - 7z::GetHandlerProperty - 7z::GetHandlerProperty2 - 7z::GetMethodProperty - 7z::GetNumberOfFormats - 7z::GetNumberOfMethods - 7z::SetLargePageMode |
Полезный советик.
Не пинайте, если уже обсуждалось. Думаю, некоторые сталкивались с проблемой отображения приветствия в первом окне инсталятора, если имя и версия устанавливаемого приложения слишком длинные. Чтобы не извращатся над именем программы, дописывать дополнительные строки в стандартный скрипт, менять шрифт инсталятора и т.д., нашел, имхо, самый легкий выход из этого положения. Если используете NSIS 2.46, интерфейс "MUI.nsh", то в файле ...\NSIS\Contrib\Modern UI\ioSpecial.ini, в 13 и 14 строках, вместо Left=120 и Right=315 прописываете соответственно Left=116 и Right=326. Всё! Получится, примерно, так: ![]() Интерфейс от этого практически не пострадал, зато, под имя/версию теперь выделена целая строка, большенство длинных названий влезет... |
Цитата:
Задавать вопросы, которые описаны в файле справки, это совсем не дело... Цитата:
1. Чтобы DLL взаимодействовала с вашим инсталлятором (имею ввиду чтобы функции библиотеки принимали и отдавали значения) необходимо, чтобы сама DLL была написана специальным образом (там добавляются специальные функции) 2. Если DLL не написана специально для языка NSIS (т.е. это не плагин к NSIS), как в нашем случае, то для того, чтобы передать и получить данные в/из функции, необходимо вызывать функции библиотек через System.dll Цитата:
Не хотите более подробно описать, за что отвечает каждый элемент в данном файле конфигурации? hb860 знает, почему я это говорю ;) :) :) :) Да, кстати, hb860 единственное пожелание к статьям, это то, как ты выделяешь двойные кавычки... #23 |
Цитата:
1. их так лучше видно в Notepad++ 2. это способ экранирования в NSIS спецсимоволов. Люблю единую системы экранирования. Да, я знаю про одинарные и двойные, но предпочитаю использовать $\"это$\". |
Цитата:
Понял, что: [Field 1] - это координаты для картинки [Field 2] - координаты для приветствия, то что жирным шрифтом [Field 3] - координаты для остального текста NumFields=3 - по видимому, количество элементов Количество элементов на странице, с помощью ioSpecial.ini, можно увеличивать, как на странице приветствия, так и на финишной странице. Например, линк на сайт. Примеры здесь и здесь. Вот и все мои познания :) |
Цитата:
Но вызов через Код:
System::Call "7z::CreateObject()" Параметров я все-же не знаю. |
Когда вызываются функции библиотек с помощью System.dll, предполагается, что вызываемая библиотека должна находиться в системном каталоге (System32), в нашем случае, в System32 должна находиться библиотека 7z.dll
Цитата:
|
K.A.V. , как там на счёт кода когда при выборе компонента отображалась картинка? Очень надо
|
Painkiller, я сейчас занят...просто нет свободного времени, как будет так посмотрю (возможно даже завтра)
|
Люди, а можно на nsis написать обработчик нажатий клавиш?
|
нажатий где ? в окне или глобально в системе ?
и самое главное - зачем ?? |
Цитата:
NSIS пора наверно С/С++ вытеснять? :lol: Не пробовал, но в самом NSIS вы такого не напишите, можно написать библиотеку на С/С++ и вызывать её, но мне кажется маловероятным использование данной библиотеки, например, на странице выбора компонентов.... Показываем картинки на странице выбора компонентов при наведении курсора мыши на компоненты Необходимо внести изменения в файл интерфейса (\Program Files\NSIS\Contrib\UIs\modern.exe) Открываем данный файл с помощью ResHacker, переходим в диалог 105 Создаём элемент "BITMAP", устанавливаем ему идентификатор (поле ID), например 9999 *Вот только в этом неудобство, приходится подгонять, если добавлять элемент в диалог 104 (где и есть выбор компонентов), то при компиляции вы получите сообщение об ошибке На этом редактирование файла интерфейса закончено (ну только вам нужно правильно подогнать расположение элемента), сохраняем изменения и закрываем ResHacker Открываем файл \Program Files\NSIS\Contrib\Modern UI\System.nsh (можно скопировать данный файл в каталог с вашим скриптом и редактировать его, чтобы не распростарнять изменения на ваши последующие скрипты, НО при этом, необходимо заменить строку !include "MUI.nsh" в вашем скрипте на !include "System.nsh"), ищем в данном файле строку Код:
!insertmacro MUI_DESCRIPTION_BEGIN Код:
StrCmp $0 ${section1} 0 +2 9999 - идентификатор добавленного нами элемента sectionX - идентификаторы секций Ну а пути к файлам прописываем полные... :) Да кстати, только BMP файлы, и как я писал раньше, все изображения должны быть одного разрешения, иначе получите глюки ;) Ещё не устали? Это ещё не всё! :tongue: Находим строчки, где прописаны какие странички инсталлера показывать (в вашем скрипте) Код:
!insertmacro MUI_PAGE_WELCOME Ну и последнее, добавляем функцию, которая и скрывает этот элемент (в вашем скрипте) Код:
Function MyCustom И не смейте потом где-нибудь писать, что вы сами реализовали данную возможность! :aggressiv ;) |
Цитата:
|
Цитата:
|
Цитата:
|
Уважаемый K.A.V., пару страниц назад задавал вам вопрос по поводу создания лога установки инсталятора нсис изменить скрипт которого нет возможности (есть ток скомпилированный вариант) вы вроде дали довольно понятное разъяснение на основе которого я сделал скрипт, но лог так и не получил :(, может я что не так сделал?
Вот скрипт: Код:
!define PRODUCT_NAME "Nsis лог" да забыл сказать что после выполнения полученной программы получаю красивое окошко с заголовком "error" и одной кнопочкой "ОК" (которое предусмотрено в скрипте) |
как сделать чтобы при создании ярлыка он запускался от имени админа
|
XCV, я привёл вам код, но его не тестировал, нет, он конечно работает, когда "вытаскивает" лог из текущей установки, а когда данный код используется для "вытаскивания" из другого окна инсталлера - почему-то не работает... :(
Хотя я проверял, дескрипторы окон одинаковые (когда вызывается вытаскивающий EXE и тот, в котором хранится лог), в чем проблема я не разбирался...да ведь и не особо нужно... ;) |
Цитата:
|
ещё один вопрос господа профессионалы, в нсис скрипте команда
Код:
Exec "files.exe" ЗЫ: Код:
ExecWait "files.exe" |
Вообще ExecWait должен ждать...Посмотрите, PID процесса не меняется? Может запускаемый файл сам себя перезапускает :dont-know
|
Цитата:
|
проблемму эту обошел, но все равно интересно на будущее
|
Цитата:
Я бы сделал примерно следующее: написал бы DLL, которая получает список процессов, запущенных в данный момент, и, если полный путь процесса совпадает с файлом, который мы запускали, снова определяем запущенные процессы...когда процесс завершит свою работу, продолжаем... :) |
Цитата:
|
Цитата:
|
Цитата:
|
Есть исходник библиотеки, нужно dll пересобрать как плагин для nsis.
Кто сталкивался, знает как и что нужно делать? |
Вложений: 1
andreyl, там добавляется буквально 1 "h" файл, и вызывается функция (для инициализации с NSIS), ну ещё и заголовок функции меняется, ну и ещё 2 функции для передачи параметров из NSIS скрипта и получение данных из DLL :)
Пример пустой функции в прикреплённом архиве В dllmain.c #include "exdll.h" Нужный файл :) EXDLL_INIT(); Инициализация, без этой функции вы не сможете принимать/отдавать параметры popstring(tmp); Получаем данные из NSIS скрипта pushstring(tmp); Отправляем данные в NSIS скрипт Переменная tmp должна быть типа Char |
Всем привет раскажите про NSIS можно ли спомощью него перепокавать любую прогу и как? У меня есть пару програм которые просто не хотят устанавливатся с помошью обычных ключей. И плиз скажите как правельно покавать в SFX архивы. Заранеее спасибо.
|
tiylar,
Цитата:
Ссылки на остальные уроки - в шапке ;) Цитата:
|
Добрый вечер/день. Подскажите почему после компиляции иконка у скомпилированного файла не меняется(размер больше 1Gb) на указанную.
|
Цитата:
|
Да именно так и есть из-за ограничения размера выполняемого файла иконка не отображается. Да я тоже не писАл инсталляторы, но вот пришлось, после, приблизительно, месяца я избавил себя от кучи проблем и беготни.
|
Подскажите пожалуйста, можно ли добавить в инсталлятор сразу все файлы и подпапки из директории pkgdir? (я имею ввиду одной командой, а не прописывать в скрипте каждый файл, который нужно включить в инсталлятор) и чтоб при распаковке инсталлятора, была сохранена структура папок, как в папке pkgdir?
|
CyberMaster
Код:
SetOutPath "Куда распаковать файлы" |
K.A.V., да эт понятно :) вот только если папок штук 150 очень надоест прописывать пускай не каждый файл, но каждую папку. Поэтому я спрашивал можно ли добавить в инсталлятор сразу все файлы и подпапки из директории pkgdir?
|
CyberMaster,
Код:
File /r "Папка для упаковки\*.*" |
K.A.V., hb860, большое спасибо!
И еще один глупый вопрос :) Как изменить иконку деинсталлятора? |
Код:
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" MUI_UNICON - иконка деинсталлятора Вы, например, можете использовать такой вариант: Код:
!define MUI_ICON "d:\Мои иконки\windows.ico" |
Подскажите кто нибудь как сделать картинку фона при инсталляции? (Смотрел пример в папке Examples но нифига не понял)
И еще такой вопрос, можно ли сделать музыку при инсталляции и если можно то как? |
McG
В начале кода Код:
!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit Код:
Function myGuiInit |
K.A.V., включи в учебник
|
Перепробовал штук 20 скинов SkinCrafter Plugin и не один не работает, кроме Skinastic.skf. С чем это связано и можно ли решить данную проблему?
|
CyberMaster, шапка данной темы обязательна для прочтения
Расширение функциональности -> Интерфейс SkinCrafter Plugin -> Инструкция по использованию от K.A.V. |
K.A.V., я так понимаю сначала звук и картинку нужна распаковать в папку TEMP а потом читать их оттуда функцией BgImage. А как так сделать чтоб при запуске инсталлятора сразу само распаковывались звук и картинка в папку TEMP а по окончанию действий инсталлятора удалялись оттуда?
|
K.A.V., да я читал это естественно. И библиотеку которую вы давали тоже юзал (собственно на другой библиотеке вообще не один скин не грузится).
|
McG
Файлы bground.bmp и song.wav должны находиться в одной папке с вашим скриптом Код:
Function myGuiInit Код:
Function .onGUIEnd CyberMaster, вот вам моя библиотека, качал не помню когда, удалил парочку ресурсов, тем самым размер сократился с 5 Мб до 300 Кб, функционал не поврежден :) Подгружаются все скины (по крайней мере какие я тестировал, а их примерно штук 20 было :) ) Забыл, обращаться с вызовом функции нужно к System.dll |
Это реально сделать, если да то подскажите плз как.
Производим вызов файла инсталятора с различными параметрами. Внутри инсталера в зависимости от значений параметров производится дальнейшая установка. |
ant20
В начале кода Код:
!include "FileFunc.nsh" Код:
Function .onInit Функция GetOptions определяет 1 параметр и его значение (если есть), например, командная строка инсталлятора: Код:
C:\Install.exe /Silent /Test 12345 /OtherPar |
ant20, посмотрите пример в топике про оперу. Я там как раз разбираю командную строку, http://forum.oszone.net/thread-49157.html
А вообще, принцип тот же, что описал выше уважаемый (как минимум мной) K.A.V.. |
Подскажите пожалуйста, как сделать следующее.
Можно ли сделать, чтобы в зависимости от выбранного пользователем языка, при запуске инсталлятора, был установлен тот или иной файл? Конкретнее, есть русская программа, она была переведена на английский, все сопутствующие с ней файлы остались прежними - изменился только exe'файл программы. Цель добавить в дистрибутив файлы "Программа_rus.exe" и "Программа_eng.exe", и в зависимости от выбранного языка инстяллятора один из этих файлов будет установлен с именем "Программа.exe". |
Можно
Код:
Section "!${PRODUCT_NAME}" secOPERA Код:
Section "!${PRODUCT_NAME}" secOPERA |
Подскажите пожалуйста,как реализовать выбор одного компонента исключающий выбор других компонентов в пределах одной секционной группы компонентов? т.е:
Код:
SectionGroup "A" |
Цитата:
В переменной $LANGUAGE хранится ID выбранного языка (1033 - выбрали английский, 1049 - выбрали русский), поэтому распаковку файла можно реализовать гораздо проще: Код:
Section "Моя программа" Там описано, и в этой теме в доль и поперёк уже разжевали до немогу работу с секциями Имейте совесть, ну пожалуйста, мы уже даже не направляем никого в файл помощи NSIS, мы просим вас хотя бы прочитать наш справочник на русском языке, это не совсем дико звучит? hb860, оформи ссылку на справочник в шапку темы, выделив его жирным красным цветом :) И шрифт примерно на 72 сделать, чтобы все увидили :biggrin: совсем все обленились, даже лень русский help почитать... |
За справочник спасибо! но, когда отметишь группу А, отмечаются два компонента или все, а нужно только один компонент или снять все компонеты.
Код:
SectionGroup /e A |
kotkovets, я из принципа вам сейчас не дам готовый ответ, ведь я не зря вам написал:
Цитата:
Если честно, утомляет отвечать (и искать за вас нужные посты) по несколько раз на одни и те же ответы, когда готовый ответ уже есть в этой теме |
K.A.V просматривал я всю ветку темы, однако сам не смог разобраться, по этому просил помочь.
|
Разобраться в чем? Не у меете читать по-русски? Или просто лень читать все посты?
Пост #307 |
Как реализовать выбор одного компонента одним нажатием исключающие выбор двух других компонентов в одной группе? на примере поста #307 выбор получается двойным нажатием...
|
В рамках учебника:
Создание своего инсталлятора на NSIS. Определяем системный диск |
Цитата:
Создание своего инсталлятора на NSIS. Один инсталлятор для x86 и х64 систем сразу Там есть пример скрипта. Вам надо его доработать во так Код:
Section |
|
Вопрос снимается, разобрался сам. Все дело было в строчке SetCompressor /FINAL /SOLID lzma
|
Цитата:
Для меня данная возможность не очень уж такая нужная, чтобы тратить время на разработку более лучшего механизма |
Цитата:
Справочника NSIS . |
Друзья, помогите решить таков вопрос. Проверить версию установленной программы, и если ее версия больше устанавливаемой то выдать сообщение "Установка на более новую версию запрещена".
|
Вложений: 1
В начале кода:
Код:
!include "VersionCheck.nsh" Код:
ReadRegStr $0 HKLM "SOFTWARE\MySoft\MyProgram" "Version" Ну и измените путь к параметру в реестре, который содержит версию установленной программы P.S. Перед компиляцией прикреплённый файл необходимо распаковать в директорию "Include" (\Program Files\NSIS\Include) |
K.A.V.
Вот спасибо, выручил. |
Кто подскажет как зарегистрировать библиотеки под Win7 x64 - RegDLL только в x86 работает?
|
Цитата:
Пробовали RegDLL? Пробовали простым обращением к $SYSDIR\regsvr32.exe? (как в Win 7 не в курсе) Пробовали RequestExecutionLevel admin? (ну мало ли, этот UAC ;)) И вот ещё (взял отсюда) попробуйте: Код:
!define LIBRARY_X64 |
Друзья, помогите добавить в этот скрипт выбор установки ярлыков (Для всех пользователей; Для текущего)
|
Цитата:
Цитата:
Цитата:
Цитата:
K.A.V., было круто видеть ваши статьи у себя на сайте ;) Krinkels, к чему ТАКОЙ изврат? Почему бы секциями не сделать? Компилить я этот код не буду, я вам напишу, что добавить. Вверх: Код:
Var Chk4 Код:
[Field 5] |
hb860
Цитата:
Цитата:
|
Krinkels
Заключайте пожалуйста команды/скрипты в тег CODE, неудобно читать пост Вторая функция в InstallOptions используется только тогда (в вашем случае Selected), когда мы хотим выполнить какие-либо действия в режиме реального времени (например при отметки галочкой какого-либо пункта сделать другой элемент неактивным), в вашем же случае, вы просто читаете значения параметров, поэтому функция Selected вам не нужна, ну по крайней мере, зачем писать лишнее? ;) Вот как будет выглядеть "правильнее" Код:
!define PRODUCT_NAME "My Prog" |
K.A.V.,
Цитата:
Цитата:
|
Цитата:
Код:
StrCmp $Chk1 "1" 0 No_Check_1 Значения то мы прочитали...я просто дал вам пример того, что вторая функция "Selected" вовсе не нужна...Ну вообщем делайте как считаете нужным ;) |
K.A.V.
Спасибо за совет, вечером обязательно попробую :) |
hb860, У меня на Windows 7 HP x64 не работает RegDLL
|
Похоже, у меня либа просто реганая оставалась. На чистой системе и у меня не работает.
Говорят, regDLL вызывается из 32битного инсталлятора и работать вовсе не должна. В форумах нсис говорят юзать то, что предложил K.A.V.: Цитата:
|
А как поменять картинку чекбоксов в модуле nsDialogs ?
|
Полный ноль в NSIS, но надо создать инсталлятор. Подскажите пожалуйста:
1) как сделать так чтобы место установки бралось из реестра? т.е. проверялся ключ уже на компьютере где идет установка и в качестве пути по умолчанию предлагался бы найденный в реестре ключ 2) нужно будет создавать патчи, возможно ли такое в NSIS? 3) где можно поменять стандартный текст (типа "Вас приветствует мастер...")? 4) как добавить свою картинку в поле слева (видел такое в разных NSIS'овских инсталлерах)? |
Здраствуйте! Инсталлятор должен зарегистрировать службу. Кто-то знает как такое делается на NSIS?
|
Цитата:
Код:
Function .onInit Цитата:
Цитата:
Цитата:
Код:
Таким обзразом, Цитата:
и вот тут http://forums.shoutcast.com/showthread.php?t=208627 Там всё есть. ------------------------------------------------------- Цитата:
|
Цитата:
Код:
!define PRODUCT_DIR_REGKEY "Software\Bla-Bla Soft\The Program" |
Habetdin, сообщение полезное ;)
Цитирую справку: Цитата:
|
Еще одну проблему обнаружил - на 64-битной семерке не удаляются ярлыки и группа прогаммы из меню Пуск - хотя из папки в каталоге Users линки удаляются, но в самом Пуске они видны - как это победить?
|
Попробую повторить вопрос от Archius - ибо тема для меня важная, а ответов так и не было...
В Windows 7, Server 2008 и т.п. в ярлыках приложений во вкладке "совместимость" появилась галочка "Выполнять эту программу от имени администратора". Некоторые мои приложения (например, настройка служб моей системы) без этой галочки работают некорректно - в случае этой утилиты, система отрубает приложению доступ к SCM. Может ли NSIS создавать ярлыки (в меню пуск, на рабочем столе) - у которых галочка "Выполнять эту программу от имени администратора" будет установлена по умолчанию? Может, есть какие расширения для этого? |
Цитата:
Юр, вот тут глянь http://nsis.sourceforge.net/Shortcut..._Windows_Vista Цитата:
|
hb860, Спасибо - до нынешнего времени интернет был с трафиком и лазять по сетке накладно было и не мог сам найти все это безобразие
|
hb860, собственно у меня вопрос:
Можно ли в NSIS сделать так, к примеру, у меня есть основная секция, например, PROGRAM_BASE и один дополнительный компонент, напрмер, COMPONENT, который помещён в SectionGroup, сам COMPONENT, будет находится в $EXEDIR\Addition\COMPONENT.exe или в $EXEDIR\COMPONENT.exe, так вот сам вопрос: можно ли в самом начале установки сделать проверку на наличие COMPONENT.exe в $EXEDIR\Addition\ и в $EXEDIR\ , и если этого COMPONENT.exe нет, то скрыть всю SectionGroup, а если этот COMPONENT.exe, есть, то отобразить SectionGroup. Почитав справку, увидел что в SectionGroup нет скрытия как на Section (Section "-Any_Name" или Section # Any_Name), есть какой-то способ, чтоб реализовать мою затею? Если можно напишите небольшой пример... И ещё, вопрос: можно ли через скрипт изменять размер, например, прогресс бара? |
hb860, RequestExecutionLevel и SetShellVarContext не помогают и ярлыки из Пуска не удаляются :(
|
Завтра у меня будет VAIL x64, я посмотрю на конкретном примере
|
Цитата:
На все ваши другие вопросы давно есть ответы тут: http://forums.winamp.com/showthread.php?postid=1765792 Цитата:
Вот вам пример лично от меня: Код:
!include "MUI.nsh" |
Вложений: 1
доброго времени суток
я решил скомпилить FirefoxPortable.nsi но с кое-какими изменениями: запуск приложения с параметрами и рабочей папкой параметры в коде указать получилось: Код:
StrCpy $EXECSTRING `"$PROGRAMDIRECTORY\$PROGRAMEXECUTABLE" -app application.ini -override "%APPDATA%\WebApps\quake.live@prism.app\override.ini" -webapp quake.live@prism.app -profile "$PROFILEDIRECTORY"` мая рабочая папка : Код:
"C:\Program Files\FirefoxPrismQuakeLive\Firefox\Data\profile\extensions\refractor@developer.mozilla.org\prism" |
Цитата:
Впрочем, если кому интересно, проблему запуска программы под семеркой с админскими правами решил с помощью манифеста, как описано здесь или здесь |
Цитата:
Простите за оффтом, но вот вам мануал, как сделать это приложение портативным |
Цитата:
как компилить обычный знаю, в посте вроде я все ясно написал, но все равно спс за мануал |
Добрый день. Подскажите пожалуйста, как в NSIS узнать длину введенной строки (используется собственная страница с текстовым полем)
|
Код:
StrLen $0 "лопата" Справку смотрели? Там есть это. |
мм.. спасибо. да смотрел, только не правильно понял справку.
|
hb860, извиняюсь за столь необычный вопрос, но хотелось уточнить, вдруг подскажите:
Код:
4.9.3.13 RegDLL |
Это оффтоп, но:
RegDLL file.dll ищет и вызывает в file.dll функцию DLLRegisterServer Если функция регистрации называется по другому, используется entrypoint_name. Это всего лишь имя функции регистрации библиотеки в системе, и никак не свзянно с именем раздела или чем то таким. Код:
RegDLL $INSTDIR\foo.dll MyRegFunc |
hb860, На 64-битной системе не тестировал удаление ярлыков из Пуска еще?
|
SamLab, я себе делал сборку и на Win 7 64-bit , без проблем удалялось.. как из Пуск так из Пуск/Программы...
Может ты в скрипте ошибся малёха... |
Ставлю (пример одного элемента)
RequestExecutionLevel admin ... SetShellVarContext all CreateDirectory "$SMPROGRAMS\SAM CoDeC Pack\Плееры" CreateShortCut "$SMPROGRAMS\SAM CoDeC Pack\Плееры\Media Player Classic - HomeCinema.lnk" "$PROGRAMFILES64\SAM CoDeC Pack\Players\MPCHC\mpc-hc64.exe" '' "$PROGRAMFILES64\SAM CoDeC Pack\Players\MPCHC\mpc-hc64.exe" 0 CreateShortCut "$DESKTOP\MPC HomeCinema.lnk" "$PROGRAMFILES64\SAM CoDeC Pack\Players\MPCHC\mpc-hc64.exe" Удаляю SetShellVarContext all RMDir /r "$SMPROGRAMS\SAM CoDeC Pack" |
SamLab, внешне вроде нормально, должно удалять...
Я лично немного по другому делал Код:
|
hb860, может подскажете как реализовать вот такое:
- необходимо сделать так, при установке инсталлятора, на странице инсталллятора выбора компонентов (секций), если не выбран ни один компонент (секции), то становится не активной (блокируется) кнопка "Далее" ("Next"), а если выбран хотябы один компонент (секция), то кнопка "Далее" ("Next"), активна, для продолжения настройки и установки инсталлятора. |
Цитата:
Samlab, Lisabon прав. Я установил х64 - у меня нет проблемы с ярлыками, они удаляются корректно. Код такой же как у тебя, только группа называется XnView |
После недавнего общения с Lisabon,я созрел на написание нового материала по NSIS.
Встречайте: Создание своего инсталлятора на NSIS. Подробней о скрытых секциях. Скрытые группы секций. |
Добрый день. Подскажите пожалуйста, как в NSIS определить версию ОС под которой запущен инсталлятор?
требуется, т.к. на win2k, xp, vista немного отличаются сборки ПО, под который создается инсталлер. ========== Сам отвечу. нашел. !include WinVer.nsh ... ${If} ${IsWin2000} ... ${Else} ... ${EndIf} |
hb860, есть ещё вопрос:
- есть SectionGroup 1 и SectionGroup 2, также в инсталляторе предусмотрено InstType Max и InstType Min . Я хочу чтобы при выборе InstType Max и InstType Min, все чекбоксы применялись только к SectionGroup 1, а SectionGroup 2 - была независима от SectionGroup 1 и от выбора InstType Max и InstType Min, и также по-умолчанию SectionGroup 2 - была выбрана. В SectionGroup 2, я убрал SectionIn, но при выборе InstType Max и InstType Min, изменяются чекбоксы в SectionGroup 2. Если можно пример, для наглядности. |
и все таки есть вопрос:
подскажите пожалуйста, как преобразовать к верхнему регистру: делаю так: !include StrFunc.nsh ... далее в функции StrCpy $0 "$txtCSPSN1$txtCSPSN2$txtCSPSN3$txtCSPSN4$txtCSPSN5" ; собираем куски серийника в одну переменную ${StrCase} $SerialCSP $0 "U" ; преобразуем к верхнему регистру на последней строке при компиляции получаю ошибку: !insertmacro: FUNCTION_STRING_StrCase !insertmacro: macro "FUNCTION_STRING_StrCase" requires 0 parameter(s), passed 3! основывался на данной статье http://nsis.sourceforge.net/StrCase ==== сам отвечу: разобрался... перед вызовом надо было описать функцию след образом: # Описание используемых функций ${StrCase} а потом ее только вызывать |
Владельцы 64-битной Windows 7 попробуйте пожалуйста поставить и потом удалить SAM CoDeC Pack и посмотреть останется ли у вас в Пуск/Программы ветка SAM CoDeC Pack - http://samlab.ws/soft/samcp - не могу победить никак - не удаляется и все тут - может у меня в винде глюк...
|
SamLab,
Цитата:
|
Lisabon,
Код:
SectionGroup 1 Вообще, дайте-ка пример вашего кода. Я гляну чё вы там написали |
Добрый день/ночь еще раз.
имеется следующее: несколько установочных MSI файлов, которые инсталлятор должен устанавливать в определенном порядке, причем каждый MSI пакет должен ставиться c определенным серийником. делаю так: собственная страница с запросом серийников (3 шт), далее где секция установки файлов вызываю установку MSI файлов. подскажите пожалуйста, можно ли сделать так, что бы при некорректной установки MSI файла возвращало на страницу с серийником. ... как это выглядит у меня в скрипте Код:
!include "nsDialogs.nsh" я правильно понимаю что копать надо в сторону ShowWindow $HWNDGetSN ${Команда} ? только вот какую команду надо отправить? уже пробовал WM_ACTIVATE, WM_SETFOCUS, SW_SHOW , SW_SHOWNORMAL ... но не получается. =============== Еще нашел функцию RelGotoPage (http://nsis.sourceforge.net/Go_to_a_NSIS_page), но инглиш мой немного хромает, подскажите плз, как ей пользоваться =============== а почему если просто в месте перехода вызвать Call GetSN то инсталлер закрывается без каких либо вопросов? |
с предыдущим вопросом разобрался:
Код:
когда возвращаюсь снова в секцию установки (например когда во втором файле 2.msi была ошибка, и он не установился) то сначала запускается установка 3го файла 3.msi и одновременно начинается установка 1-го. Собственно вопрос? как сделать так, что бы не продолжалась "старая" установка, т.е. обнулить состояние данной секции? |
Потому что скрипт выполняет процесс установки уже. Вам надо писать свою страницу и функцию установки. MUI_PAGE_INSTALLFILES (или как там её) вам уже не подходит в вашем случае
|
спасибо, но данное сделал след образом: после установки есть страница которая проверяет как прошла установка... если неверна, то возвращает на страницу с серийниками, если все ок. то к странице финиша
|
Создание своих собственных ключей для инсталлятора NSIS
Это для тех, кому мало /S, /D и /NCRC |
Как прописать System32 чтобы NSIS сам определял битность куда распаковаться в system32 или в syswow64
стоит $SYSDIR он лепит в system32 всегда без руздумий даже на 64-битной системе прописать $WINDIR\SysWOW64\ нельзя т.к. на 32-битной системе такой папки нет нужно чтобы NSIS на 32-битах в System32 распаковывал, а эта же установка на 64-битах в SysWOW64 |
Цитата:
Код:
Name "GetVersion Example" |
kotkovets, Систему определяет правильно, но распаковывает сразу в обе папки все равно - взял руками закинул файл в system32 и он автоматом скопировался в wow - значит сама винда копирует
|
И удаляются одинаковые файлы с двух папок одновременно?
|
kotkovets, Да! Как зеркала друг друга папки System32 и WOW64!
|
По скрипту в 32-битной системе папка C:\Windows\SysWOW64 не создаётся.
В 64-битной системе ,предполагаю, это системные переменные , которые не рекомендуется изменять - глюки возможны. Возможно Винда копирует файлы для совместимости 32-разрядных и 64-разрядных приложений. |
kotkovets, Странная совместимость - когда я указываю 64-битным файлам в System32 а в WOW 32-битные, то получается какие в последнюю очередь копируются - те и помещаются в обе папки
|
Доброй ночи, друзья :)
Вопрос у меня вот назрел. Хочется сделать установщик-обновлятор. Чтобы он, если вдруг уже программа установлена, находил все экземпляры запущенной более старой версии программы, закрывал их и корректно ставил новую версию в тот же каталог с обновлением существующих файлов. Я сделал пока через FindWindow/SendMessage в цикле. Мне бы хотело более человеческий способ. Есть такой? И вот еще вопрос, как сделать, чтобы установщик в конце замочил сам себя? Деинсталлятор же умеет так. |
wander, рулите процессами через http://nsis.sourceforge.net/Processes_plug-in
Как понять, "закончил себя"? У вас он не закрывается? Может, конкретный код глянем? Только не в приват :) |
Цитата:
Цитата:
Спасибо :) |
Возник вопрос
Помогите с решением ОS - win7 необходимо скопировать файл по адресу: c:\Users\Default\AppData\Roaming\ если использовать $APPDATA копится в c:\Users\user\AppData\Roaming\ SetShellVarContext all $APPDATA копится в c:\Users\All Users\AppData\Roaming\ есть ли возможность закинуть файл в дефолтовый профиль используя предопределенные переменные |
Здравствуйте! У меня небольшая просьба помочь мне со скриптами на NSIS, если есть возможность и время, то можно ли мне помочь разобраться с ними, я был бы весьма признателен...
Есть весьма интересный пример RememberComponents.rar (прикрепил к сообщению), я хотел бы этот скрипт адаптировать в мой скрипт Nero_v10.0.rar (прикрепил к сообщению)... Собственно мне не понятно как адаптировать часть скрипта RememberComponents, Function .onInit и Function un.onInit , применение этих функций нарушает мои SectionGroup, тобишь все компоненты на странице MUI_PAGE_COMPONENTS идут в один ряд, без использования SectionGroup. Вот скрины: до ![]() после ![]() Если вам не сложно объясните как и что подправить или добавить в мой скрипт Nero_v10.0.rar... можно примером.... или правкой моего скрипта Nero_v10.0.rar. Сам скрипт писался только для собственных нужд, так как другие сборки в сети меня не устраивают... Заранее благодарен... |
wander,
Цитата:
veln, вам поможет чтение реестра, ветка HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList, значение Default. Вот вам небольшой примерчик. Работает только в Windows Vista и Windows 7, для ХР путь на винте, как вы понимаете, другой. Код:
outfile "hello world.exe" |
У меня проблема с установкой программы в операционной системе win7.
Запускаю установку, указывают путь для установки по умолчанию в "Program Files\Название программы". Для работы программы требуется ключ, копирую его в каталог с программой. Все отлично работает. Проблема возникает когда захожу под другим пользователем. Установленная программа говорит, что не зарегистрированна. Странно! Проверяю есть ли ключ в каталоге с программой. Его там нет. И так для остальных пользователей. Например меняешь какой-нибудь файл под одним пользователем, под другим пользователем он остается прежним. С чем это связано? Как это можно исправить? Может быть в инсталяторе как-то указать, что каталог с программой общий для всех пользователей? |
Разобрался. Надо было дать полный доступ для всех пользователей на каталог, куда устанавливается программа.
Для этого надо было установить AccessControl plug-in http://nsis.sourceforge.net/AccessControl_plug-in и написать: AccessControl::GrantOnFile \ "$INSTDIR" "(S-1-1-0)" "FullAccess" |
Привет всем, доброго Вам времени суток.
Пожалуйста помогите с кодом... Создал отдельную страницу ;-------------------------------- Цитата:
А как сделать что-бы она работала не как не разберусь. ;-------------------------------- Пока могу сделать только так... ;-------------------------------- ; Пользователь сам выбирает, какие ярлыки ему нужны, по умолчанию все включено Цитата:
Так вот как сделать что-бы моя страница заработала(реагировала на действия пользователя) |
Это: Код:
!insertmacro MUI_PAGE_WELCOME Ничего не надо, простите. Ночью спать надо, а лазию в инете :) У вас в функции fnCustomDestroy напрочь отсуствует анализ контроллов. Каждый контрол должен иметь свою переменную для обращения к нему. Я вам написал пример для ярлыков рабочего стола и меню Пуск, посмотрите и сделайте остальное по аналогии. Я надеюсь, у вас есть строчка в скрипте вида Цитата:
|
Большое спасибо за ответ.
Да эти строки в моём скрипте присутствуют... Цитата:
|
Отлично всё получилось и работает.
Спасибо!!! Подскажите пожалуйста как изменить выделенное красным, сделать другую надпись. Цитата:
Можно ли добавить ещё одну собственную страницу, если можно то как это сделать? |
Я уже писал в этой теме ответ
Впрочем, мне самому его в справке быстрей найти Код:
function fnCustomInit Путные вещи пишут :) |
Спасибо познавательная информация.
А на второй вопрос, можете ответить? Цитата:
|
Ну а что мешает написать два раза то:
Код:
Page custom fnCustomInit1 fnCustomDestroy1 |
|
Hector, при сборке ставится плагин BrandingURL и в скрипте записываются данные строки.
|
Чтобы изменить одну строку текста нужен плагин?
|
Hector, в скрипте стерите строку BrandingText
ЗЫ: убирать копирайты плохо. Чем вам эта строка мешает? :) |
Цитата:
насчет копирайтов, это картинка для примера, к Lisbon'y отношения не имеет. |
Цитата:
Ищите "BrandingText блаблабла" |
Habetdin, я ж говорю, картинка для примера, готового скрипта нет, я пишу его с нуля, и хочу заменить дефолтовую фразу Nullsoft Install System v2,46 внизу окна на свою
|
Hector,
Код:
BrandingText "Мой текст :P" |
понял, спасибо
|
Мне потребовалось сделать инсталлятор с возможностью выбора только одного пункта. Прочитал учебник по NSIS, сделал как там описано - все работает. Однако, поскольку эти элементы однотипные, захотел их поместить в SectionGroup, но тут вышла заминка - если нажать на серый чекбокс заголовка группы секций, то реакция получается не очень адекватная - выбирается второй пункт к тому что уже выбран по дефолту. Подскажите пожалуйста, можно ли и как установить игнорирование нажатия на чекбокс заголовка группы секций?
|
Насколько мне известно, нет
|
Друзья, помогите прояснить такой момент: как в NSIS в зависимости от выбранного языка записать в ini определенную строчку?
|
Krinkels,
В этой статье внизу расписано с примерами |
Создал я свою страничку с 3-мя RadioButton, но на ней кнопки: "<Назад" "Далее>" "Отмена" действуют одинаково, т.е. выполняют действие отмеченное в RadioButton. Можно ли как то это исправить?
|
Вы написали неправильный код
Вот его и исправьте Вы считаете, что кто-то на форуме является шаманом и вот как вам голословно способен помочь? Хоть покажите, чё написали, а мы посмотрим и попробуем подсказать |
Делал на основе этого кода:
ReInstall.ini: Код:
[Settings] Код:
!include "MUI.nsh" Просто добавил лишний RadioButton который ничего не делает. В этом коде тот же косяк, "<Назад" и "Далее>" действуют одинаково. |
Код:
Page custom [creator_function] [leave_function] Код:
Page custom PageReinstall Попробуйте Код:
Page custom PageIn PageReinstall |
hb860
Цитата:
|
Используя ваш пример «Создание собственных страниц инсталлятора», вот сделал такую страничку.
Пример кода: Цитата:
Всё работает лишь тогда когда прописывается путь полностью… Пример кода: Цитата:
Пример кода 1: Цитата:
Пример кода 2: Цитата:
ВОПРОС Как сделать, чтобы не прописывать путь к файлу полностью? |
Цитата:
File /r "TotalCmd\*.*" или так: File /r "TotalCmd\*.key" Скрипт должен находится на одном уровне с папкой TotalCmd |
Доброго времени суток. У меня возник следующий вопрос(заранее прошу прошения, если такая тема уже всплывала)
при создании инсталятора, мне необходимо открыть файл (не exe) дождаться чтобы пользователь проделал с ним какие-либо операции? закрыл этот файл и только потом установка продолжилась. Открываю файл с помощью Код:
ExecShell "open" Код:
ExecWait Заранее Спасибо. |
Цитата:
Код:
ExecWait 'notepad "Путь к файлу.txt"' Код:
ExecShell "open" "Путь к файлу.txt" |
Спасибо!
|
![]() Код:
Спасибо вам за ранее оказанную помощь в написание данного кода. |
WolfSoul
Ну по первому вопросу, нужно было делать страничку через ini, там все проще делается. В ini в параметрах чекбокса можно поставить State=1 и он будет отмечен. По второму вопросу. Скорее всего придется сохранять значение в реестре, и про следующем запуске его читать |
Цитата:
WolfSoul, чтобы отметить флажок изначально, в INIT-функции (fnCustomInit1) напишите в конце Код:
${NSD_SetText} $CheckBoxSM 1 Цитата:
|
|
hb860
Большое спасибо за ответ! Лично мне он очень пригодился. Цитата:
|
Можно ли в NSIS реализовать вот такое окно с background
Как сделать background я знаю, а как поставить надпись не пойму. Нужна надпись в нижнем правом углу как на этой картинки. ![]() |
Цитата:
|
Спасибо за ответ, попробую. |
Может, кто-то подскажет...
Мне необходимо сделать проверку перед инсталляцией на пользователя... если это будет "Администратор" ("Admin"), то папка установки c:\Program Files\Программа\ , а если "Пользователь" ("User") - с ограниченными правами, то папка установки c:\Программа\ . Если можно привести пример. Заранее спасибо... |
Цитата:
|
Всем привет подскажите начинающему в NSIS хочу добавить информацию с помощью экзешника в oeminfo.ini
прописываю так Код:
WriteINIStr $SYSDIR\Oeminfo.ini Support Information "Line1=--" Код:
WriteINIStr: [Support] Information=Line1=-- in $SYSDIR\Oeminfo.ini Код:
[Support Information] |
maximum142
Код:
WriteINIStr $SYSDIR\Oeminfo.ini "Support Information" Line1 -- |
kotkovets,
Цитата:
тобишь надо чтоб перед установкой сделалась проверка на пользователя и в зависимости от от пользователя Администратор или Пользователь, менялось значение InstallDir, при Администраторе - InstallDir "$PROGRAMFILES\${PRODUCT_NAME}" , а при пользователе InstallDir "$SYSDRIVE\${PRODUCT_NAME}" |
Lisabon ,что вам мешает в функции .onInit менять значение $INSTDIR в зависимости от переменной
$R0 ??? |
может и глупый вопрос, но всё же, как заставить деинсталятор перед началом удаления убить запущенный процесс удаляемой проги?
|
|
Привет всем!Люди я начинающий в среде NSIS...Подскажите пожалуйста как отобразить страницу с вводом параметров?
|
Цитата:
|
при установке выбирается какие программы устанавливать, потом отображается страница ввода параметровнекотрой программы...
Я накидал что то похожее: Function SozdStr !insertmacro MUI_HEADER_TEXT "" "" File /oname=$PLUGINSDIR\Forma.ini "*.ini" InstallOptions::initDialog "$PLUGINSDIR\*.ini" InstallOptions::Show FunctionEnd |
как сделать чтобы если не выбрана программа для установки из писка, то пропускать определенную страницу?
|
скажите пожалуйста с чего начать написание плагина???
|
Цитата:
Цитата:
|
например, как пишется плагин на delphi?есть примеры плагинов?
|
Здравствуйте я новичок в нсис, собрал свой инсталлятор почти нормально). Есть проблема: при выборе пользователем папку установки после нажатия ок к папке установки автоматически приписывается \Left 4 dead 2 Берется это приписывание видимо осюда : InstallDir $PROGRAMFILES\Left4 dead 2 . Как такое возможно? Ведь эта команда просто отвечает за дефолтный путь. Причем если я напишу InstallDir $PROGRAMFILESLeft4 dead 2 то у меня не приписывается ничего, все нормально. Посмотрел примеры в папке нсис, там такая же ситуация). SetOutPath $***INSTDIR у меня стоит, может что-то в ней?
|
Belial4444,
команда InstallDir записывает значение в переменную $INSTDIR Нельзя так писать: InstallDir $PROGRAMFILESLeft4 dead 2, a то у вас получится C:\Program FilesLeft4 dead 2 :cool: SetOutPath $INSTDIR , а не P.S Имена папок,файлов имеющие пробел обязательно брать в "кавычки" - "$PROGRAMFILES\Left4 dead 2" |
Привет всем!люди как писать плагин?подскажите будьте добры.
|
Ау?!есть кто?:)Не могу сообразить как написать плагин который будет при установке записывать данные в файл с определенной страницы где мы вводили некоторые данные.
|
kotkovets, видимо я на форум не так скопировал. В скрипте у меня нет звездочек. А про C:\Program FilesLeft4 dead 2, я написал чтобы акцентировать внимание нга том что при выборе папки установки не приписывается \Left 4 dead 2. Ковычки я поставил все равно после выбора папки установки к ней приписывается \ Left 4 dead 2.Вот скрипт http://rapidshare.com/files/413111679/patch.nsi Вот скомпилированный вариант http://rapidshare.com/files/41311198...pdate_2033.exe
|
Belial4444,
как вариант1: Eсли вам надо, что бы файлы распаковывались в разные папки: Код:
SetOutPath "Ваш Путь" Команду InstallDir также исключаем как вариант2: Код:
!include "MUI.nsh" C:\Program FilesLeft4 dead 2 - вы просто указываете на определенную папку т.е абсолютный путь А подробней все расскажет: Справочник по NSIS |
hb860, вы уж извините ,что за вас в этой теме отвечаю на все посты... :)
|
kotkovets, я только ЗА. у меня как раз со временем ппц полный
|
kotkovets
Спасибо большое за информативность. Оказывается дело в другом. Когда я проставил палку в конце \ то все стало работать. То есть надо было так писать: InstallDir "$PROGRAMFILES\Left 4 dead 2\". Может это здесь кому-нибудь из начинающих поможет. Если что я ещё буду вопросы задавать). А за справочник отдельное спасибо, полезная штука. У меня новый вопрос: если я пишу DirText "Для применения обновления Вам необходимо будет указать путь к каталогу в котором находится система. Только если Вы правильно укажете путь, можно будет установить обновление." И выдает ошибку: Error: unterminated string parsing line at C:\patch\patch.nsi:17 Error in script "C:\patch\patch.nsi" on line 17 -- aborting creation process Если по английски пишу, то норм все) |
Belial4444,
Код:
DirText "text" "subtext" "browse_button_text" "browse_dlg_text" Пожалуйста скрипты заключайте в тег [code],легче читать |
люди добрые помогите написать плагин...очень нужно... :cry:
|
Помогите пожалуйста решить такую задачу:
Есть файл с атрибутом "Только чтение" File.ext в нем нужно найти и заменить две строчки Text1 "bla bla bla" Text2 "bla bla bla" Заменить на Text3 "ololo" Text4 "ololo" Как это сделать? P.s атрибут "Только чтение" файлу File.ext нужно вернуть обратно после его редактирования. P.p.s замена этого файла, на заранее отредактированный файл не катит. |
Tolian,
Не изобретайте,велосипед,все давно уже сделано: WriteiniStr - записывает данные в *.ini или *.inf файлы ReadINIStr - читает секции из *.ini или *.inf файлов и помещает данные в переменную FileWrite - запись данных в файл FileRead - чтение данных из файла и помещает данные в переменную Откройте help самой программы,введите в указатель эти команды. Дополнительно,почитайте о переменных : их аж целых 20 штук ,которые не надо объявлять..удобно размещать в них даннные Справочник по NSIS |
Я все понимаю просто задание такое...написать плагин, который будет сохранять введенные данные в файл... :cry:
|
Tolian, интересное задание.... :clapping:
CyberMaster Файл *.ini или *.inf ? |
в конкретный ini файл, он дан...вот такие задания для начинающих даются :sorry:
|
Tolian а где такие задания даются ?
|
kotkovets да товарищу на учебе, попросил помочь, вот голову и грею...и самому интересно стало разобраться... :)
|
Tolian
Абсолютно,не стоит того,чтобы писать плагин, Юзайте WriteiniStr , а примеры я уже вам давал... Или просите помощи здесь |
kotkovets спасибо хоть на этом...буду ломать мозг
|
|
kotkovets спасибо большое. посмотрим что и как :cool:
|
Да kotkovets и не надо ничего выдумывать :) но все же можешь помочь разобраться как работать с delhi для написания плагина?лучше на примере.
|
Tolian, с Delphi не помогу...сам пока учусь что и как...
гугл вам в помощь :tongue: |
kotkovets, ну ладно спасибо и на том:)
если что попадется подобное сообщи:) |
kotkovets ты может быть знаешь как записать данные со страницы в файл?страницу созданная мной.на ней ввожу некоторые данные
|
Tolian, я примером показал как делать...
|
Цитата:
Насчет редактирования забыл сказать: Если это упростит задачу, Те две строки можно удалить и записать две новые в конец файла Собственно вот содержимое того файла: Код:
game "Counter-Strike" gamedll "dlls\mp.dll" gamedll_linux "dlls/cs_i386.so" |
CyberMaster, Поздно вечером че нибудь придумаю и отпишусь...
|
kotkovets, спасибо буду ждать :)
P.s Вот справка на этот счет Replacing Lines in a Text File но в аглицком мало понимаю :( Пробую разбираться... |
Средствами NSIS я не нашел, как поменять строку в файле...может плохо искал...
Есть повод, кто умеет, писать плагин,если есть подскажите..буду благодарен CyberMaster В каталоге NSIS\Bin есть замечательная утилитка GenPat.exe тобишь: 1) Файл *.gam открываем блокнотом, редактируем как вам нужно, и сохраняем в файл *_new.gam 2) Создаем батник следующего содержания: Код:
GenPat.exe "*.gam" "*_new.gam" "Path.pat" Код:
OutFile "test.exe" Тобишь, файл *.gam не заменяется, а изменяется т.е патчится |
Спасибо за помощь
Цитата:
|
kotkovets, спасибо с текстом разобрался. У меня новый вопрос: у меня не работает команда записи значения параметра в ини файл. Компилируется без ошибок, но после установки файл ини остается неизменным.
Код:
Function fnTextChange |
Belial4444
Попробуйте вместо WriteIniStr,,,,,,,, MessageBox MB_OK "$R0" Вы увидите содержимое $R0 или нет.... :dont-know Код:
Function fnTextChange Полное описание модуля , правда на английском. И вообще если вы хотите записать данные в файл, то лучше делать так: Код:
Page custom Bla Bla1 |
как пользоваться !insertmacro MUI_INSTALLOPTIONS_READ?
|
Tolian
Этот макрос читает секции из *.ini файла настроек и помещает результат в переменную: Код:
!insertmacro INSTALLOPTIONS_READ $R5 "Dialog.ini" "Field 1" "State" Код:
ReadINIStr $R5 "$PLUGINSDIR\Dialog.ini" "Field 1" "State" |
что вводить можно в $R5? у меня ошибку дает
|
Tolian
Я не телепат... Цитата:
Код:
StrCpy $R5 Tolian |
kotkovets, А это верно?:
Function Show SectionGetFlags ${11} $9 StrCmp $9 0 Next File /oname=$*.ini "*.ini" InstallOptions::initDialog "*.ini" InstallOptions::Show Next: FunctionEnd Function zak !insertmacro MUI_INSTALLOPTIONS_READ $R1 "*.ini" "Field 2" "State" !insertmacro MUI_INSTALLOPTIONS_READ $R2 "*.ini" "Field 4" "State" Push “*.INI” Push $R1 Push $R2 xxxx::SaveParam Pop $R0 FunctionEnd |
Цитата:
($R0 - $R9) - 10 переменных которых не нужно объявлять Цитата:
Цитата:
Tolian,возьмитесь за учебник,читайте посты...справку |
kotkovets, по поводу плагина, да я пытаюсь написать его...
а это функции с Page custom тянутся... |
Цитата:
|
Как сделать так, что бы если необходимый файл не найден, инсталлятор говорил типа "Файл не найден. Продолжить устоновку?"
|
CyberMaster
Код:
Section |
kotkovets, мне надо не вывести переменную а записать её в ини файл и для этого вроде есть только команда WriteINIStr.
У меня она выглядит так WriteINIStr "$INSTDIR\rev.ini" "steamclient" "PlayerName "$R0" и Компилируется все без ошибок. Дак почему у меня не записывается ничего?). Может тебе дать скрипт и скомпилированный вариант снова?) |
Цитата:
Поглядим... Цитата:
|
Для участников форума выкладываю скрипт для замены строки в текстовом файле (txt, ini, inf и т.п)
Скрипт был взят отсюда . Я доработал скрипт,так как в оригинале скрипт создает файл-пустышку, если указываемого в скрипте файла не существует, что в некоторых случаях бывает недопустимо. Собственно доработанный мною скрипт: Код:
!include FileFunc.nsh Код:
!define line '"Oszone."net""' |
Цитата:
Код:
!include "WordFunc.nsh" |
hb860
Код:
FileOpen $0 команда FileRead в этом коде читает только первую строку...а вдруг искомая строка не первая? команда FileWrite - не умеет перезаписывать строки, а только записывать! A команда WriteIniStr умеет перезаписывать , но работает только с файлами имеющие структуру inf или ini файла Код:
|
Вложений: 1
Вот чёрт, и правда
Ударил в грязь лицом :) Испавил, добавил цикл. Файл создается в памяти в переменной R1 и перезаписывается в локации Оформил макросом для удобства вызова в любом скрипте - просто вставить макрос и вызвать Код и файлом во вложении Код:
!include "WordFunc.nsh" Цитата:
|
|
kotkovets, спасибо большое запахало, действительно надо было использовать функцию Bla1, а что касается той функции, которую я юзал, там даже значение переменной не выводилось). У меня ещё 2 вопроса: 1.если я хочу создать несколько своих страниц инсталятора, то как их нужно указывать по - другому. Не писать же Page custom Bla Bla1 два раза. Наверное надо Page custom Bla Bla1 (2) и что - то вроде этого? 2. Как можно командой File (или другой) исключить папку из сборки инсталятора, или наоборот включить её. С файлами я знаю, а про папки не нашел.
|
Цитата:
Код:
Page custom Bla Bla1 |
Ок, новый вопрос: как правильно посчитать координаты нужного места для размещения, надписи, картинки например. И как можно изменить картинку слева?) http://s45.radikal.ru/i108/1008/f3/fdf7eeab792f.png. И ещё: как можно сменить цвет фона установщика? Например как здесь http://s45.radikal.ru/i108/1008/80/19680a3a23c8.png
|
Цитата:
${NSD_CreateLabel} <координатаХ> <координатаУ> <Ширина> <Высота> <”Текст”> Цитата:
Код:
!define MUI_WELCOMEFINISHPAGE_BITMAP "Путь\картинка.bmp" Примеры картинок в каталоге NSIS\Contrib\Graphics\Wizard |
Ок спасибо), про размеры догадывался, раньше через smart install maker делал там такие же)
|
Подскажите пожалуйста, как сделать что бы после инсталляции сразу открывало сайт (без запроса) ?
|
Цитата:
Код:
Function .onInstSuccess |
kotkovets, проще надо быть, проще!
Чёй то вы там понаписали? Во: Код:
ExecShell "open" "http://www.winreview.ru" |
Ах да да!!! :tomato2:
как раз был открыт Справочник по командам Windows :happy: |
Есть исходник NSIS, в скрипте которого я мало чего понимаю. Если скомпилить скрипт, то в компонентах увидим чекбокс 'Mozilla plugin'. Скажите, плиз, есть ли в инсталляторе проверка на то, установлена ли в системе Мозила? Я подозреваю, что она должна быть, то есть, если Мозила установлена, то галка на чекбоксе установлена, если нет, то и галка снята. Если такая проверка есть, подскажите, на какой маркер он ссылается, узнает, установлена ли Мозила или нет. Или нет там такой проверки?
|
boss911, скрипт в студию.
|
boss911,
Скрипт весь в макросах.......ужас.Сложновато чытаты :o Цитата:
Код:
!ifdef INSTALL_MOZILLA а вот при деинсталяции чета есть: Код:
; Check for Key Проверяет, какая версия, Mozilla ReadRegStr $R2 HKLM "SOFTWARE\Mozilla\$R0\Extensions" "Plugins" Читает путь, к плагинами Mozilla |
Цитата:
Дело в том, что я пишу скрипт для Inno, там хочу сделать проверку установки Мозилы в системе, но я не знаю, где в системе найти подходящий маркер, что она действительно установлена. Думал, что нечто подобное реализовано в скрипте NSIS для VLC. А вот это: Цитата:
|
boss911
При инсталяции Mozilla ветка "HKLM, SOFTWARE\Mozilla" создается, тока проверил. там же и версия и путь к Mozilla А за скрипт спасибо! будет на чем тренироваться |
Цитата:
Цитата:
|
Здравствуйте, я этом деле я новичок, поэтому не прошу сильно судить, будут несколько вопросов к вам и рассчитываю на вашу помощь.
Занялся сборкой установщика и возникло несколько вопросов: 1. На приветствии установщика я использовал и имя, и версию, но почему-то версия скосилась и ее практически не видно... Удлинять имя не стал и не буду, так как нужно, чтобы именно с таким именем и было. Вот, собственно, сам скриншот: http://rghost.ru/2442700.view Кто знает как исправить и чтобы все нормально было видно? 2. Имеются 2 секции в одной группе, но нужно сделать так, чтобы при выборе одной секции невозможно было выбрать одновременно другую (блокировалось), так же и наобороот. Может кто знает код или переменную? 3. В компонентах устанавливаемой программы имеется иконка (справа). Так вот как ее сменить, чтобы она отличалась от иконки окна установщика (заголовок) и какой максимальный размер можно при этом употребить? Вот, собственно, сам скриншот: http://rghost.ru/2442761.view 4. Кто знает как делать предустановочную анимацию? Например, запустил установщик и сначала вылезло небольшое видео, а потом открылось само окно установщика. |
Цитата:
Цитата:
Цитата:
Цитата:
Почитайте Справочник по NSIS |
kotkovets спасибо, но не во всем я разобрался, с секциями, например. Сделал анологию кода, но полезли ошибки, вроде бы все как по образцу, но все же...
Мой код секции: Код:
Section "!Обновление игры" secUpdate SectionIn 1 2 SetOutPath "$INSTDIR" File /r /x *.nsi *.* SectionEnd SectionGroup /e "!Эмуляторы" secEmulator Section "Stryder emulator(для Garena)" secStryder SectionIn 3 SetOutPath "$INSTDIR" File /r E:\stryder\*.* SectionEnd Section /o "Revolution Crew emulator(рекомендуемый)" secRevcrew SectionIn 4 1 SetOutPath "$INSTDIR" File /r E:\revcrew\*.* SectionEnd SectionGroupEnd Извините, а нельзя страниц конкретную с проблемой скоса версии в приветствии? Справочник у меня есть, но, к сожалению, там не все, чего хотелось бы. Также хотелось бы узнать: каким образом можно сменить\изменить фон установщика? Например, http://s45.radikal.ru/i108/1008/80/19680a3a23c8.png |
Цитата:
Выбор в группе двойным нажатием Цитата:
Цитата:
Код:
Name "BLA BLA BLA" Цитата:
Расширение функциональности |
kotkovets , слушай у меня появились 2 новых вопроса:
1. Как мне считать данные из файла .inf без секции с помощью функции ReadINIStr? Выставление " " на месте параметра секции не помогло. 2. Будет ли в нсисе разбивка на файлы, если дистрибутив больше 2 гигабайт, можно ли будет этим файлам задать имена? |
Цитата:
Достаточно определить константу Код:
!define MUI_WELCOMEPAGE_TITLE_3LINES RTFM, господа |
Народ, как можно сделать, чтобы с группы секций нельзя было снять галку?
|
Цитата:
|
kotkovets, да я скачал плагин, но они анимешки вставляют как в примерах только на само окно инсталлятора (вместо лого приветствия или лого заголовка), а мне нужно код, который бы запускал анимешку перед самим процессом запуска окна инсталлятора.
Действие - анимешка, потом выбор языка, потом само окно инсталлятора (так у меня). Может там и написано (ссылка), но нельзя на русском? |
asetin_9207,
Покажите скрипт --------------------------------- Из справки: Функция .onInit выполняется после инициализации инсталлятора. Это самая первая функция, которая выполняется при запуске вашего инсталлятора. Код:
Function .onInit |
Скрипт:
Function .onInit SetOutPath $INSTDIR - пытался надеть скин, но не получилось. File "${NSISDIR}\Plugins\Accent.skf" NSIS_SkinCrafter_Plugin::skin /NOUNLOAD "$INSTDIR\Accent.skf" !insertmacro MUI_LANGDLL_DISPLAY SetOutPath '$PLUGINSDIR' - использовал стандартную аниме, но также нету никакой анимешки. Надо чтобы она была перед запуском самого установщика (окна). File "E:\sonic.gif" AnimGif::play /NOUNLOAD '$PLUGINSDIR\sonic.gif' ; Add your page code here AnimGif::stop Delete '$PLUGINSDIR\sonic.gif' FunctionEnd |
Цитата:
Может этот пример поможет в вашем вопросе: |
Может мне кто-нибудь поможет или нет?
kotkovets, сорри, я прочистил ящик, отправьте плиз. Может у вас есть СБО? (средство быстрого общения). Например, скайп или агент. |
Народ, не подгружается скин, что делаю не так? Вроде делал все по инструкции от K.A.V.:
Function .onInit SetOutPath "$PLUGINSDIR" File "${NSISDIR}\Plugins\V-touch.skf" NSIS_SkinCrafter_Plugin::skin /NOUNLOAD "${NSISDIR}\Plugins\V-touch.skf" FunctionEnd Function .onGUIEnd NSIS_SkinCrafter_Plugin::destroy FunctionEnd Не получается с функцией .onVerifyInstDir сделать запрет на установку, если нету файла (ов). Function .onVerifyInstDir IfFileExists "E:\Left 4 Dead 2\left4dead2\bin\Client.dll" PathGood Abort PathGood: FunctionEnd Создавал собственную страничку, где прописывал текст в определенном файле: Function fnCustomInit nsDialogs::Create 1018 Pop $Dialog ${NSD_CreateLabel} 0 5u 100u 10u "Введите свой ник" Pop $Label ${NSD_CreateText} 0 20u 100% 15u "L4D-Portal.Ru" Pop $Text nsDialogs::Show FunctionEnd Function fnCustomDestroy ${NSD_GetText} $Text $R0 WriteINIStr $INSTDIR\rev.ini steamclient PlayerName $R0 FunctionEnd но теперь нужно сделать проверку на наличие устанавливаемого файла (допустим имя его - Х), если его нету (Х), то прописывать текст в другом файле (Y) и также наоборот. |
Цитата:
Код:
Function .onInit Код:
Function .onGUIEnd Цитата:
Код:
|
Function .onInit
;анимашка SetOutPath $TEMP File "${NSISDIR}\Plugins\Accent.skf" NSIS_SkinCrafter_Plugin::skin /NOUNLOAD "$TEMP\Accent.skf" Delete "$TEMP\Accent.skf" FunctionEnd Function .onGUIEnd ;подгрузка скина NSIS_SkinCrafter_Plugin::destroy FunctionEnd Так почему не грузится скин?! Файл скина лежит в папке плагинов, путь указан к этой папке. |
Цитата:
и поменять библиотеку (NSIS_SkinCrafter_Plugin.dll) на версию 2.6.3.0 ANSI NSIS SkinCrafter Plugin |
Все равно нету скина. Может потому что у меня сборка винды? Хп зверь стоит. Но mfc71.dll есть у меня, проверял.
|
|
Нашел инсталлятор хороший и у меня возникли новые вопросы:
1. Можно ли редактировать стандартные страницы? 2. Как можно производить операции с текстом на странице? (менять стандартный, менять цвет, шрифт) 3. Есть ли визуальный редактор страниц установщика? (осталась проблема с определением нужных координат, а подбирать вручную очень долго и геморройно) |
kotkovets, спасибо новая версия помогла. Теперь хотелось бы уточнить с проверкой.
Идея такая: Имеется 2 компонента (секции). В 1 устанавливаемом компоненте есть файл Х, во втором устанавливаемом компоненте файл Y. Так вот, допустим, что я выбрал для установки 1-ый компонент и при написании на моей новой страничке текста, он (текст) должен писаться в устанавливаемый компонент Х, если выбрал 2-ой компонент должно писаться в устанавливаемый файл Y. Создаваться ничего не должно, только писаться в файлах исходя из выбранного компонента (секции). Как это реализовать? Моя страничка: Function fnCustomInit nsDialogs::Create 1018 Pop $Dialog ${NSD_CreateLabel} 0 5u 100u 10u "Введите свой ник" Pop $Label ${NSD_CreateText} 0 20u 100% 15u "L4D-Portal.Ru" Pop $Text nsDialogs::Show FunctionEnd Мои секции: Section "Stryder emulator(для Garena)" secStryder SectionIn 3 SetOutPath "$INSTDIR" File /r E:\stryder\*.* SectionEnd Section "Revolution Crew emulator(рекомендуемый)" secRevcrew SectionIn 4 1 SetOutPath "$INSTDIR" File /r E:\revcrew\*.* SectionEnd |
|
kotkovets, спасибо новая версия помогла. Теперь хотелось бы уточнить с проверкой.
Идея такая: Имеется 2 компонента (секции). В 1 устанавливаемом компоненте есть файл Х, во втором устанавливаемом компоненте файл Y. Так вот, допустим, что я выбрал для установки 1-ый компонент и при написании на моей новой страничке текста, он (текст) должен писаться в устанавливаемый компонент Х, если выбрал 2-ой компонент должно писаться в устанавливаемый файл Y. Создаваться ничего не должно, только писаться в файлах исходя из выбранного компонента (секции). Как это реализовать? Моя страничка: Код:
Function fnCustomInit Код:
Section "Stryder emulator(для Garena)" secStryder |
Вот уже лучше
Цитата:
|
1 секция - Stryder emulator(для Garena)
2 секция - Revolution Crew emulator(рекомендуемый) Я запустил установщик, выбрал 1-ую секцию для установки, потом выходит моя страница для смены ника: Код:
Function fnCustomInit Так вот надо сделать так, чтобы вводимый текст на моей страничке менял строку Код:
Settings Name=Текст Действие 2-ое: Я запустил установщик, выбрал 2-ую секцию для установки, потом выходит моя страница для смены ника в которой надо все сделать также как выше, НО уже в другом устанавливаемом файле - rev.ini и строка будет уже такая: Код:
steamclient Секция 1: Код:
Section "Stryder emulator(для Garena)" secStryder Код:
Section "Revolution Crew emulator(рекомендуемый)" secRevcrew |
asetin_9207
Я реализовал че вы хотели, но тут глюк один, если в секции ничего - не изменять, то получается запись одновременно двух файлов если изменить чебоксы на секциях, и даже вернуть в первоначальное состояние секций - то нормуль. Попробуйте реализовать на своей странице: C помощью команды RadioButton — зависимый флажок-точка, подобно выбору секций, на стр. выбора компонентов C помощью команды Label - надпись , описание, как в секциях А от секций "Stryder emulator(для Garena)" и "Revolution Crew emulator(рекомендуемый) вовсе избавиться! Помогу вам, тока через форум Готовый вариант не просите! |
Ну чебоксы - это украшение инсталлятора, также как и скин для него. Давайте посмотрим скрипт, который вы реализовали.
Чебокс такой обязателен. Нельзя никак обойти глюк? Может есть код, который исключает запись 2-го файла? Например, что-то наподобие секциях, когда исключаешь файлы скрипта из папки: File /r /x *.nsi *.* Цитата:
|
Цитата:
Со своей страницы проще сделать, я себе делал инсталл с 5-ю зависимыми чебоксами - стандартно, не получилась (через секции). А вызовом модуля nsDialogs на раз всё сделал! |
Цитата:
Цитата:
|
Цитата:
из справки: Код:
Section "-hidden section" Зависимость выбора сделал через CheckBox, хотя для этого есть RadioButton Реализована корректность ввода ника. |
Конечно спасибо вам за предоставленный скрипт, но на моей странице появился баг со 2 секцией: http://rghost.ru/2481490.view
После создания такой собственной страницы потерялся выбор компонентов: http://rghost.ru/2481501.view Теперь пользователь при установке их не сможет прочесть про эмуляторы, про их описание, а то как-то делятся компоненты. Эмуляторы тут, а все остальное здесь. Тем более при отключении секции на странице компонентов теряются остальные файлы установки этих 2-х секции. Ведь там не только же задействованы файлы stryder.ini и rev.ini, но и в каждой секции есть еще по несколько файлов. Цитата:
Никак нельзя реализовать секции на странице выбора компонентов? Или хотя бы показать и дать им возможность выбора, но уже на странице "ввода ника" нельзя было снять галочку с выбранной секции на предыдущей странице? (странице выбора компонентов). Допустим, я запустил установщик, прошла страница приветствия, потом вышла страница выбора компонентов, я выбрал один из нужных мне эмуляторов, далее страница ввода ника, на которой уже стоит галочка (и ее нельзя снять) выбранной мной эмулятора на предыдущей странице. Может так удастся избежать бага? |
Цитата:
"Длина" контрола "жирным" выставь подходящие значение. Цитата:
Цитата:
удали эту функцию Код:
Function .onSelChange ИЛИ ПО АРАБСКИ НАПИСАТЬ?????????????? |
Цитата:
|
Цитата:
если вы ничего не изменили на стр. компонетов: ${secStryder}=1 1=запись stryder.ini ${secRevcrew}=1 1=запись rev.ini Что неправильно! а нужно ${secStryder}=1 1=запись stryder.ini ${secRevcrew}=0 0=не зап. rev.ini или ${secStryder}=0 0=не зап. stryder.ini ${secRevcrew}=1 1=запись rev.ini Всё из этого! Если у вас есть другой механизм обработки идентификаторов секций, то оглашайте! |
То есть вы говорите о том, что когда используешь идентификаторы ${secStryder} и ${secRevcrew} они идут для правильного выбора компонентов (1 их 2-х предложеных).
А для описания не можете найти другой индефикатор? Для описани можно использовать - ID_1, ID_2 и тд. То есть ${secStryder} и ${secRevcrew} будут для корректного выбора секции (1 из 2-х) и устанавливаемых файлов stryder.ini и rev.ini. |
Цитата:
|
Ну вот для выбора и записи используем - ${secStryder} и ${secRevcrew}
А для описания - ID_1, ID_2 |
Цитата:
Состояние секций снимается (отмечена или нет) командой: Код:
SectionGetFlags ${ID} $1 $1=1 - секция отмечена $1=0 - секция не отмечена Затем сравнение: Код:
StrCmp $1 1 0 +2 |
Цитата:
Ведь для описание использем другой идентификатор, а для выбора и записи - другой. Скажите мне - почему нельзя реализовать выбор секции и запись в файлах на одно общей странице - выбор компонентов? В чем причина? |
Цитата:
!insertmacro MUI_DESCRIPTION_TEXT ${secRevcrew} $(DESC_REVCREW) |
А если добавим такой же код, но уже с дргим идентификатором?
|
как вариант, для создания своих страниц есть в NSIS модуль InstallOptions
Смотри описание в C:\Program Files\NSIS\Docs\InstallOptions\Readme.html Примеры: C:\Program Files\NSIS\Examples\InstallOptions\ Там корректно снимается состояние секций, в группе не тестировал! Смотри пример |
А нельзя редагнуть страницу "выбор компонентов" и подключить как-то и корректный выбор секции (1 из 2-х), и запись в секциях файлов. А то писать заново страницу... Лучше редактировать стандартную. Если можно - то как?
Цитата:
Цитата:
|
Цитата:
Цитата:
то и вам советую :cool: |
У меня не получается, куча ошибок да и в справочнике такого НЕТУ!
|
Наверно редактить страницу тяжело... Помогите сделать описание к этим секция на странице "Ввод ника". Вы говорили использую ${NSD_CreateLabel}, но как? И чтобы координаты были кажется. Я не умею.
|
Цитата:
Координаты, ширина и высота могут быть заданы в трех единицах измерения: пиксели, единицы измерения диалога(dialog units) или проценты от пространства окна страницы. Они могут иметь и отрицательные значения, что указывает, что отсчёт величины будет в обратную сторону, т.е. снизу или справа. Ну и придется CheckBox-ы сместить вниз. Да в справочнике по NSIS там все рассказано! Спасибо hb860!!! |
Не могу высчитать, не умею высчитывать координаты:
Код:
${NSD_CreateCheckBox} 0 50u 170 10u "Stryder emulator(для Garena)" Также сменить значки секции, например, на те же синие, что на странице с компонентами. Код какой? !define MUI_COMPONENTSPAGE_CHECKBITMAP "E:\программы\важные\nsis\Contrib\Graphics\Checks\colorful.bmp"? |
Цитата:
Hline — горизонтальная линия Vline — вертикальная линия Label - надпись Icon - значок(ICO) Bitmap – картинка BMP BrowseButton – кнопка «...» Link - ссылка Button - кнопка GroupBox — контейнер группы CheckBox - флажок RadioButton — зависимый флажок-точка Text — текстовое поле Password — поле ввода пароля Number - цифра FileRequest — поле ввода имени файла DirRequest — поле ввода папки ComboBox — выпадающий список с возможностью ввода текста DropList — выпадающий список с фиксированными значениями ListBox — список значений ProgressBar — индикатор выполнения В справочнике все рассказано! посмотрите: C:\Program Files\NSIS\Docs\nsDialogs\Readme.html примеры: C:\Program Files\NSIS\Examples\nsDialogs\ Цитата:
|
Так ладно, коды я могу достать, но координаты высчитать?!
Может есть визуальный редактор, чтобы смотреть коррдинаты, а то подбирать - геморой! |
Цитата:
|
А у меня появились еще вопросы:
1. http://rghost.ru/2484080.view Нельзя "введите ник" сделать по центру что ли? А то справа совсем пусто. 2. Почему это окно http://rghost.ru/2484089.view не оделось? То есть скин не такой как у установщика? И как одеть его так же как и все остальные окна? |
Цитата:
Код:
MessageBox MB_ICONEXCLAMATION " Введите ник!" Цитата:
|
Цитата:
И кстати, у меня появилась идея с вводом ника. Мысль такова: Запускаю инсталлятор, дошел до выбора компонентов и все(!) секции у меня на месте (не скрыты) и в рабочем состоянии. А дальше выходит страница "ввода ника", но(!) уже без выбора секции, обычная страница с вводом ника (как раньше). Может сделать так: выбрал один из эмуляторов (одну из секции), далее страница "ввода ника" (простая без секции, так как секции уже на странице "выбор компонентов"). Написал ник и он ищет один из устанавливаемых файлов (stryder.ini или rev.ini), найдя один из них (а он полюбому будет, так как выбирать надо одну из секции) пропишет там текст (или в stryder.ini, или в rev.ini), но нужно переменную, которая будет писать в stryder.ini в строке - Name, а в rev.ini в строке - Playername. Как идея? И не надо парится с созданием\редактированием новой страницы. К тому же страница компонентов - общая! |
Цитата:
Цитата:
Код:
System::Call 'user32::MessageBoxA(i $HWNDPARENT, t "Введите ник", t "asetin_9207", i 0x30) i.r9' |
Цитата:
Например, как сделать проверку на наличие этих файлов. Прошу, напишите скрипт на проверку этих устанавливаемых файлов и запись ника в один из найденный файл. |
Нашел баг с анимешкой! На Windows 7 (Seven) не проигрывается анимешка! Ее просто нету! Что делать? Как исправить? А другие инсталляторы у них на 7-ке с аниме идут, а мой - нет!
Хех, я походу понял, что у меня работает только Анси, а у 7-ок - Уникод. Поэтому так выходит. Если сделать наоборот. У них будет работать - у меня не будет. А для обе ОС нельзя сделать? Чтобы и на хп, и на 7-ке работало? Может есть общий плагин? |
Цитата:
|
С анимацией разобрался.
Ну помогите сделать страницу "ввода ника" примерно такой: http://rghost.ru/2492888.view Ну не могу я сделать такое оформление, чтобы было и описание, и красиво, и значки выбора другие. |
asetin_9207
Нашел способ как, как корректно вытащить значения секций. Способ не нов, но работает надежно (в этом скрипте). В функции .onInit предопределяем состояние секций! можете все секции вернуть на страницу компонентов! Реализовано корректность выбора секции. Реализовано корректность выбора ника. |
Спасибо большое! Так намного лучше. Хотелось бы уточнить с окном "Введите Ваш ник!" - нельзя его уменшить (окно), чтобы пустые места не бросались, то есть компактно будет.
|
Цитата:
Код:
Caption "полезное сообщение" |
Цитата:
|
Цитата:
У вас скрипте такой код: Код:
Caption "Установка ${PRODUCT_NAME} ${PRODUCT_VERSION}" Код:
Caption "${PRODUCT_NAME}" |
|
asetin_9207
Версия у вас и так достаточна везде видна! но можно и так: Вместо MessageBox MB_ICONEXCLAMATION "Введите ваш ник!" добавляешь: Код:
System::Call 'user32::MessageBoxA(i $HWNDPARENT, t "Введите ваш ник!", t "Ошибка ника!", i 0x30) i.r5' |
Хех, ну поставил, но и тут не от начала теперь идет, надо ближе к значку вопросительному
Левее надо http://rghost.ru/2496971.view |
asetin_9207 Серьезно
НЕ пора ли вам взяться за учебник, читать справки??? |
kotkovets, а в справках не все написано, ждем новые версии.
Так вы знаете как исправить? Если - нет, то и на этом спасибо. |
asetin_9207
Заголовок и "Текст сообщения" определяют размер окна! Код:
System::Call 'user32::MessageBoxA(i $HWNDPARENT, t "Текст сообщения Текст сообщения Текст сообщения Текст сообщения$\r$\nТекст сообщения Текст сообщения$\r$\nТекст сообщения Текст сообщения", t "Заголовок Заголовок Заголовок Заголовок Заголовок", i 0x30) i.r5' То бишь мы ее только и вызываем. С MessageBox - почти тож самое. |
Действие: Имеется установщик, версия установки которого с 2.0.3.4 до 2.0.3.5, то есть обновляет игру с 34-ой до 35-ой версии.
Цель: После выбора директории установки идет инсталл, но бац! - вылазит окно, в котором пишется следующее: "Упсс! Этот патч нужно ставить на 2.0.3.4 версию игры. Ваша версия - 2.0.3.0" То есть версия игры у пользователя не та, которая нужна для установки и совершается аборт (ему приходится закрывать установщик). А если все верно ( у него нужная версия - в данном случае, 2.0.3.4-ая), то инстал пройдет успешно. Версия определяется в этом файле - steam.inf (директория \Left 4 Dead 2\left4dead2). А установщик ставится в InstallDir "$PROGRAMFILES\Left 4 Dead 2\" (то есть в этой папке есть такая же папка, только пишется слитно и с маленькой буквы). Возможно реализовать? Ссылка на действующий файл - http://rghost.ru/2501569 (в файле прописана версия 2.0.3.4, можно менять вручную цифры) Показательный пример: http://rghost.ru/2501575.view |
asetin_9207
В какой секции строка PatchVersion=2.0.3.2 в файле steam.inf ? Код:
[?????] ;<секция |
По идее он должен считывать (проверь) с компа версию пользователя. А в установщике в секции "обновление игры".
Этот файл есть на клиенте (игре) у пользователя, вот надо, чтобы считывало с его компа этот файл (проверяло версию). |
Цитата:
|
Секция? Секция в файле? Я не понимаю.
В этом файле нету такой секции! Он такой - какой в ссылке. Это же не .ini, где есть такое. Тут нету. |
asetin_9207
покажь все содержимое файла steam.inf до и после установки обновлений. он должен изменяться. или ищите другой маркер для определения версии патча или че там.. А если версия патча новее в папке установленной игры, а в вашем инсталляторе версия патча старее ??? |
Цитата:
Цитата:
Цитата:
Скриншот: http://rghost.ru/2503199.view |
Цитата:
Посмотри версии самих файлов обновления... |
При любом обновлении, будь то вверх или вниз меняется только эта строчка:
Код:
PatchVersion=2.0.3.5 Код:
ProductName=left4dead2 |
asetin_9207
версии самих файлов обновления смотрели? Файл steam.inf когда изменяется, после установки игры или запуска игры? Мало данных.............................. В реестр не записывается версия патча? |
После установки (обновления) файлов игры, соответственно, меняется и steam.inf, там в патчах уже лежит обновленный steam.inf. Вот и все.
Для сравнения могу дать ссылки на 2 разных патча: патч 2.0.3.3 - 2.0.3.4 - http://rghost.ru/2400318 патч 2.0.3.4 - 2.0.3.5 - http://rghost.ru/2464400 |
asetin_9207
Качать не собираюсь - трафик не резиновый. Посмотри версии самих файлов обновления!!! ,а не самого патча. Имя файла, путь и версию. Также просмотри файлы предыдущего патча. Найди одинаковые файлы, но с разными версиями. Это и будет маркер! |
Код:
Посмотри версии самих файлов обновления!!! steam.inf 2.0.3.4 версии: Код:
PatchVersion=2.0.3.4 Код:
PatchVersion=2.0.3.5 Вот скрин 2- папок с разными версиями: http://rghost.ru/2503983.view Пс: Я думаю, что маркер в этом и есть (в цифрах). Так как меняя их (цифры) на нужные - блокиратор не выходит. |
asetin_9207
Ва так и не нашли надежный маркер для инсталлятора... Так, что ничем помочь не могу!! |
Ну если его нету! Ведь это такая игра, где файлы обновляются каждый раз, а версия пишется только в одном файле! Что я поделаю? Наверное на эти цифры и надо делать. Такой скрипт, определяющий в steam.inf версию пользователя.
Ведь при установке идет код - InstallDir "$PROGRAMFILES\Left 4 Dead 2\". Неужели нельзя сделать так, чтобы при наведении на InstallDir "$PROGRAMFILES\Left 4 Dead 2\" он считывал left4dead2\steam.inf и смотрел версию этого файла и исходя из цифер - делал то или иное действие (или аборт, или продолжал инсталл). Ведь на образце так и есть! Если я буду менять цифру и сделаю подходящей - установка пойдет дальше. Ну попробывать же можно, если вы и говорите, что не надежно. Главное, чтобы он делал аборт, если не верная версия. |
Цитата:
|
kotkovets
Ну так ведь ее и никогда не было! Но каким образом тогда сделан этот установщик?! Ведь других файлов, определяющих версию нету! |
Цитата:
Цитата:
Реестр смотрели, версии патчей, пишет в реестр? |
Цитата:
Цитата:
|
asetin_9207
Давайте так, я вам пример, вы изучате мой пример и делаете выводы! А то получается, сделайте мне эту фичу, вставьте мне код этой фичи в мой скрипт, а то я не знаю как! Если вы пишите в эту тему, то предполагается, что вы изучили, шапку темы, и основы работы со скриптовым языком NSIS, но у вас появился вопрос... По этому поводу я писал вам в PM !!!! Тут нужна дополнительная библиотека. Берем библиотеку здесь Копируем VersionCheck.nsh в папку ${NSISDIR}\Include В самом начале скрипта добавляем: Код:
!include "WordFunc.nsh" Если версия установленного обновления больше, чем в инсталляторе, обновление не будет установлено. Если версия установленного обновления равна версии в инсталляторе, пользователю будет предложено дальнейшее действие. Реализован запрет обновления на версию определенную в скрипте. |
Да, сделал выводы. Это замечательно, но...
1. Как сделать запрещенными не только версию (2.0.3.0), но и другие. Начиная с 2.0.0.0 до 2.0.3.4 версии. Всего 34 версии. Каким образом? Пробовал, но будет некторректно: Код:
!define NOT_Version "2.0.3.0" 3. Как окрасить в шкуру мою все эти предупредительные сообщения? А то по умолчанию окно стандартное. |
Цитата:
заменяем все строки до перехода Next Теперь инсталлятор будет обновлять только предыдущую версию обновления. Цитата:
|
Как сделать что-бы в окне COMPONENTS RadioButton выглядили круглыми а Checkbox остались галочными? Как на рисунке.
http://saveimg.ru/show-image.php?id=...e426640a171595 Есть ли возможность в цикле перечислить пути и имена копируемых файлов? Не могу найти взаимодействие с окном Details. Находил некоторые способы но там нельзя уловить при копировании File "${INDIR}\*.*" таким способом. |
Цитата:
Стандартно нет! Можно создать подобное, если "нарисовать" свою страницу (модуль nsDialogs). В справочнике по NSIS отлично описан. Почитайте здесь - правда на английском. Примеры - ..\NSIS\Examples\nsDialogs\ |
Код:
Function .onVerifyInstDir Пробывал таких несколько - Код:
IfFileExists путь\бла бла бла PathGood |
Цитата:
Код:
IfFileExists "путь к папке\*.*" PathGood Точнее даже на наличие этой папки... |
Цитата:
Цитата:
|
Цитата:
Код:
Var Image ;объявление переменой Цитата:
Код:
Var ListBox |
Код:
IfFileExists "путь к папке\*.*" PathGood Может есть другой способ добавить много файлов? |
Цитата:
Код:
IfFileExists "путь к папке\*.inf" PathGood Можно на любое другое расширение ставить. Можно на любой файл, который должен находится рядом с инсталлятором Код:
IfFileExists "$EXEDIR\*.inf" PathGood |
А как сделать, чтобы после установки выполнялась распаковка батника?
Речь идет о decall.bat |
Снова здравствуйте, у меня возникла небольшая проблема: мне надо чтобы была проверка на существование файла, и в зависимости от его наличия в какой-либо файл записывалась строка.У меня это выглядит так: IfFileExists $INSTDIR\rev.ini "WriteINIStr $INSTDIR\rev.ini steamclient PlayerName $R6"
"WriteINIStr $INSTDIR\stryder.ini settings Name $R6" Но не компилируется, выдает ошибку. Мне надо если существуют рев ини в него записывать, если нет то в страйдер ини |
Belial4444
Из справки: Код:
IfFileExists $WINDIR\notepad.exe 0 +2 Закономерный вопрос, если нет rev.ini и stryder.ini ? кнопопочку # видите? скрипт в сообщении выделяем и жмём... |
Очередное обновление: Справочник по NSIS
Скачать |
А как сделать, чтобы после установки выполнялась распаковка батника?
Речь идет о decall.bat |
asetin_9207
Цитата:
|
Спасибо, вроде получилось. Ток как сделать если файла нету, чтобы ничего не происходило?)
|
Цитата:
|
Цитата:
Просто в батнике лежат файлы игры, которые необходимы, они там закодированы, мне надо, чтобы они тоже оттуда вылазили при установке инсталлятора. |
Цитата:
Код:
ExecWait "Путь к файлу\decall.bat" |
Привет!
В моем инсталляторе, написанном в NSIS, необходимо запускать установку небольшой программки, инсталлятор кт написан в InstallShield. Собственно синтаксис: Код:
ExecWait '"$INSTDIR\InstallShieldProgramm.exe" /s /v" /qf INSTALLDIR=$INSTDIR\folder"' Код:
ExecWait '"$INSTDIR\InstallShieldProgramm.exe" /s /v" /qf INSTALLDIR=С:\folder"' Код:
ExecWait '"$INSTDIR\InstallShieldProgramm.exe" /s /v" /qf INSTALLDIR=$TEMP:\folder"' Возможно ли как-то решить проблему установки в нужную папку, задаваемую при установке в nsis инсталляторе? |
Цитата:
Код:
SetOutPath $TEMP откройте в проводнике папку %TEMP% и не закрывая эту папку, запустите установку InstallShield, к примеру до первого диалога, если в InstallShield добавлена поддержка msi, создаться папка в каталоге %TEMP% с msi-файлом , скопируйте msi-файл в любое удобное место. Вот здесь пример (Тихая установка) |
Здравствуйте!
Подскажите пожалуйста есть ли возможность "вытащить" скрипт из инсталлятора ? Что-то наподобие , как с InnoSetup . |
shao
из шапки темы: Цитата:
|
kotkovets, спасибо я это видел.
Перефразирую вопрос: Возможно есть другие методы. Или всё так безнадёжно ? |
|
Цитата:
|
Цитата:
|
Ну у меня недостаточно знаний по скрипту NSIS, чтобы строчить код по снимкам реестра.
Вообще то я пользуюсь, в основном, Inno Setup , а в последнее время всё чаще попадаются программы созданные NSIS, вот и думал раздобыть скриптики от него и переделывать под Inno . |
|
Цитата:
|
Цитата:
|
Прошу прощения за задержку с ответом, т.к. был в командировке.
Цитата:
Второй вариант: Код:
ExecWait "msiexec.exe /i $\"$INSTDIR\installer\install.msi$\" /qb INSTALLDIR=$INSTDIR TRANSFORMS=$\"INSTDIR\installer\install.mst$\"" Если как-то поможет, то скрин ошибки: P.S. Пока решение - просто запускать ExecWait вообще без параметров, где пользователь вводит папку, аналогичную NSIS, но, как понимаете, это не очень хорошо, и все же хотелось бы отыскать решение. |
Цитата:
выложите, свой InstallShield ,гляну что и как .... :) a вы задали в своем скрипте, значение переменной $INSTDIR ? |
Цитата:
Цитата:
Код:
InstallDir "$PROGRAMFILES\Lotus Forms\Viewer\3.5\" |
Цитата:
Вобщем так: 1. Распаковываем InstallShield по этому примеру 2. Извлекаем файлы: .msi и 1049.MST , остальное мусор 3. Переименовываем msi файл в Install.msi 4 "Ложим" файлы Install.msi и 1049.MST рядом со скриптом. Пишем: Код:
InstallDir "$PROGRAMFILES\My Program" |
Цитата:
Спасибо большое за помощь! |
Цитата:
|
Цитата:
Может есть и другие варианты? Например, во время установки инсталлятора или до? |
Всем привет!!! Прошу помочь в написании формы ввода логина и пароля, с дальнейшей записью их в файл!
|
Цитата:
Функция будет выполнена после завершения инсталляции: Код:
Function .onInstSuccess Цитата:
|
В общем необходимо сделать установочный файл миранды для организации, с возможностью пользователям вводить логин и пароль для авторизации, который в дальнейшем будет записываться в зашифрованном виде в файл autoexec.ini, который в свою очередь при первом запуске миранды, заносит данные содержащиеся в нём в профиль пользователя.
|
Цитата:
данные считывается из памяти и записываются в назначенные переменные уже не катит? :o Цитата:
Каким образом вы зашифруете с помощью NSIS данные, чтобы миранда "поняла" параметры? Разработчики миранды вам алгоритм шифрования и дешифрования дадут?:o |
kotkovets, может быть подскажете, возможно ли встроенными средствами NSIS, или при помощи плагинов, скрыть отображение (отрабатывание) запущенной консольной программы... Если не возможно, то какими средствами можно сие организовать, и если можно приведите пример, как это будет выглядеть в NSIS.
|
|
kotkovets,
что-то не получается, точнее не отрабатывает программа... Может у меня ошибка? Вот код: Код:
Section Install Код:
Section Install |
Цитата:
Код:
ExecCmd::exec '"$TEMP\USB_Safely_Remove\USB_Safely_Remove.exe -flash /all"' Код:
ExecCmd::exec "$TEMP\USB_Safely_Remove\USB_Safely_Remove.exe -flash /all" |
kotkovets,
Цитата:
Если идей других нет, то ладно, фиг с ним отображением... как говорится - нет, так нет... |
Есть файлы драйверов - cdrbsdrv.sys и cdrbsdrv_x64.sys (CD-ROM Filter Driver for Windows2000/xp).
Необходимо установливать их в ОСх32 или х64, как драйверы. В документации ничего не нашёл относительно sys файлов, всё про exe... Подскажите пожалуйста, как реализовать мою задачу ? |
Цитата:
InstDrv 100% не даю, что сработает, под х64 - по моему не работает. Установка по inf файлу драйвера, 100% результата не гарантирую: Код:
ExecWait "rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 C:\Script.inf" InstallHinfSection - имя вызываемой функции (точка входа); DefaultInstall - первый параметр для вызываемой функции, означает имя выполняемой секции в INF-скрипте; 132 - второй параметр для вызываемой функции, флаг для обработки скрипта; C:\Script.inf - третий параметр для вызываемой функции, полный путь к файлу скрипта.Обратите внимание, требуется именно полный путь, так как простое указание имени файла подразумевает расположение файла скрипта в системной директории Windows. Это же примечание в равной мере относится и к интерпретатору AdvancedINF. Есть утилитка Dpinst, установка по inf файлу: Код:
ExecWait 'dpinst.exe /path "Путь к папке с драйверами" /lm /sa /sh /sw' |
kotkovets,
Благодарю, но как быть с установкой на х64 без сторонних утилит ? |
MKN
Точно не знаю, но думаю без сторонних утилит не обойтись. Я использую dpinst, меньше заморочек... с драйверами. |
Привет!
На днях развлекался с nsis и наткнулся на интересную особенность. Есть пример , как создавать url ссылку. Запускаем первый раз - все нормально работает. Второй раз меняем адрес ссылки, например Код:
.... |
Цитата:
имя url-ярлыка: Код:
!insertmacro "CreateURL" "Web" "http://nsis.sourceforge.net/Create_Internet_Shorcuts_during_installation" "Visit NSIS Website" |
URL-файл перед повторным созданием удалять пробовали?
|
Цитата:
или сразу обновится ссылка после перезагрузки проводника...$RefreshShellicon не выручает. |
А чем плох ОБЫЧНЫЙ ярлык?
Код:
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Сайт ${PRODUCT_NAME}.lnk" "http://wwww.aimp.ru" "" "$PROGRAMFILES\Internet Explorer\iexplore.exe" 1 |
Дык ничем :)
AIMPу 4 года! зато узнал :) |
Как в NSIS реализовать функцию проверки установленного ПО из MSI, по его коду ?
К примеру, в Setup Factory проверку установлен ли VC++2005sp1 я проверяю с помощью : Код:
-- Get the product's installed state. И ещё вопрос : Каким образом лучше реализовать поиск перед установкой, запущенного процесса (программы) и его закрытия в случае обнаружения ? Обнаружил несколько плагинов вроде как для этих целей, но сомневаюсь... |
Цитата:
Код:
OutFile OutFile.exe Чтобы сделать проверку на все версии, делаю цикл. |
Цитата:
Код:
Function .onInit |
kotkovets, подскажи пожалуйста :
Что означает в скриптах +2 , +3 (и где про это узнать подробнее и по русски ) ? И как организовать после определения наличия (или отсутствия) установленного ПО ? : 1. Если ПО не установлено, то запуск необходимого приложения из $Temp с последующим удалением исходного файла запуска после установки. (Если установлено - продолжение установки без всяких сообщений.) и такой вариант : 2. Если ПО не установлено, то вызов сообщения : "Приложение такое то не установлено". И в нём же (в его окне) выбор кнопок : "Установить ?" (А затем его запуск) " Отмена" и " Продолжить установку". |
MKN я сообщения использую для отладки скриптов! Никто же вам не мешает их убирать с моих примерах!
Цитата:
StrCmp [значение 1] [значение 2] 0 +5, если [значение 1]=[значение 2], то выполнить ниже 4 строчки кода StrCmp [значение 1] [значение 2] +5, если [значение 1]=[значение 2], то не выполнять ниже 4 строчки кода Цитата:
Код:
Function .onInit Командой Pop снимаем коды возврата кнопок, и по кодам, с помощью StrCmp, назначаем функции кнопкам. В описании плагина там есть пример. Коды снимаем стандартными сообщениями: Код:
.... Цитата:
Код:
Function .onInit Справочник по NSIS |
kotkovets,
Такой вопрос : Возможно ли реализовать при выборочной установке, гиперссылку на всплывающее или просто открывающееся новое окно с текстом-описанием выбранного компонента ? Например, выбирая какой-нибудь компонент из секции установки, рядом с его описанием присутствует и фраза "Подробнее", являющееся своеобразной гиперссылкой, при клике на которой открывается окно с описанием этого выбранного компонента. И возможно ли в этом окне, кроме текстового описания, поместитть ещё и рисунок (рисунки) ? Было бы очень полезно для визуализации выбора вариантов устанавливаемых Templates для DVD меню, скинов и многого другого, Если такое не реально сделать средствами NSIS_а, то хотя бы реализовать открытие в отдельном окне (с заданными размерами) файла типа html или графического файла. Вопрос 2 : Возможно ли реализовать выбор компонентов не с помощью галок чекбоксов, а с помощью стандартных кликабельных кнопок. При нажатии на кнопку, чтобы менялся её цвет или на ней появлялся символ галки, свидетельствующий о выполнении ? Или при нажатии на кнопку, сменялось одно изображение на другое, рядом находящееся с кнопкой, если не возможно это сделать на самой кнопке... Типа, как это часто делают в AutоIT скриптах. |
MKN, в предыдущем посте я вам дал ссылку к справочнику, там есть пример (на примере Оперы) при наведении курсора мышки читаем описание компонента.
Цитата:
Цитата:
Как нибудь пробну реализовать... :) |
Цитата:
|
Цитата:
|
kotkovets,
Ещё вопрос (я чувствую, что уже превысил лимит твоего терпения, но всё же... :) ) Как бы продолжить большое и оч. полезное дело с GUI для NSIS_а. Не те обрубки c минимальными возможностями, что уже имеются в сети, а полнофункциональный и расширяемый GUI. Типа, что начал делать K.A.V. http://forum.oszone.net/thread-151756.html, но к сожалению не завершил... Цены бы не было такому проекту. (У меня в голове уже каша от обилия разномастной скриптоинформации для разных приложений и случаев... :) ) |
Цитата:
И исходников у меня нет...И не гуру в программировании С++ или Delphi Цитата:
Я разбиваю одну сложную задачу, на несколько простых задач и решаю их, потом все собираю в одно целое... Неплохие редакторы с мастером создания скриптов: http://forum.oszone.net/post-1078220-114.html |
MKN, просил же... :)
$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $R0, $R1, $R2, $R3, $R4, $R5, $R6, $R7, $R8, $R9 ? че за звери? :o Это переменные , которые , не нужно обЪявлять!, для хранения каких либо значений, что очень удобно! Если хотим объявить свою переменную, то пишем: Код:
Var MKN Читайте внимательно! |
Цитата:
Цитата:
|
Цитата:
В этой папке хранятся заголовочные файлы - библиотеки(инклюиды) Цитата:
Код:
ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion" "ProgramFilesDir" |
Цитата:
|
Цитата:
извиняюсь, defines.nsh - не идет в стандартной комлектации,..это по моему для плагинов, заголовочный файл. |
kotkovets,
Дык, где всё-таки про расшифровку $0, $1, $2, $3, $4, $5, $6, $7, $8, $9, $R0, $R1, $R2, $R3, $R4, $R5, $R6, $R7, $R8, $R9 узнать ? |
Цитата:
|
kotkovets,
Мне не ясно, что каждая из них означает и в каких случаях используется. Когда, к примеру, используются $R0, $R1, а когда $0, $1 ? И почему именно они ? |
Цитата:
|
kotkovets,
Мдя... Ясности не появилось... Можно конкретный пример с подробными комментариями ? |
Цитата:
Код:
ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion" "ProgramFilesDir" Свои переменные объявляем, если стандартных не хватает,бывает часто..если много фич и проверок в инсталляторе. Код:
Var MKN ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion" "ProgramFilesDir" - Читаем реестр результат в $1 |
Уважаемые эксперты, подскажите пожалуйста как реализовать в nsis следующее:
во время установки инсталятор выполняет определенные действия, после чего выдает сообщение: "установка продолжится после перезагрузки компьютера нажмите "ок" чтобы перезагрузить компьютер сейчас или "отмена" чтобы перезагрузить компьютер позже." После чего либо перезагрузить компьютер (кнопка "ок") и самостоятельно вновь запустить установку, либо просто закрыть инсталятор, а после перезагрузки пользователем самостоятельно вновь запуститься. Еще одно пожелание если инсталятор был запущен с ключем "/S" то он должен вести себя как будто была нажата кнопка отмена, но после перезагрузки он самостоятельно запустился бы, но с ключем "/S". Это возможно реализовать? или хотя бы часть этого? ЗЫ: заранее спасибо. |
Цитата:
Если все сделать как вы написали, то нужно проверку делать, че установилось(как у Alcohol 120%), а то получится вечный запуск или сообщение: перезагрузить или нет.. :) |
|
Цитата:
Код:
Section |
Цитата:
Только возникает ещё вопрос - почему их только 20 (а вдруг надо 50 ?) и почему они именно таким образом обозначены (а не $A $B $C или просто вольно - $фигня1, 2 и т.д. ) ? И чем они в таком случае отличаются от назначаемых(объявляемых) мной переменных ? |
Цитата:
Цитата:
тянутся хвосты. |
ещё вопрос, можно ли при помощи nsis создать службу? если да то какой командой?
|
Цитата:
http://nsis.sourceforge.net/Services_plug-in |
Подскажите, можно ли средствами NSIS создавть вирульные каталоги IIS?
|
вирульные каталоги... А ето че такое?
|
если у Вас установлен IIS (Internet Information Services) (это WEB сервер от Microsoft) выберите в нем свой веб-узел. и в менюшке - создать - виртуальный каталог... а дальше там все понятно :)
|
mshak,
Честно и не знаю, не задавался таким вопросом. http://nsis.sourceforge.net/Category:Plugins не ходили? может там есть че.... |
о! спасибо. надеюсь вот это http://nsis.sourceforge.net/NsisIIS_plug-in поможет.
|
Для определеничя установленного приложения по наличию ключа в реестре (если ключа нет - уст vc.exe , если есть - продолжается установка) делаю так, как и советовали :
Код:
ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{837b34e3-7c30-493c-8f6a-2b0f04e2912c}" "" |
MKN
Ну вы же читаете, значение ключа в реестре, по умолчанию, а значение пустое! соответственно $1="" Код:
ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{837b34e3-7c30-493c-8f6a-2b0f04e2912c}" "" Код:
ReadRegStr $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{837b34e3-7c30-493c-8f6a-2b0f04e2912c}" "DisplayName" Советую вам для отладки скриптов пользоваться messagebox |
Совет для тех у кого название программы слишком длинное и не умещается на странице приветствия:
по умолчанию размер метки соствляет 28u, что примерно 2 с половиной строки. Естественно если название должно выводится на трех строчках, то оно не влезает. Это решается добавление в коде константы MUI_WELCOMEPAGE_TITLE_3LINES и тогда высота метки будет составлять 38u, что вполне достаточно для вывода трех строк. пример: Код:
... открываем файл C:\Program Files\NSIS\Contrib\Modern UI 2\Pages\Welcome.nsh (C:\Program Files\NSIS - папка куда установлен NSIS, у Вас может отличаться) предварительно сделав копию этого файла. Находим 80-82 строки со следующим содержанием Код:
!insertmacro MUI_UNSET MUI_WELCOMEPAGE_TITLE Код:
!insertmacro MUI_UNSET MUI_WELCOMEPAGE_TITLE_CUSTOM_HEIGHT Код:
;Title Код:
;Title ;12u - высота одной строки а вот пример использования если название умещается аж на пять строк: Код:
!define MUI_WELCOMEPAGE_TITLE_CUSTOM_HEIGHT 60 ;12u - высота одной строки |
kotkovets,
Подскажи, если перед установкой необходима проверка наличия нескольких процессов, запущенной службы и нескольких установленных приложений (с запуском их установки в случае отсутствия), то каким образом в Function .onInit правильно организовать их последовательное выполнение ? Поместить в скрипте друг за другом в пределах этой секции ? И как быть в аналогичном случае с закрытием процессов, остановкой службы перед деинсталляцией ? И почему при наличии !define BRANDING "Текст" - на страницах "брэнд" не отображается ? |
Цитата:
Код:
!define BRANDING "Текст" ; Цитата:
Код:
Function .OnInit Цитата:
Код:
Function un.OnInit |
Цитата:
Если ключ существует, то - результат. Если не существует - результат. (Собственно я так всегда и делал в Setup Factory) |
Цитата:
Код:
Section |
kotkovets,
Возможны ли в NSIS действия с элементами окон (как в AutuIT) ? Или может есть какие либо хитрости для такой реализации ? |
Цитата:
поковыряй WinMessages.nsh и команды FindWindow , SendMessage и т.д Вплотную этим не занимался пока... :) Закрытие всех окон IE |
Цитата:
Вопрос: как сделать неактивной или совсем убрать кнопку "Show Details" при инсталляции ? И возможно ли вообще убрать неактивные кнопки "Back" и "Cancel" на финишных страницах ? |
возможно.... вот тебе функция которая блокирует кнопку назад (например может пригодиться на кастомных страницах)...
Код:
Function DisableBackButton ====== а вот еще одна интересная функция.. может кому нибудь и пригодится.. не знаю выкладывали ли ее здесь ранее.. Код:
Function RelGotoPage ; Функция для произвольного перехода по страницам |
Цитата:
ShowInstDetails hide|show|nevershow ========================================== ShowInstDetails hide - показываем кнопку и скрываем окно деталей ShowInstDetails nevershow -скрываем все ShowInstDetails show - показываем окно деталей без кнопки ========================================== При деинсталляции: ShowUninstDetails |
при наличии в скрипте функции
Код:
!define MUI_CUSTOMFUNCTION_GUIINIT MyGUIInit И возможно ли изменить фон страницы приветствия (без скин-плагинов) ? |
MKN, к твоему вопросу по картинке:
попробуй так: Код:
; записываем картинки в окно установщика |
mshak,
Благодарю. Но я уже разобрался и удалил свой вопрос... У меня не было !define MUI_HEADERIMAGE А как изменить значок в полосе шапки окна ( рядом с "Установка и т.д." ) ? |
!define MUI_ICON "Install.ico" ; - иконка на файл установщика
!define MUI_UNICON "UnInstall.ico" ; - иконка на файл установщика |
Подскажите пожалуйста, каким образом "отвязать" текст от правого края поля страницы приветствия
!define MUI_WELCOMEPAGE_TITLE "${PRODUCT_NAME} ${PRODUCT_VERSION}" расположив PRODUCT_NAME и PRODUCT_VERSION по центру ? |
Цитата:
!include "Pages\Welcome.nsh" на !include "Pages\Welcome_1.nsh" сохраняем изменения в файл MUI_2.nsh Открываем файл ${NSISDIR}\Contrib\Modern UI 2\Pages\Welcome.nsh и заменяем все константы ${MUI_BGCOLOR} на 0xFFFF80 (здесь цвет желтый) и сохраняем изменения в файл Welcome_1.nsh. Подключаем измененый интерфейс Modern: Код:
!include "${NSISDIR}\Contrib\Modern UI 2\MUI_2.nsh" |
kotkovets,
Есть ли какой либо приём, для регистрации одной командой всех DLL, находящихся в папке ? К примеру, есть у меня папка с полсотней библиотек, требующих регистрации. Неужели каждую в отдельности прописывать ? |
касательно закрашивания заднего фона не обязательно редактировать страницу. можно попробовать след образом:
Код:
!define MUI_BGCOLOR 0x00FF00 |
Цитата:
Код:
!define MUI_WELCOMEPAGE_TITLE " ${PRODUCT_NAME} ${PRODUCT_VERSION}" |
Цитата:
|
Ещё раз про значок в полосе шапки окна ( рядом с "Установка и т.д." ) - как его вообще убрать ?
Предположил, что с помощью WindowIcon on|off ( 4.8.1.45 Sets whether or not the installer's icon is being displayed. ) для этого. Но нет не помогло... И относительно ShowInstDetails nevershow - кнопка то скрывается, а устанавливаемый контент над "индикатором прогресса" установки, мельтешит всё равно. Как это ликвидировать ? Допустимо ли с скрипте совпадение SetOutPath для файла-папки и точно такого же местоположения в File ? Т.е. компилировать файлы оттуда, куда и устанавливать... Как реализовать такую конструкцию (для администратора с оч. "шаловливыми пользователями" ? Перед установкой программы поверх уже установленной предыдущей версии, надо сделать бэкап её настроек(ini файлика), который останется в папке вновь установленной программы), но : Этот бэкап поместить в запароленный архив, и назначить файлу или"максимальные" права доступа или соответствующий атрибут (чтобы этот архив хотя бы с ходу нельзя было удалить). |
Цитата:
Код:
Section |
Цитата:
1.Открываем любым редактором ресурсов файл ${NSISDIR}\Contrib\UIs\modern.exe 2.Находим диалог 105, удаляем строчку ICON 103, 1039, 300, 8, 21, 20, WS_GROUP 3.Сохраняем как modern_noicon.exe 4.В самом начале скрипта пишем: Код:
!Include "Mui.nsh" |
Вот еще нашел элегантный способ, скрывать элементы, без правки файлов, через WinApi функцию.
Код:
!Include "Mui.nsh" То бишь, зная указатель, можно и скрывать другие элементы. |
Цитата:
SetOverwrite on - перезаписывать файлы SetOverwrite off - наоборот... Цитата:
Что то типа так(справку почитай по 7z): Код:
SetOutPath "$TEMP" |
Необходимо, чтобы при снятии отметки с чекбокса(чекбоксов) выбора устанавливаемых компонентов,
в файле скрипта $TEMP\app.nsi удалялись(или комментировались) все записи о секции этого компонента. Т.е. , если чекбокс не отмечен, то из файла скрипта "физически" удаляются все записи-строки, относящиеся к секции этого компонента. Предполагаю, что либо будут удаляться(или комментироваться) конкретные строки, относящиеся к конкретным секциям компонентов, либо в скрипте должны быть какие то идентификаторы для секций, ориентируясь на которые и будут удаляться записи из файла..., или всему содержимому каждой секции присваивается переменное значение, с которым и будут производиться действия... Далее, из изменённого скрипта, командой компилируется новый дистрибутив в указанное место (например, в $DOCUMENTS\NewSetup) и очищается содержимое $TEMP. Всё необходимое для компиляции (включая и сам NSIS(только нужное), при запуске "конструктора", распаковывается в $TEMP (или в $TEMP\package). ps Эта процедура необходима для реализации идеи конструктора(пока в упрощённом виде) создания нового отдельного дистрибутива из выбранных компонентов. Обсуждалось http://forum.oszone.net/thread-151756-12.html с K.A.V., который заинтересовался этой идеей, но до реализации дело не дошло по объективным причинам... Подскажите пожалуйста, как такое реализовать ? |
а кто нибудь пробовал вызывать vb скрипты из NSIS методами кроме:
... exec "cscript 1.vbs" ... ... exec "wscript 1.vbs" ... может плагин есть какой либо? .... прошу прощения.. поторопился )) http://nsis.sourceforge.net/Run_a_VBScript_from_NSIS .... но вопрос все-таки есть. Возможно ли как то раскрашивать вывод команды DetailPrint? например когда происходит ошибка - вывести ее красным цветом.. |
Цитата:
|
спасибо. но про эти команды я знаю. меня интерисует раскрасить конкретную запись лога.
точнее я это уже сделал.. но скрипт пока сыроват для его публикации :)... опубликую на днях. |
Цитата:
|
в общем need help по его доработке.
вот тестовый скрипт: файл ColorDetailPrint.nsi Код:
!include "MUI2.nsh" Код:
/* |
Цитата:
System::Call..(вот не знаю точно !) для восстановления. или же не все обновляется...предположения.... Или запретить свертывание... |
дело не в сворачивании... а в перерисовке.
если прокрутить лог установки будет тоже самое.. |
чтобы задать "боковую" картинку в инсталяторе nsis используется команда:
!define MUI_WELCOMEFINISHPAGE_BITMAP "Win.bmp" какой командой можно задать аналогичную картинку в деинсталяторе? |
Цитата:
Код:
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "Win.bmp" |
Доброго времени суток :) Возможно в этом топике найдется тот, кто сможет мне помочь..
Вот в этом топике я пытался распаковать одну софтину, как выяснилось, это просто проект NSIS, основанный. С помощью Universal Extractor я распаковал его, но сам скрип то никак не вытащить.. возможно кто-то может написать скрипт, для сборки проекта в рабочее состояние (извлеченные ресурсы в указанном ранее топике). Такая "прога" выполняет всего 3 не сложных действия: 1. Предлагает пользователю ввести ник, после подставляет его в тег и заносит в рядом лежащий конфиг. 2. Предлагает пользователю выбрать путь к папку для скачки, опять же подставляет выбранный путь в нужный тег и заносит в конфиг. 3. Определяет IP пользователя и выводит ему, далее опять подставляет в нужный тег и заносит в конфиг. Вот и весь функционал. Думаю, человеку, который разбирается в этом, будет не сложно состряпать такой скриптик.. если найдутся такие - смогу более подробно описать что да как.. Спасибо. |
truth, Насчет вашего вопроса, если вы дело имели с NSIS,
тут сборник плагинов: http://nsis.sourceforge.net/Category:Plugins Там есть описание каждого из плагинов (из распакованной папки $PLUGINSDIR) и как пользоваться В помощь Справочник по NSIS Цитата:
|
Цитата:
*ушел штудировать справочник* |
kotkovets, нужна помощь по работе с флагами...
Есть у меня три секции, например, section1, section2, section3 Мне необходимо, чтобы при выборе любой секции, устанавливался на других тот же флаг. Тобишь выбрал или снял я чек бокс с section1 (или section2 или section3), и на других секциях, тоже снялся чек бокс... а если установлю чек бокс, то на других установился... Если можно пример... |
Цитата:
Отметил секцию - выполнились все команды в секции, и наоборот |
Цитата:
|
Цитата:
Получилось у меня так. Только первая секция управляет состоянием двух других секций. Функцию .onSelChange в скрипте размещаем после всех секций в скрипте, это нужно для корректного считывания индетификаторов секций |
Приветствую, :)
Собственно мой вопрос не совсем по Нсис, но, около него. Меня интересует все что касается темы создания плагинов для Нсис. На офф сайте пошарился но что-то инфу по этой теме не нашел, если что и есть по этой теме, то только сам "результат" этой деятельности в виде плагинов и их описания функционала. Может плохо искал?! Что-то типа СДК или подобное, оно вообще существует в природе, и как, с чего желательно начинать работу по созданию плагинов для Нсис? Использую в работе Нсис Юникод, плагин планирую делать для него. Буду благодарен за ответы и помощь. |
MaGoth
Если нужно то могу скинуть сорцы многих плагинов. |
Krinkels, Не помешает, хотя многие скачать с сайта можно.
А ты сам случаем не занимался этим вопросом, и если опыт есть, может подсобишь немного (по аське желательно)? Зы, ты случаем не с бороды ру, что-то ник знакомый...?! |
MaGoth
В личку загляни |
Доброго времени суток.
подскажите пожалуйста: - как узнать существует ли файл? - как заменить системный файл? (или файл который используется) я знаю что существует PendingFileRenameOperations (это ключ в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager) но его тип должен быть REG_MULTI_SZ. а как создавать ключ (или дописывать в случае если уже существует... ) |
на первый вопрос ответ нашел... ifFileExists
|
Цитата:
И плугин есть для этих целей:http://nsis.sourceforge.net/AccessControl_plug-in AccessControl::SetFileOwner - для файла AccessControl::GrantOnFile - для директории |
kotkovets, помогите разобраться.
Есть чудесный плагин Registry (http://nsis.sourceforge.net/Registry...DIT4_format.29) так вот мне необходимо произвести импорт\экспорт ветви реестра, например, HKEY_CURRENT_USER\Software\прога Собственно проблема не пойму как правильно вписать код в скрипт, чтоб работало. Если можно примерчик. |
Цитата:
Обязательно смотрим код возврата: 1. В секции экспорта, если $R0= -1, то ошибка, то бишь нужной ветки в реестре нету, если $R0=0 -все ОК! 2. В секции импорта если $R0= -1, то ошибка, файл не найден или нету, если $R0=0 -все ОК! |
Как в NSIS создать ключи в ветке реестра HKEY_USERS\S-1-5-21-xxxxxx-xxxxx-xxxx\Software\, если для каждого компа эти x разные ?
|
Цитата:
|
Цитата:
|
Цитата:
Код:
SetShellVarContext current |
Цитата:
|
Давно не писал ничего про NSIS. Продолжил благое начинание.
Определение версии и редакции операционной системы в NSIS |
Подскажите пожалуйста, как в NSIS выглядит переменная c:\Documents and Settings\All Users ?
Именно таким образом без "продолжения" пути. (Продолжением пути будет произвольное имя App) И какая переменная в Windows 7 для С:\Users\Public ? |
Lisabon,
Вот так : $PROFILE\..\All Users\ - работает. Без точек - нет... Интересно, а для Windows 7 С:\Users\Public - таким же образом делать ? |
Цитата:
Код:
Name "Example1" |
SetShellVarContext all
MessageBox MB_OK "$DOCUMENTS" Код:
|
Кстати неплохие примеры пишут через WinAPI:
http://nsis.sourceforge.net/Get_the_...System_plugin) |
kotkovets,
А можно для создания вышеискомых переменных, определив системный диск в переменную, подставить эту переменную вместо C:\ ? |
MKN можно, но зачем? :o
|
После выхода из инсталлятора (его закрытия) необходимо убить процесс и удалить его файл .
Процесс выгружаю так: Код:
Function .onGUIEnd Что можно сделать ? |
Цитата:
Код:
Function .onGUIEnd |
|
Krinkels A а мануальчик, как использовать то?
Код:
nsisarc::ArcExtract "1.arc" "tmp" "" "" "" |
Упс, пардон.
nsisarc::ArcExtract "1.arc" - Архив. Когда у себя тестил он лежал рядом с инсталятором "tmp" - Папка куда нужно распаковать архив "" - Вроде для пароля "" - Без понятия для чего, нужно у автора спрашивать "" - Без понятия для чего, нужно у автора спрашивать |
Krinkels,
Я думал вы автор, беспарольные архивы распаковывает, как заявлено, а вот с паролем никак! Уточните у автора параметры все таки! |
kotkovets
Попробуй во вторые пустые кавычки вставить пароль, должно помочь |
Подскажите пожалуйста, как решить такую задачу :
Необходимо дождаться появления(создания) file.txt в $TEMP и как только он появится (когда именно - неизвестно), закрыть инсталлятор. |
MKN,
А кто будет создавать file.txt в $TEMP ? :) |
Цитата:
Полагаю, надо как то организовать цикл проверки существования этого файла... В документации ничего путного по этому поводу не обнаружил... |
А проблема, то в чем? как минимум:
Код:
ExecWait "процесс.exe" ;команда будет ждать завершения процесса |
kotkovets,
Не подходит, первым делом пробовал... И процесс здесь не нужно учитывать. Ориентир - только файл. Может связано с тем что скрипт ещё запускает последовательно несколько программ... |
MKN,
Покажь проблемный кусок кода |
kotkovets,
Макет такой : Код:
Section -Post Все эти проги должны работать одновременно. App3 создаёт файл либо "сама" либо после запуска извне App4. Как только появится этот файл, App1 и App2 становятся не нужны, но App3 должно оставаться открытым. |
Как все запутано!
Здесь организован бесконечный цикл, до тех пор, пока не появится файлик Txt.txt Для четвертого запуска app.exe или продолжения скрипта нужно время "жизни" цикла Код:
!include "LogicLib.nsh" |
Последнее время мне часто задают вопросы: как поместить свой текст описания, в зависимости от выбранного языка установщика?
Для этих целей служит команда LangString Код:
LangString message ${LANG_ENGLISH} "English message" Всегда устанавливайте текст описания строки для каждого языка в вашем скрипте. Пример многоязычного инсталлятора посмотрите C:\Program Files\NSIS\Examples\Modern UI\MultiLanguage.nsi |
kotkovets, Наверное стоит указать что данный пример кода будет корректно работать в Нсис (кодировка Анси) только в случае использования связки английский/русский, не более.
Для всех остальных случаев потребуется использовать версию Нсис - Юникод... ;) MfG MaGoth, WoG.ru-Community. |
Цитата:
Код:
!define MUI_LANGDLL_ALLLANGUAGES A Юникод в частности, в этом случае, добавляет поддержку "экзотических" языков. А многие русскоязычные пользователи крайне редко будут добавлять такую возможность, лично мне - ни к чему, достаточно английского языка, что бы тебя поняли многие :) |
Кто нибудь работал с плагином nsisFirewall 1.2 ? (http://wiz0u.free.fr/prog/nsisFirewall/)
У меня возникла необходимость при установке, занести в список разрешённых связку "программа-файл". Плагин nsisFirewall показался самым подходящим для этого, т.к. позволяет : Цитата:
Даже при компиляции собственного примера из архива плагина - ошибка... Цитата:
|
Цитата:
Для Unicod версии NSIS - копируешь файл nsisFirewallW.dll в C:\Program Files\NSIS\Unicod\Plugins (или как там). Работает нормально, как на XP, так и на 7 (не проверял на x64 ОС) В 7 смотри Дополнительные параметры>Правила для входящих поключений - что изменилось. |
kotkovets, Хм, или я не понял или ты, одно из двух.
В анси кодировках текста нет возможности использовать более 2х языков, например скрипт *.nsi а в нем содержатся строки текста на русском и на английском, да здесь проблем не будет ни каких. А если как у меня - 8 языков, русский испанский немецкий и прочии и все строки текста находятся в одном *.nsi файле скрипта ?! Имхо, в этом случае MultiLanguage.nsi летит в трубу вместе с компилятором Нсис Анси. ;) Цитата:
Цитата:
Проблема в другом, с Юникодом все тексты - всегда и везде, будут отображаться корректно, вне зависимости от языка Системы, или того что выбрал пользователь в диалоге инсталлятора. MfG MaGoth, WoG.ru-Community. |
Цитата:
Цитата:
|
Ещё раз о плагине nsisFirewall.
Что то ведёт он себя на W7 странно и не стабильно. Использовал другой плагин - Simple Firewall Plugin http://nsis.sourceforge.net/NSIS_Simple_Firewall_Plugin , к которому пока нет вопросов. |
Есть ли возможность у данной программы создавать инсталяторы, у которых была бы возможностью выбора устанавливаемых компонентов?
Т.е. я хочу упаковать в инсталятор несколько папок и мне нужно чтоб в дальнейшем при запуске этого инсталятора он давал выбрать какую папку распаковывать (устанавливать), а какую не надо. Или может кто-нибудь посоветует другую программу для создания данного инсталятора, по функциональности мне подходит SFX модуль в WinRar, но всёже там нет в дальнейшем возможности выборв распакуемых компонентов архива. |
|
Доброе время суток, уважаемые.
Нужно на linux-сервере генерировать установщик программ для windows. msi, exe - неважно - главное, чтобы пользователь на html-странице кликнул на ссылку, скачал инсталлятор и установил у себя программу. По-моему, nsis - это единственная система, которая на сервере под линуксом способна генерировать windows-инсталляторы. Проблема в том, что файл makensis под linux нужно собирать из исходников самому. Я все делал, как написано в статье http://mtaalamu.ru/blog/1370.html или http://www.xdevsoftware.com/blog/pos...on-Linux-.aspx - вылетают ошибки и билдиться программа не хочет. В линуксе я нуб, поэтому не мог ли кто-нибудь выложить уже готовый файл makensis? Или где скачать его можно? Поиск не помог:( |
Здравствуте,
возник один вопрос по поводу установки одной программы в скрытом режиме. Запускаю с параметром /S и почти уже перед окончанием установки вылетает окошко с выбором языка, нужно нажать ОК, и далее ещё одно с подтверждением установки настроек по умолчанию, нажать ДА или ОТМЕНА. Так вот, как избежать появления этих окошек. Возможно нужно ещё что-то прописать после параметра /S подскажите пожалуйста, заранее спасибо |
Цитата:
Можно пояснить это не желанием (не знанием) или не доработкой "создателя" инсталлятора. написать скрипт на AutoIt, но это не та тема |
Пример выбора одного компонента из нескольких, находящихся в одной группе.
В этом примере был замечен "глюк" NSIS. При нажатии группы "Компоненты", непредсказуемо отмечались секции в группе. Решение. "Отключить" секционную группу и определить начальное состояние компонентов в функции .OnInit |
Очередное обновление справочника по NSIS
Что нового?
Если вы заметите какие-то ошибки, неточности пожалуйста сообщите мне! Рассматриваются предложения, что бы вы хотели увидеть в справочнике и чего не хватает. За помощь в переводе спасибо участнику конференции mshak Скачать cправочник по NSIS |
Кто знает, подскажите пожалуйста, как правильно в скрипте прописать
c:\Documents and Settings\All Users\Application Data\ - ? если $APPDATA - это c:\Documents and Settings\ user \Application Data\ хочу прописать CreateDirectory "c:\Documents and Settings\All Users\Application Data\IObit" - только через переменную так правильно или я ошибаюсь!?::: SetShellVarContext all CreateDirectory "$APPDATA\IObit" |
Цитата:
|
Подскажите, как прочитать путь к папке из реестра и запихнуть его в InstallDir ?
|
CyberMaster,
Код:
ReadRegStr $INSTDIR HKLM "Software\NSIS" "" |
Ткните носом. Как можно изменить внешний вид страницы с выбором компонентов? Нужно это окошко (где отображаются секции) сделать немножко шире..
Надеюсь на вашу помощь. |
jackrv,
Добавьте строчку в начале скрипта: !define MUI_COMPONENTSPAGE_NODESC - позволяет не использовать описание. Если этого мало правьте любым редактором ресурсом, файлы в папке C:\Program Files\NSIS\Contrib\UIs : modern_smalldesc.exe - ресурс с маленькой областью описания modern_nodesc.exe - ресурс без описания или по умолчанию в файле modern.exe - 104 диалог. |
kotkovets, было бы лучше убрать тот текст что с лева, но и так нормально..
Спасибо! |
Цитата:
http://forum.oszone.net/post-1515812-847.html -- |
Может кто работает с таким редактором как HM NIS Edit? Появилась проблемма работы с мастером, невозможно выбрать язык установки. Если кто знает в чем проблема, отпишитесь, буду очень благодарен.
----- Снимаю этот вопрос----- После перезапуска компьютера мастер заработал нормально. Еще раз СОРИ (извените) |
Здравствуйте. Подскажите пожалуйста, можно ли из скрипта запускать исполняемый файл программы с ключом?
Например. Нужно, чтобы файл VM_Restorer.exe запустился по окончании установки с ключом /I. |
Цитата:
Код:
!define MUI_FINISHPAGE_RUN "$INSTDIR\VM_Restorer.exe" |
Ох, нашёл в спавке. Спасибо за ответ.
|
Где можно почитать про реализацию ключей при "тихой установке" которая используется тут?
kotkovets, Спасибо, все мотаю на ус, но не подходит мне такой вариант. Желательно описание оставить, а правую область на ноль свести. Пока не правил ехешку, но вскоре придется. Кстати вопрос навскидку: как прописать иную ехешку в скрипте? |
Цитата:
Цитата:
Код:
!define MUI_UI "файл ресурса.ехе" - основной ресурс MUI (modern.exe) |
Цитата:
В принципе поковырявшись, все сам понял. |
Вот например строка, если я ошибаюсь - поправьте меня.
Код:
StrCmp 1 0 NoDesktopShortCuts Если в переменной $shDesktop находится значение 1, то выполняем следующую строку, если же значение 0, значит переходим к лейблу NoDesktopShortCuts А перед этой строкой в .onInit есть еще одна занимательная математика: Код:
StrCpy $shDesktop $shCMD 1 0 Вот этого я хотел найти на форуме. Если ошибаюсь, прошу дополнить/поправить меня |
jackrv,
на 92 страничке скачайте справочник по NSIS, там есть разбор строк. Условные и безусловные переходы. Код:
StrCpy $0 "a string" 3 -4 Результат в $0 после выполнения команды: "rin" Код:
StrCmp str1 str2 [метка перехода, если значения str1 и str2 равны] [метка перехода, если значения str1 и str2 не равны] |
Потребовалось из скрипта запустить батник, который кое-какие махинации делал в C:\Windows\System32
Запустил инсталлер на Windows 7 x64 , и он там заработал некорректно, вместо System32 полез в SysWOW64. Ну да, инсталлятор то х86 компилится, соответственно и cmd.exe для батника вызывается "неправильный"... вобщем, в итоге я его запустил в C:\Windows\System32, а свои изыскания оформил в статью: Запуск "родного" x64 процесса из x86 инсталлятора NSIS. Перенаправление папок Надеюсь, будет полезно кому-то ещё. |
С той же проблемой столкнулся ранее, нужно было в x64 воспроизвести с помощью системной библитеки звук .wav - отключил перенаправление, и пошло дело :)
|
Как можно после установки приложения увидеть лог установки? Во время установки есть кнопочка Детали..., нажав которуюможно эти детали установки лицезреть. может еасть какой тоключ при запуске?
|
Цитата:
Прописываем плагин после всех секций в скрипте (т.е в последней секции) На 92стр. скачайте справочник по NSIS там есть пример без плагина. Извиняюсь , то не то было, ссылку изменил на плагин. |
kotkovets,
А как сделать на "живой" программе, если скрипта нету? |
Цитата:
Это вряд ли, ну если автозакрытие на стр. установки не прописано и окно деталей не выключено, то можно через буфер обмена (CTRL+C). Да и если повезет, то в окно не попадают записи в реестр. Для этого куда выгодней использовать RegShot или ProcMon |
Такая ситуация:
Есть два компонента которые нельзя устанавливать одновременно (как это осуществить с помощью радиобутонов я знаю), но так же нужно сделать так, чтобы оба компонента можно было не устанавливать. Как я понял, радиобутонами такое сделать можно, если просто добавить "пустой" третий компонент, при выборе которого не будет, соответственно, устанавливаться ни один из первых двух. Считаю такое решение не очень красивым. Слышал что можно сделать выбор с помощью обычных чекбоксов, на вроде проверки. Если стоит галочка 1, то галочка 2 убирается и наоборот, если стоит галочка 2, то галочка 1 убирается. При этом галочку можно убрать совсем ,и ни один из двух компонентов выбран не будет. Но никак не соображу как такое реализовать. Подскажите пожалуйста, лучше с примером сразу. |
Цитата:
Т.е выбор нужной секции - двойным нажатием. |
Всплыла другая проблема.
Если имеются несколько групп секций и в какой-либо функции используется SectionSetFlags ${IDG} ${SECTION_OFF} с групп секций (всех) перестают сбрасываться флажки. Например, если секции в группах относятся к разным InstType и при одном из вариантов должны отключаться все секции в одной из групп, то секции-то отключаются, а вот флажок на самой группе - нет (отключается только если по нему вручную щелкнуть). Можно ли это как-то исправить? Код:
!include "MUI2.nsh" |
silione,
Ну здесь, уже не прокатит трюк фиктивного отключения группы - в наличие неопределенные состояния групп, отсюда и глюки. 1. Нужно определить начальное состояние секций и групп. 2. Разработать логику переключения и рулить флагами секций. И дальше "прыгать" по логическим меткам (Это вечная проблема с секциями в NSIS). |
Есть
из инета, который ставить радиобаттон в группе только на одну секцию из этой группы, но при нажатии на общую группу "GROUP"в случайном порядке выставляются галочки, что совсем не нужно. Подскажите плиз как сделать так, чтобы при клике на "GROUP" галочки выставлялись по умолчанию на первые секции в группе? |
shell7777,
По этому поводу я уже отвечал здесь Код:
Function .onInit |
kotkovets,
огромнейшее приогромнейшее спасибо!!!! Урааа.... |
Я, видимо, дуб.
Почему у меня "компонент №3" может отмечаться одновременно с первым или вторым? И как при всем этом сделать так, чтобы при нажатии на группу "компоненты 1" галочка, либо снималась совсем, либо происходил последовательный перебор между 1, 2 и 3 компонентой? Код:
!include "MUI2.nsh" |
silione,
Могу в этом случае (дабы не выносить мозг :) ) порекомендовать так: http://forum.oszone.net/post-1326443-307.html |
Ыыыыыыыыыыыыы... Ну да, это работает, но сейчас задам самый тупой вопрос...
А как при всем этом сделать чтобы только один раз щелкать по строке? У меня такое ощущение, что замкнутый круг получается, исправляя одну траблу, получаем другую... |
Цитата:
ЗЫ. хотя явно утверждать не буду, что нельзя именно так и сделать переключения...Ведь я всего в NSIS не знаю:) |
Цитата:
|
Столкнулся со следующей проблемой:
Для хранения пути к папке, из которой скрипт берёт файлы на упаковку, я использую переменную. Внутри этой переменной я успешно использую другие переменные, объявленные внутри скрипта, но не могу использовать переменные окружения (например, $PROGRAMFILES): компилятор не преобразует их в пути, а воспринимает как простой текст. Пример участка кода: Код:
!define PRODUCT_NAME "Mega_Project" Код:
File: Returning to: "$PROGRAMFILES\Mega_Project" Спасибо. |
Цитата:
!define - вообще то, эта команда препроцессора NSIS - помещает опр. значение в константу INSTALL_FILES_PATH (в вашем примере). А константа означает - постоянное, неизменное значение. А вы же пытаетесь, предопределенную переменную $PROGRAMFILES засунуть в константу, а на этапе компиляции эта переменная еще не определена ! Читайте справку по NSIS ! и почитайте Справочник по NSIS А делать нужно так: Код:
!define INSTALL_FILES_PATH "C:\Program files\Proga" |
Добрый вечер, только начал изучать NSIS.
Есть проблемка. Во время установки если пользователь выбирает определенную Section скажем установка «Сервера приложений», то перед установкой необходимо дополнительно запросить к примеру порт. То есть как я понимаю перед установкой должно появиться окно с параметром. Как этого добиться? |
Цитата:
1) проверить, отмечена ли нужная секция 2) Если отмечена секция вызывать соответствующий диалог и вызывать при закрытии стр. выбора компонентов. Самый простой пример, это с использованием плагина DialogsEx файлик DialogsEx.dll закидываем в C:\Program Files\NSIS\Plugins и хедер dialogs.nsh закидываем в C:\Program Files\NSIS\Include |
kotkovets спасибо, большое. Предложенный вариант работает, и для меня это выход.
Но возник дополнительный вопрос. Возможно ли сделать так что после выбора компонентов, и нажатие кнопки "Далее", возникало не отдельное окно с контролом порт, а была бы следующая страница с контролом порт, А после этого уже установка. |
BSL, вы можете "нарисовать" свою собственную страницу. Это очень просто. Посмотрите этот пример. Как я понял, вам нужно будет создать только одно текстовое поле и одну надпись.
|
hb860, и изучал эту ссылку. Загвоздка в том я смогу создать свою страницу, но как научить ее отображать её или нет в зависимости от выбранной секции.
|
Цитата:
И обязательно все функции, которые работают с секциями, размещать в скрипте после всех секций - для корректного считывания индетификаторов секций. |
kotkovets, я обычно в секции задаю значение переменной
выглядит примерно так Код:
section "Покажите мне следующую страницу" |
hb860, Можно и так, или через стек, назначать метку отмеченной секции
но мне на макросах, как то удобней, особенно в сложных скриптах. На то и NSIS - вариантов реализации предостаточно. |
|
jackrv, Цвет выделения текста при открытии странички?
Вообще цвет контролов можно менять так: SetCtlColors [хэндл контрола] [цвет текста] [цвет фона] Код:
SetCtlColors $Text `0x0000FF` `0xFFFFFF` |
Скорее всего ты меня не понял..
Светлый фон на котором контролы находятся он по идее должен быть таким же цветом как и весь мастер. Т.е. нужно заменить #EAEBEC на #566978 Правда цвета на фоне форумного фона не очень видно %) |
jackrv, Я все прекрасно понял, вот примерчик:
Цитата:
Вам нужно узнать общий фон картинки - в шеснадцатиричном виде и закрасить фон. Это примерно по скрину - 0x566978 |
kotkovets, вы были правы.. Классно когда тебя понимают даже тогда когда ты сам запутался)
Вопрос второй, у меня есть кастомная страница и страница UMUI_PAGE_ABORT. Так вот если посреди инсталяции нажать отмену, то перед вызовом UMUI_PAGE_ABORT открывается та самая кастомная страница, что собственно говоря не есть желанным.. Где мог быть косяк?) |
jackrv, Трудно сказать вслепую, скрипт приведите...
хотя я Ultra ModernUI не пользуюсь и без этого фейса позволяю себе творить почти любую чертовщину :biggrin: |
Вот почти весь код (за исключением инклюдов..)
Правда, не думаю что он покажется вам легкочитаемым.. |
Хм.. чтобы инсценировать ситуацию, нужен Ultra ModernUI, не качал.
Хотя вроде бы все верно, видно не совсем дружат совместно Ultra ModernUI и стандартный MUI. !define MUI_ABORTWARNING - cтандарт MUI, по идее должно быть - !define UMUI_ABORTWARNING (когда нажимается кнопка отмена, вызывается мессага) В таких случаях рекомендую создать простой отладочный скриптик со своей страничкой и последовательно добавлять странички, функции - до появления глюка и отслеживать значение используемых переменных в разные моменты, через DetailPrint или MessageBox. |
Убрал !insertmacro UMUI_PAGE_ABORT проблема иссякла, не сильно нужно то окошко, поэтому как временный выход из ситуации..
|
Здравствуйте.
Дело в том что делаю инсталлер FlylinkDC++ для своего провайдера. Не могу понять как например в отдельном окне сделать окна типа "ввод никнейма", "ввод IP адресса" и .т.п. и связать их с "DCPlusPlus.xml" т.е. файлом настроек. Вообще хотел бы сделать много окон с пояснениями т.к. многим пользователям и не нужно лазить в настройках что-то где-то устанавливать, искать и т.п. Сразу все ввел и довольный пользуешься =) Примерный билд инстала: 1 Страница. приветствие (в скрипте уже реализована) 2 Страница. выбор директории (в скрипте уже реализована) 3 Страница. Ввод никнейма Ввод мыла Ввод IP адресса 4 Страница. Настройка избранных хабов Название Адресс Никнейм Пароль Способ соединения 5 Страница. Шара т.е. вывод полного дерева и выбор пользователю что он хочет расшарить 6 Страница. Директория для скачивания 7 Страница. Вывод соглашения с правилами поведения на хабе и наказания за несоблюдение Вот как то так =) Буду очень благодарен за разъяснения хотя бы по пункту 3. И по завязке его с файлом настроек. дальше думаю по аналогии с остальным разберусь =) |
Цитата:
Парсинг XML - пример в шапке. В помощь плагины - http://nsis.sourceforge.net/Category:Plugins и по своим страничкам: http://nsis.sourceforge.net/Category:NsDialogs_Examples и еще в довесок: Справочник по NSIS |
Цитата:
|
Необходимо покрасить текст на странице приветствия в белый цвет.
Сделал так: Код:
!define MUI_PAGE_CUSTOMFUNCTION_SHOW WelcomePageSetupShow И еще вопрос, как узнать ID элементов диалогов (1201, 1202)? Я их нашел совершенно случайно в примерах... |
zmeykas,
Я использую только MUI2.nsh, где странички приветствия/завершения рисуются через nsDialogs. А значит, что уже контролы уже сформированы и все хэндлы контролов уже в "кармане" Contrib\Modern UI 2\Pages\Welcome.nsh - в этом заголовочном файле хранится все, что нужно, для странички приветствия. |
Товарищи, помогите конвертнуть в NSIS значения реестра:
[HKEY_CURRENT_USER\Software\Classes\Directory\shell\treesize_fs] @="TreeSize Professional &File Search" [HKEY_CURRENT_USER\Software\Classes\Directory\shell\treesize_fs\command] @="\"E:\\Program Files\\JAM Software\\TreeSize Professional\\TreeSize.exe\" /SEARCH /TABS 5 \"%1\"" [HKEY_CURRENT_USER\Software\Classes\Folder\shell\treesize5] @="TreeSize Professional &5" [HKEY_CURRENT_USER\Software\Classes\Folder\shell\treesize5\command] @="\"E:\\Program Files\\JAM Software\\TreeSize Professional\\TreeSize.exe\" /CONTEXT \"%1\"" Reg2Nsis не помогает. Выдает такое: WriteRegStr HKEY_CURRENT_USER "Software\Classes\Directory\shell\treesize_fs" "" "TreeSize Professional &File Search" WriteRegStr HKEY_CURRENT_USER "Software\Classes\Directory\shell\treesize_fs\command" "" "\$\"$PROGRAMFILES\JAM Software\TreeSize Professional\TreeSize.exe\$\" /SEARCH /TABS 5 \$\"%1\$\"" WriteRegStr HKEY_CURRENT_USER "Software\Classes\Folder\shell\treesize5" "" "TreeSize Professional &5" WriteRegStr HKEY_CURRENT_USER "Software\Classes\Folder\shell\treesize5\command" "" "\$\"$PROGRAMFILES\JAM Software\TreeSize Professional\TreeSize.exe\$\" /CONTEXT \$\"%1\$\"" Что то с путями путает. Короче там в реестре лишняя / получается перед буквой диска. В этом видимо проблема... Пункты контекстного меню не запускают программу. |
Цитата:
Код:
WriteRegStr [root_key] [subkey] [key_name] [value] |
Следующая проблема. Как покрасить текст в чекбоксе на FinishPage?
Вот так не выходит: Код:
Function FinishPageSetupShow |
Цитата:
А вот при классической теме WINDOWS - раскрашивается. Это то же касается в частности и GroupBox |
Код:
CreateShortcut "$SMPROGRAMS\$StartMenuGroup\MyProg.lnk" $INSTDIR\MyProg.exe ------------------------ Извиняюсь за беспокойство, оказалось просто SetOutPath надо на "$INSTDIR" установить. |
Ребята, разбираюсь с регистрацией и разрегистрацией DLL при удалении, подскажите пожалуйста конкретное значение таких макросов:
!insertmacro InstallLib REGDLL NOTSHARED REBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR !insertmacro InstallLib REGDLL NOTSHARED NOREBOOT_PROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR !insertmacro InstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR !insertmacro InstallLib REGDLL NOTSHARED NOREBOOT_NOTPROTECTED ${TestDLL} $INSTDIR\test.dll $INSTDIR и соответственно: !insertmacro UninstallLib REGDLL NOTSHARED NOREMOVE $INSTDIR\test.dll !insertmacro UninstallLib REGDLL NOTSHARED REBOOT_PROTECTED $INSTDIR\test.dll !insertmacro UninstallLib REGDLL NOTSHARED NOREBOOT_PROTECTED $INSTDIR\test.dll !insertmacro UninstallLib REGDLL NOTSHARED REBOOT_NOTPROTECTED $INSTDIR\test.dll !insertmacro UninstallLib REGDLL NOTSHARED NOREBOOT_NOTPROTECTED $INSTDIR\test.dll |
NOREMOVE
· библиотеку нельзя удалить. Используется для общих или важных системных файлов, таких как Visual Basic/C ++/MFC runtimes. REBOOT_PROTECTED · Удаляет библиотеку при перезагрузке, когда она использутся программой (требуется для системных файлов). · Удаляет библиотеку, если файл не защищен Windows File Protection (для ХР) NOREBOOT_PROTECTED · Предупреждает пользователя, когда библиотека используется. · Удаляет библиотеку, если файл не защищен Windows File Protection. REBOOT_NOTPROTECTED · Удаляет библиотеку при перезагрузке (требуется для системных файлов). · Удаляет библиотеку без проверки Windows File Protection. (для ХР) NOREBOOT_NOTPROTECTED · Предупреждает пользователя, когда библиотека используется. · Удаляет библиотеку без проверки Windows File Protection. (для ХР) NOTSHARED -библиотека не общая, удаляется сразу SHARED -библиотека общедоступна и будет удалена, если счетчик обращений равен 0 т.ь есть при каждой установке библиотеки счетчик обращений увеличивается на единицу, при удалении уменьшается на единицу. |
Собираю инсталлятор, не отрабатывает комманда в секции деинсталляции:
RMDir /r "$INSTDIR" хотя все файлы из папки удаляются без проблем. Вариант RMDir /REBOOTOK "$INSTDIR" работает. Но ведь нет никаких занятых файлов. Реестр тоже чистый. Не подскажите в чем может быть дело? |
wolkow70,
Откуда деинсталлятор запускается? Деинсталятор помещает в $INSTDIR - текущий путь, откуда запущен деинсталлятор. Так что, сейчас проверил - все работает. Проблема может еще быть в проводнике - не выгружена из буфера какая-нибудь библиотека, используемая ранее. Это все равно, что пытаться удалить текущую открытую папку. Попробуйте перезагрузить оболочку. |
Вложений: 1
Деинсталятор запускается из $INSTDIR. Если какие нибудь библиотеки используются, то они не удаляются из папки, а у меня все файлы удаляются. Папка The Bat! остается совершенно пустой, но не удаляется. Пока сделал вариант RMDir /REBOOTOK "$INSTDIR". Работает, но папка удаляется после перезагрузки.
Вот скрипт прикрепил, если, что... |
wolkow70,
и правильно, что не удаляет! Я же писал: Цитата:
Достаточно: RMdir /r "$INSTDIR" без всяких Delete... И если вы делаете ассоциации в скрипте, то для обновления кеша иконок следует прописать макрос в секции: ${RefreshShellIcons} |
kotkovets,
SetOutPath "$INSTDIR" удалил из секции деинсталляции. Все стало нормально удалятся без перезагрузки. ${RefreshShellIcons} случайно попало в скрипт, удалил. На днях выложу инсталлятор для общего блага в соответствующей теме.. Работает безукоризненно. |
Доброго времени суток! Проблема в следующем: создается NSISый инсталлятор , необходимо чтобы через меню пуск можно было по ярлыку открыть папку в INSTDIR. Т.е. если мне необходмо в пуске сделать ссылку на exe-шный файл я прописываю следующее:
CreateDirectory "$SMPROGRAMS\Документация" CreateShortCut "$SMPROGRAMS\Документация\Руководство пользователя Word 2003.lnk" "$INSTDIR\doc\manual.doc" Как сделать что бы открывалась отдельно взятая папка, а не файл? Заранее спасибо! |
Цитата:
|
Цитата:
|
Цитата:
все работает, создается ярлык, кликаешь ярлык - открывается папка Код:
OutFile File.exe |
Спасибо! Все получилось!
|
Товарищи, подскажите пожалуйста как к следующей строке приклеить свою иконку Core.ico (находится в одной директории с файлом CoreAVCDecoder.ax), а то встроенная в него иконка не радует глаз.
CreateShortCut "$SMPROGRAMS\CoreCodec\CoreAVC Configure.lnk" rundll32.exe "CoreAVCDecoder.ax,Configure" "$INSTDIR\CoreAVC Professional Edition\CoreAVCDecoder.ax" |
Код:
CreateShortCut "$SMPROGRAMS\My Program.lnk" "$INSTDIR\My Program.exe" \ 1 Параметры которые не нужны пишем пустые кавычки "" 2 Индекс иконки, считается не от цифры и названия иконки в файле, а от единицы . Как то так : Код:
|
Товарищи никому не доводилось делать инсталлятор на VLC media player?
Скачал с ихнего сайта скрипт. Там по умолчанию выбрана ассоциация с типами файлов. Вот, ломаю голову как отключить ассоциации по умолчанию, что бы чекбоксы были пустые. Пробовал в секции: SectionGroup "File type associations" SEC06 SectionGroup "Audio Files" !insertmacro MacroAudioExtensions RegisterExtensionSection SectionGroupEnd SectionGroup "Video Files" !insertmacro MacroVideoExtensions RegisterExtensionSection SectionGroupEnd SectionGroup "Other" !insertmacro MacroOtherExtensions RegisterExtensionSection SectionGroupEnd SectionGroupEnd ставить /0 - не помогает. |
Цитата:
|
Вложений: 1
Цитата:
SectionGroup /o "Audio Files" !insertmacro MacroAudioExtensions RegisterExtensionSection SectionGroupEnd SectionGroup /o "Video Files" !insertmacro MacroVideoExtensions RegisterExtensionSection SectionGroupEnd SectionGroup /o "Other" !insertmacro MacroOtherExtensions RegisterExtensionSection SectionGroupEnd SectionGroupEnd Не помогает. Выходит так: |
А кто в группе ставит /o в справке такого нет, в макросе нужно писать, скрипт дурацкий и устарелый, проще новый написать, чем копаться..
Код:
!macro RegisterExtensionSection EXT |
Вложений: 1
Цитата:
|
Доброго времени суток!
При создании аддона с помощью NSIS возникла необходимость читать значения ключа из реестра по "плавающему" пути. Значение ключа KEY лежит в HKEY_LOCAL_MACHINE\Software\Alter\ВЕРСИЯ\Prog . где "ВЕРСИЯ" - версия программы, которая может быть любой и постоянно меняется... Как в этом случае можно считать значение ключа KEY? Заранее спасибо. |
martinello
Только в цикле с перечислением ключей и значений выбранной ветки реестра EnumRegKey или EnumRegValue И кстати приведите несколько значений "ВЕРСИЯ" что-то должно совпадать. либо в начале или в конце строки, что-то общее должно быть и дальше методом сравнения общего, прочитать значение ключа. Как то так... |
kotkovets
Примеры ВЕРСИЯ: 10.0, 10.4, 11.8, 12.3, 13.0, 14.7 и т.д. Из общего тут, вроде только точка в третьем разряде. Версий уже слишком много вышло, да и выйдет еще множество, поэтому просто завязываться на конкретное поле - не самый лучший вариант. Все ведь не перечислишь. И для будущих версий тоже должно работать... Вот и ломаю голову. |
Цитата:
По сути значения "версия" состоит из 3 цифр и четырех символов. 1. Натравливаем в цикле с перечислением, фильтр, который отсекает все значения, кроме числовых. 2. Проверяем длину строк на 4 символа, все остальное отсекаем. 3. У нас уже есть путь к ветке реестра, можем уже считывать ключи реестра Недостаток в том, если есть еще ветки удовлетворяющим условиям, то будут ложные данные считаны И довольно все это сложно перемудрено не туда... Код:
!include "MUI2.nsh" |
Цитата:
Решил проблему с помощью плагина Registry для NSIS http://nsis.sourceforge.net/Registry_plug-in В итоге открываю ветку для поиска HKEY_LOCAL_MACHINE\Software\Alter и ищу в ней тот самый KEY. Спасибо за код, он пригодится как пример для похожих подзадач :) |
Доброго времени суток!
Кто-нибудь знает, есть ли возможность изменения текста на начальной странице удаления MUI_UNPAGE_WELCOME и на конечной странице удаления MUI_UNPAGE_FINISH ? В справке об этом молчок... Упоминается почему-то только страница подтверждения MUI_UNPAGE_CONFIRM. Правда, есть еще UninstallText, но его включение никаким образом не влияет ни на одну надпись (или я не так им пользуюсь). Заранее спасибо. |
Цитата:
!define MUI_UNTEXT_WELCOME_INFO_TITLE "Всем привет!" !define MUI_UNTEXT_WELCOME_INFO_TEXT "Это моя супер прога!" UninstallText text [subtext] - применяется при классическом фейсе, на страничке confirm page, на модерне напрямую эта команда игнорируется, потому что "заменена" константами !define ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- В NSIS нет стандартных страничек приветствия и завершения. Эти странички "самодельные" и прорисовываются через nsDialogs - для MUI2, и через InstallOptions - для MUI, при классике выбрать можно любой из этих стандартных плагинов в комлекте NSIS |
Цитата:
Столкнулся с другой проблемой. Нужно в текстовом файле искать строки, добавлять, удалять. Если с поиском и вставкой проблем нет, то вот полностью удалить строку не получается - после удаления в файле на этом месте образуется пустой абзац (строка без символов). Делал через ${LineFind} и ${WordReplace}. Как можно полностью удалить найденную строчку?.. |
martinello
В NSIS пустая строка означает: $\r$\n $\n - создание новой строки $\r - перевод каретки на начало строки $\t - знак табуляции Те самые невидимые символы строки. Через макрос ${LineFind} вот так будет это выглядеть: Код:
Макрос ${WordReplace} вложен в логику, для того, чтобы текст не превратился в одну строчку :) |
кто подскажет, как правильно написать в скрипте такую команду "bin\javaw.exe -jar JDownloader.jar"
|
Цитата:
|
Цитата:
нужно запустить JDownloader.exe, если уже есть в папке java ! |
Можно так:
ExecWait '"$EXEDIR\bin\javaw.exe" -jar JDownloader.jar' или так nsExec::Exec '"$EXEDIR\bin\javaw.exe" -jar JDownloader.jar' $EXEDIR - возвращает текущий путь "иницилизатора" запуска |
Цитата:
|
ТОварищи подскажите ответ на такой вопрос: Программа в данном случае Firefox в каждой конфигурации создает папку для профиля со случайным названием XXXXXX.defolt.
Можно ли для скрипта присвоить этой папке переменное имя после проверки наличия в ней маркерного файла Extension.ini, и в дальнейшем использовать уже переменное название? |
Цитата:
К примеру предположительно Extension.ini лежит в папке C:\Firefox, где в этой папке еще папки с неизвестными именами. Скрипт рекурсивно перерыщет все каталоги папке C:\Firefox, пока не найдет нужный файл. Если файл не найдет - установится флаг ошибки (в скрипте не будет сообщения) Код:
!include "FileFunc.nsh" |
Цитата:
И как к этому файлу и этой папке указать путь, если абсолютный путь: E:\Documents and Settings\Anton.OOO-940B41D8143\Application Data\Mozilla\Firefox\Profiles\c0rkpcd2.default |
wolkow70
Код:
!include "FileFunc.nsh" |
Цитата:
Мне в этот файл нужно автоматом прописать строки с путями к новым плагинам. Но это я уже научился делать используя абсолютный путь. |
Цитата:
${GetParent} $R2 $path Мы подымаемся на 2 уровня вверх и получаем корневую папку, где будет Extension.ini |
kotkovets,
В общем то, работает, но возникли еще вопросы, на которые хотелось бы получить ответы: 1. Я делаю установщик, что бы работал с ключом /S, а в процессе выводятся два диалоговых окна, как бы их блокировать? 2. Папка с профилем находится в папке текущего пользователя, если я указал var path Section SetShellVarContext current ${GetParent} "$APPDATA" $R2 ${GetParent} $R2 $path MessageBox MB_OK "$path" IDOK ${Locate} "$path" "/L=FDE /M=extensions.ini" "Find" IfErrors +2 MessageBox MB_OK '$$R0 = "$R0" $\n$\r$$R1 = "$R1"' IDOK SectionEnd то ничего страшного? 3. Имея абсолютный путь E:\Documents and Settings\Anton.OOO-940B41D8143\Application Data\Mozilla\Firefox\Profiles\c0rkpcd2.default можно ли отчет уровней начать с папки Firefox, а то впапке Mozilla еще может оказаться почтовый клиент, у которого тоже есть файл extensions.ini? |
Цитата:
Зачем так этому прямолобно относится? при отладке скрипта это очень помогает и вообще я если пишу скрипт, то отлаживаю кусок кода на отладочном скрипте, когда все нормуль - добавляю в основной проект, иначе как?. Чтобы нормально написать скрипт или прогу - надо жестко пахать, а разбираться никто не хочет, что и как, вот отсюда и такие вопросы.... Цитата:
в данном случае, если папка Anton.OOO-940B41D8143, означает имя текущего пользователя, то можно так: MessageBox MB_OK "$APPDATA\Mozilla\Firefox" если попадает путь в вашем случае на E:\Documents and Settings\Anton.OOO-940B41D8143\Application Data\Mozilla\Firefox\Profiles\c0rkpcd2.default , зачем путь вверх подымать? вот вы увидите куда вы попадете в сообщении, а SetShellVarContext current - (по умолчанию) всегда перенаправляет в папку настроек текущего пользователя. Если иначе поиск нужно начинать с Documents and Settings - писал уже в предыдущих в своих сообщениях, ведь в NSIS нет прямой переменной на папку Documents and Settings, приходится использовать $DOCUMENTS c поднятием на 2 уровня вверх. |
kotkovets,
Не подскажите, что означает ошибка в конце: install function "GetParent" not referenced Хотя, инсталлятор собирается и работает. Сделал так: var path Section "Интеграция в браузер Firefox" sec07 SetShellVarContext current ${GetParent} "$APPDATA\Mozilla\Firefox\Profiles" $path MessageBox MB_OK "$path" IDOK ${Locate} "$path" "/L=FDE /M=extensions.ini" "Find" IfErrors +2 MessageBox MB_OK '$$R0 = "$R0" $\n$\r$$R1 = "$R1"' IDOK CreateDirectory "$R0\extensions" SetOutPath "$R0\extensions" Push "$PROGRAMFILES\Orbitdownloader\addons\OneClickYouTubeDownloader$\r$\n" Push "$R0\extensions\{35379F86-8CCB-4724-AE33-4278DE266C70}" Call WriteToFile SectionEnd |
Цитата:
проще же так сразу: ${Locate} "$APPDATA\Mozilla\Firefox"... |
Ребята, помогите опять..
делаю инсталлятор XnView из скрипта hb860 вытянул такие строки. Собрал установщик, а ассоциации с файлами так и не происходят, они остаются за ACDSee. В чем может быть дело? Section "Ассоциация файлов" Sec06 ; !macro RegisterExtension extenstion ContentType PerceivedType ClassName DefaultIcon OpenCommand WriteRegStr HKCR "${extenstion}" "" "${ClassName}" WriteRegStr HKCR "${extenstion}" "PerceivedType" "${PerceivedType}" WriteRegStr HKCR "${extenstion}" "Content Type" "${ContentType}" WriteRegStr HKCR "${ClassName}\DefaultIcon" "" "${DefaultIcon}" WriteRegStr HKCR "${ClassName}\shell\open\command" "" "${OpenCommand}" !macroend var /GLOBAL OpenCommand StrCpy $OpenCommand "$\"$OUTDIR\${PRODUCT_NAME}.exe$\" $\"%1$\"" !insertmacro RegisterExtension ".jpg" "image/jpeg" "image" "XnView.jpg" "$OUTDIR\${PRODUCT_NAME}.exe,2" $OpenCommand !insertmacro RegisterExtension ".bmp" "image/bmp" "image" "XnView.bmp" "$OUTDIR\${PRODUCT_NAME}.exe,2" $OpenCommand !insertmacro RegisterExtension ".gif" "image/gif" "image" "XnView.gif" "$OUTDIR\${PRODUCT_NAME}.exe,3" $OpenCommand !insertmacro RegisterExtension ".iff" "image/iff" "image" "XnView.iff" "$OUTDIR\${PRODUCT_NAME}.exe,4" $OpenCommand !insertmacro RegisterExtension ".jpe" "image/jpeg" "image" "XnView.jpeg" "$OUTDIR\${PRODUCT_NAME}.exe,5" $OpenCommand !insertmacro RegisterExtension ".jpeg" "image/jpeg" "image" "XnView.jpeg" "$OUTDIR\${PRODUCT_NAME}.exe,5" $OpenCommand !insertmacro RegisterExtension ".jpg" "image/jpeg" "image" "XnView.jpeg" "$OUTDIR\${PRODUCT_NAME}.exe,5" $OpenCommand !insertmacro RegisterExtension ".pcx" "image/pcx" "image" "XnView.pcx" "$OUTDIR\${PRODUCT_NAME}.exe,7" $OpenCommand !insertmacro RegisterExtension ".png" "image/png" "image" "XnView.png" "$OUTDIR\${PRODUCT_NAME}.exe,8" $OpenCommand !insertmacro RegisterExtension ".tga" "image/tga" "image" "XnView.tga" "$OUTDIR\${PRODUCT_NAME}.exe,9" $OpenCommand !insertmacro RegisterExtension ".tif" "image/tif" "image" "XnView.tif" "$OUTDIR\${PRODUCT_NAME}.exe,10" $OpenCommand !insertmacro RegisterExtension ".emf" "image/emf" "image" "XnView.emf" "$OUTDIR\${PRODUCT_NAME}.exe,11" $OpenCommand !insertmacro RegisterExtension ".wmf" "image/wmf" "image" "XnView.wmf" "$OUTDIR\${PRODUCT_NAME}.exe,12" $OpenCommand !insertmacro RegisterExtension ".pic" "image/pic" "image" "XnView.Image" "$OUTDIR\${PRODUCT_NAME}.exe,1" $OpenCommand !insertmacro RegisterExtension ".dib" "image/dib" "image" "XnView.Image" "$OUTDIR\${PRODUCT_NAME}.exe,1" $OpenCommand WriteRegStr HKCR "Applications\xnview.exe\shell\open\command" "" $OpenCommand ${RefreshShellIcons} SectionEnd |
wolkow70,
А справка для чего? где это вы видели, чтобы макрокоманды в секции прописывались, если уж вытянули чужой макрос - вера, что ли не позволяет посмотреть скрипт, где и в каком месте макросы нарисованы и как они работают? и для чего они нужны то? Примерно можно упрощенно сделать вот так: Код:
!include "FileFunc.nsh" |
может кто встречал конвертор cmd файлов в nsis скрипт, поделитесь пожалуйста....
|
Цитата:
Учусь в основном на готовых скриптах. |
Цитата:
Суть такова: Если графические файлы (bmp, jpg) не зарегистрированы ни за какой программой, то при установке они ассоциируются за XNView. Но, если их предварительно зарегистрировать за ACDSee или за программой просмотра изображений и факсов Windows, то при установке они остаются за ними и зарегистрированными, но не за XNView. |
wolkow70,
Справочник по NSIS там есть разбор ассоциаций реестра, предыдущий пример ассоциаций отлично работает, правда проверял на другом расширении файла, т.е для XNView может быть нужно подкорректировать записи, но макет таков и он работает иначе я бы не выкладывал не работающий пример, а готовое решение за Вами. посмотрите скрипт AIMP'а , там есть отличное решение для ассоциаций. Цитата:
|
Цитата:
|
Цитата:
Возьмите Visual Studio или Delphi и сварганьте конвертер, если не лень конечно...:biggrin: |
Цитата:
ЗЫ: инсталятор то тоже можно самому написать ;) |
Доброго вечера, уважаемые.
Прошу помощи в следующем вопросе: имеются файлы с расширениями .tmp.patchFile и файл VPatch.dll как реализовать функцию патченья при помощи данных файлов средствами zip2exe в классической оболочке с автоматическим поиском папки назначения? За помощь буду очень благодарен и признателен. Заранее спасибо. |
Уважаемый kotkovets, подскажите почему не компилируется такая строка?
WriteRegBin HKEY_CLASSES_ROOT ".bmp\OpenWithProgids" "Paint.Picture" Получена с помощью конвертера рег-файлов..... |
Цитата:
а запись бинарных данных записывается так: WriteRegBin [root_key] [subkey] [key_name] [valuedata] т.е так выходит: WriteRegBin HKLM "Software\My Company\My Software" "Binary Value" DEADBEEF01223211151 и к тому же записи такого типа полно в реестре, несложно посмотреь, но редактор бывает их сохраняет строковые значения как бинарные, утилитка это видит и делает по своему, как хозяин прописал... В вашем случае. как то так: WriteRegStr HKCR ".bmp" "OpenWithProgids" "Paint.Picture" Цитата:
пример |
И у меня вопрос по поводу записи бинарных значений в реестр.
Запись в реестр значения этого рабочего reg-файла : Код:
[HKEY_CURRENT_USER\Software\ACD Systems\ACDSee Pro\40\en\Settings\Browser\BCGPDockManager--1] Классический способ записи WriteRegBin [root_key] [subkey] [key_name] [valuedata] - почему то не срабатывает... Может значение слишком велико по объёму ? Пробую Registry плагин : Код:
Name "Bin" ps Проверяю, экспортируя из реестра, ключ записанный посредством NSIS. Значение в нём другое, отличное от исходного рабочего reg-файла... Что за чертовщина ?! |
MKN, дело в стандартном NSIS у которого размер передачи и хранения данных ограничен 1024 байтами, поэтому обрезается значение до этой длины, скачай специальную версию NSIS Large strings , где размер увеличен до 8192 байта, замени все файлы из скачанного архива.Сейчас проверил, работает как нужно, сравнил значения до и после - индетичны.
|
kotkovets, это конечно хорошо и спасибо за оперативную помощь, но к сожаленю в nsis я полнейший профан.
В вашем примере есть 2 различных файла, а в моём случае есть оригинальный файл и файл (надеюсь правильно выразиться) разницы с расширением tmp.patchfile который не является модифицированным, а лишь содержит информацию о модификации. Я пробовал: сначала применить патч, затем утилитами извлечь повторно эту информацию (GenPat.exe, nsisPatchGen.exe, VPatchGUI) но в итогде потерпел с ними фиаско. Первые две файл *.pat вообще не создавали. Проверяли файлы (долго и упорно), проверили и все. VpatchGUI справлялся, но полученный на выходе файл ехе, dll и pat никоим образом в скрипт NSISa не прикрутился. ( возможно косяк в размере файлов. Всего должно пропатчиться 15 файлов среди которых 1 весит примерно 900мб. Цитата:
|
a--e, я стандартным в поставке nsis пользуюсь,без глюков работает и для каждого файла нужен свой патчик,
прежде, чем патчить файл, плагин сверяет сумму файла, который нужно патчить по алгоритму MD5 должны быть: оригинал файла и патченный вариант оригинального файла - патченный файл создаете любыми средствами. GenPat.exe - генерит файл изменений на основе сравнения оригинального файла и патченного. Предварительная подготовка, создаем батник: GenPat.exe "путь\оригинальный файл" "путь\патченный файл" "Path.pat" т.е на выходе получается Path.pat - файл изменений относительно оригинала и патченного файла. Далее в скрипте прописываем: Код:
OutFile "test.exe" Цитата:
|
так. если я все правильно понял, для каждого файла *.pat файл надо создавать отдельно?! О_о
Вот моя ошибка. Я постоянно директории сравнивал (на выходе файл получался, но чего-то не работало)) кусок скрипта выше это доля одного файла, а для X файлов его надо копировать n раз. так что ли?? тогда все крайне просто. Спасибо за помощь. Если будут ещё вопросы - вернусь в гости) *Ушел убивать клавиатуру. PS а можно патчу прикрутить авто установку в директорию по ключу в реестре? |
Цитата:
я скрипты писал и на 7000 строк и нормально, дело тренировки, можно для этих дел макрос сварганить и 15 раз вызывать. Вот такой макрос для себя делал, пользуйтесь: Код:
Page Instfiles Nero Express.exe - имя пропатченного файла, т.е сохраниться с указанным именем в одной директории оригинального файла 1- удалить оригинал, 0 - не удалять Условие: имя оригинала и патченного файла не должны совпадать |
Прошу помощи ещё раз. *.pat файлы получил. все идёт как надо. Но запнулся при написании скрипта
"Error in script "stdin" on line 9 -- aborting creation process" - вот что мне говорят ( пробовал менять имя pat файла в этой строке. Без результата. |
a--e,
скачайте на 92 стр. темы справочник, там есть ответы на ваши вопросы.. File /oname=$PLUGINSDIR\path.pat "Effects.vfs.pat" Означает взять Effects.vfs.pat и скопировать в папку $PLUGINSDIR с именем path.pat далее ясно почему ошибка... Delete "c:\Temp\{app}\data\NEW_Effects.vfs" и никогда не применяйте абсолютные пути в скриптах, кроме забора файлов в инсталлятор. Delete "$PLUGINSDIR\path.pat" Почитайте в справочнике про переменные окружения |
Спасибо. С этим разобрался.
Для теста попробовал пропатчить 1 файл. НО!! сам патч получился ровненько размера патченого файла (т.е. патч не содержит в себе информации для "дописывания" в оригинал, а прост осодержит модиф. файл).. Это лечится? :dont-know :help: Проблема за проблемой всплывают... |
a--e, достаточно сравнить 2 файла по контрольной сумме (MD5, к примеру) и если они одинаковые, значит файл не пропатчен, как узнать контрольные суммы - погуглите.
|
kotkovets,
Нет. Файл все же не патчится. Заменяется оригинальной версией (без патча даже). |
Всем привет !
Наткнулся на проблему с кодировкой NSIS при вызове команды nsExec::ExecToLog, при использовании русской Windows. Код:
; Restart services ![]() Если выполнить соответствующие команды вручную в cmd, то всё ок: ![]() То есть дело в том, какая кодировка настроена для вывода текста в окне лога установки через команду nsExec::ExecToLog, как её переключить подскажите пожалуйста ? P.S. как вы видите я экспериментировал с параметрами команды cmd: /a - вывод в ANSI /u - вывод в UNICODE результата это не дало никакого. В то же время команда DetailPrint выводит кириллицу нормально |
Цитата:
|
Здравствуйте, подскажите куда копать:
1. Делаю установщик с введение пароля , создаю через nsDialogs первый лист, на нем строка ввода и кнопка далее, если пароль неверный сообщение, что неверно ввели : выход или повторить. Выход работает, а вот повтор немогу реализовать. Как в функции указать запуск установщика с начала? Пробовал указать на сколько команд вернуться назад, но при этом перестает показываться текстовое поле. Код:
Page custom dogovor_vvod dogovor_confirm 2. Как сделать чтобы пароль проверялся по первым 4 символам? Имеется ли какие нибудь спец символы вроде как * Код:
${if} $numberdogov != "nsis*" |
Цитата:
Цитата:
Код:
Function dogovor_confirm Если числовые то с одним знаком = |
Подскажите пожалуйста, как решить такую задачу - удаление , одного или нескольких любых символов, в начале нескольких конкретных строк текстового файла. Т.е., например :
Удалить : 1ый любой символ в начале строк с 37 по 68 включительно. Или : удалить 3 первых любых символа в строках с 10 по 20 и 3 первых любых символа, в 33 строке. В справочнике ничего подходящего не обнаружил... ps Если удление сделать нельзя, то хотя бы заменить символ на пустой... |
MKN, А зачем удалять, когда можно методом сравнения строки заменить целиком строку и код проще и гемора меньше на порядок.
вот к примеру есть строка: forum.oszone.ru ${WordReplace} '$R9' 'forum.oszone.ru' 'я на forum.oszone.ru - изучаю NSIS' "+" '$R9' в итоге заменится строка forum.oszone.ru на я на forum.oszone.ru - изучаю NSIS а параметры замены в оригинале смотри по индексу WordReplace или Word. а если строку нужно удалить: ${WordReplace} '$R9' 'forum.oszone.ru' '' "+" '$R9' Но останется пустая строка, как ее удаллить смотри здесь: http://forum.oszone.net/post-1645122-1011.html |
Цитата:
Когда в текстовом файле таких строк сотни и с чёрт знает какими записями - это убийственно... А надо всего лишь удалить несколько символов в началах этих строк. При чём только в конкретных или в группах строк... |
kotkovets,
Я почти нашёл, то что нужно в TextFunc.nsh Когда в файл примера вставляешь : Код:
|
MKN,а все таки справку по вордовским хренотенью плохо смотрел... там куча параметров в вхождение в строку : в начале , в середину, с какого символа, на длину и т.д
макрос ${LineFind} "[File1]" "[File2|/NUL]" "[LineNumbers]" "Function" взгляни к примеру: $R9 - строковые значения $R8 - номер линии строки текста [LineNumbers] 1;-1 - все линии читать 5:9 - читать с 5 до 9 линии в справке все это есть же. WordFind, WordReplace, WordFind2X в функции LineReplaceFunction вставляй с нужными параметрами |
Подскажите как в функции указать переход к другой функции или возврат в начало выполнения скрипта (к первой странице инсталятора)?
|
Цитата:
Цитата:
ИМХО, в студию проблемный кусок скрипта.. а там видно будет, что и как "правильнее делать" |
Нашел выход в команде Abort - прекращение выполнения скрипта дальше, возможно это извращение но мне помогло
Код:
Page custom dogovor_vvod dogovor_confirm если есть более разумный выход при неверно введеных данных вернуться в начало выполнения скрипта, поделитесь идеей |
Proton, Что за извращения с метками в логических конструкциях(((...
Конструкции для того и существуют, чтобы метки (безусловные переходы) не использовать... здесь вариант на относительном переходе внутри конструкции, которая выполняется только, когда введен неправильный пароль, т.е по заданному условию в логике. Код:
${NSD_GetText} $textdogov $numberdogov Скачайте Справочник по NSIS и почитайте про логические конструкции. |
Может, кто знает, что за ошибка?
Invalid command: ${LocateNoDetails} Error in macro CopyFilesFromDir on macroline 34 Вот исходник firefox-installer Может, кто разберётся и выложит рабочий? |
Народ привет!
А можно как нибудь получить версию файла на этапе компиляции? Нужно для вписывания версии в имя инсталяшки. Как я понял ${GetFileVersion} работает уже на этапе инсталяции... |
Цитата:
1. Создаем батник ver.bat такого содержания: Код:
for /f "tokens=1,2 delims= " %%i in ('filever.exe /v "путь\file.exe"^|find.exe /i "FileVersion"') do set %%i=%%j 3. Берем утилитку filever.exe от мелкомягких (во вложении) и ложим рядом со скриптом. 4. Создаем скрипт такого содержания: Код:
!system 'ver.bat' #запускаем батник |
kotkovets, хитро. Спасибо. )
Но жаль что нет штатного средства. А так мне всё равно надо будет передавать кое-какие параметры через /D так что буду и версию передавать. |
Товарищи, подскажите как включить в инсталлятор пустые папки?
Пробовал с помощью функции InstallFolderInternal, папки с файлами включаются в установщик, а пустые нет. |
Цитата:
|
Цитата:
|
Нужна помощь. После установки программы в тихой установке с ключом /S, установленная программа сразу же запускается, что надо прописать чтоб запуска программы не было или сможет как нибудь убить этот процесс
|
Вложений: 1
Для сборщиков, пересобирателей дистрибутивов приложений и любителей всяческих репаков.
********************************************************************* Для полноценной работы модуля требуется плагин Registry: http://nsis.sourceforge.net/Registry_plug-in ********************************************************************* БУДЬТЕ ВНИМАТЕЛЬНЫ В ВЫБОРЕ МАСКИ УДАЛЕНИЯ !!!!!!!!!! Если кто-то не понял как пользоваться данным модулем, то лучше просто не пользуйтесь и не задавайте глупых вопросов. |
Цитата:
kotkovets, А можно расширить функционал DelRegKey.nsh, поручив ему удалять по маске значения в ключах ? т.е. ${DelRegKey} HKLM "Software/Classes" "любой ключ" "любое значение, начинающееся с 7-zip" |
MKN, Я уже подумываю над этим, на днях выложу.
|
Цитата:
|
Цитата:
Можно так: Код:
start /w Setup.exe /S А лучше всего сделать репак дистра. |
Цитата:
|
Цитата:
Читать внимательно тут |
Добрый день. Используясь NSIS написал собственный инсталятор, но столкнулся с одной проблемой. Во время установки пользователь вводит логин и пароль, которые инсталлятор заносит в params.ini. Этого я успешно добился (с помощью изучения вашего форума, кстати говоря). но возникла следующая ситуация. По принципу "as is" программа ругается на неверный логин/пароль. Дело в том, что в ней заложена своя система шифрования, и в .ini заносится уже шифрованое значение.
Для примера, пароль 123, если ввести это значение в самой программе, то в params.ini запишется “vќ. А мой инсталлятор записывает как есть, тоесть 123. Есть .dll, в которой прописал алгоритм шифрования. Я так понимаю, надо в процессе установки сохранить пароль, введённый пользователем, вызвать функцию шифрования, зашифровать, а затем сохранить значение в .ini. Можно ли каким-нибудь образом обратиться из инсталлятора к .dll-ке? |
Цитата:
Дело в том вы названия функции знаете, а прототип функции не знаете! с какими параметрами вызывать, что передавать, какие аргументы функции и т.д. Обращаетесь к разработчикам библиотеки....ага засада! Так уж они вам все расскажут - алгоритм шифрования и дешифрования... |
Цитата:
В любом случае, спасибо за совет, буду разбираться. Если кому будет интересно, потом скину пример. |
Shukaj,
Тогда уж лучше написать как плагин к NSIS c теме же алгоритмами работы как у приложения. Здесь хедеры для этих дел, для обмена данными библиотеки и установщика. http://forum.oszone.net/attachment.p...3&d=1266850604 Можно вызывать "чужую библиотеку" с помощью стандартного плагина System.dll (Docs\System\System.html) |
К сожалению, пока ничего не получается. По идее, вызываю Crypt.dll (в ней 2 функции:
function DeCode(const _Str: Pointer): Pointer; stdcall; из кодированной строки в обычную function Code(const _Str: Pointer): Pointer; stdcall; из обычной строки в кодированную) Вот кусок кода в инсталляторе. Код:
Section пример использования Crypt.dll: Плагины к NSIS, если не ошибаюсь, пишутся на си. Получается, что придётся переписать dll-ку с делфи на си? |
Доброе время суток!!!
А не подскажете можно ли как-то перейти на предыдущую страницу Инсталлятора при некорректном выполнении основной секции ?? Если использовать Abort, отображается текущая страница с активной кнопкой "Отмена", а мне бы хотелось, чтобы инсталлятор перешел на предыдущуб страницу, ну или хотябы была активна кнопка еще "Назад" |
Цитата:
Цитата:
Код:
System::Call "путь\Crypt::Code(t.R1, t.R2)i.r0" Здесь я вам не помогу в написании плагина , к сожалению... О синтаксе System почитайте Docs\System\System.html и о типах переменных. Посмотрите на сайте NSIS в разделе плагины, там много плагинов идут с сырцами, попадаются и на делфи, но в основном на си. Цитата:
Со странички инсталляции вы уже никуда не вернетесь, только останов. Вам нужно определить условие, которое даст гарантию корректности отработки кода в секции, иначе - возврат на страничку компонентов, это условие должно проверяться, только при закрытии (переходе на стр.инсталляции) стр. компонетов. |
Код:
Page custom fnCustomInit fnCustomDestroy |
chites,
Я так понял вам нужно, проверить правильность ввода имени Sql-сервера ? Делается это в функции (в вашем fnCustomDestroy) при закрытии кастомной странички К примеру, я в поле ввода имени, ничего не ввел... Код:
Function fnCustomDestroy |
в том то и дело, что это поле может быть и пустым ... а првильность его ввода я могу проверить только при выполнении самого скрипта, который выполняется у меня в главной секции
|
chites, Условия определите какие вам нужны, при которых код в секции отработает нормально, иначе я ничем не помогу, я вам привел пример, когда нужно обрабатывать условия
|
kotkovets, спасибо за помощь и столь быстрые ответы!!! Значит я правильно понимаю, что нельзя после выполнения основной секции вернуться на предыдущую страницу? И здесь только один выход, держать пользователя на предыдущей странице пока не удостоверимся о правильности ввода? Это конечно проблематичнее (((
|
Цитата:
|
Shukaj
Цитата:
|
Товарищи, делаю сборку Ligth Alloy прописал с ассоциациями такие команды:
StrCpy $OpenCommand "$INSTDIR\LA.exe $\"%1$\"" StrCpy $PlayCommand "$INSTDIR\LA.exe $\"%1$\"" StrCpy $QueneCommand "$INSTDIR\LA.exe $\"%1$\" /ADD" "Воспроизвести в LA" работает "Открыть в LA работает" Открыть файл двойным щелчком не работает. Приходится ткнуть кнопку воспроизведения. С оригинальным инсталлятором все работает. Что нужно поправить? |
wolkow70
А чем дело то? поставьте оригинал и гляньте какие записи делает, и перенесите такие же записи в свой установщик, а не за макросы сразу бросаться, научитесь для начала в реестр данные загонять в отладочном скрипте и сравниваете с оригиналом - пока не станут индетичны (заработает). А то Вы сразу за штурвал МиГ-19 , минуя У-2 |
Цитата:
|
Цитата:
Цитата:
|
kotkovets, Ну вот, к примеру для файлов MP4 с оригинальной инсталляцией, все нормально открывается.
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.MP4] @="LAV4.MP4" "LA_Backup"="LAV4.MP4" Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\LAV4.MP4] @="Light Alloy - MPEG-4 Media File" [HKEY_CLASSES_ROOT\LAV4.MP4\DefaultIcon] @="E:\\Program Files\\Light Alloy 4.5up\\Icons\\XPlite.icl,36" [HKEY_CLASSES_ROOT\LAV4.MP4\Shell] @="Play" [HKEY_CLASSES_ROOT\LAV4.MP4\Shell\Enqueue] @="Добавить в список в Light Alloy" [HKEY_CLASSES_ROOT\LAV4.MP4\Shell\Enqueue\Command] @="E:\\Program Files\\Light Alloy 4.5up\\LA.exe \"%1\" /ADD" [HKEY_CLASSES_ROOT\LAV4.MP4\Shell\Open] @="" [HKEY_CLASSES_ROOT\LAV4.MP4\Shell\Open\Command] @="E:\\Program Files\\Light Alloy 4.5up\\LA.exe \"%1\"" [HKEY_CLASSES_ROOT\LAV4.MP4\Shell\Play] @="Воспроизвести в Light Alloy" [HKEY_CLASSES_ROOT\LAV4.MP4\Shell\Play\Command] @="E:\\Program Files\\Light Alloy 4.5up\\LA.exe \"%1\"" [HKEY_CLASSES_ROOT\LAV4.MP4\shellex] [HKEY_CLASSES_ROOT\LAV4.MP4\shellex\ContextMenuHandlers] [HKEY_CLASSES_ROOT\LAV4.MP4\shellex\ContextMenuHandlers\LA5ContextMenu] @="{45C15F61-ACAD-48C6-8D86-321ED8A6CFC6}" |
wolkow70,
Под боком конвертера нету, делал руками. Но я обычно такие данный загоняю в HKLM. Синтаксис записи строковых параметров. %1 - в эту системную переменную подставляется путь\file, т.е вы кликаете по файлу и он открывается соответствующей программой. Еще очень важное замечание про расширяемый строковый параметр, параметр типа REG_EXPAND_STR |
Я с такими параметрами и делаю:
;variables section Var OpenCommand Var PlayCommand Var QueneCommand в !macro RegisterExtension extenstion включаю: WriteRegStr HKCR "$ClassName\Shell\Open\Command" "" "$OpenCommand" WriteRegStr HKCR "$ClassName\Shell\Play\Command" "" "$PlayCommand" WriteRegStr HKCR "$ClassName\Shell\Enqueue\Command" "" "$QueneCommand" Section "-SetupIconsVariables" StrCmp $gMode 1 NotgMode ;default icon file StrCpy $IconFileName "XPlite.icl" IfSilent 0 EndSection IfFileExists $IniFile 0 EndSection ReadINIStr $R0 $IniFile Advanced IconFileName IfFileExists "$INSTDIR\Icons\$R0" 0 EndSection StrCpy $IconFileName $R0 EndSection: StrCpy $IconFile "$INSTDIR\Icons\$IconFileName" StrCpy $OpenCommand "$INSTDIR\LA.exe $\"%1$\"" StrCpy $PlayCommand "$INSTDIR\LA.exe $\"%1$\"" StrCpy $QueneCommand "$INSTDIR\LA.exe $\"%1$\" /ADD" StrCpy $Exe_Path "$INSTDIR\LA.exe" NotgMode: SectionEnd Результат один и тот же через двойной клик не открывается файл, хотя программа запускается, но к воспроизведению не переходит. С оригинальным инсталлятором работает. Что характерно, через контекстное меню "Воспроивести в LA" файл проигрывается. То есть, именно двойной клик не срабатывает. |
wolkow70
У меня все нормально работает, на примере LASetup_4.5.4_(build-603) тем более там регистрируется библиотека ContextMenu.dll |
У меня версия LASetup_4.5.4_(build-603)_Standard.exe последняя с сайта.
Регистрацию библиотеки ContextMenu.dll я прописал так: !include "Library.nsh" Section "Контекстое меню проводника" ContextMenu SectionIn 1 2 ;read/write section state !insertmacro ProcessSection "ContextMenu" ;if $r0 is 0 then exit section StrCmp $R0 0 EndSection 0 ;--------------section code---------------- ${RefreshShellIcons} RegDLL "$INSTDIR\ContextMenu.dll" EndSection: SectionEnd Section Uninstall !insertmacro UninstallLib REGDLL NOTSHARED NOREBOOT_PROTECTED "$INSTDIR\ContextMenu.dll" Delete /REBOOTOK "$INSTDIR\ContextMenu.dll" Эта библиотека при деинсталляции требует перезагрузки, что неудобно. Я вообще за основу взял скрипт от AIMP и его перекраиваю. |
wolkow70
Начинайте с с более простого, примеры я Вам привел, а вы сразу за аналог AIMP беретесь! Цитата:
если не ошибаюсь, проводник должен перезапустится (настройка по умолчанию) Код:
TASKKILL /F /IM explorer.exe Иногда он сбоит на WIN 7, но очень редко. У меня так в установщике 7-zip сделано. |
Цитата:
Как я из вашего примера понял, Вы делаете ассоциации напрямую записями в реестре, а я пытаюсь использовать макрос из AIMP. И все работает, кроме открытия файлов двойным щелчком. Может и не в макросе дело? Ассоциации все производятся правильно. Проверял с официальной установкой. |
Цитата:
Цитата:
|
kotkovets,
Прописал так в секции удаления: TASKKILL /F /IM explorer.exe RMDir /r "$INSTDIR\" ${RefreshShellIcons} SetAutoClose true SectionEnd Пишет, что инвалидная комманда. С плагином тоже не получается, поместил его в папку с плагинами (Unicod версия) прописал: nsRestartExplorer::nsRestartExplorer restart infinite ;nsRestartExplorer::nsRestartExplorer start ignore ;nsRestartExplorer::nsRestartExplorer quit 1000 Pop $1 DetailPrint $1 RMDir /r "$INSTDIR\" ${RefreshShellIcons} SetAutoClose true SectionEnd Тоже не перегружает оболочку... |
Цитата:
Комманду пробовал прописать так: ExecWait `taskkill /F /IM explorer.exe` Работает, но просто вырубает эксплорер... |
wolkow70,
Вспомнил, как я делал - это как один из вариантов, для экспериментов тут широкое поле Код:
Section Uninstall http://nsis.sourceforge.net/NsProcess_plugin |
Вот еще попроще "железный вариант" хоть для юникода или анси
Код:
Section Main |
kotkovets,
nsProcess::_KillProcess "explorer.exe" Пишет инвалидная комманда. Плагин Process поставил... |
Цитата:
http://nsis.sourceforge.net/NsProcess_plugin - что уже не катит и не работает? Могу скрипт и выложить чисто на вызовах WinAPI.... а само лучше внимательно читать, кругозор расширяет... |
Цитата:
Function un.onInit SectionSetText ${sec09} "Удалить Light Alloy" FunctionEnd Section Uninstall sec09 SectionIn 1 RO KillProcDLL::KillProc "LA.exe" Sleep 700 !insertmacro UninstallLib REGDLL NOTSHARED NOREBOOT_PROTECTED "$INSTDIR\ContextMenu.dll" бла-бла-бла Delete /REBOOTOK "$INSTDIR\ContextMenu.dll" RMDir /r "$INSTDIR\" ${RefreshShellIcons} SetAutoClose true SectionEnd Section /o "Un.Перезагрузка Проводника" sec12 SectionIn 1 ExecWait 'taskkill /F /IM explorer.exe' $0 DetailPrint "taskkill exit: [ $0 ]" Sleep 500 ;пауза - если нужно StrCmp $0 0 0 +2 Exec "explorer.exe" RMDir /r "$INSTDIR\" SectionEnd LangString DESC_09 ${LANG_RUSSIAN} "Программа LightAlloy будет удалена с Вашего компьютера" LangString DESC_10 ${LANG_RUSSIAN} "Внимание, все настройки LightAlloy будут удалены с компьютера" LangString DESC_11 ${LANG_RUSSIAN} "При удалении LightAlloy будет произведена ассоциация медиафайлов с Windows Media Player" LangString DESC_12 ${LANG_RUSSIAN} "Перезагрузить Проводник Windows вместо перезагрузки компьютера" |
Доброго времени суток!
Имеется программа и несколько баз данных (БД) для нее, сейчас с помощью NSIS я создаю инсталятор в котором совмещены сама программа и БД, а в процессе установки появляется меню в котором можно выбрать какие БД нужно установить. Вопрос: как разделить инсталятор, чтобы в самом инсталяторе находилась только программа, а БД находились гденибудь рядом, но при этом процесс установки остался неизменным (запускаем инсталятор, появляется меню с выбором БД и все успешно инсталируется). |
А ты запихни БД в архивы(например cab или 7zip). Потом делаешь выбор БД на странице компонентов, и в зависимости от выбора распаковываешь ту или иную базу данных.
|
Здравствуйте
Уже мозг сломал, пока ничего не могу придумать, Может вы что подскажете. Есть такая задача. Регулярно создается большое количество инсталлеров. Некоторые могут отличаться сильно по секциям и страницам, а в некоторый отличие только в значении переменных. к примеру отличаються только названием программы и описанием define PRODUCT_NAME "name test" переменные задаются при генерации скрипта через ключ /D. Стал вопрос можно ли на этот тип инсталлеров сделать один типовой а остальные данные брать из вне при установке программы. скажем читать черз ini файл? пробовал в функции .onInit вызвать другую функцию и прочитать эти данные ReadINIStr $R1 "$TEMP\settings.ini" "PRODUCT_NAME" "Text" !undef PRODUCT_NAME !define PRODUCT_NAME $R1 но это работает не так как надо значение переменной вроде заменяться MessageBox MB_OK|MB_ICONSTOP "${PRODUCT_NAME}" выводит именно то значение что прописано в settings.ini но на страницах где должно отображаться PRODUCT_NAME отображается 0. реально ли выполнить задачу под эти требования? если да буду раз советам с ув. Ярослав |
yyv
Не думаю что такое возможно, хотя подождем, что скажет на это гуру kotkovets А вообще, ИМХО, в таких случаях проще все константы которые нужно изменить запихнуть в отдельный файл и там их изменять. |
yyv,
Можно сделать примерно так (пример на этапе инсталляции): 1. Команды не в коем случае не перемещать - здесь очень важна последовательность действий! 2. Константы иницилизируем, только в функции OnInit, потом будет поздно и значения констант определяем только после отработки макроса PRODUCTNAME и следовательно, объявляем значения констант после макроса - банальная последовательность действий 3. Это извращение, проще хранить значения в переменных. причем в данном случае в объявленных переменных, может быть покажу, когда именно, в какой момент нужно делать - здесь вся загвоздка. Код:
!include "MUI2.nsh" |
спасибо это вроде работает.
надо будет еще тестировать Цитата:
там перед фунцией идет куча проверок типа Код:
!ifdef AFTERDOWNLOAD Page custom customPageAfterdownload !endif из за этого получается много инсталеров. вот решили попробовать сделать один а странницы показывать или нет с ини файлика вытягивать данные |
Цитата:
|
kotkovets,
Подскажите, плиз, что нужно добавить в данный макрос, что бы в контекстном меню файлов появилось Открыть в FastStone Image Viewer. !macro RegisterExtension extenstion ContentType PerceivedType ClassName DefaultIcon OpenCommand WriteRegStr HKCR "${extenstion}" "" "${ClassName}" WriteRegStr HKCR "${extenstion}" "PerceivedType" "${PerceivedType}" WriteRegStr HKCR "${extenstion}" "Content Type" "${ContentType}" WriteRegStr HKCR "${ClassName}\DefaultIcon" "" "${DefaultIcon}" WriteRegStr HKCR "${ClassName}\shell\open\command" "" "${OpenCommand}" !macroend Пробовал сам добавить таким макаром: var CommandName !macro RegisterExtension extenstion ContentType PerceivedType ClassName DefaultIcon OpenCommand CommandName WriteRegStr HKCR "$ClassName\shell\open" "" "CommandName" StrCpy $CommandName "Открыть в FastStone Image Viewer" !insertmacro RegisterExtension ".bmp" "image/bmp" "image" "FastStone.bmp" "$OUTDIR\FSIcons.db,0" $OpenCommand $CommandName Не работает вариант! |
wolkow70
Две строчки кода и никаких гвоздей! на примере Reg2Nsis Код:
Section |
Цитата:
Сейчас попробовал применить другой макрос, сделал так: !macro RegisterExtension extenstion StrCpy $ClassName "FastStone.${extenstion}" WriteRegStr HKCR ".${extenstion}" "" "$ClassName" WriteRegStr HKCR "$ClassName\shell\open" "" "Открыть в FastStone Image Viewer" WriteRegStr HKCR "$ClassName\shell\open\command" "" "$OpenCommand" DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" "Progid" "$ClassName" ${Switch} ${extenstion} ${Case} "BMP" StrCpy $IconIndex 0 WriteRegStr HKCR "$ClassName" "" "FastStone BMP File" ${Break} ${Case} "PNG" StrCpy $IconIndex 7 WriteRegStr HKCR "$ClassName" "" "FastStone PNG File" ${Break} ${Case} "JPG" StrCpy $IconIndex 4 WriteRegStr HKCR "$ClassName" "" "FastStone JPG File" ${Break} ${EndSwitch} WriteRegStr HKCR "$ClassName\DefaultIcon" "" "$IconFile,$IconIndex" EndMacro: !macroend Section "!${PRODUCT_NAME}" sec01 бла-бла StrCpy $OpenCommand "$\"$OUTDIR\FSViewer.exe$\" $\"%1$\"" StrCpy $IconFile "$INSTDIR\FSIcons.db" SectionGroup "Ассоциация файлов" Sec06 ; Section "BMP" BMP SectionIn 1 2 !insertmacro RegisterExtension ".bmp" SectionEnd Section "JPG" JPG SectionIn 1 2 !insertmacro RegisterExtension ".jpg" SectionEnd Почему то в реестре расширения регистрируются с двумя точками ..bmp ..jpg и т.д |
Цитата:
Разобрался, все пока получается....!!!!! |
WriteRegStr HKLM "SOFTWARE\BurnAware\Install" "InstallEntry" "?"
как прописать выше этой строчки, чтобы заместь "?" было полное имя компьютера из HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" |
punsh
Сначала читаем значение параметра, к примеру AltDefaultDomainName и сохраняем в $R1 Код:
ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" "AltDefaultDomainName" |
Подскажите, как лучше всего делать инсталлятор для игр? Тупо запаковать все в один .exe не вариант, так как такой exe файл, весом в 4 гига например, запускается долго, и требует больших усилий от компьютера.
|
CyberMaster,
как вариант, запихнуть файлы игры в архивы, скажем по 1ГБ, а установщик будет распаковывать архивы в указанное место и делать другие необходимые действия, ну вот к примеру распаковывать таким плагином http://forum.oszone.net/post-1552431-891.html |
А этот плагин умеет работать с 7z, cab архивами?
|
Цитата:
а универсальный вариант, взять консольную утилитку из архиватора 7-zip (7z.dll и 7z.exe) запихнуть в установщик, а затем запускать с нужными ключами - будет распаковывать все, что умеет 7-zip Код:
nsExec::Exec `"$PLUGINSDIR\7z.exe" x "Путь к архиву" -o"Путь распаковки" -y` |
Здравствуйте.
Прошу помочь в решении такой проблемы: Идет распаковка меню и выбранных портативных программ. Причем меню распаковывается в INSTDIR, а вот программы в зависимости от того выбрано ли меню для установки. Если меню устанавливаем, то путь распаковки $INSTDIR\PortableApps. если нет, то $INSTDIR Использую следующий код (фрагменты): Проблема в том, что у меня программы всегда распаковываются в $INSTDIR\PortableApps, независимо стоит ли галочка на секции меню. В чем моя ошибка? |
|
kotkovets, спасибо. Дело оказалось в ${If} ${SectionIsSelected} ${secMENU}.
А разве Код:
!insertmacro MUI_PAGE_DIRECTORY Код:
!insertmacro MUI_PAGE_DIRECTORY Ведь в первом случае функция вызывается при закрытии окна выбора компонентов, а во втором перед началом установки файлов. Что по сути одно и тоже место.или нет? |
SnakeSel почти одно и тоже, но лучше , при закрытии странички компонентов делать, почему?
Потому, что если по каким либо причинам нам надо вернуться назад, пишем Abort и мы снова на страничке выбора компонентов, а при страничке инсталляции такую фишку невозможно сделать такое - прервем установку. По этому в силу еще разных причин и для таких задач - вызывать функцию, в вашем случае, лучше при закрытии странички. |
kotkovets,
Цитата:
|
punsh,
Возьмите плагин IPconfig в переменной $R1 - доменное имя компа Код:
Код:
ReadRegStr $R1 HKLM "SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" "ComputerName" |
Цитата:
|
ТОВАРИЩИ ПОМОГИТЕ!
Делаю скрипт для Opera. Как удалить профиль по адресу: Documents and Settings\Administrator\Application Data\Opera\ Opera\profile\ Всяко пробовал, никак не получается. Какая там переменная? |
wolkow70,
Слабо, что ли справку посмотреть, а потом клепать дистры, что ли... Цитата:
|
Цитата:
SetShellVarContext current RMDir /r "$APPDATA\Opera\" RMDir /r "$LOCALAPPDATA\Opera\" Но это удаляет профили в папке текущего пользователя, у меня кэш оказался в папке E:\Documents and Settings\Администратор\Local Settings\Application Data\Opera Как попасть в директорию профиля администратора? Вот чего нет в справке. |
Цитата:
или так : http://forum.oszone.net/post-1552188-884.html |
Цитата:
Цитата:
http://s006.radikal.ru/i214/1105/85/13f14094f4af.png Через SetShellVarContext all RMDir /r "$APPDATA\Opera\" RMDir /r "$LOCALAPPDATA\Opera\" тоже не получается... |
Сделал так:
!include "MUI2.nsh" !include "FileFunc.nsh" !insertmacro GetParent var FAdmin !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE "Russian" Section "TEST" ${GetParent} $DOCUMENTS $FAdmin RMDir /r "$FAdmin\Local Settings\Application Data\Opera" SectionEnd В результате снесло папку с профилем в E:\Documents and Settings\User\Local Settings\Application Data\Opera\Opera Но в папке администратора все на месте. Тут надо учитывать, что все папки профилей (Администратор, User и ALL user расположены в одной директории и попадают в один шаг.... |
kotkovets,
Вот так работает! Section "01" ReadEnvStr $R0 "PATH" StrCpy $R0 "E:\Documents and Settings\Администратор\Local Settings\Application Data\Opera" System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PATH", R0).r0' ReadEnvStr $R0 "PATH" StrCpy $R0 "E:\Documents and Settings\Администратор\Local Settings\Application Data\Opera" SetEnv::SetEnvVar "PATH" $R0 RMDir /r "$R0\" SectionEnd |
wolkow70, хочется сказать, о боже... справка рулит
|
kotkovets,
Работает даже еще проще, просто: ReadEnvStr $R0 "PATH" StrCpy $R0 "E:\Documents and Settings\Администратор\Local Settings\Application Data\Opera" SetEnv::SetEnvVar "PATH" $R0 RMDir /r "$R0\" SectionEnd Я себе так сделал через SysDrive: Var SysDrive Function un.onInit SectionSetText ${sec09} "Удалить Opera" StrCpy $SysDrive $WINDIR 2 FunctionEnd ReadEnvStr $R0 "PATH" StrCpy $R0 "$SysDrive\Documents and Settings\Администратор\Local Settings\Application Data\Opera\" SetEnv::SetEnvVar "PATH" $R0 RMDir /r "$R0\" ; ReadEnvStr $R1 "PATH" StrCpy $R1 "$SysDrive\Documents and Settings\Администратор\Application Data\Opera\" SetEnv::SetEnvVar "PATH" $R1 RMDir /r "$R1\" SectionEnd |
wolkow70
Скажу прямо, не обижайтесь, у меня сложилось впечатление, что вы не имеете ни малейшего понятия об использовании переменных NSIS, системных переменных и переменных окружения. Вот на кой черта эти записи, въехать никак не могу... ReadEnvStr $R0 "PATH" - считывает с реестра в переменную $R0 значениие системной переменной %path% StrCpy $R0 "$SysDrive\Documents and Settings\Администратор\Local Settings\Application Data\Opera\" - и тут же в переменную $R0 помещаете другое значение... ($SysDrive\Documents and Settings\Администратор\Local Settings\Application Data\Opera\) тупо... причем по ходу извлекая букву системного диска...а вопрос зачем получили значение из реестра в переменную $R0 и тут же ее переписАли :o |
Цитата:
В скрипте у меня только это: Var SysDrive Function un.onInit SectionSetText ${sec09} "Удалить Opera" StrCpy $SysDrive $WINDIR 2 FunctionEnd ReadEnvStr $R0 "PATH" StrCpy $R0 "$SysDrive\Documents and Settings\Администратор\Local Settings\Application Data\Opera\" SetEnv::SetEnvVar "PATH" $R0 RMDir /r "$R0\" ; ReadEnvStr $R1 "PATH" StrCpy $R1 "$SysDrive\Documents and Settings\Администратор\Application Data\Opera\" SetEnv::SetEnvVar "PATH" $R1 RMDir /r "$R1\" SectionEnd Удаляются две папки в разных диреториях. А то, что я вначале написано это для примера. А взято все из справки, чего там не правильно, если все работает, как нужно?... |
а что так не катит...
Код:
StrCpy $R0 "$SysDrive\Documents and Settings\Администратор\Local Settings\Application Data\Opera\" и вообще это просто так можно управляя пользователями через SetShellVarContext all или SetShellVarContext current "$LOCALAPPDATA\Opera\" "$APPDATA\Opera\" |
То есть вы хотите сказать , что строка
ReadEnvStr $R0 "PATH" - лишняя? Но ведь она есть в примере справки, а от нее я не отступал. Вот что буквально приведено в справке: ReadEnvStr $R0 "PATH" StrCpy $R0 "$R0;C:\MYAPP" System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PATH", R0).r0' ReadEnvStr $R0 "PATH" StrCpy $R0 "$R0;C:\MYAPP" SetEnv::SetEnvVar "PATH" $R0 Цитата:
Сносятся папки в в профилях "User" и "All users". А профиль "Администратор" , да еще в русской транскрипции это вообше другое... А главное в моем варианте ВСЕ РАБОТАЕТ как надо, почему следует считать это тупостью... |
Цитата:
Цитата:
kotkovets, Провел эксперемент - закомментировал строки : ;ReadEnvStr $R0 "PATH". Все равно работает. Вы оказались правы. |
:o :) улыбнулось даже..........................................
достаточно так..и усё Код:
RMDir /r "$SysDrive\Documents and Settings\Администратор\Local Settings\Application Data\Opera\" Цитата:
Цитата:
|
Цитата:
Инсталлятор я доделал. Все нормально работает. Но хочу еще доработать. Возник в связи с этим такой вопрос: У меня перед самой инсталляцией предусмотрена полная очистка системы от следов предыдущей установки Opera. Реализуется первой секцией, в таком виде: Section "Удаление предыдущей установки Opera" sec01 DeleteRegKey HKLM "SOFTWARE\Classes\Applications\Opera.exe" "" DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Opera.exe" "" DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Classes\.wgt" "" DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Classes\.xht" "" DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Classes\.xhtm" "" DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Classes\.xhtml" "" DeleteRegKey HKLM "SOFTWARE\Classes\Opera.Widget" "" DeleteRegKey HKLM "SOFTWARE\Classes\Opera.Protocol" "" DeleteRegKey HKLM "SOFTWARE\Classes\Opera.Widget" "" DeleteRegKey HKLM "SOFTWARE\Classes\Opera.Extension" "" DeleteRegKey HKLM "SOFTWARE\Classes\Opera.HTML" "" DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Clients\Mail\Opera" "" DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Clients\News\Opera" "" DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Clients\StartMenuInternet\Opera.exe" "" RMDir /r "$PROGRAMFILES\Opera" ; SetShellVarContext current RMDir /r "$APPDATA\Opera\" RMDir /r "$LOCALAPPDATA\Opera\" ; SetShellVarContext all RMDir /r "$APPDATA\Opera\" RMDir /r "$LOCALAPPDATA\Opera\" ; RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}" Delete "$Desktop\${PRODUCT_NAME}.lnk" Delete "$QUICKLAUNCH\${PRODUCT_NAME}.lnk" ; StrCpy $R0 "$SysDrive\Documents and Settings\Администратор\Local Settings\Application Data\Opera\" SetEnv::SetEnvVar "PATH" $R0 RMDir /r "$R0\" ; StrCpy $R1 "$SysDrive\Documents and Settings\Администратор\Application Data\Opera\" SetEnv::SetEnvVar "PATH" $R1 RMDir /r "$R1\" Вопрос такой: можно ли при этом средствами NSIS произвести бэкап имеющихся профилей, что бы непотерять закладки, пароли, экспресс-панель, историю посещений и т.д? То есть механизм: 1. Бэкап (желательно созданием архива в директории, в которой создается новый профиль) . 2. Очиста. 3. Новая установка. |
Цитата:
Цитата:
Все дополнительные ключи, параметры из справки 7-Zip - там все расписано. Просьба не задавать откровенно глупые и ламерские вопросы, лучше лишний раз проверить, сделать отладку, почитать справки. |
Прошу помощи!
Дело в том что меня задолбал яндекс.бар в различных инсталляторах NSIS (exe). Можно ли из инсталяшки удалять YandexPackSetup.msi ? |
Цитата:
|
Мне большую помощь оказывает программа RegSnap.
Делаю снимок до инсталляции, после инсталляции (до запуска программы) и снимок после первого запуска программы и смотрю последовательность и состав изменений в реестре и файловой системе. Дальше уже проще... Еще полезна утилита RegDllView.exe, можно после устанвоки посмотреть, какие библиотеки зарегистрировались при установке программы. Конвертор Reg2NSIS оказывает большую помощь, но комманды часто коряво конвертит.... Хороший шаблон нужно себе сделать, что бы не тратить зря время, и дело пойдет. Я себе в сборке eMule так делал без упаковки: IfFileExists "$INSTDIR\config\*.ini" 0 +2 IfFileExists "$INSTDIR\config\*.dat" 0 +2 IfFileExists "$INSTDIR\config\*.met" 0 +2 IfFileExists "$INSTDIR\config\*.txt" 0 +2 IfFileExists "$INSTDIR\config\*.tmpl" 0 +2 IfFileExists "$INSTDIR\config\*.bak" 0 +2 IfFileExists "$INSTDIR\config\*.old" 0 +2 MessageBox MB_YESNO|MB_ICONQUESTION "В папке назначения обнаружены файлы настроек предыдущей установки eMule, хотите сохранить файлы ранее сделанных настроек программы? (Вы сможете найти их в папке $INSTDIR\config\BACKUP)" IDNO no_backup CreateDirectory "$INSTDIR\config\BACKUP\" CopyFiles "$INSTDIR\config\*.ini" "$INSTDIR\config\BACKUP\" CopyFiles "$INSTDIR\config\*.dat" "$INSTDIR\config\BACKUP\" CopyFiles "$INSTDIR\config\*.met" "$INSTDIR\config\BACKUP\" CopyFiles "$INSTDIR\config\*.txt" "$INSTDIR\config\BACKUP\" CopyFiles "$INSTDIR\config\*.tmpl" "$INSTDIR\config\BACKUP\" CopyFiles "$INSTDIR\config\*.bak" "$INSTDIR\config\BACKUP\" CopyFiles "$INSTDIR\config\*.old" "$INSTDIR\config\BACKUP\" |
Цитата:
Код:
CreateDirectory "$INSTDIR\config\BACKUP\" |
Цитата:
В принципе, для Opera попробую сделаю как Вы написали, там трудно понять, что лишнее, а что нет. Надо разобраться какие файлы нужны, и продумать механизм восстановления настроек по выбору. Например: секция: "Восстановление закладок" секция: "Восстановление паролей" секция: "Восстановление Экспресс-панели" секция "Восстановление истории посещений" и т.д. Сам то инсталлятор Opera я сделал. Теперь наворачивать его надо. |
Хотел бы посоветоваться с Мэтрами NSIS-а!
Windows 7 и Vista имеет ряд ограничений на папку C:\Program Files. При установке некоторых программ а так же игр (не имеющий профиля), следует выбирать другую папку установки. То есть при установки в Windows 7 и Vista предлагать по умолчанию другую папку (к примеру Games\XXX), в других Windows предлагать стандартно C:\Program Files\XXX. Написал простую логику, но при выборе другой папки или диска терялась \XXX , переписал заново вроде всё работает, но я не уверен полностью. Прошу проверить! Код:
LoadLanguageFile "${NSISDIR}\Contrib\Language files\Russian.nlf" |
sawe,
Все нормально работает. В функции .onInit уберите Pop $0 - нехорошо обращаться к пустому стэку. А я бы сделал, гораздо проще: Код:
LoadLanguageFile "${NSISDIR}\Contrib\Language files\Russian.nlf" |
kotkovets,
В справке тоже много не понятного. Вот сделал так: IfFileExists "$EXEDIR\pkey.txt" 0 NoThere MessageBox MB_OK "Файл лицензии есть" CopyFiles /silent "$EXEDIR\pkey.txt" "$INSTDIR\pkey.txt" Goto Done NoThere: MessageBox MB_OK "Файла лицензии нет" Done: SectionEnd Не понятно, как теперь скрыть MB если запускать с ключом /S через IfSilent... |
Цитата:
Код:
MessageBox MB_OK "Файл лицензии есть" /SD IDOK Код:
IfSilent +2 Справочнике по NSIS |
Цитата:
Цитата:
|
Цитата:
Кто нибудь разъяснил бы на примере скрипта AIMP что там реализовано. Пока написал так: StrCpy $WindowCaption "${PRODUCT_NAME} ${PRODUCT_VERSION}" ${WordReplace} "$EXEFILE" ".exe" ".ini" "+" $IniFile StrCpy $IniFile "$EXEDIR\$IniFile" ;gMode detection StrCpy $gMode 0 ${GetOptions} $CMDLINE "/G" $0 ;if not found /G then exit IfErrors CheckViolation 0 ;When Silent setup then ignoring /G IfSilent +4 0 StrCpy $gMode 1 Delete $IniFile StrCpy $WindowCaption "Генератор файла ответов ${PRODUCT_NAME}" Запускается генератор и все, что дальше делать не понятно.... |
Цитата:
Код:
Function .onInit Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Получается, что это нам надо сказать: Спасибо Вам, за то, что тратите свое время, что бы ПОМОЧЬ НАМ! |
kotkovets,
Делаю установщик на программу FlylinkDC++. В общем на XP она и в Program Files хорошо ставится и работает. А на Windows 7 рекомендуют ставить папку с программой в корень диска. Я так понимаю, что вышеприведенный пример: Function .onInit ${If} ${AtLeastWinVista} ;начиная от WinVista и выше Var /global SysDrive ; иницилизируем здесь, в ниже версиях Windows SysDrive - не используется StrCpy $SysDrive $WINDIR 2 StrCpy $INSTDIR "$SysDrive\Games\XXX" ${Else} StrCpy $INSTDIR "$PROGRAMFILES\XXX" ${EndIf} FunctionEnd InstallDir "$INSTDIR\XXX" можно попробовать???? |
Цитата:
Цитата:
http://forum.oszone.net/post-1459797-559.html и здесь продолжение http://forum.oszone.net/post-1460492-563.html К тому же пример определения права пользователя и сколько прав у пользователя (а значит меняем папку распаковки) есть в справочнике по NSIS. |
Цитата:
|
Цитата:
Определить какими правами обладает пользователь поможет стандартный плагин в составе NSIS Код:
UserInfo::GetOriginalAccountType |
Товарищи, подскажите, что поправить :
WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Веб-сайт ${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_NAME}.url" Ярлык интернета создается и работает, но характерная интернет-иконка в меню Пуск отсутствует. Просто никакой значок. Мне надо, чтобы иконку интернета подключить к ссылке. |
Цитата:
Код:
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Сайт ${PRODUCT_NAME}.lnk" "http://wwww.aimp.ru" "" "$PROGRAMFILES\Internet Explorer\iexplore.exe" 1 |
Цитата:
2. Браузер по умолчанию Opera. 3. Как обычно все сделал сложнее: - создал интернет-иконку нейтрального вида, а далее: !define PRODUCT_WEB_SITE "http://www.xnview.com" !macro CreateInternetShortcut FILENAME URL ICONFILE ICONINDEX WriteINIStr "${FILENAME}.url" "InternetShortcut" "URL" "${URL}" WriteINIStr "${FILENAME}.url" "InternetShortcut" "IconFile" "${ICONFILE}" WriteINIStr "${FILENAME}.url" "InternetShortcut" "IconIndex" "${ICONINDEX}" !macroend !insertmacro CreateInternetShortcut \ "$SMPROGRAMS\${PRODUCT_NAME}\Веб-сайт ${PRODUCT_NAME}" \ "${PRODUCT_WEB_SITE}" \ "$INSTDIR\url.ico" "0" SectionEnd Получилось здорово! |
kotkovets,
Внедряю функцию сохранения настроек для Opera. Столкнулся с проблемой: Section "PreInstall" sec01 IfFileExists "$APPDATA\Opera\Opera\*.ini" 0 check_localappdata MessageBox MB_YESNO|MB_ICONQUESTION "Файлы настроек Opera обнаружены в профиле Пользователя. Выполнить резервное копирование файлов настроек для дальнейшего использования? (Будут находиться в каталоге $DOCUMENTS\Opera Backup)" IDNO no_backup CreateDirectory "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$APPDATA\Opera\Opera\*.adr" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$APPDATA\Opera\Opera\*.ini" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$APPDATA\Opera\Opera\*.xml" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$APPDATA\Opera\Opera\*.dat" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$APPDATA\Opera\Opera\*.js" "$DOCUMENTS\Opera Backup\" check_localappdata: IfFileExists "$LOCALAPPDATA\Opera\Opera\cache" 0 check_programdir MessageBox MB_YESNO|MB_ICONQUESTION "Кэш браузера, файлы почты и иные данные обнаружены в профиле Пользователя. Выполнить резервное копирование данных для дальнейшего использования? (Будут находиться в каталоге $DOCUMENTS\Opera Backup)" IDNO no_backup CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\cache\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\mail\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\application_cache\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\icons\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\thumbnails\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\widgets\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\vps\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\opcashe\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\temporary_downloads\*" "$DOCUMENTS\Opera Backup\" goto no_backup check_programdir: IfFileExists "$INSTDIR\profile\*.ini" 0 no_backup MessageBox MB_YESNO|MB_ICONQUESTION "Файлы настроек Opera обнаружены в папке назначения. Выполнить резервное копирование файлов настроек для дальнейшего использования? (Будут находиться в каталоге $PROGRAMFILES\Opera Backup)" IDNO no_backup CreateDirectory "$PROGRAMFILES\Opera Backup\" CopyFiles "$INSTDIR\Profile\*.xml" "$PROGRAMFILES\Opera Backup\" CopyFiles "$INSTDIR\Profile\*.ini" "$PROGRAMFILES\Opera Backup\" CopyFiles "$INSTDIR\Profile\*.adr" "$PROGRAMFILES\Opera Backup\" CopyFiles "$INSTDIR\Profile\*.dat" "$PROGRAMFILES\Opera Backup\" CopyFiles "$INSTDIR\Profile\*.js" "$PROGRAMFILES\Opera Backup\" no_backup: В общем, резервные копии создаются, но в этом месте: CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\cache\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\mail\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\application_cache\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\icons\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\thumbnails\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\widgets\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\vps\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\opcashe\*" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\temporary_downloads\*" "$DOCUMENTS\Opera Backup\" копируются как сами папки , так и еще файлы в них содержащиеся отдельно. В результате получается каша... Хочу посоветоваться в чем может быть дело? |
wolkow70, вечно вы все перевернете с головы на ноги в тех местах, где совершенно не нужно..рекурсия знаете ли вы...
ну чего уж проще... Код:
CopyFiles /silent "C:\Documents and Settings\АТС\Рабочий стол\договор" "C:\" |
Цитата:
И мне не надо всю папку копировать, а выборочно папки из нее. Поэтому попробовал так. Убрал \* и нормально стало копироваться. CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\cache" "$DOCUMENTS\Opera Backup\" CopyFiles /silent "$LOCALAPPDATA\Opera\Opera\mail" "$DOCUMENTS\Opera Backup\" |
wolkow70,
исходя из-за каких задач... CreateDirectory "$INSTDIR\config\BACKUP" CopyFiles /silent "$INSTDIR\config\*" "$INSTDIR\config\BACKUP" одно и тоже но... разницу видете - я думаю, что вы не видете :lol: CreateDirectory "$INSTDIR\config\BACKUP" CopyFiles /silent "$INSTDIR\config" "$INSTDIR\config\BACKUP" |
Цитата:
Вот я и написал, что убрал и все заработало. А что касается задач, то про эту же задачу и шла речь. Насколько я помню \* означает, что папка будет копироваться со всем вложенным. Оно и копировалось, только почему-то дублировалось - копировались папки с файлами, и еще файлы отдельно.... |
Прошу прощения за возможный флуд. :help:
Меня интересует реальный пример заказной страницы с использованием MUI2 и nsDialog. Страница должна содержать две ${NSD_CreateCheckBox} с поддержкой флагов и памятью, для выбора ярлыков на Рабочий стол и Быстрый запуск и ниже две радио кнопки для выбора текущего или всех пользователей. И возможно ли это реализовать без дополнительных секций? Так же, хотелось бы увидеть имитацию страницы директории в nsDialog с нормальной кнопкой Обзор... За ранее благодарен! :clapping: |
|
Цитата:
Но я имел ввиду две разных (отдельных) страницы, но и этого с головой хватит как основа, там разберёмся. NSIS\Docs\nsDialogs\Readme.html - мне пока плохо даётся освоить его. Как то я у вас спрашивал на счёт редактора форм для nsDialogs, вы тогда ответили, что такого нет. За чем обманывать наивных людей, недавно мне попался NSIS Dialog Designer, но к сожалению он заточен только под Unicode, но это не беда. |
Цитата:
Сначала почитайте, а потом обвиняйте!!!что за народ пошел ни хрена сами не могут ниче сделать, дай все готовое... |
Я вас ни чем не оскорблял, лучше бы высказал своё мнение об этом дизайнере!
|
Цитата:
И такое впечатление сложилось, что писали люди не очень хорошо знающие NSIS. Но все равно им огромное спасибо! Сам подумывал написать подобный GUI - но знаний маловато пока в программировании . |
kotkovets,
Доброго времени суток. Не приходилось ли Вам пользоваться плагином NsisXML plug-in Скачал , а как пользоваться не разберусь, так как на английском инструкция. К примеру в файле настроек : <Sounds> E:\Program Files\Yandex\Punto Switcher\Sounds\typerus.wav,E:\Program Files\Yandex\Punto Switcher\Sounds\typeeng.wav,E:\Program Files\Yandex\Punto Switcher\Sounds\switch.wav,E:\Program Files\Yandex\Punto Switcher\Sounds\misprint.wav,E:\Program Files\Yandex\Punto Switcher\Sounds\ru.wav,E:\Program Files\Yandex\Punto Switcher\Sounds\en.wav,E:\Program Files\Yandex\Punto Switcher\Sounds\reverse.wav,E:\Program Files\Yandex\Punto Switcher\Sounds\switch.wav,E:\Program Files\Yandex\Punto Switcher\Sounds\switch.wav,E:\Program Files\Yandex\Punto Switcher\Sounds\switch.wav,E:\Program Files\Yandex\Punto Switcher\Sounds\switch.wav,E:\Program Files\Yandex\Punto Switcher\Sounds\switch.wav,E:\Program Files\Yandex\Punto Switcher\Sounds\switch.wav,E:\Program Files\Yandex\Punto Switcher\Sounds\switch.wav,E:\Program Files\Yandex\Punto Switcher\Sounds\switch.wav,E:\Program Files\Yandex\Punto Switcher\Sounds\replace.wav </Sounds> То есть, привязка к жесткому диску идет. Хотелось бы заменить букву диска через $SysDrive Пока не разобрался можно ли вообще так сделать... |
Цитата:
|
Цитата:
Мне нужно определенные секции отредактировать в имеющемся xml. Скорее всего, речь должна идти об удалении значения секции, и замене ее новыми строками... !macro AdjustConfigValue ConfigFile Key Value DetailPrint "Config: adding '${Key}'='${Value}' to ${ConfigFile}" nsisXML::create nsisXML::load ${ConfigFile} nsisXML::select "/configuration/appSettings/add[@key='${Key}']" nsisXML::setAttribute "value" ${Value} nsisXML::save ${ConfigFile} !macroend !insertmacro AdjustConfigValue "$INSTDIR\MyApp.exe.config" "ServiceURL" "http://127.0.0.1" То есть это позволяет заменить значение секции в настройках ? Цитата:
Цитата:
Цитата:
|
Добрый день!
Есть инсталлер, в нем есть страничка выбора компонентов !insertmacro MUI_PAGE_COMPONENTS сами компоненты добавляются таким образом: Section "$(^component1)" component1\Section ExecWait '"$EXEDir\7za.exe" x "$EXEDir\myarchive.zip" -o"$INSTDIR" -y' SetOverwrite on SectionEnd Т.е. сами компоненты это zip архивы которые лежат в одной папке с инсталятором. И все бы хорошо но на странице выбора компонентов не правильно указывается "вес" программы, т.к. архивы не включены в инсталятор то неважно какие галочки я расставил, "вес" программы всегда показывает один, подскажите как можно это исправить. |
Здравствуйте, Kelinmiir
Для этого есть такая команда AddSize, прописывается она внутри секции, указывается размер файлов в Килобайтах, например Код:
Section "TEST" |
Добрый день!
Упражнялся в написании nsDialog, лучше начинать с чего нибудь простого но полезного. Вот что получилось... Прошу проверить и подправить пример или посоветовать в каком направлении двигаться. |
sawe,
Ошибок в коде достаточно, зачем в секции обращаться к пустому стеку? Установщик выкидывает флаг ошибки, а раз так то,часто команды зависимые от флага ошибки НЕ БУДУТ РАБОТАТЬ! Здесь и в других (по подобию конструкциях) - нет ни одной команды помещающие значения в стек, к стеку нужно обращаться тогда, когда там, что то есть!!! Код:
${If} $Check2 = 1 Цитата:
|
Спасибо учту!
На счёт очистки стека Pop $0, так это дурная привычка, скорее от паники (лучше пере бдеть, чем не до бдеть). Вы недавно упоминали ... Цитата:
Это было бы проще для начала и опыта набраться можно по более. И у вас появится возможность опередить NSIS Dialog Designer, так как его подбивают на глупости (импорт формата INI) а не на доводку. |
Доброго времени суток!
Соблаговолите помочь советом "любителю". Познакомился со скриптами довольно давно (на примерах от Авторов NSIS), уже несколько лет иногда собираю то что сам себе и дочкам русифицирую и чем сам постоянно пользуюсь. Вопрос возник давно, но всё никак не мог нигде найти внятных объяснений. Сейчас много чего перечитал на Озоне, но пока тоже не нашел то что ищу: Интересует проверка при установке - не установлена-ли уже старая/более новая версия устанавливаемой программы. -Например оригинальный установщик NSIS перед установкой идёт в Реестр, проверяет, не стоит-ли более новая, или старая версия NSIS и предлагает переустановиться. -В оригинале скрипта makensis.nsi (в папке с примерами) всё вроде прописано. Пробую на той-же NSIS, - например стояла 2.15 , в разделе Uninstall реестра значится 2.15, пробую ставить их сборку 2.45 - она предупреждает, предлагает переустановиться. Проставляю номер версии в скрипте, всё упаковывается, но новый мой инсталлятор ничего не проверяет и молча всё перезаписывает... И корневую папку и Реестр. -Ткните, пожалуйста носом что делаю не так? -А если ещё подскажете возможно-ли прописывать в деинсталлятор команду принудительно убивать деинсталлируемую программу (если она запущена) - вообще мне мёд будет :-) Стараюсь НАНОСИТЬ добро... и ПРИЧИНЯТЬ пользу... |
Чаще всего следует читать в реестре номер версии
Код:
ReadRegStr $0 HKLM "SOFTWARE\куст_реестра" "имя_параметра" Код:
ReadINIStr $0 "$INSTDIR\Файл.ini" "Секция" "Имя" Код:
;Ваше определения! Чтобы убить файл или процесс, следует подходить творчески, прежде всего надо узнать какая сволочь его держит и потом выбрать решение. Лучше всего узнать класс и придушить его, но для этого нужен отдельный софт Пример, как по хамски придушить Код:
ReserveFile "${NSISDIR}\Plugins\KillProcDLL.dll" Код:
;Ваше определения! |
sawe
Признателен за ответ Я не программист, поэтому пока стараюсь переварить и попробую на скрипте NSIS С Вашего позволения если что не допру письну в ПМ ? |
Уважаемый 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 Может подскажите в чем может быть дело? |
Попробуйте так, если сообщение появится, значит секция отрабатывает, либо проблема в
SectionIn 2 3 4 - вероятно получается по умолчанию не отмечена секция, т.е расставьте флаги так, что бы эта секция была по умолчанию отмечена. Цитата:
|
Нет, сообщение не появлялось, зато появлялись сообщения из работающих секций ярлыков. Отсюда вывод: проблема была во флагах.
Попробовал везде выставить 1 2 3 4, и все нормально заработало. Не понятно почему флаги на это влияют, ведь файл ответов я создаю в ручную, и сам выставляю галочки в чекбоксах? Можно ли в тихом режиме подавить значение этих флагов, потому, что я хочу по умолчанию, наоборот, без ассоциаций? И еще проблема, во время создания файла ответов, идет распаковка файлов в директорию. Можно ли сделать только эмуляцию? |
Цитата:
Отсюда вывод: принудительно в тихом режиме, командами устанавливать все секции в отмеченное состояние - далее читается файл конфигурации и от его ответов зависит, что ставить, а что нет. Цитата:
|
здраствуйте.
Нужна опять ваша помощь Интересует страница лицензии. используеться !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 Работают оба варианта. |
Понял, что моя ошибка заключалась в том, что я по умолчанию поставил "минимальный" тип установки. Переделал на "полный" тип, и все с ассоциациями наладилось.
Цитата:
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" и далее как всегда... |
kotkovets
В общем, что получается?.. Выполняются все комманды в секции "!${PRODUCT_NAME}" после ${EndIf} и до конца секции, в том числе: 1. Копируются файлы; 2. Регистрируются dll; 3. Вносятся записи в реестр... Посмотрел в скрипте AIMP, там так: StrCpy $INSTDIR $R0 NotSilent: SetOutPath "$INSTDIR\" то есть у них вместо EndIf используется NotSilent: Но при этом у них макрос несколько иной... |
Цитата:
Цитата:
А свою ошибку исправил: Цитата:
Код:
Section "-Install" |
kotkovets,
Ваша идея насчет логических конструкций показала себя состоятельной. Генератор ответов стал работать как часы. Читал Справку, где вы приводите пример: DeleteRegValue [root_key] [subkey] [key_name] Удаляет параметр key_name из раздела subkey ветки root_key. Флаг ошибки будет установлен в том случае, если раздел/параметр не найден, или удаление не возможно. DeleteRegValue HKLM "Software\My Company\My Software" "some value" Ломаю голову над проблемой удаления определенного значения: Например, производится регистрация типа файла: WriteRegStr HKCU "Software\Classes\.MP3" "" "jetAudio.ASSOC.Audio" В удалении будет комманда: DeleteRegValue HKCU "Software\Classes\.mp3" "" Эта комманда удалит любое значение параметра. А если произошла переассоциация назначения файла? Тогда удаление параметра нарушит работу другой программы. Вот думаю, как удалить определенное значение? Пробовал так: DeleteRegValue HKCU "Software\Classes\.mp3" "" "jetAudio.ASSOC.Audio" не получается компиляция скрипта. То есть, если значение "jetAudio.ASSOC.Audio", то нужно удалить, иначе нет. |
Цитата:
Код:
ReadRegStr $0 HKCU "Software\Classes\.mp3" "" |
Вложений: 1
Привет всем. Прошу помочь в следующем.
Необходимо отредактировать стандартный конфигурационный файл php.ini: i. Раскоментировать cgi.force_redirect и установить в 0: cgi.force_redirect = 0 ii. safe_mode = Off iii. установить переменную memory_limit в разумное значение в зависимости от памяти на сервере, но чем больше, тем лучше. iv. session.save_handler = files v. magic_quotes_gpc = Off. vi. magic_quotes_runtime = Off vii. file_uploads = On viii. session.auto_start = 0 ix. session.bug_compat_warn = Off x. session.save_path = "/Sessions" xi. extension_dir = "ext" xii. date.timezone установить в таймзону того места где установлен сервер. Список поддерживаемых зон можно найти на http://www.php.net/manual/en/timezones.php xiii. smtp=<smtp_domain>; smpt_port=<smtp_port> - установить адрес и порт smtp сервера для отсылки почты Подскажите как это лучше сделать, желательно с примерами. |
Почему-то не работает у меня в деинсталляторе такая конструкция:
ReadRegStr $0 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.MP3\UserChoice" "Progid" "" StrCmp $0 "jetAudio.ASSOC.Audio" 0 +2 DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.MP3\UserChoice" "" Вроде по справке делал... При инсталляции вносится: WriteRegStr HKCU "Software\Classes\.MP3" "" "jetAudio.ASSOC.Audio" DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.MP3\UserChoice" WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.MP3\UserChoice" "Progid" "jetAudio.ASSOC.Audio" |
Цитата:
Цитата:
Код:
WriteINISTr "ПУТЬ К ФАЙЛУ\php.ini" "PHP" "ИМЯ ПАРАМЕТРА" "ЗНАЧЕНИЕ" Цитата:
Код:
WriteINISTR "ПУТЬ К ФАЙЛУ\php.ini" "PHP" "cgi.force_redirect" "0" Цитата:
Код:
; iv. session.save_handler = files Цитата:
|
K.A.V.,
ReadRegStr $0 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.MP3\UserChoice" "Progid" "" Компилятор показывает ошибку в строке.. |
Цитата:
Код:
ReadRegStr $0 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.MP3\UserChoice" "" |
Подскажите пожалуйста, как решить такую задачу :
Имеется текстовый файл с кучей строк, одна из которых начинается с : ProductCode {здесь может быть разное количество цифр} Необходимо извлечь из этой строки этого текстового файла только : {здесь может быть разное количество цифр} Извлечь либо в переменную, если это использовать в скрипте, либо в отдельный текстовый файлик. Также интересен момент - возможно ли записать в переменную имя файла, находящегося рядом со скриптом (либо нет) и имеющего маску *.msi (либо какую другую) ? |
MKN
Я так понял тебе нужно циферки получить на момент компиляции скрипта? тогда нужно писать батник - запускать препроцессором NSIS и заинклюдить циферки в скрипт смотри http://forum.oszone.net/post-1657610-1065.html вопрос в содержимом батника, т.е как работать в командной строке с текстовыми строками...к спецам по командной строке нужно обратиться Цитата:
|
kotkovets,
А если упростить задачу - просто "получить циферки" из имеющегося текстового файла и записать их в другой текстовый файл ? |
Цитата:
Код:
!include "TextFunc.nsh" Код:
${LineFind} "$DESKTOP\TEST.txt" "/NUL" "1:-1" "LineFindFunction" где $DESKTOP\kav_temp.txt - файл в который записываем циферки Сама функция поиска в файле Код:
Function "LineFindFunction" |
MKN, я могу помочь на этапе инсталляции, т.е все действия обязательно проводим перед проверкой на предмет установленного продукта msi и наличие текстового файлика - будем брать цифры оттуда, в случае не нахождения тектового файлика - установить msi
Формат искомой строки: ProductCodeпробел!{здесь может быть разное количество цифр} Прикольно получилось, пока писал ответили... |
K.A.V.,
При таком раскладе: ReadRegStr $0 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.AC3\UserChoice" "" StrCmp $0 "jetAudio.ASSOC.Audio" 0 +2 DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.AC3\UserChoice" "" "Progid" никак не хочет удаляться... http://s58.radikal.ru/i159/1105/ed/695c48466cc4.png |
Цитата:
Код:
ReadRegStr $0 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.AC3\UserChoice" "Progid" |
Подскажите пожалуйста, как выполнить следующие действия.
Необходимо считать данные который пользователь введет при установке ПО, и вставить эти данные в 2 конфигурационных файла. Из справочника взял следующий код: Не как не могу понять как взять полученные данные и воспользоваться ими. Например отобразить из тут - DetailPrint "Hello from winreview.ru" . Прошу помощи. |
Цитата:
Код:
Function fnCustomDestroy Почитайте про переменные и как пользоваться. |
Вложений: 1
Снова я:)
Необходимо отредактировать файл config.php. А именно установить значения: Код:
$CFG->dbtype = 'mssql_n'; |
Цитата:
И далее другие значения заменяем по такой схеме, хотя можно и проще сделать, но что то не думается :beta: |
kotkovets
Почитал справку, и нашел немного не то, что мне нужно: Рассматривается пример: Section /o "Компонент №1" ID_1 SectionEnd Section "Компонент №2" ID_2 SectionEnd Section /o "Компонент №3" ID_3 SectionEnd Section /o "Компонент №4" ID_4 SectionEnd Section "Компонент №5" ID_5 SectionEnd Section /o "Компонент №6" ID_6 SectionEnd Функция проверки отметки, обязательна Function .onSelChange ; Выбор между компонентам 1, 2, 3 !insertmacro StartRadioButtons $1 !insertmacro RadioButton ${ID_1} !insertmacro RadioButton ${ID_2} !insertmacro RadioButton ${ID_3} !insertmacro EndRadioButtons ; Выбор между компонентам 5 и 6 !insertmacro StartRadioButtons $2 !insertmacro RadioButton ${ID_5} !insertmacro RadioButton ${ID_6} !insertmacro EndRadioButtons FunctionEnd Назначаем по-умолчанию отмеченные Function .onInit StrCpy $1 ${ID_2} StrCpy $2 ${ID_5} У меня так: В инсталлятор встроена секция деинсталляции программы для удобной переустановки. http://s002.radikal.ru/i198/1105/a5/92496cbcd09b.png То есть, если ставится галка на секцию 1, то все остальные автоматически отключаются и идет только удаление программы. И наоборот, если нажать на любую другую, то отключается 1. Не пойму как это реализовать.... |
wolkow70 как вариант, если чебокс удаления отмечен, то остальные чебоксы становятся не отмеченными и недоступными для отметки, если чебокс удаления не отмечен, то все чебоксы становятся для отметок доступные.
ненавижу возиться с отметками в секциях... решаю такие задачи через свои нарисованные странички |
Пока сделал так, но для двух секций:
Function .onSelChange !insertmacro StartRadioButtons $1 !insertmacro RadioButton ${Cleaning} !insertmacro RadioButton ${Install} !insertmacro EndRadioButtons FunctionEnd Попробую По вашему варианту... |
wolkow70, как такой вариант (только когда отмечена секция "Удаление", другие секции нельзя отметить, нужно снять сперва галку на удаление)
Код:
Function .onSelChange |
Вложений: 1
Для участников форума предоставляю плагин для работы с установочными пакетами msi.
Что умеет сей плагин,предназначенный для ANSI версии компилятора NSIS. и х86/x64 Windows NT системах: Просьба, для тех кто не понял для чего этот плагин, не задавать глупых вопросов и не пользоваться этим плагином. Демонстрационный пример и плагин во вложении. |
Цитата:
И не плохо было бы указать, в каких ОС данный плагин будет работать безотказно, нужно ли для его работы дополнительное ПО типа ".NET Framework", либо библиотеки hb860, в шапку |
Цитата:
Пока не проверял WIN7 x64, дополнительных файлов типа ".NET Framework" не требует! старался писать на чистом API в студии. |
000
|
kotkovets
Доброго времени суток. Цитата:
|
Krinkels, скорее всего пакет X64, буду думать, натравите на файл msi для получения кода продукта.
ан нет, все путем, отработало на 100% на WIN XP x64, проверил на 7-Zip v9.21 (x64).msi Getmsi::GetProperty "7-Zip v9.21 (x64).msi" "ProductCode" - файл 7-Zip v9.21 (x64).msi рядом со скриптом ProductCode: {23170F69-40C1-2702-0921-000001000000} Getmsi::GetInstall "{23170F69-40C1-2702-0921-000001000000}" возвращает 0 - установлен (предварительно установил!) Проверьте правильность кода продукта, и регистр букв очень важен! - ProductCode Плагин только для ANSI версии NSIS, для юникода не корректно работает. И проверьте права на win7 х64 |
kotkovets
Все работает. Моя ошибка, вернее недочет. Извиняюсь :) |
Ребята, опять заблудился.
Делаю сборку Opera. Такие секции: Function .onInit StrCpy $SysDrive $WINDIR 2 StrCpy $1 ${Sec03} FunctionEnd Section "Многопользовательская установка" Sec03 SetOutPath "$INSTDIR" WriteINIStr "$INSTDIR\operaprefs_default.ini" "System" "Multi User" "1" SectionEnd ; Section /o "Однопользовательская установка" Sec04 SetOutPath "$INSTDIR" WriteINIStr "$INSTDIR\operaprefs_default.ini" "System" "Multi User" "0" SectionEnd Function .onSelChange !insertmacro StartRadioButtons $1 !insertmacro RadioButton ${Sec03} !insertmacro RadioButton ${Sec04} !insertmacro EndRadioButtons FunctionEnd Кнопки 3 и 4 переключаются, но только не с первого раза. В первый клик кнопка 3 не выключается. Получаются обе секции включенными... |
wolkow70,
функцию .onInit переместите в скрипте - пропишите после всех секций, для корректного определения индетификаторов секций, вас же компилятор просит же... :) для NSIS последовательность действий очень важна! |
Сия Ваша рекомендация не помогла.
Function .onSelChange !insertmacro StartRadioButtons $1 !insertmacro RadioButton ${ID_03} !insertmacro RadioButton ${ID_04} !insertmacro EndRadioButtons !insertmacro StartRadioButtons $2 !insertmacro RadioButton ${ID_14} !insertmacro RadioButton ${ID_15} !insertmacro EndRadioButtons FunctionEnd ;(ПОСЛЕ ВСЕ СЕКЦИЙ) Function .onInit StrCpy $SysDrive $WINDIR 2 StrCpy $1 ${ID_3} StrCpy $2 ${ID_14} FunctionEnd Кнопки 14,15 вроде работают, а 3,4 как попало. http://s013.radikal.ru/i323/1105/23/02a52b6d3be4.png Иеще почему-то первую секцию цепляют, хотя она вообще не при чем... Разобрался, мой косяк. Перепутал в идентификаторах секций 03 и 3 , 04 и 4 |
2 вопроса:
1. необходимо в PHP-файл добавить строки. Нашел следующий способ: Section ClearErrors FileOpen $0 $INSTDIR\config.php a IfErrors done FileWrite $0 "$$CFG->dbtype = '$DBtype'" FileClose $0 done: SectionEnd Но в данном случае строки добавляются в начало файла сплошняком. Можно как то заставить его добавлять строки в конец файла, но не за пределами закрытия php-скрипта, т. е. перед "?>" ? 2. как добавить между строками разрыв (Enter)? Спасибо! |
DruOleg, Вам уже не мало примеров приводили на макросе LineFind
В справке по индексу LineFind - читайте и изучайте Цитата:
Код:
Function Replace Цитата:
Код:
;--- Цитата:
$\r - переместить каретку на начало строки $\n$\r - переместить каретку на начало новой строки $\t - знак табуляции, клавиша <Tab> |
Kotkovets, посоветуй, пожалуйста, по следующим вопросам.
Для страниц инсталлятора я использую .ini файл с настройками элементов на странице. Я нашел решение типа, где поля создаются напрямую в функции: ${NSD_CreateText} 0 20u 100% 15u "Здесь можно печатать..." Pop $Text ${NSD_OnChange} $Text fnTextChange Вопрос 1: как я могу присоединить функцию к событию элемента в моем случае !insertmacro MUI_INSTALLOPTIONS_WRITE "ProgramPath.ini" "Field 2" "Flag" "DISABLED" - этот код почему то не делает не активным текстовое поле. Вопрос 2: как изменить активность элемента? У меня не получается прописать путь по умолчанию в текстовое поле кодом в функции страницы: !insertmacro MUI_INSTALLOPTIONS_WRITE "ProgramPath.ini" "Field 1" "State" "C:\ProgramFolder" Вопрос 3: как прописать текст в текстовое поле до отображения страницы? Код скрипта в скрытом тексте |
Цитата:
Цитата:
|
в MUI2 определение элементов и их положение возможно только способом указания кода их создания в функция скрипта?
Или есть способ накидать элементы в визуальном дизайнере? Для MUI я использовал nisedit |
Цитата:
Тем более посмотрите предыдущие странички темы этак 20 - 30 страниц - я много приводил примеров создания страничек на MUI2 Цитата:
|
Парень из Словакии (под ником Slappy) создал плагин для "HM NIS Edit", позволяющий создавать дизайн окон инсталлятора NSIS как в InnoSetup. Назвал он свое творение "Graphical Installer " и распространяет за деньги. Ориентирование плагина - создание красочных инсталляторов для игрушек. Кто-нибудь уже испытывал это чудо?
Он пишет, что этого результата можно добиться и без его дополнения. Я хотел спросить здесь у опытных NSIS-ишников (я только начал знакомиться с этим установщиком) - это действительно возможно? Просто дайте мне направление, на что обратить внимание (какие плагины или модули использовать), а я уже буду дальше сам разбираться. Как говорится, зачем платить. Может у кого здесь уже есть наработки в этом направлении, будет приятно с ними познакомиться и разобрать ко косточкам. |
Я сам спрашивал по этой теме, но пока не получил ответ, брал основу с Wansis plug-in.
Или вот этот пример я перевёл, демонстрация NSIS плагина Wansis.dll . Есть такой SkinCrafter plug-in, пример его использования описан в Справочнике по NSIS, плагин красивый но совершенно бесполезен для компактных пакетов. Можешь попробовать UltraModernUI или SkinnedControls plug-in ButtonEvent plug-in nsDialogs_setImageOle.nsh или заполнение картинкой Image in installer window background вот я спрашивал по использованию этой картинки по этой же теме |
Flix,
Цитата:
Скины в ней тоже можно свои клепать, насколько я помню... |
sawe, MaGoth - спасибо, что отозвались. Теперь буду изучать матчасть.
|
Уважаемый kotkovets, может быть Вы дадите точную интерпретацию таким строкам из скрипта AIMP:
StrCpy $ClassName "AIMP.${extenstion}" StrCmp ${extenstion} "AUDIOCD" 0 noaudio WriteRegStr HKCR "${extenstion}" "" "$ClassName" DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${extenstion}\UserChoice" WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${extenstion}\UserChoice" "Progid" "$ClassName" noaudio: WriteRegStr HKCR ".${extenstion}" "" "$ClassName" Смущает вот, что : WriteRegStr HKCR "${extenstion}" "" "$ClassName" WriteRegStr HKCR ".${extenstion}" "" "$ClassName" Интуитивно я понял, что это связано с наличием расширения AUDIOCD, так? |
Цитата:
Код:
!macro RegisterExtension extenstion StrCmp ${extenstion} "AUDIOCD" 0 noaudio - если заданное расширение AUDIOCD, то по скрипту выполнить 3 команды, иначе перейти к метке noaudio (перепрыгнуть через три команды по скрипту). Цитата:
$ClassName -> равносильно AIMP.${extenstion} команда явно жежь указана - StrCpy $ClassName "AIMP.${extenstion}" . Просто сделано, чтобы покороче записывать в скрипте. Надеюсь понятно...если внимательно почитали и применили на практике |
Цитата:
WriteRegStr HKCR "${extenstion}" "" "$ClassName" WriteRegStr HKCR ".${extenstion}" "" "$ClassName" В первой строке нет точки перед ${extenstion} Во второй есть .${extenstion} Получается, что значение "$ClassName" меняется. Кстати, в скрипте KMPlayer так: StrCpy $ClassName "KMPlayer.${extenstion}" /* StrCmp ${extenstion} "AUDIOCD" 0 noaudio WriteRegStr HKCR "${extenstion}" "" "$ClassName" DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${extenstion}\UserChoice" WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${extenstion}\UserChoice" "Progid" "$ClassName" noaudio:*/ WriteRegStr HKCR ".${extenstion}" "" "$ClassName" То есть, если нет расширения AUDIOCD можно удалить эти строки? |
Цитата:
Код:
WriteRegStr HKCR "${extenstion}" "" "$ClassName" |
kotkovets,
На китайском сайте скачал скрипт для Winamp. Такая секция автозапуска дисков: Section "Автозапуск CD дисков" CDAUTORUN SectionIn 1 2 3 SetOutPath "$INSTDIR" ReadRegStr $0 HKCR "AudioCD\shell\play\command" "" StrCpy $1 $0 "" 14 StrCmp $1 'Winamp.exe" %1' +3 WriteRegStr HKCR "AudioCD\shell\play\command" "Winamp_Back" $0 WriteRegStr HKCR "AudioCD\shell\play\command" "" '"$INSTDIR\Winamp.exe" %1' SectionEnd В принципе работает, создает запись для восстановления. Но при деинсталляции не удаляется и не восстанавливается, при таких строках скрипта: ReadRegStr $R0 HKCR “AudioCD\shell\play\command” “Winamp_Back” ${IfThen} $R0 != “” ${|} WriteRegStr HKCR “AudioCD\shell\play\command” “” $R0 ${|} DeleteRegValue HKCR “AudioCD\shell\play\command” “Winamp_Back” Не пойму, вообще в чем дело. Может Вам сразу видно? |
Комментарии по командам
Цитата:
Здесь очевидно, получаем путь к Winamp.exe Цитата:
Пути разнообразные бывают, в итоге кашу получим. Для получения имени модуля делается так: Код:
!include "FileFunc.nsh" Цитата:
Если $R0 не равно пустому значению, тогда выполняем команду записи в реестр WriteRegStr HKCR "AudioCD\shell\play\command" "" $R0 - запись значения по умолчанию а дальше удаляется значение бэкапа реестра. |
Цитата:
После инсталляции Winamp http://s005.radikal.ru/i210/1106/9f/6e07a91f9a43.jpg После деинсталляции Winamp http://s46.radikal.ru/i112/1106/2f/89f3d66f8abe.png В секции удаления так: ReadRegStr $R0 HKCR “AudioCD\shell\play\command" "Winamp_Back" ${IfThen} $R0 != "" ${|} WriteRegStr HKCR “AudioCD\shell\play\command" "" $R0 ${|} DeleteRegValue HKCR "AudioCD\shell\play\command" "Winamp_Back" |
Вложений: 1
Просмотрев на офф. сайте плагины которые работают с процессами, для себя посчитал наиболее удачный и даже лучший nsProcess.
Но ни один из них не умеет завершать оболочку системы, с ошибками работают в WIN7 и т.д Решил написать свой плагин, за основу взял вышеупомянутый плагин... В общем долго "мучил" свой проект. И вот что получилось: --- Плагин предназначен для ANSI версии NSIS, кроссплатформенный (х86/x64), только для систем Windows NT начиная от Win2000 и выше. Никаких дополнительных приложений, библиотек не требуется. Плагин полностью идентичен по функционалу стандартного диспетчера задач. (использованы не документированные функции Win API) 1. Поиск запущенного процесса 2. Запись в файл *.ini список процессов с идентификаторами 3. Получение полного пути запущенного процесса 4. Получение полного пути и командной строки запущенного процесса Если запущеный процесс не имеет аргументов командной строки, то получаем путь к процессу. Работает эта функция только с 32-битными процессами. Достойного рещения для 64-битных процессов пока не нашел. 5. Перезапуск с аргументами командной строки запущенного процесса. Перезапуск делается с задержкой в одну секунду. Естественно кроме, специфических процессов (служб и т.д). 64-битные процессы будут перезапущены без аргументов командной строки. Я категорически не рекомендую делать перезапуск системных процессов !!! Во избежания потерь данных и получения "синих" экранов смерти !!!! 6. Завершение процесса Я категорически не рекомендую "прибивать" системные процессы !!! Во избежания потерь данных и получения "синих" экранов смерти !!!! |
kotkovets,
Ну Вы мне то подскажите, что у меня не так: ReadRegStr $R0 HKCR “AudioCD\shell\play\command" "Winamp_Back" ${IfThen} $R0 != "" ${|} WriteRegStr HKCR “AudioCD\shell\play\command" "" $R0 ${|} DeleteRegValue HKCR "AudioCD\shell\play\command" "Winamp_Back" |
kotkovets,
Получилось сделать удаление записи Winamp , а восстановление не получается. ReadRegStr $0 HKCR "AudioCD\shell\play\command" "" StrCmp $0 "$\"$PROGRAMFILES\Winamp\Winamp.exe$\" %1" 0 +2 DeleteRegValue HKCR "AudioCD\shell\play\command" "" |
Цитата:
че тут думать, если $0 не равно "$\"$PROGRAMFILES\Winamp\Winamp.exe$\" %1", то пропустить ниже две команды относительно оператора StrCmp, иначе выполнить две команды Код:
ReadRegStr $0 HKCR "AudioCD\shell\play\command" "" или сделайте логическую конструкцию операторами лексиграфического сравнения. |
Цитата:
ReadRegStr $R0 HKCR “AudioCD\shell\play\command" "Winamp_Back" ${IfThen} $R0 != "" ${|} WriteRegStr HKCR “AudioCD\shell\play\command" "" $R0 ${|} DeleteRegValue HKCR "AudioCD\shell\play\command" "Winamp_Back" |
Можно ли, создать кустомную страницу используя nsDialog для отображения страницы СтартМеню,
или альтернативный метод без использования плагина StartMenu.dll. |
можно на основе этих примеров: http://nsis.sourceforge.net/Header_file_for_Listview
Естественно нужно попотеть, изучить парочку функций WinApi |
А более упрощённую, в одну линию, где только будет
${NSD_CreateDirRequest} и ${NSD_CreateBrowseButton} |
Здравствуйте! помогите пожалуйста.
необходимо реализовать диалоговое окно в котором нужно указать фаил и скопировать его в дальнейшем в путь установки. Если уже обсуждалось извиняюсь не нашел( сам не совсем понимаю как вызвать диалог выбора файла.. с остальным в принципе понятно |
Цитата:
Код:
!include MUI.nsh ; интерфейс MUI2.nsh не катит! |
Добрый день.
У меня возникло пара вопросов, ответьте пожалуйста: 1) Как предотвратить повторный запуск инсталлятора? (без плагинов и прочего) 2) Как сделать, чтоб файлы после инсталляции, были с атрибутами скрытый и системный? ps в другом инсталляторе ставил атрибуты, а потом собирал инсталлятор и атрибуты сохранялись. а в этом так не получается. 3) Как можно добиться максимального сжатия? может есть какой то плагин позволяющий очень сильно сжимать? Или можно как то сжимать файлы несколько раз? ps winrar сильнее сжимает. pss в nsis'e ставлю максимальное... но всё равно не сильно жмет Спасибо! |
Копаюсь с функцией InstallFolderInternal из любимого VLC.
И вот, что интересно: Var UninstallLog !macro OpenUninstallLog FileOpen $UninstallLog "$INSTDIR\uninstall.log" a FileSeek $UninstallLog 0 END !macroend !macro CloseUninstallLog FileClose $UninstallLog SetFileAttributes "$INSTDIR\uninstall.log" HIDDEN !macroend !macro InstallFile FILEREGEX File "${FILEREGEX}" !define Index 'Line${__LINE__}' FindFirst $0 $1 "$INSTDIR\${FILEREGEX}" StrCmp $0 "" "${Index}-End" "${Index}-Loop:" StrCmp $1 "" "${Index}-End" FileWrite $UninstallLog "$1$\r$\n" FindNext $0 $1 Goto "${Index}-Loop" "${Index}-End:" !undef Index !macroend ; !macro InstallFolder FOLDER File /r "${FOLDER}" Push "${FOLDER}" Call InstallFolderInternal !macroend ; Function InstallFolderInternal Pop $9 !define Index 'Line${__LINE__}' FindFirst $0 $1 "$INSTDIR\$9\*" StrCmp $0 "" "${Index}-End" "${Index}-Loop:" StrCmp $1 "" "${Index}-End" StrCmp $1 "." "${Index}-Next" StrCmp $1 ".." "${Index}-Next" IfFileExists "$9\$1\*" 0 "${Index}-Write" Push $0 Push $9 Push "$9\$1" Call InstallFolderInternal Pop $9 Pop $0 Goto "${Index}-Next" "${Index}-Write:" FileWrite $UninstallLog "$9\$1$\r$\n" "${Index}-Next:" FindNext $0 $1 Goto "${Index}-Loop" "${Index}-End:" !undef Index FunctionEnd ; Section "!${PRODUCT_NAME}" Install SectionIn 1 2 3 RO SetShellVarContext all SetOutPath "$INSTDIR" !insertmacro OpenUninstallLog ЕСЛИ файл скрипта лежит в одной директории с файлами установки и при этом прописать так: !insertmacro InstallFile vlc.exe !insertmacro InstallFile vlc.exe.manifest !insertmacro InstallFile libvlc.dll !insertmacro InstallFile libvlc.dll.manifest То при установке устанавливаемые файлы в логе UninstallLog прописываются . А, если файл скрипта поместить в другую папку и прописать пути к файлам: !insertmacro InstallFile "${FILEPATH}\vlc\vlc.exe" !insertmacro InstallFile "${FILEPATH}\vlc\vlc.exe.manifest" !insertmacro InstallFile "${FILEPATH}\vlc\libvlc.dll" !insertmacro InstallFile "${FILEPATH}\vlc\libvlc.dll.manifest" То инсталляция происходит нормально, но списка файлов в UninstallLog нет В чем дело не пойму .... Может кто знает в чем заковырка? |
Tankan
1. Можно сделать так: 3. Для NSIS есть плагин для распаковки 7z архивов, используй его. Так же могу скинуть плагин для распаковки FreArc архивов. |
sawe,
Спасибо! то что нужно! |
Цитата:
или он в какую переменную передается? |
Krinkels,
1. Как так? конкретный код дай, который мне можно встатвить в свой. 2. По этому вопросу что скажите? Как установить атрибуты на файлы, чтоб извлекались и билы скрытие и системные. 3. А при чем тут распаковка? если мне нужна упаковка с сильным скажитем. Возможно даже, что сжимать несколько раз, чтоб добиться меньшего размера инсталлятора. Пожалуйства ответьте, кто хорошо понимает в nsis, как можно сдлать этакое. |
Цитата:
|
Цитата:
Код:
NORMAL или FILE_ATTRIBUTE_NORMAL (или просто 0) Код:
SetFileAttributes "$INSTDIR\имя_файл.exe" ARCHIVE|HIDDEN|SYSTEM|READONLY Цитата:
Код:
SetCompressor /FINAL /SOLID lzma Код:
!define HAVE_UPX Я в таких случаях использую 7-Zip архиватор, попробуй мою сборку этого архиватора Zip 9.22 с последним SFX или с сайта автора SFX. NSIS имеет ограничение на файл размером более 2GB, и при большом размере файла инсталлятора иконка не видна, поэтому лучше прикреплять большие файлы, и что бы сильно не мудрить, можно использовать такой код: Код:
Copyfiles /SILENT "$EXEDIR\Имя_файла.exe" "$INSTDIR\Имя_файла.exe" # паравозик! -- |
sawe, Спасибо я вчера еще разобрался.. то что вы мне первый раз написали оказалось достаточным чтобы начать понимать как это работает.
|
Цитата:
|
Цитата:
Цитата:
Цитата:
Код:
SetCompressor /SOLID LZMA |
Цитата:
Сначала пропал куда-то, тут резко появился, как дед мороз с подарками, и все довольны. Я такого подарка, даже не ожидал, спасибо будем доводить по месту. Вот если бы помог разобраться с 1cd theme. На форуме WinAmp тоже не совсем разобрались с этим, посоветовали две короткие строки добавить, но оно не срабатывает. |
sawe,
Я скинами не занимаюсь, но думаю, что проблема в плагине и в ресурсах диалога NSIS - не очень дружат, то они. К тому же плагин требует отключения стиля - вот это ни в какие ворота не лезет! к разрабу плагина обратитесь... |
Я пытался, но они полностью переключились на ExperienceUI, мне не очень-то нравиться скино-творение, но для классического, как мне кажется просто необходимо. Wansis мне понравился из за самого маленького размера и простой реализации.
|
Цитата:
При таком изменении начинает работать но не удаляет папку: --- |
Цитата:
Цитата:
!define PROGRAMS "Test ListView" - ${PROGRAMS} -> значение меняем на нужное название --- ${NSD_SetText} $Text "$STARTMENUFOLDER\${PROGRAMS}" ; кидаем текст в поле ввода на выходе получаем: $STARTMENUFOLDER = $STARTMENUFOLDER\${PROGRAMS} т.е достаточно: CreateDirectory "$SMPROGRAMS\$StartMenuFolder CreateShortCut "$SMPROGRAMS\$StartMenuFolder\link.lnk" "$INSTDIR\*.exe" "" "$INSTDIR\*.exe" 0 --- Зачем усложнять самого себя еще больше... Если чебокс отмечен - ничего не будет создаваться. Все работает, создаются папки и ярлыки - сделано по аналогии с стандартным плагином |
NSIS. Установка IIS.
Вложений: 1
Друзья, помогите пожалуйста.
Мне необходимо установить IIS инсталятором NSIS. Я пытаюсь выполнять соответствующую команду при помощи ExecCmd::exec. Соответсвующий плагин установлен. Одна из секций инстолятора имеет следующий вид Section "IIS" IISSection ExecCmd::exec /TIMEOUT=10000 '"start /w pkgmgr /iu:IIS-WebServerRole;IIS-WebServer;IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-HttpRedirect;IIS-ApplicationDevelopment;IIS-ASPNET;IIS-NetFxExtensibility;IIS-ISAPIExtensions;IIS-ISAPIFilter;"' SectionEnd При установки появляется сообщение об ошибке (см. прикрепленный файл) Windows Package Manager Operation failed with 0x8007000B An attemt to make a program with an incorrect format. Подскажите пожалуйста что я делаю не так! Через командную строку команда успешно выполняется и все нужные компоненты IIS устанавливаются. |
Eneten, покажите содержимое батника
|
kotkovets, батника нет!
Есть одна команда которую я хочу вызвать start /w pkgmgr /iu:IIS-WebServerRole;IIS-WebServer;IIS-CommonHttpFeatures;IIS-StaticContent;IIS-DefaultDocument;IIS-DirectoryBrowsing;IIS-HttpErrors;IIS-HttpRedirect;IIS-ApplicationDevelopment;IIS-ASPNET;IIS-NetFxExtensibility;IIS-ISAPIExtensions;IIS-ISAPIFilter; |
Подскажите пожалуйста, как мне сделать регистрацию таких файлов
в скрипте. делаю свой кодек пак |
Цитата:
Код:
RegDll "путь\ac3filter.ax" Код:
ExecWait '$SYSDIR\RegSvr32.exe /s "путь\ac3filter.ax"' Код:
UnRegDll "путь\ac3filter.ax" Код:
ExecWait '$SYSDIR\RegSvr32.exe /s /u "путь\ac3filter.ax"' |
начитавшись, я правильно понял, что невозможно "выдрать" скрипт из инсталлятора ?
|
sk07, да, правильно
|
Не могу разобраться с логикой.
В случае повторной установки (поверх), нужно что бы один файл не переписывался заново и тем более не удалялся, а сохранялся под новым именем. Что то вроде этого, но не могу понять, как взять именно последнюю цифру -- |
Если точно знаете, что число будет с одной цифрой, могу предложить самый быстрый и простой вариант
Код:
StrCpy $0 "Russian_old_2.xml" "" -5 |
Цитата:
Код:
StrCpy $0 Russian_old_1.xml 1 -5 Цитата:
Цитата:
|
При каждой последующей установке, что бы последняя (старшая) цифра увеличивалась на +1
IntOp $0 $0 + 1 ;прибавляет 1 Как определить последнюю 1,2,3,4,5.....9 цифру, пускай будет один разряд. Код:
= $0 > $0 |
Цитата:
Код:
OutFile "setup.exe" |
Спасибо, что откликнулись!
kotkovets Не совсем то, пример работает только с одним файлом, старые не сохраняет, но мысль понятна, остальное сам доведу. И ещё один вопрос, используя MUI2 - nsDialog, уже в готовом и отлаженом скрипте, что бы его не уродовать, хотелось бы простым способом заглушить CheckBox. Что бы CheckBox был отмечен, и пользователь не мог выбрать действие. В InstallOptions это легко реализуется установкой флага, в nsDialog это намного сложнее. |
Цитата:
InstallOptions - устаревшая вещь, nsDialogs намного больше возможностей, а если еще в паре с system.dll, можно делать почти всё - средствами Win API Код:
OutFile "winreview.exe" |
Уважаемый kotkovets, пытаюсь осваивать, что нибудь более сложное, чем скрипт регистрации ассоциаций от AIMP. В справке нашел такие варианты:
1. !macro APP_ASSOCIATE EXT FILECLASS DESCRIPTION ICON COMMANDTEXT COMMAND ; Backup the previously associated file class ReadRegStr $R0 HKCR ".${EXT}" "" WriteRegStr HKCR ".${EXT}" "${FILECLASS}_backup" "$R0" WriteRegStr HKCR ".${EXT}" "" "${FILECLASS}" WriteRegStr HKCR "${FILECLASS}" "" `${DESCRIPTION}` WriteRegStr HKCR "${FILECLASS}\DefaultIcon" "" `${ICON}` WriteRegStr HKCR "${FILECLASS}\shell" "" "open" WriteRegStr HKCR "${FILECLASS}\shell\open" "" `${COMMANDTEXT}` WriteRegStr HKCR "${FILECLASS}\shell\open\command" "" `${COMMAND}` !macroend 2. !macro APP_ASSOCIATE_EX EXT FILECLASS DESCRIPTION ICON VERB DEFAULTVERB SHELLNEW COMMANDTEXT COMMAND ; Backup the previously associated file class ReadRegStr $R0 HKCR ".${EXT}" "" WriteRegStr HKCR ".${EXT}" "${FILECLASS}_backup" "$R0" WriteRegStr HKCR ".${EXT}" "" "${FILECLASS}" StrCmp "${SHELLNEW}" "0" +2 WriteRegStr HKCR ".${EXT}\ShellNew" "NullFile" "" WriteRegStr HKCR "${FILECLASS}" "" `${DESCRIPTION}` WriteRegStr HKCR "${FILECLASS}\DefaultIcon" "" `${ICON}` WriteRegStr HKCR "${FILECLASS}\shell" "" `${DEFAULTVERB}` WriteRegStr HKCR "${FILECLASS}\shell\${VERB}" "" `${COMMANDTEXT}` WriteRegStr HKCR "${FILECLASS}\shell\${VERB}\command" "" `${COMMAND}` !macroend 3. !macro RegisterExtension_ !verbose push !verbose ${_FileAssociation_VERBOSE} Exch $R2 ;exe Exch Exch $R1 ;ext Exch Exch 2 Exch $R0 ;desc Exch 2 Push $0 Push $1 ReadRegStr $1 HKCR $R1 "" ; read current file association StrCmp "$1" "" NoBackup ; is it empty StrCmp "$1" "$R0" NoBackup ; is it our own WriteRegStr HKCR $R1 "backup_val" "$1" ; backup current value NoBackup: WriteRegStr HKCR $R1 "" "$R0" ; set our file association ReadRegStr $0 HKCR $R0 "" StrCmp $0 "" 0 Skip WriteRegStr HKCR "$R0" "" "$R0" WriteRegStr HKCR "$R0\shell" "" "open" WriteRegStr HKCR "$R0\DefaultIcon" "" "$R2,0" Skip: WriteRegStr HKCR "$R0\shell\open\command" "" '"$R2" "%1"' WriteRegStr HKCR "$R0\shell\edit" "" "Edit $R0" WriteRegStr HKCR "$R0\shell\edit\command" "" '"$R2" "%1"' Pop $1 Pop $0 Pop $R2 Pop $R1 Pop $R0 !verbose pop !macroend Не могу разобраться какой лучше, и как его использовать в контексте работы с секциями. Помогите, плиз. И почему согласно макросам нужно использовать именно HKCR , а не HKLM? |
Цитата:
На диске Registry хранится не в одном большом, а в нескольких отдельных файлах, называемых «ульями» (hive). Каждый улей содержит одну древовидную структуру Registry, имеющую свой корневой ключ (т. е. вершину дерева). HKEY_CLASSES_ROOT Символьная ссылка на ключ HKEY_LOCAL_MACHINE\SOFTWARE\Classes. HKEY_LOCAL_MACHINE Временный ключ, не имеющий соответствующего физического улья. Объединяет корневые ключи различных ульев |
Цитата:
Цитата:
Код:
!macro название [аргумент] [аргумент 1] Код:
!insertmacro название [аргумент] [аргумент 1] Код:
#!insertmacro AssocExtension "расширение" "класс расширения" "путь к приложению" "индекс иконки" Цитата:
Создание своего инсталлятора на NSIS. Ассоциации файлов. Макросы wolkow70, Вы когда научитесь использововать теги, скрипт выделяете и жмете # Больше такое читать больше не буду, пока тегами не научитесь пользоваться |
Цитата:
-- |
sawe, редирект тут совершенно не нужен
|
Цитата:
Ps. В скрипте AIMP, который выложен тут на форуме тоже HKCR используется. Код:
StrCpy $ClassName "AIMP.${extenstion}" |
Уважаемый, kotkovets, почитал вашу статью про макрос. Вот, что написано:
целесообразно создавать структуру ассоциаций файлов либо в ветке реестра HKEY_LOCAL_MACHINE\Software\Classes, либо в HKEY_CURRENT_USER\Software\Classes, причем последняя имеет приоритет, и при построении представления HKEY_CLASSES_ROOT будет иметь приоритет над HKEY_LOCAL_MACHINE. При этом, приходилось, читать в литературе, что внесение записей непосредственно в HKEY_CLASSES_ROOT приоритетно над обоими ветками.. В связи с этим возник вопрос : не лишено ли смысла вносить записи одновременно в HKLM и в HKCR, если привести макрос к такому виду (упрощенно) ? Код:
!macro RegisterExtension extenstion |
Цитата:
Цитата:
Имеет смысл, явно утверждать не буду, создавать одновременно записи в HKLM "Software\Classes" и в HKСU "Software\Classes", попробуйте... |
Товарищи, подскажите пожалуйста , я правильно делаю?
Скачал плагин UAC plug-in Файл UAC.nsh скопировал в папку Include. Файл UAC.dll скопировал в папку Plugins Создал папку Unicode Файл UAC.nsh еще скопировал в папку Unicode\Include. Файл UAC.dll (U) скопировал в папку Unicode\Plugins. В скрипте прописал: !include UAC.nsh Код:
Function .OnInit Этого достаточно, что бы устанавливать программу на Win7 для любого пользователя? |
прописываю строку
Delete "$APPDATA\Photodex\ProShow Producer\def.dat" но этот файл остается, не удаляется! может еще есть какие-то методы удалить его?.. |
Прочитал, что еще нужно прописать:
Function .OnInstFailed UAC::Unload FunctionEnd Function .OnInstSuccess UAC::Unload FunctionEnd И сопутствующие функции деинсталляции. Вот еще проблема, у меня уже есть в скпипте Function .OnInit Как правильно в этом случае объединить функции? |
Цитата:
user - запрашивает права текущего пользователя без административных привилегий. highest - требует самый высокий уровень выполнения, доступный для текущего пользователя. admin - требует привелегии администратора. В справочнике NSIS все это есть Цитата:
UAC::Unload - выгружает библиотеку из памяти. Значит достаточно, прописать в функции .onGUIEnd - выполняется при закрытии инсталлятора и больше нигде. А по сути сама винда умеет выгружать из памяти библиотеки Код:
Function .onGUIEnd Цитата:
Цитата:
Delete /REBOOTOK "$APPDATA\Photodex\ProShow Producer\def.dat" |
kotkovets,
Хорошо, тогда скажите, что отразить в скрипте, что бы программа без запроса со стороны UAC ставилась с правами администратора? RequestExecutionLevel admin? UAC.nsh вообще имеет смысл применять? Или я не понял смысла этого плагина. Есть еще старый макрос IsUserAdmin.nsh Вопрос возник в связи с необходимостью тихой установки некоторого числа программ в автоматическом режиме через WPI. Цитата:
Здесь интересная статейка и полемика на эту тему: http://sundest.blogspot.com/2007/04/nsis-vista.html Тут тоже интересно: http://begemotov.net/creator/sharewa...vistoy-c-nsis/ А во вложении оргинальный скрипт VLC в последней редакции с применением UAC |
Цитата:
RequestExecutionLevel admin без плагина, у юзера будет спрошено - что бы он имел такие админские права на установку, если дать права админа юзеру (если он не имеет админских прав), то настройки программы лягут в профиль админа, а не юзера, а если пользователь имеет права админа - то все нормально. примерно так :) |
Спасибо.
Тут мучаюсь с удалением ассоциаций на Windows7. Прописывается: HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.asf" "Progid" "KMPlayer.asf" В макросе де-регистрации пишу: ReadRegStr $0 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}" "Progid" "" StrCmp $0 $ClassName 0 +2 DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}" "Progid" "" Ошибка компиляции в результате... А в UserChoice все нормально удаляется. ReadRegStr $0 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" "" StrCmp $0 $ClassName 0 +2 DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" |
Поскольку вы используете только тихий режим Function .OnInstFailed можно не использовать.
Код:
Function .OnInstFailed # сообщение при нажатии кнопки Отмена --! Function .onInit и если вставили Function un.onInit Если вы его не выгрузите, то в дисптечере задач он останется. И самое неприятное, существует несколько версий UAC v0.0.11d - v0.2.2d - v0.2.2c и ещё юникоде, которые немного отличаются между собой. Команды и функции те же, но реализация немного другая. -- |
Вложений: 1
Цитата:
Цитата:
Я выдернул новые файлы из нового комплекта сборки VLC Player. C ними инсталлятор собрался. В чем дело не понятно. При этом в скрипте ничего не менялось. Во вложении модернизированные файлы, версию не знаю. |
Цитата:
Код:
Function .onInit # сообщение в начале установки --! Это пример для UAC v0.0.11d, но нужно заменить UAC.dll и в инклуды данной версии, 100% рабочий для RequestExecutionLevel user Код:
Function .onInit # сообщение в начале установки --! Цитата:
|
sawe,
Слелал по вашему варианту с UAC_v0.2.2d. Не компилируется. Function: ".OnInit" Invalid command: UAC::RunElevated Error in script "D:\NSIS\kmplayer-new.nsi" on line 107 -- aborting creation process Такое впечатление, что он плагина не видит. Если добавляю : Function .OnInstFailed UAC::Unload ;Must call unload! FunctionEnd ; Function .OnInstSuccess UAC::Unload ;Must call unload! FunctionEnd то показывает: Function: ".OnInstFailed" Invalid command: UAC::Unload Error in script "D:\NSIS\kmplayer-new.nsi" on line 95 -- aborting creation process И еще, что бы это значило (из справки): This plugin has been tested under the following environments: Windows 7 - UAC On - Administrator Windows Vista - UAC On - Administrator Windows Vista - UAC Off - Administrator Windows Vista - UAC On - Standard User - User supplies administrator info into the UAC dialog Windows Vista - UAC On - Standard User - User does not supply administrator info into the UAC dialog Windows Vista - UAC Off - Standard User - User supplies administrator info into the Run As dialog Windows Vista - UAC Off - Standard User - User does not supply administrator info into the Run As dialog |
wolkow70, подключите хедер UAC.nsh к скрипту (он парсит функции, а не компилятор) и используете макросы из этого хедера.
Для юникодной версии NSIS берем плагин из папки U Для ANSI версии NSIS берем плагин из папки A Как определить юникод или анси, скомпильте: Код:
!ifdef NSIS_UNICODE |
kotkovets, У меня же прописано в скрипте:
RequestExecutionLevel user !include UAC.nsh А анси или уникод без разницы, я методом перебора пробовал. Все одно и тоже. |
Скомпилил так:
OutFile "test.exe" !include LogicLib.nsh Section "test" !ifdef NSIS_UNICODE MessageBox MB_ICONINFORMATION|MB_OK "NSIS_UNICODE" IDOK !else MessageBox MB_ICONINFORMATION|MB_OK "NSIS_ANSI" IDOK !endif SectionEnd Результат NSIS_ANSI |
Цитата:
Может проблема в том, что у меня функция имеет такой вид: Код:
Function .OnInit |
wolkow70, я же вам писал:
Цитата:
Код:
UAC_Elevate: т.е вместо UAC_Elevate: нужно !insertmacro UAC_RunElevated Ну в примере же прописано четко и он работает! а у вас нет...)) |
Цитата:
Цитата:
Ладно, буду макросы раскуривать, может разберусь... |
Цитата:
Только, пришлось при этом удалить: Function .OnInstFailed UAC::Unload ;Must call unload! FunctionEnd ; Function .OnInstSuccess UAC::Unload ;Must call unload! FunctionEnd Так как, показало, что недействительные комманды. А макросов таких я не нашел в хедере. И еще пришлось удалить Function ExecAppFile !insertmacro UAC_AsUser_ExecShell 'open' '$INSTDIR\KMPlayer.exe' '-firstrun' '$INSTDIR' '' FunctionEnd !insertmacro UAC_AsUser_ExecShell 'open' '$INSTDIR\KMPlayer.exe' '-firstrun' '$INSTDIR' '' Так как, вылазила ошибка: !insertmacro: end of _UAC_IncL Error: command goto not valid outside Section or Function Error in macro UAC_AsUser_ExecShell on macroline 2 Error in script "D:\NSIS\kmplayer-new.nsi" on line 99 -- aborting creation process |
Цитата:
Код:
!insertmacro UAC_AsUser_ExecShell "" "$INSTDIR\KMPlayer.exe" "-firstrun" "$INSTDIR" все расписано, а че вы не видите это загадка... |
kotkovets,
Если Вы зайдете на страницу http://nsis.sourceforge.net/UAC_plug-in то увидите, что я делал все точно так, как там написано. ; !insertmacro UAC_AsUser_ExecShell <Command> <File> <Parameters> <WorkingDir> <ShowWindow> !insertmacro UAC_AsUser_ExecShell 'open' '$INSTDIR\${APPFILE}' '-firstrun' '$INSTDIR' '' Where $INSTDIR\${APPFILE} is the path to the file you want to launch. If you use the MUI skin and have the installer launch the app for you, you will need to do a little more work. !define MUI_FINISHPAGE_RUN !define MUI_FINISHPAGE_RUN_FUNCTION ExecAppFile Function ExecAppFile !insertmacro UAC_AsUser_ExecShell 'open' '$INSTDIR\${APPFILE}' '-firstrun' '$INSTDIR' '' FunctionEnd И все остальное тоже строго по справке делаю, а оно не работает.. И Saw также приводил свой пример, как бы рабочий... |
PS.
Так тоже не пашет. Function: "ExecAppFile" !insertmacro: UAC_AsUser_ExecShell !insertmacro: macro "UAC_AsUser_ExecShell" requires 5 parameter(s), passed 4! Error in script "D:\NSIS\kmplayer-new.nsi" on line 96 -- aborting creation process |
В блоге, на который вы давали ссылку на чисто русском языке, буквально на пальцах, объяснены нюансы проблемы с user для UAC плагина.
В каждом Zip архиве этого плагина, есть описание и примеры, часть из которых задокументирована под конкретный случай. Советую вам сначала отложить ваш скрипт и поиграться с примерами UAC, проблемные места выводить в меседж. Также советую (если нету) создать новую учётную запись и под ней отлаживать UAC. может пригодиться. -- |
Цитата:
|
Если делаю так:
Function ExecAppFile !insertmacro UAC_AsUser_ExecShell "" "$INSTDIR\KMPlayer.exe" "-firstrun" "$INSTDIR" "" FunctionEnd ; !insertmacro UAC_AsUser_ExecShell "" "$INSTDIR\KMPlayer.exe" "-firstrun" "$INSTDIR" "" то ошибка такая: !insertmacro: end of _UAC_IncL Error: command goto not valid outside Section or Function Error in macro UAC_AsUser_ExecShell on macroline 2 Error in script "D:\NSIS\kmplayer-new.nsi" on line 102 -- aborting creation process Если делаю так: Function ExecAppFile !insertmacro UAC_AsUser_ExecShell "" "$INSTDIR\KMPlayer.exe" "-firstrun" "$INSTDIR" FunctionEnd ; !insertmacro UAC_AsUser_ExecShell "" "$INSTDIR\KMPlayer.exe" "-firstrun" "$INSTDIR" то ошибка такая: !insertmacro: UAC_AsUser_ExecShell !insertmacro: macro "UAC_AsUser_ExecShell" requires 5 parameter(s), passed 4! Error in script "D:\NSIS\kmplayer-new.nsi" on line 96 -- aborting creation process А что касается примеров, то там так: !insertmacro UAC_AsUser_ExecShell "" "calc.exe" "" "" "" И что я из этого примера должен уяснить? |
Подскажите пожалуйста на примере, каким образом запускать (устанавливать) и удалять сервисы (службы) с помощью
NSIS SERVICE LIBRARY — servicelib.nsh http://nsis.sourceforge.net/NSIS_Service_Lib ? Или, может лучше использовать для этого NSIS Simple Service Plugin http://nsis.sourceforge.net/NSIS_Simple_Service_Plugin ? |
Цитата:
Код:
; Задаваемые типы параметров: |
kotkovets,
В общем бросил я возиться с этим UAC. Спасибо Вам за то, что научили меня делать генератор ответов. В связи с этим у меня возник вопрос: [DIRECTORY] INSTALLDIR=Е:\Program Files\The KMPlayer [Sections] StartMenu=1 Desktop=1 QuickLaunch=1 Путь установки прописывается абсолютный. А буква диска может быть разной. Почему то не срабатывает механизм использования относительного пути в данном случае. У меня две системы на диске : С:\ Windows7 E:\ Windows XP Пробовал устанавливать сборку на обеих системах в автоматическом режиме. В обоих случаях распаковка идет в папку Е:\Program Files\The KMPlayer, хотя сама инсталляция производится в первом случае на Windows7. Сейчас еще раз просмотрел скрипт. Вроде не должно такого быть. Все, что нужно есть... Код:
!include "WordFunc.nsh" |
Цитата:
|
Цитата:
подобраться не дотягиваю. Или на этапе записи? WriteINIStr "$INIFILE" "DIRECTORY" "INSTALLDIR" "$INSTDIR" или на этапе чтения и интерпретации ReadINIStr "$R0" "$INIFILE" "DIRECTORY" "INSTALLDIR" ${WordReplace} $R0 "%programfiles%" "$PROGRAMFILES" "+" $R1 |
Цитата:
Код:
Function PREINSTFILES ;это функция будет выполнена только в режиме генератора В зависимости от SetShellVarContext current|all > %appdata% > возвращает путь к профилю текущего пользователя или всех пользователей. Для других системных переменных подумайте, есть в папке Examples скрипт WordFunc.nsi, где можно потренироваться c строковыми функциями подставляя свои значения строк и настроек парсирования строк. |
Цитата:
Цитата:
Ну впринципе, на страничке описания плагина всё расписано подробно...ничего сложного я думаю "[name_of_service]" указывается системное имя службы, как название раздела службы в реестре (не отображаемое) |
kotkovets,
Хочу посоветоваться по поводу известного нам макроса ассоциации файлов. Как известно Xp не видит HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${extenstion}\UserChoice" В тоже время некоторые программы ведут себя не грамотно и пописывают ассоциации в HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}" "Progid" "$ClassName" (например KMPlayer), что создает проблемы со сменой ассоциаций при установке других программ. Немного подумав сделал так в макросе: Код:
!macro RegisterExtension extenstion HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}" "Progid" "$ClassName", что бы затереть запись другой программы. На Cемерке и Viste такой проблемы нет, так как UserChoice имеет приоритет, а в ХР не присходит смена ассоциаций. Как Вы считаете разумно ли так поступить, или есть более красивое решение? |
wolkow70, да все правильно, че создавать ключ UserChoice в XP?(мое мнение), так как этот ключ предназначен для линейки NT6.x имеют такую функциональность, как "Программы по умолчанию"
А и WinXP - это линейка NT5.x А значит, только XP здесь не обойдешься, а у меня WinXp x64 еще - и по скрипту создаться ключ. Нужно так определять версию NT(без внешних плагинов): Код:
!include "WinVer.nsh" |
Цитата:
Затирая Progid установленной программы, затем удалив новую, мы не восстанавливаем прежних ассоциаций, и придется старую прогу переустанавливать.. или копаться с регистрацией типов из самой проги. Где нибудь можно почитать по бэкап для таких случаев? Да и в HKLM "SOFTWARE\Classes\.${extenstion}" "" "$ClassName" тоже бэкапить надо, если по уму все делать. |
Цитата:
Прямо в той же ветке следует создавать новый : WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "$ClassName_Bak" или "$ClassName_Undo" или как вам угодно, но понятно. WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}" "$ClassName_Bak" или "Progid_Bak" При деинсталляции прочитает из него, восстановит и удалится. |
Цитата:
|
Прошу помочь с IIS 6...
1. Необходимо создать "Виртуальный каталог" в существующем Веб-узле; (использовал ExecWait 'cscript "$SYSDIR\iisvdir.vbs" /Create "SiteName" moodle C:\moodle\web') 2. В свойствах созданного вирт-каталога установить "Разрешен запуск: Только сценарии"; (по умолчанию этот параметр выбран, но хотелось бы подстраховаться) 3. В свойствах созданного вирт-каталога установить "Задать страницу содержания по умолчанию" - index.php; 4. В свойствах сайта добавить сопоставление расширений: расширение - php; путь - "C:\Windows\system32\inetsrv\fcgiext.dll"; команды - "GET,POST,HEAD" (сократитьь до) Спасибо! |
kotkovets,
Цитата:
прописывается: DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" "Progid" "$ClassName" и не прописывается: WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}" "Progid" "$ClassName" ; ; Тут еще возникла идейка при установке на XP WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}" "Progid" "$ClassName" прописывать по выбору Пользователя. Пока сделал так: Section "Особые параметры сопоставления файлов" ProgID SectionIn 1 2 WriteINIStr "$temp\tmpfile.dat" "tmp" "execute_1" "1" SectionEnd В макросе: ReadINIStr $0 "$temp\tmpfile.dat" "tmp" "execute_1" StrCmp $0 "1" 0 +2 WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}" "Progid" "$ClassName" Может можно как то по другому без временного файла привязать комманду к значению определенной секции (более красиво)? |
Цитата:
Цитата:
Особенно про StrCpy - оператор присваивания... Код:
var ProgID |
Цитата:
Для win 7 это не имеет значения. Там это правило. А с приоритетом ставится через UserChoice. |
Товарищи, вопрос возник интересный.
Имею в скрипте такие секции: Код:
Section "Хранить настройки программы в реестре" Registry Section /o "Хранить настройки программы в INI файле" Ini Вопрос в связи с с этим возник такой: возможно ли включить секцию /o в полный тип установки, если она входит в функцию .onSelChange ? |
wolkow70,
1. А что мешает создать свою страничку с двумя радиобутонами? 2. И флаги выбора типа установки в этих секциях расставлять смысла нет, здесь выбор опциональный - захотел настройки в реестре или в ini файле. |
Цитата:
Цитата:
Дак, с одной страничкой не получится? |
|
Цитата:
http://s47.radikal.ru/i118/1107/4f/55619653d24f.png В ручную можно выбрать полный тип установки, но мне надо, что бы при запуске в окне выбора был полный тип установки. |
wolkow70, Я же Вам говорил опционально, это радиобутоны - "флаги видят", что секция какая-то не отмечена, в первоначальном состоянии, естественно они не могут расставить галки, макрос RadioButton "мешает" - не надо здесь крутить велосипеды! Здесь лучше рисовать свою страничку однозначно...
|
Цитата:
Благодаря помощи kotkovets удалось сделать некую стилизацию под установщик WinHex 16.0 SR-6 со скинами, используя в основном nsDialog. А этот TokPlayer 1.0.1135 x86 перевёл на русский язык, правда вышло не без казуса по поводу авторства. Но самое интересное в том, что родной инсталлятор на корейском, вот тут-то пригодились заказные странички. -- |
Цитата:
TokPlayer 1.0.1135 x86 поставил, а удалить не могу , зависает деинсталлятор. Ничего не удаляется, и ассоциации тоже в ручную удаляю. http://i027.radikal.ru/1107/8e/33a3f8012b10.png |
|
Цитата:
2. Я раньше и сидел на 7zsfx, но завязал с этим. В нем многое не реализуемо и убого. 3. Вы мне объясните куда программа прописывает регистрацию, я на NSIS сделаю инсталлятор с поддержкой /S. Чего-то я в реестре вообще не нашел ее записей. |
Цитата:
Какая программа? Проще скрипт с потрохами выложить, если интересно. |
Цитата:
|
Цитата:
Может поможет, ловите WinHex 16 SP6.7z -- |
Цитата:
|
Цитата:
Regshot silent.7z WinHex 16 SP6.7z Кстати, появилось уже WinHex 16.1 + Rus -- |
kotkovets,
Из Вашей справки Код:
$0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $R0 $R1 $R2 $R3 $R4 $R5 $R6 $R7 $R8 $R9 Еще вопросик: В макросе регистрации ассоциаций прописал: Код:
ReadRegStr $1 HKCR ".${extenstion}" "" В макросе де-регистрации ассоциаций прописал: Код:
StrCpy $ClassName "foobar2000.${extenstion}" |
Цитата:
$0-$9 как глобальные значения. |
Цитата:
Цитата:
Код:
Цитата:
$0 - $R9 -> это стандартные переменные, которые не нужно объявлять, это заложено на программном уровне компилятора NSIS, равно тому что и стек - только в отдельном пуле |
Цитата:
|
Цитата:
Но! не передадутся из секций инсталлятора в секции деиинсталлятора в скрипте. |
Цитата:
|
Цитата:
К примеру $INSTDIR, это значение определится в деинсталляторе как текущая папка местонахождения деинсталятора, это легко проверить - переместить в другое место деинсталлятор. Так как деинсталлятор разделяется на 2 процесса, то в переменную $EXEDIR возвратится путь второго процесса (_au.exe - точно не помню название процесса). |
Цитата:
|
sawe, Я не знаю как в предыдущих версиях, может наследие...
Местные регистры - означает, что эти переменные работают, только в пределах одной секции или функции - потом значение этих переменных уничтожается (как и в компиляторах си, делфи) глобальные значения - т.е эти переменые, значения можно использовать любой функцией или макросом в пределах установщика. Однако все значения этих переменных использовать можно любой функцией или любым макросом. |
Цитата:
|
Уважаемый kotkovets, не подскажите по какой причине может не компилироваться такой макрос дерегистрации:
Код:
!macro UnRegisterExtension extenstion StrCpy $ClassName "FastStone.TIFF" () () ReadRegStr $1 HKLM\SOFTWARE\Classes\.TIFF\ StrCmp "$1" "$ClassName" equal=0, nonequal=RestoreProgid DeleteRegValue: HKLM\SOFTWARE\Classes\.TIFF\ DeleteRegValue: HKLM\SOFTWARE\Classes\.TIFF\PerceivedType DeleteRegValue: HKLM\SOFTWARE\Classes\.TIFF\Content Type DeleteRegKey: HKLM\SOFTWARE\Classes\$ClassName ReadRegStr $1 HKLM\SOFTWARE\Classes\.TIFF\FastStone.bak WriteRegStr: HKLM\SOFTWARE\Classes\.TIFF\=$1 DeleteRegValue: HKLM\SOFTWARE\Classes\.TIFF\FastStone.bak Error: label "RestoreProgid:" already declared in section Error in macro UnRegisterExtension on macroline 15 Error in script "D:\NSIS\FastStoneView.nsi" on line 769 -- aborting creation process |
Цитата:
Здесь нужно применять условные переходы или логическую конструкцию. Код:
!include logiclib.nsh |
Спасибо за ответ. Пока я его ждал, еще попробовал сделать так:
Код:
!macro UnRegisterExtension extenstion И все таки не понятно почему безусловные переходы совпадают? Ведь дерегистрация каждого расширения вызывается отдельной коммандой: !insertmacro UnRegisterExtension "WMF" !insertmacro UnRegisterExtension "TIFF" !insertmacro UnRegisterExtension "TIF" !insertmacro UnRegisterExtension "TGA" Я так понимаю, что макрос каждый раз запускается снова для выполнения комманд, или во что-то не врубился? |
Цитата:
Цитата:
Цитата:
|
Цитата:
http://nsis.sourceforge.net/File_Association Код:
!macro UnRegisterExtension_ |
Цитата:
Вот вы попробуйе в FileAssociation.nsh заменить ${CallArtificialFunction} на !insertmacro и вы получите конфликт по именам переходов |
Цитата:
|
Цитата:
Код:
!macro RegisterExtensionSection EXT |
Цитата:
|
wolkow70,
Call - значит вызов функции на исполнение и не больше! |
Товарищи, подскажите как при удалении удалить программу из "открыть с помощью"
Пробовал так, не получается: ReadRegStr $2 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\OpenWithList" "" StrCmp $2 "FSViewer.exe" 0 +2 DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\OpenWithList" "" |
wolkow70, Вы сначала выясните, что помещается в $2, а удаляться будет значение ключа по умолчанию, только если $2 = FSViewer.exe, иначе нет!
смотрите значение параметра а ReadRegStr $2 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\OpenWithList" "a" |
Цитата:
|
wolkow70, только через перечисление значений ключей реестра, в этом здорово поможет мой макрос
http://forum.oszone.net/showpost.php?p=1658900 задаете маску удаления значений FSViewer.exe Код:
${DelRegValue} HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\OpenWithList" "FSViewer.exe" |
Цитата:
|
Цитата:
|
Цитата:
!include "DelRegKey.nsh" Ошибка: Код:
!insertmacro: _DelRegValue |
wolkow70, потому что нужно читать внимательно описание либы:
Для полноценной работы модуля требуется плагин Registry: http://nsis.sourceforge.net/Registry_plug-in |
Добрались руки....
--- Исправил ошибки в библиотеке DelRegKey.nsh 1. В макросе ${DelRegValue} исправил ошибку открытия корневого раздела HKCR и проблему удаления параметров ключей. 2. Оптимизировал поиск значений параметров ключей в ${DelRegValue} - поиск ведется только на строковые параметры: REG_SZ и REG_EXPAND_SZ. Это несколько ускоряет поиск значений параметров 3. Оптимизировал применение библиотеки в пользовательских макросах - был конфликт использования переменных ***** В окне деталей показываютя удаленные ключи, если в окне деталей ничего нет - значит идет поиск! Указывайте ветку реестра, насколько возможно точнее, это нужно для сокращения времени поиска, которое может длиться весьма продолжительное время! Подробнее P.S В общем это последнее изменение в библиотеке, так как для справочника готовлю библиотеку RegistryFunc.nsh - который полностью перекрывает возможности DelRegKey.nsh и избавлен от применения плагина Registry - фактически тот же функционал будет. Если нужны новые возможности для работы с реестром, которых нет у плагина - пишите на форум, обсудим! |
Мужики такой вопрос!!! nsis инсталятор может делать callback установки, что программа которая запускает установщик могла знать скока процентов установки завершенно ????
|
kotkovets,
Цитата:
Почему то наоборот на XP прописывается: DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" "Progid" "$ClassName" и не прописывается: WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}" "Progid" "$ClassName" |
Цитата:
Код:
IntCmp $0 5 ЕСЛИ_РАВНО ЕСЛИ_МЕНЬШЕ ЕСЛИ_БОЛЬШЕ |
Товарищи, подмогните еще в одном вопросе:
Сделал секцию Section /o "Un.Перезагрузка Проводника Windows" RestartExplorer SectionIn 1 ExecWait 'taskkill /F /IM explorer.exe' $0 DetailPrint "taskkill exit: [ $0 ]" Sleep 500 StrCmp $0 0 0 +2 Exec "explorer.exe" Delete "$INSTDIR\ShellEx\XnViewShellExt.dll" RMDir /r "$INSTDIR\ShellEx\" RMDir /r "$INSTDIR\" SectionEnd В секции Uninstall RMDir /r /REBOOTOK "$INSTDIR\" SetAutoClose true SectionEnd То есть выходит так, что, даже если выбрана секция RestartExplorer, и залоченный файл удаляется, то финиш-окно выводится с предложением произвести перезагрузку. Как бы сделать, что если выбрана секция RestartExplorer, то в секции Uninstall срабатывала комманда просто RMDir /r "$INSTDIR\", а если не выбрана, то RMDir /r /REBOOTOK "$INSTDIR\" |
Код:
Section /o "Un.Перезагрузка Проводника Windows" RestartExplorer |
K.A.V.,
Сделал по Вашему совету: Код:
StrCmp $RestartExplorerSectionChecked "1" 0 +3 |
Цитата:
Вы написали: Цитата:
Цитата:
|
Цитата:
Цитата:
А в случае, если секция RestartExplorer не выбрана, удаление идет обычным образом через предложение перезагрузки с применением значения /REBOOTOK. |
wolkow70, Если выполнилась команда /REBOOTOK, то устанавливается флаг перезагрузки, на этом можно построить логику на финишной странице, в зависимости от флага - чебокс на финише будет отмечен или не отмечен, либо скрывать контрол (чебокс) на финишной страничке, т.е логику выполнять когда финишная страница открыта.
В справочнике > стандартные функции - почитать. и команду IfRebootFlag ничего сверхсложного |
Цитата:
Дак ведь, при такой конструкции команда /REBOOTOK не должна быть выполнена, при отмеченной секции RestartExplorer, и соответтсвенно флагов перезагрузки не должно быть. Вот, что мне не понятно.. А реально, они появляются. Код:
Section Uninstall Uninstall |
Цитата:
|
Цитата:
В секцию Uninstall добавить проверку переменной... Код:
StrCmp $RestartExplorerSectionChecked "1" 0 reboot |
Цитата:
Окно выводится: http://i019.radikal.ru/1107/58/4a74168836a1.png Хотя в этот момент уже фактически нет ни папки ни залоченного файла в системе. В компиляторе показывается: unknown variable/constant "{Uninstall}" detected, ignoring (D:\NSIS\xnview.nsi:1109) unknown variable/constant "RestartExplorerSectionChecked" detected, ignoring (D:\NSIS\xnview.nsi:1523) Цитата:
http://s55.radikal.ru/i149/1107/83/d528c92dbfbf.png |
Цитата:
|
; Uninstaller pages
!insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_COMPONENTS !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ;!insertmacro MUI_UNPAGE_FINISH -закомментировал Прописал в Uninstall: IfRebootFlag 0 NotReboot MessageBox MB_ICONQUESTION|MB_YESNO "Перезагрузить компьютер ?" IDNO +2 #Reboot #команда перезагрузки NotReboot: MessageBox MB_OK "Перезагрузка отменена!" Вывело запрос на перезагрузку. Закомментировал: ;RMDir /r /REBOOTOK "$INSTDIR" ;SetRebootFlag true Вывело перезагрузка отменена. То есть это единственный флаг на перезагрузку. Задается, если StrCmp $RestartExplorerSectionChecked "1" 0 reboot Значит не прописывается значение: Var /Global RestartExplorerSectionChecked StrCpy $RestartExplorerSectionChecked 1 Может в Function un.onInit прописать чего? |
Цитата:
|
Цитата:
Такое еще ощущение, что в этом дело: StrCpy $RestartExplorerSectionChecked 1 Может 1 нужно в кавычки заключить? |
Цитата:
Код:
Var RestartExplorerSectionChecked Код:
!insertmacro MUI_UNPAGE_FINISH |
Прописал создание переменной в самое начало скрипта
Var RestartExplorerSectionChecked Section Uninstall Uninstall SectionIn 1 RO !insertmacro UninstallLib REGDLL NOTSHARED NOREBOOT_PROTECTED "$INSTDIR\ShellEx\XnViewShellExt.dll" --бла--- Call un.RefreshShellIcons ; StrCmp $RestartExplorerSectionChecked "1" 0 reboot RMDir /r "$INSTDIR" SetRebootFlag false goto done reboot: RMDir /r /REBOOTOK "$INSTDIR" SetRebootFlag true done: SetAutoClose true SectionEnd ; Section /o "Un.Перезагрузка Проводника Windows" RestartExplorer StrCpy $RestartExplorerSectionChecked 1 SectionIn 1 ExecWait 'taskkill /F /IM explorer.exe' $0 DetailPrint "taskkill exit: [ $0 ]" Sleep 500 StrCmp $0 0 0 +2 Exec "explorer.exe" Delete "$INSTDIR\ShellEx\XnViewShellExt.dll" RMDir /r "$INSTDIR\ShellEx\" RMDir /r "$INSTDIR\" SectionEnd И опять при деинсталляции вылазит окно с чебоксами перезагрузки. |
Код:
!insertmacro MUI_UNPAGE_FINISH Вот смотрите, стандартный код, который создаёт HM NIS Edit, работающий с моим описание |
Section "un.TEST"
#StrCpy $RestartExplorerSectionChecked 1 SectionEnd Почему у Вас закоментирована StrCpy $RestartExplorerSectionChecked 1 ? Впрочем, я пробовал запустить и с раскомментированной строкой. В обоих случаях финиш-страница предлагала перезагрузку.. Почему-то.. А если отказаться от "Показать, тогда без чебоксов. |
Цитата:
Там при деинсталляции задаётся вопрос "Показать?", если ответите "Да" - вам покажется страничка с выбором для перезагрузки, если нажмёте "Нет" - то не покажется Хотите сказать не работает? :o Почему тогда вот я сейчас сижу проверяю (и не раз проверял перед тем, как выложить этот пример сюда) и каждый раз у меня срабатывает, в зависимости от ответа? Или вам выложить готовый EXE файл? Значит у вас либо что-то в скрипте прописано, либо я не знаю...Выложите ваш скрипт полностью сюда, посмотрим |
Цитата:
|
Странно...
Т.к. в вашем скрипте много нестандартного, откомпилировать у себя я не могу, поэтому попробуйте заменить строки Код:
StrCmp $RestartExplorerSectionChecked "1" 0 reboot Код:
MessageBox MB_OK|MB_ICONINFORMATION "$$RestartExplorerSectionChecked = $RestartExplorerSectionChecked" |
Цитата:
http://s011.radikal.ru/i316/1107/a5/568134eb59fc.png Выяснил причину. В Вашем примере назначение значения производилось из секции деинсталляции и в этой же секции читалось. А у меня назначение значения идет из подсекции, а чтение в секции. В данном случае нарушается последовательность действий. Попробовал в скрипте поднять подсекцию над секцией и сообщение показало значение "1". Все отработало. Только выглядит это теперь в окне деинсталлятора неправильно (сначала подсекция, потом основная секция). |
wolkow70, проще, проще....
Код:
Section /o "Un.Перезагрузка Проводника Windows" RestartExplorer |
и все таки нашел грубую очепятку, да простите уж меня :) ...хвост после отладки скрипта остался,
и куча значений в стеке, довольно слабое место NSIS. Кто пользуется DelRegKey.nsh огромная просьба заменить, во избежание неприятных последствий.. http://forum.oszone.net/showpost.php?p=1658900 |
Цитата:
|
wolkow70, сделайте так
Код:
Section "Un.Перезагрузка Проводника Windows" RestartExplorer |
Цитата:
StrCpy $RestartExplorerSectionChecked 1 Ксати Ваш то вариант работает, если подсекцию поднять над секцией. Но не хочется этого делать. Или это предложение к последнему предложению kotkovets? |
|
wolkow70, смысл в том, что предложение о перезагрузке будет появляться только, когда флаг перезагрузки будет включен SetRebootFlag true, если выключен флаг, то SetRebootFlag false, то не будет предлагать перезагрузку.
Delete /REBOOTOK файл - включает флаг перезагрузки true. Эти флаги проверяются на финишной страничке. Поэтому здесь имеет смысл добавить функцию, которая будет выполняться после всех секций, но перед финишной страницой или во время выполнения финишной странички. В этой функции можно рулить командами удаления и флагами перезагрузки, состоянием отмеченных секций - таким образом можно не смещать расположение секций и в зависимости от состояния отмеченных секций - выполнять необходимые действия. |
K.A.V.,
Работает, но только в такой последовательности секций. если подсекцию RestartExplorer вернуть на место, то независимо от выбора финиш Page выводится без чебоксов, при значении RestartExplorerSectionChecked 1 Цитата:
|
Цитата:
!define MUI_PAGE_CUSTOMFUNCTION_SHOW SHOWFINISH - функция SHOWFINISH которая выполняется при показе финишной странички, в генераторе помещает надпись "Файл ответов готов" MUI_PAGE_CUSTOMFUNCTION_PRE function - перед любой указанной страничкой MUI_PAGE_CUSTOMFUNCTION_SHOW function - во время показа странички Читайте доки про модерн ..\Docs\Modern UI 2 вот такой способ.... Код:
!include "MUI2.nsh" |
Скорее всего нужно использовать Function un.onInit, которая перед запуском деинсталляции считывала бы флаги с секций и помещала их в переменные. Ав секциях уже производилась интерпретация.
Как этог сделать сам не знаю... |
Цитата:
|
wolkow70, Вот вы объясните на пальцах при каких условиях вам нужно на финише, предложение о перезагрузке?
|
Предложение о перезагрузке появляется в том случае, если программа удаляется стандартным способом, когда выгрузка из памяти и удаление залоченного файла производится при перезагрузке системы. Таких программ много, поэтому вопрос актуальный.
В тоже время, существует альтернативный способ, когда после деинсталляции собственно программы перезагружается проводник и удаляется залоченный файл без перезагрузки системы. Разумеется, в таком случае предложение о перезагрузке на финишной странице излишне. Сам то я об этом знаю, поэтому просто пропускаю перезагрузку. Но другие пользователи сборки могут не понимать механизма и делать ненужную уже перезагрузку. |
wolkow70, А почему бы не сделать, вот так, проверять в функции перед финишем , есть ли залоченный файл, то предложить о перезагрузке, а если нету файла, то не предлагать - это будет корректнее..
Код:
!include "MUI2.nsh" |
Цитата:
|
wolkow70, Все это делается в деинсталяторе, цель - удалить чисто, без остатков. При перезагрузке проводника не всегда удаляется залоченный файл - есть и другие причины, не раз с этим сталкивался, в секциях деинсталла команды удаления оставляйте как есть, ведь секции деинсталла выполняются раньше функции! Тем более, с /REBOOTOK - удалится при перезагрузке
"Предпоследняя" функция деисталла только проверит наличие залоченного файла и даст нужное предложение. Вот весь функционал - прост и незатейлив. |
kotkovets,
Протестировал несколько раз с установкой самой программы. ВСЕ РАБОТАЕТ ОТЛИЧНО! И на Windows7 тоже. Спасибо. В конечном виде так: !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_COMPONENTS !insertmacro MUI_UNPAGE_INSTFILES UninstPage custom un.INSTFILES_LEAVE !insertmacro MUI_UNPAGE_FINISH Section Uninstall Uninstall !insertmacro UninstallLib REGDLL NOTSHARED NOREBOOT_PROTECTED "$INSTDIR\ShellEx\XnViewShellExt.dll" ; ; RMDir /r /REBOOTOK "$INSTDIR\" SetAutoClose true SectionEnd ; Section /o "Un.Перезагрузка Проводника Windows" RestartExplorer SectionIn 1 ExecWait 'taskkill /F /IM explorer.exe' $0 DetailPrint "taskkill exit: [ $0 ]" Sleep 500 StrCmp $0 0 0 +2 Exec "explorer.exe" Delete "$INSTDIR\ShellEx\XnViewShellExt.dll" RMDir /r "$INSTDIR\ShellEx\" RMDir /r "$INSTDIR\" SectionEnd Function un.INSTFILES_LEAVE ${If} ${FileExists} "$INSTDIR\ShellEx\XnViewShellExt.dll" ;или папка т.е наличие папки SetRebootFlag true ;если есть файл, предлагать перезагрузку ${Else} SetRebootFlag false ;если нету файла, не предлагать перезагрузку ${EndIf} FunctionEnd |
Случайно вы не знаете, как скрыть от посторонних возможность просмотра содержимого инсталлятора, не прибегая к cript.DLL.
Антивирусники её не любят. |
sawe,
Через http://nsis.sourceforge.net/DcryptDll_plug-in "расшифровываем" указанные файлы Через утилиты в архиве NGenKeys.exe и Ncrypt.exe - во время компиляции проекта криптуем файлы (запуск препроцессором NSIS) - не раз такое делал и антивирусы, не замечал, что визжали... |
kotkovets,
Читаю вашу публикацию в справке DeleteRegKey (/ifempty) [root_key] [subkey] Удаляет раздел реестра subkey из ветки root_key. Если вызывается с параметром /ifempty, то удаление происходит только в том случае, если раздел пустой. Флаг ошибки будет установлен в том случае, если раздел не найден, или удаление невозможно. DeleteRegKey HKLM "Software\My Company\My Software" DeleteRegKey /ifempty HKLM "Software\A key that might have subkeys" Удалится ли ключ реестра, если ему не присвоено значение по умолчанию, но имеются подключи? Напрмер : HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.dib" "" HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.dib\UserChoice" "Progid" Мне надо, что бы только полностью пустые ключи удалялись.. |
Цитата:
если сравнивать с файловой структурой, то означает удалить пустую папку |
Товарищи, вопрос ламерский (извините):
Распаковались файлы в директорию установки. Предположим в папках 5.1 и 6.1 находятся файлы, которые должны быть скопированы (или перемещены) в Windows\system32 Если XP, то копируется (или перемещается) файл из папки 5.1. Если Vista или W7, то из папки 6.1. Там файлы с одинаковыми наименованиями , но разными версиями (под систему) Подскажите как рациональней реализовать? |
wolkow70, подключаем библиотеку для работы с различными версиями Windows
Код:
!include WinVer.nsh Код:
${If} ${AtMostWinXP} |
Господа, подскажите. Почему не работает команды makensis.exe /X"SetCompressor /FINAL lzma" myscript.nsi и makensis.exe myscript.nsi. Пишет makensis.exe не являеться внутренней или внешней командой . Подскажите правильную реализацию ?
|
Painkiller
У меня такая же бадяга была с gcc, компилировал через батник. Вылечил так: прописал полный путь к exe. Вот пример: Код:
@set path=C:\PROGRA~1\gcc\MinGW\bin |
Цитата:
Код:
@set path=C:\PROGRA~1\NSIS |
Painkiller
Цитата:
Код:
@set path=C:\PROGRA~1\NSIS |
Цитата:
|
Painkiller,
Чем заводится makensis?, батником, внешней прогой или скриптом NSIS? |
Цитата:
|
Цитата:
Есть же апи...Вы же пишете на делфи, создаете процесс, передаете параметры, или вам привести пример на дельфи или по гуглите... CreateProcess - создает процесс (с константой DETACHED_PROCESS - запустит консоль в скрытом режиме) WaitForSingleObject - заставляет прогу ожидать завершения процесса (константа INFINITE) GetExitCodeProcess - отслеживает код возврата процесса http://www.delphisources.ru/pages/faq/base/createprocess_console.html пишу на с++ иногда |
Цитата:
|
Цитата:
в батниках я не спец, но обязательно нужно опредилить путь к makensis и полный путь к скрипту ${NSISDIR}\makensis.exe "путь к скрипту" Вам пример привести на делфи или на nsis посредством апи? |
Цитата:
|
Пример на делфи
Пример на апи, запуск консоли, в скрытом режиме и ожидание завершения. Если все хорошо в $0 возвращается 0 Если через диспетчер завершть makensis - код возврата 1 |
kotkovets, в том то и дело что путь к makensis', 'путь к скрипту не работает. И я использую функцию
Код:
function SwitchToProg(const Path: string): Boolean; |
А на фига здесь цикл? WaitForSingleObject - и все!
Цитата:
или вы просто не вылазите из цикла... :) |
Ваш пример не работает. Где тут ошибка? :
Код:
function Exec(RunApp : string; cmdline : string) : bool; |
Вы наверно в юникоде работаете... :) это для анси..
|
Цитата:
|
Могу привести еще один пример, функция для запуска exe с параметром и ожидание его завершения.
|
Цитата:
|
уже мозг кипит, не знаю, может вы чем сможете помочь.
нужно сделать кастомную страницу лицензии. так исторически сложилось, что делается все на ини файлах. сделал поле но как в него запихнуть текст лицензии? пробовал читать текст из файла построчно в переменную, а затем вставить его но тут наткнулся на ограничение NSIS "default, variables are limited to 1024 characters. " нашел плагин " CustomLicense" пробовал на его основе запихнуть текст в свое окно, тоже не вышло... как можно какой нибудь текст неизвестной за ранее длины из файла запихнуть в требуемое поле? |
yyv, парсить текст построчно и отказаться от стандартных страничек,нарисовать текстовое поле - но мелькание строк невозможно избавиться.
Если текст юникодный, то размер уменьшается в 2 раза, из-за того, что в юникоде один символ занимает 2 байта. Использовать расширенную версию NSIS, где размер хранения значения увеличен до 8192 байта (т.е тект максимум должен быть 8кБ, в юникоде 4кБ). Large strings - распаковываем архив и заменяем из архива все файлы. |
все таки решил проблему с помощью CustomLicense plug-in
может кому еще нужно будет работает примерно так если не хочется использовать плагин то можно так в итоге у меня получилось закинуть текст из нужного мне файла в кастомное окно. |
yyv,
Вы проверочку на размер сделаете, а то если текст будет превышать размер хранения переменной - с треском грохнется NSIS. Вы же помещаете текст целиком в переменную... в $1 - размер в байтах... Код:
|
Цитата:
"default, variables are limited to 1024 characters. "? текстовый файл размером 7,1 Кб. проходит без всяких проблем. на нсис форуме в ветке самого плагина автор аписал " Max file size 305 666 bytes (298KB)" а этот код я так понял выполняет практически тоже самое что и плагин. Вообщем надо будет попробовать разные размеры по подставлять, посмотерть что будет. |
Цитата:
kernel32::ReadFile старая апишка, позволяет только читать файлы в кодировке ANSI, для юникода, т.е любого файла, есть ReadFileEx , но синтаксис написания этой функции несколько иной. |
Вложений: 1
Народ, подскажите. Есть прога TightVNC Viewer, которая включает в себя Сервер и Вьювер, а так же установку пароля. Нужно создать энсис файл, в котором будет производится автоматический выбор Сервера, Вьювер лучше даже вырезать и автоматически задаваться пароль.
|
Цитата:
Вы бы сами начали то, что то делать для начала... |
Мужики привет, я буду запускать интсталяционный пакет, вопрос в следующем, NSIS передает прогресс установки программы которая запустилла инстлаятор ?? как можно отследить прогресс установки ?? Через внешнее приложение или еще как нибудь ????
|
Цитата:
В переменной $PROGBAR - "заполненность" в процентах прогресс бара |
kotkovets,
Мне надо что чужая прога отлавливала прогресс установки!! Внешняя!!! |
Цитата:
Записывайте переменную(значение переменной $PROGBAR во внешний файл). При запуске инсталера парсите файл внешней прогой... Или отлавливайте класс окна, получите хэндл прогресс бара инсталлера внешней прогой GetDlgItem $HWND $HWND 1004 - или запишите значение $HWND (хэндл прогресс бара) в файл, хэндл есть и рулите внешней прогой. |
Наконец добился нормальное отображение одностранчной установки, но ни как не получается использовать память для STARTMENUFOLDER.
Шаг на страницу назад или вперёд, в переменной не сохраняется выбранная папка, тем более не считывается из реестра. kotkovets - може я что то делаю не так? |
sawe,
В функции CreatePage Код:
По такому же принципу можно и запоминать состояние отметки чебокса. |
Нужну, что бы сначала считывало с реестра и если реестр пуст, то тогда подключить этот код.
Но в реальности получается, если реестр пуст, тогда не запоминается папка а подставляется сразу "${PROGRAMS}". |
sawe, Ну тогда считывайте значение с реестра прямо в переменную $STARTMENUFOLDER, а затем под операторы даем на съедение, что здесь такого сложного?
|
Цитата:
kotkovets, мне это нужно для www.ninite.com хочу также замутить!!! |
Цитата:
Здесь открываем, к примеру процесс инсталера со свойством SYNCHRON и ждем завершения... Прогресс бар рассчитывается из вашей проги - сколько прог устанавливать и установилась прога - продвигаем прогресс Раз вы хотите написать свою прогу, думаю вы меня поняли... |
К слову, о необходимости включения-отключения UAC из инсталлятора, при установке на W7.
Т.к. имеющийся плагин UAC plug-in - очень мутный и громоздкий (что это за плагин такой, код для работы которого занимает десятки строк ?! . Громозда (и повод для его усовершенствования... :) ) ) Так вот, можно ведь воспользоваться известным способом отключения-включения UAC из командной строки и главное - без перезагрузки ОС. Отключить UAC : Код:
reg ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 0 /f Код:
reg ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v ConsentPromptBehaviorAdmin /t REG_DWORD /d 2 /f На W7x64 - срабатывает отлично. ps Проверил - рег файлы также работают. |
Цитата:
|
Цитата:
Код:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System] |
Цитата:
|
Цитата:
|
Цитата:
Определяет требуемый уровень прав (привелегий) для установки приложения в Windows Vista и в Windows 7 - в справке это четко прописано на русском языке... В том что, плагин неудачный я согласен. |
kotkovets,
Ну уж, если у пользователя нет прав запуска прог от имени админа, то и нечего ему вообще что либо запускать и устанавливать. :) Явно этот пользователь "курируется" злым админом и тот пресечёт любые попытки установок ПО, хоть с плагином хоть без... А к домашним пользователям это никак не относится. Будем считать, что предложенный простой способ отключения-включения UAC, для таких нормальных пользователей и предназначен... :) |
Товарищи, забыл как сделать, что если система Vista или новее, то ставить программу в корень системного диска , а если XP или старее, то в Программную папку?
|
Цитата:
|
Цитата:
Код:
!include "MUI2.nsh" |
Цитата:
Не знаю, как лучше... |
|
kotkovets - что то полезное для себя нашли или всё это в топку?
|
Хотелось бы ясности для ситуаци, когда требуется установить драйверы из NSIS инсталлятора. И не только драйверы оборудования, но и специфические драйверы, не имеющие HWID (во всяком случае, явного...). ( драйверы для видеоприложений, программ записи дисков и пр.)
В частности интересует установка, когда имеются такие сочетания файлов : К примеру - drv.sys и drv.inf. (ну, это болеее-менее ясно...) , один только drv.sys, drv.sys и "вспомогательная" DLL, вообще какой нибудь странный драйвер типа 001.fcl и т.п. Ессно для "разноразрядных" ОС всех типов. Специальных плагинов для установки драйверов, вроде как нет, а "devcon и dpinst" утилиты годятся только для установки драйверов оборудования... Ну, при иналичии INF файла наверное можно использовать команду (?) : rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 0 Путь\drv.inf А если нет INF ? Как вообще устанавливаются такие драйверы ? |
Цитата:
А по INF файлу, я иногда ставлю драйвера к тюнеру вот так, проверял тока XP MKN, вдруг я, напишу драйвер, который будет при установке компилировать еще нужные компоненты для установки... И будут другие пользователи ломать голову, как... |
подскажите пожалуйста строчку кода для вывода ярлыка на рабочий стол...
|
Цитата:
Код:
CreateShortCut "$DESKTOP\Мой_ацкий_линк.lnk" "$INSTDIR\my_proga.exe" |
В дополнение к сообщению kotkovets
Страничка справки по команде из будущей версии "Справочника по NSIS" ;) CreateShortCut: создаём ярлыки |
а путь к .exe нужно указывать к тому, который распаковался уже?
спасибо!!:) наконец таки разобрался)) |
и еще один вопрос...
как поместить ярлык в пуск->все программы, в отдельной папке естественно?:) |
Цитата:
Вот пример: Код:
CreateDirectory "$SMPROGRAMS\${APPNAME}\" |
Дополненение к сообщению Krinkels :), разместить ярлыки в меню в пуск->все программы
для текушего пользователя, перед созданием ярлыков (по умолчанию NSIS создает ярлыки для текущего пользователя) Код:
SetShellVarContext current Код:
SetShellVarContext all Код:
SetShellVarContext current |
а для того чтобы вставлять в эту папку Uninstall.exe нужно его создать, верно?
тогда вопрос, что может быть не так в строчке Код:
WriteUninstaller "$OUTDIR\uninst.exe" |
Цитата:
|
Цитата:
Код:
Section |
BARS73,
Наверное в несуразице : WriteUninstaller "$OUTDIR\uninst.exe" и CreateShortCut "$SMPROGRAMS\MIDA15TOOL\Uninstall.lnk" "$INSTDIR\Uninstall.exe" и лишний пробел в 3 строке после File |
Цитата:
Код:
File /r "D:\Pavel\proba\Release\*.*" # включить только файлы Код:
!insertmacro MUI_UNPAGE_CONFIRM Цитата:
Устанавливается явно через SetOutPath или не явно с помощью StrCpy, ReadRegStr, ReadINIStr. А значением $OUTDIR еще принимается рабочая папка ярлыка. |
kotkovets,
Я обратил внимание не на папку , а на uninst.exe и ярлык для Uninstall.exe. Несуразица в этом. :) |
MKN, не заметил, домой торопился :)
|
Дано:
Установленная программа не оставившая в записей в реестре. Дополнительное строннее ПО для программы работающее только с определенной версией программы. Условие: Версия программы содержится в ее исполняемом файле. Необходимо: Инсталлятор должен не просто устанавливать стороннее ПО в папку программы (это-то просто), а определить версию программы по версии ее исполняемого файла и установить ПО только если версия подходит, иначе вывести сообщение о необходимости сначала обновить версию программы до необходимой. Возможно ли в NSIS осуществить проверку версии программы по ее *.exe файлу, и если возможно, то как? --------------------------------------------- Уже понял, что возможно: 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 получаем версию. Но я не пойму как это использовать, надо ведь задать переменные и провести сравнение, как это будет в коде выглядеть? И еще допустим версии много, но нужно разрешить установку не на одной конкретной версии, а на нескольких конкретных, т.е. например программа может быть версии от 1.00 до 1.32, а инсталлятор должен разрешать установку только на версии 1.25, 1.27, и 1.31. Я так понимаю, что тут просто проверка должна проходить несколько раз, как это описать в коде? |
silione, в Справочнике по NSIS есть категория:
Примеры кодов => Работа со строками В данной категории посмотрите описания команд StrCmp и IntCmp Мы уже устали разжевывать по несколько раз то, что можно подчерпнуть из справочника и решить свою задачу самостоятельно, просто вы не внимательно прочитали шапку данной темы, ссылка на справочник там есть... |
Спасибо, разобрался :) если кому понадобиться на будущее, то выглядеть это будет например так:
Еще появился вопрос. Собрал я инсталлятор патча для игры, и хочу чтобы он сам находил путь для установки, но как это сделать если у игры нет записи в реестре или разные репаки игры могут эту запись делать в разных ветках? |
Цитата:
Кстати представленный вами код можно упростить...учитесь писать более простой код... Цитата:
Также с помощью ProcMon можно отследить что прописывает установщик игры в реестр, думаю как-никак какой-нибудь да след за собой оставляет, мало вериться в то, что программа установки нигде не прописывает путь для установки игры... P.S. В ветке "Uninstall" смотрели? |
Проверку по реестру я делать умею.
Я ищу способ автоматического нахождения пути когда записей в реестре вообще нет (например если винда была переустановлена, а игра осталась). Пример: Есть 10 человек. трое установили игру с одного репака (запись в реестре по Uninstall одна), 7 с другого (запись по Uninstall другая), при этом двое из них переустановили винду (записи в реестре нет вообще). Каждый устанавливал игру в разные папки. Нужен такой патч, который находил бы правильный путь установки во всех случаях не напрягая пользователя вводом пути вручную. Я вижу только один способ, поиск по всем локальным дискам исполняемого файла игры, при нахождении - считывание пути к нему и указание этого пути в качестве пути для установки, в случае отсутсвия пути - выбор пути вручную. Но я нигде не нахожу способов поиска пути к произвольному файлу методами NSIS :( И еще, не понимаю как работает CRCCheck, можете объяснить? |
Цитата:
Команда записывается вне секции и функции. если CRCCheck on - будет проверятся целостность инсталлера, т.е уже никто не может изменить инсталлер, например, вы поменяли иконку инсталлера с помощью редактора ресурсов, то при запуске инсталлера вы получите крах инсталлера и критическое сообщение. По умолчанию проверка на целостность инсталлера включена. если CRCCheck off - целостность инсталлера не будет проверяться. |
Цитата:
Задействуйте макрос Lосаte из хидера FileFunc.nsh, не забудьте включить хидер в тело скрипта Код:
!include "FileFunc.nsh" И вам для начала нужно перечислить все локальные диски на компьютере. С помощью NSIS это решаемо. |
Цитата:
Тогда можно попробовать решить проблему так: исключим из задачи людей с отсутствующими записями в реестре. Можно ли тогда задать $INSTDIR просто указав несколько путей InstallDirRegKey? или тогда как задать поиск нужного ключа по реестру? |
Цитата:
А вообще, по всем делам с поиском в реестре ключей будет скоро в новой версии справочника, пока все секреты не буду говорить..:) Вы потестите скрипт по локали (поиск по маске *.exe - значительно ускоряет поиск), у меня 5 дисков - поиск нужного файла у меня заняло около минуты - засунул тестовый файл поглубже. |
Цитата:
Цитата:
Но т.к. вариант не подошел, не буду :tongue: Цитата:
Ну а по вопросу: Цитата:
Цитата:
|
Я указывал полное имя, у меня поиск занял минуту, но надо помнить, что у кого-то может быть ноут с одним диском С и установлеными прогами типа фотошопа и т.п., да еще и не очень мощный, тогда поиск может и на 10 минут затянуться. так что не вариант. буду пока с реестром эксперементировать, а те у кого в реестре пусто - не облезут, ручками путь укажут :)
|
Цитата:
Получилось почти аналог Registry Могу скинуть либу в PM c описанием... |
Цитата:
Одна API библиотека это хорошо, но, например мне проще использовать уже знакомые команды, к тому же, мне их вполне хватает даже для написание софта, не говоряю уже про инсталляторы :biggrin: Ну а некоторые специфические функции, конечно, стоит уже писать на API как специальные плагины, но для инсталляторов это дело редкое... |
Цитата:
Цитата:
а стек - самое слабое место, его очень легко повредить. |
Цитата:
Ну тогда Да, с этим я соглашусь ;) Цитата:
Да не в рекламу будет написано, но функциональность, согласитесь, приличная, если узнать все возможности программ... |
Цитата:
|
Цитата:
P.S. Оффтопим |
Цитата:
|
Цитата:
-- |
Цитата:
Типа не забыл поставить запятую Если вы скачаете программу, прочитаете справку к ней и полностью ознакомитесь со всеми её возможностями, то я думаю вас не удивит данное количество строк в коде |
Цитата:
Если вы такой ранимый человек, значит вы творческий человек, а это в наше время уже становится редкостью. Программы ваши я уже давно скачал, мне только не понятна особенность SFX Creator. Практически каждый приличный архиватор имеет функцию SFX и сжимают многие из них получше NSIS. |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
SFX Creator создан для "облегчения труда" NSIS пользователям. А вышеназванные архиваторы, они и в Африке архиваторы, никакого отношения к созданию инсталляторов не имеющие (а то, что с их помощью кое что примитивное установочное можно сделать, всерьёз принимать нельзя.) PS K.A.V., всё же название программы - SFX Creator, сбивает с толку и не отражает действительной её сути и оригинального назначения... Может стОит "окрестить" её как то по другому ? NSIS Wizard, NSIS Helper, Easy NSIS Setup Builder и т.п. ? Без "SFX". Ведь самораспаковкой созданного сценария дистрибутива, дело не ограничится, а "вырастет" в создание полноценного инсталлятора ? |
Скажите, пожалуйста, как добавить такой ключ реестра в NSIS?
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{EC8030F7-C20A-464F-9B0E-13A3A9E97384}] @="Firefox" Или [HKEY_CLASSES_ROOT\CLSID\{EC8030F7-C20A-464F-9B0E-13A3A9E97384}\DefaultIcon] @="\"C:\\Program Files\\Firefox\\Firefox.exe\",0" |
david141,
Код:
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\{EC8030F7-C20A-464F-9B0E-13A3A9E97384}" "" "Firefox" |
Цитата:
|
kotkovets,
А вот такой. Спасибо. [HKEY_CLASSES_ROOT\CLSID\{EC8030F7-C20A-464F-9B0E-13A3A9E97384}\ShellFolder] "Attributes"=hex:18,00,00,00 |
david141, Смотрите шапку темы, там есть ссылка на справочник по NSIS
Можно так: Код:
WriteRegBin HKCR "CLSID\{EC8030F7-C20A-464F-9B0E-13A3A9E97384}\ShellFolder" "Attributes" 18000000 |
Цитата:
|
В чем проблема может быть? заработал Uninstall.exe, но в открывающемся окне только две кнопки закрыть и отмена.
что дописать то надо?:( |
и что нужно дописать к
Код:
CreateDirectory "$SMPROGRAMS\MIDA15TOOL\" |
BARS73, Может все таки почитаете шапку темы
Документация =>.... Много для себя полезного найдете. |
да я скачал, изучаю...но как то не совсем понятно...
Цитата:
|
BARS73, скрипт в студию, а то надоело уже догадываться, че вы вы там понаписали.
|
Код:
!define PRODUCT_NAME "MIDA15TOOL" |
BARS73,
Строку !insertmacro MUI_UNPAGE_CONFIRM пишем после строки !insertmacro MUI_PAGE_FINISH Вы нарушаете порядок страничек!!! Код:
-- Код:
Section Uninstall Код:
CreateShortCut "$SMPROGRAMS\MIDA15TOOL\Help.lnk" "$INSTDIR\Help.chm" |
хм... вроде бы ошибок не выдает, но папку в пуске так и не создает, и деинстоллятор так и не удаляет ничего:(
|
BARS73, Значит не судьба.... :read:
Читайте до дыр статьи, больше мне вам посоветовать нечего... :closed-to |
BARS73
1. Чтобы отработала секция Uninstall нужно прописывать макрос Код:
!insertmacro MUI_UNPAGE_INSTFILES Цитата:
|
Цитата:
И в этом "маленькую error" можно сделать, так, что да соглашусь лучше $INSTDIR |
Цитата:
Возьмите пример, где автор установил SetoutPath и прописал создание деинсталлятора, а потом нужно заглядывать в код или в реестра, чтобы отыскать файл удаления, это в лучшем случае, а если в реестр записей не было...вот и ищи его потом по диска, вообщем даже и продолжать и обсуждать это я не вижу смысла, если писать правильно, то это ошибка |
Цитата:
|
Цитата:
Цитата:
Конечно, где это будет создавать инсталлятор программу удаления, если вы не назначили переменной $INSTDIR каталог для установки вашей программы? Вот поэтому и не создаёт, потому что Вы "не сказали" программе установке в какой папке ему нужно это сделать...... |
K.A.V.,
не спорю:) криворукий... это моя первая работа с этой программой:( да и с самим программирование у меня маленький опыт... если вас не затруднит, объясните пожалуйста, как назначить эту переменную... |
Цитата:
|
K.A.V.,
вот что получилось?:( Код:
Name: "MIDA15TOOL" сам исправил:) K.A.V., теперь вопрос по деинстолятору... Код:
Section Uninst |
BARS73, Главная секция деинсталятора - это секция Uninstall - иначе никак.
Научитесь читать справки! прежде чем такие вопросы задавать..В справочнике все это есть... Код:
Section Uninstall |
Огромное спасибо kotkovets, K.A.V., !!:) наконец таки все заработало!! просто когда сам ковыряешься не всегда замечаешь ошибки...
|
kotkovets, я писал о реакции на HideWindow со скинами, вот интересный пример этого явления.
Пример просмотра видео файлов средствами NSIS... Video_Browser.7z . Пример может быть полезен многим пользователям, в пример включены все необходимые компоненты. Удачи! |
sawe, Ну видео для инсталера излишне, а вот скин красивый, как раз для красивого инсталлятора редчайшего плеера Winamp, кто нибудь возьмется интересно написать установщик с таким скином и небольшим демовидео во время установки... :)
|
Помогите пожалуйста. В настройках языка в Мастере сценариев NSIS языки не появляются.Почему?
|
avmu, скрипт в студию...
|
kotkovets,
Я плохо представляю какой скрипт я должен в студию.Просто я пытаюсь сделать инсталятор для игры при помощи Мастера сценариев. |
Цитата:
Мультиязычный инсталлятор, выбор языка интерфейса при запуске? http://forum.oszone.net/post-1553443-904.html |
kotkovets,
это программа HM NIS Edit 2.0.3.В ней естьфункция Новый сценарий от Мастера сценарий и в нём я просто заполняю что он требует:название программы ,иконку и тд.Больше я ничего не делаю и на второй странице он должен указать языки,а он не показывает.Там есть такое окошко,а должен |
avmu, не существует папка NSIS, вы его возможно не установили ;)
Скачать |
K.A.V.,
Большущее СПАСИБО!!!!!! |
Цитата:
Не подскажите, в классической форме номер кустомного контрола чекбокса, на 1008 не откликается. Какая досада! |
Нестандартный размер окна. Возможно ли это средствами nsis?
мне нужно окно больше чем то, что есть сейчас, подскажите как я могу это сделать? |
Цитата:
Правьте любым редактором ресурсом этот файл, к примеру с 105 ресурса - увеличивайте размер главного окна и пропорционально остальные элементы(контролы). Далее в скрипте подключаем измененный файл ресурсов для фейса MUI Код:
!define MUI_UI "путь к файлу ресурса.ехе" |
Цитата:
CONTROL "", 1018, "STATIC", SS_BLACKRECT | NOT WS_VISIBLE | WS_GROUP, 15, 45, 300, 140 и в остальных диалогах, кроме 105 и 111, в верхней её части следует заменить на новое значение 102 DIALOGEX 0, 0, 300, 140, 0 и только потом следует пропорционально увеличить остальные элементы (контролы) -- |
А подскажите еще.
для плагина nsDialogs существует ли какой нибуть визуальный редактор? вот что бы я нарисовал все элементы как они должны располагаться, а он мне выдал код, который я просто подправлю как мне надо? как примеру HM NIS Edit для ini файлов? |
Цитата:
http://coolsoft.altervista.org/en/nsisdialogdesigner |
Цитата:
Я беру код который она генерит подгоняю под себя вставляю в свой AHCI и прекрасно это работает? или там могут потом какие-то бока вылезти? |
Цитата:
Цитата:
|
Цитата:
за предупреждение спасибо мне проще наверное будет там нарисовать а потом руками поправить то что сместиться |
Цитата:
Если вы введёте, к примеру русский текст, смещение будет огромное. Мало того, он обзывает определяемые переменные и функции абы как, и самое неприятное, он знает толко единицы измерения (пикселы). А вот фирменные u и популярные % и тем более отрицалеьные значения не знает. И ещё замечено, что он ограничивает края формы, примерно на 10px. Поверьте, руками быстрее!!! |
Цитата:
Я еще не настолько специалист в NSIS Мне пока очень сложно когда много элементов на странице "увидеть" их и расположить просто описав цифрами а подскажите еще по вопросу у меня есть два радиобутона как их сделать зависимыми? те когда один выбираешь то другой снимается? и как с нсДиалог сделать чекбоксы и радиобутоны по умолчанию отмеченными? и самое главное Где об этом можно почитать? |
Цитата:
|
Доброй ночи тем у кого ночь...)
вот пытаюсь еще разобраться делаю свою страницу лицензии. соответственно хочу чтобы там были мои кнопки на которые повесить свои обработчики делаю кнопки на странице Код:
кнопка принятия лицензии вместо них стандартные next и cancel что я делаю не так? |
Цитата:
Посмотрите в 105 диалоге файла ресурса идентификатор 1018 - это поле деятельности плагинов nsDialogs и InstallOptions - за границы этих полей, вы ничего не нарисуете. Навскидку: 1. Редактором растянуть поле 1018 до нижнего края главного окна, но при этом, наверно придется скрывать поле 1018 на других страничках, чтобы были видны стандартные кнопки или указать идентификатор 1044: nsDialogs::Create 1044 2. Нарисовать кнопки средствами Windows API рядом со стандартными - я так делал, опять же их на др. страничках придется скрывать. Если нужно могу показать пример на api, но не сейчас, ночь... |
возможно ли кастомизировать страницу _PAGE_INSTFILES?
под катом три скриншота можно ли "украсить " страницу PAGE_INSTFILES как хотеться? или еще лучше использовать вместо нее свою? те вызывается своя страница и на ней отрабатываются действия в секциях |
yyv, непонятно...
как вы хотите украсить... где скрины??? |
Цитата:
Слева-направо: 1,2,3 [IMG] ![]() ![]() ![]() Зы, У кого там мысли сходятся?! :grin: Начинал я раньше делать нечто подобное, но до конца не довел, требуется сторонняя помощь для нормальной реализации... :clever-ma |
Цитата:
|
Цитата:
|
Я начал было копаться в ресурсах экзешника, и в nsh скриптах которые отвечают за показ этой страницы. сместил уже данные в правый угол
но вот уже почти ночью мне пришла мысль , что ведь можно разделить - "мухи - отдельно,котлеты - отдельно" мне что нужно? что бы пользователю красиво показался прогресбар при скачивании файла. Так почему бы не вынести скачивание файла в отдельную страницу, показать ее, а все необходимые действия с файлом делать уже в секциях выполняя PAGE_INSTFILES, предварительно спрятав окно инсталлера и показав его по окончанию выполнения. просто я уперся как-то, что у меня раньше все делалось в одном месте в секции, и все тут. завтра опробую, напишу, что получилось, если интересно. вопрос теперь в том где размещать код для скачивания программы, что-бы он корректно выполнялся и прогресбар показывался? вот к примеру вызов страницы Код:
Page custom CustomdownloadPage_Show Код:
NSISdl::download ${ORG_INSTALLER} "$TEMP\installer.zip" а он будет корректно работать и отображаться после вызова Код:
nsDialogs::Show если я правильно понимаю то если вызвать страницу так Код:
Page custom CustomdownloadPage_Show CustomdownloadPage_Leave |
Цитата:
Цитата:
при нажатии кнопки , типа "загрузить", в функцию события нажатия кнопки добавьте код Код:
NSISdl::download ${ORG_INSTALLER} "$TEMP\installer.zip" Цитата:
Эта функция отрабатывает при закрытии вашей нарисованной странички, в основном используется для снятия статуса чебоксов, радибутонов, текста в полях ввода - для дальнейшего использования "снятых значений" в скрипте. удобно проверить, закачался ли файл, а если нет пишем Abort и мы останемся на кустомной страничке. |
Цитата:
все хорошо... файл качается.. одно плохо.. пользователю ничего не показывается.. (( те остается страница CustomdownloadPage_Show и ничего нельзя сделать пока файл не скачается. как нибудь можно прогрес бар из NSISdl::download на передний план высунуть? решил попробовать Inetc plug-in - он вроде более интересен для этих целей |
Справочник по NSIS
Вышла Версия 1.3 Убедительная просьба начинающих и неопытных кодеров на NSIS прочитать справочник, не задавайте вопросов, ответы на которые есть в справочнике! |
Я вместо пользователя могу "нажать" клавишу некст?
вот к примеру у меня на странице отработала функция и по результатам или пользователь сам переходит на следующую страницу или это делается автоматически? сам нашел вроде бы функция RelGotoPage должна делать то что мне надо http://nsis.sourceforge.net/Go_to_a_NSIS_page |
По личной просьбе sawe - попросил сделать макрос для эффекта прозрачности окна NSIS.
Решил выложить на форуме, думаю будет полезно всем любителям украшательств. Коэффициент непрозрачности задаем в процентах, если 0 - окошка не наблюдаем, если 100 - обычное окошко. Код:
${NSIS_TRANSPARENT} 70 # эффект непрозрачности 70% Макрос вызываем в функции для внесения изменений в графический интерфейс. |
Люди добрые, прочитал я новую справку, перечитал все внимательно про действия с реестром, но с наскока так и не разобрался, подскажите пожалуйста, не бросайте в неведении горемычного.
И так, есть инсталлятор, хочу сделать так, чтобы он сам корректно искал путь для установки. Устанавливаться он должен в папку где находится определенный файл (пусть это будет file.exe). Как мы уже выяснили, провести поиск этого файла по локальным дискам можно, но это процесс долгий, так что мне не подходит. Задача сводится к тому, чтобы при поиске по ВСЕМУ реестру (т.к. где находится ключ с нужным параметром не известно) был найден ключ в параметре которого прописан путь к нужному файлу. А, затем, этот путь должен указываться в качестве пути установки (как я понимаю сделать это можно с помощью InstallDirRegKey). В случае если такового найдено в реестре не будет, путь должен выбираться юзверем (это уже обычный InstallDir). Вся моя проблема именно в поиске, я никак не соображу как его провести. Распишите дураку пожалуйста как это сделать. |
silione, впринципе, во всех плагинах есть файлик под назавием Example.nsi, в котором есть примеры...
С использованием плагина Registry В начале кода: Код:
!include Registry.nsh Код:
Section "Поиск" |
Цитата:
Ведь разобраться в чем нибудь, изучить или создавать - нужно пахать, причем жестко! А ни кто этого не хочет делать - желания и времени... |
Цитата:
Об этом не раз был разговор в данной теме, я его начинал (год назад), там я про всё написал... |
Гм... что-то не работает, не пойму в чем дело. Компилируется без ошибок, но запускаемый инсталлятор как будто не содержит секции с поиском. Даже окошко с запросом продолжать ли поиск не выдает :(
|
Цитата:
а вы код прочитайте повнимательней, я вам дал пример поиска исполняемого файла mynsistest.exe в ветке HKEY_LOCAL_MACHINE, а запрос будет только после того, как параметр со значением в строке mynsistest.exe будет найден :read: Либо у вас прописаны ещё какие-то ключи к запуску игры...Вот поэтому может и не находить |
Цитата:
Цитата:
1 Определитесь с корневым ключом - HKLM, HKCU 2. Поиск, очевидно, только по строковым параметрам, и скорее всего начинать нужно: c НKLM/Software 3 Если найден нужный ключ - выход из цикла. и тд silione, вот стройте такую логику на поиск, а не по всему реестру беспорядочно. И по этой логике не трудно написать код. Инструменты есть, справка есть - во тока опыта, правильно использовать у вас нет. И не факт, что поиск по реестру будет быстрее, чем поиск по локалям. |
Да уже и так не по всему реестру, а только по HKEY_LOCAL_MACHINE, да и то можно потом действителньо будет сократить.
Файл для поиска естественно прописывал другой, причем для проверки прописывал заведомо известный. Естественно старые ключи к запуску убрал, он собственно один был, installdir. Специально ждал несколько минут, думал может действительно поиск время занимает, но так ничего и не дождался. Сейчас вот попробовал прописать explorer.exe. При поиске в редакторе реестра за пару секунд находит, а в nsis глухо. |
kotkovets,
Может подскажите технологичный путь решения такой задачи? Имеем секцию: Section /o "Хранить настройки программы в INI файле" INI ${GetSecWriteSucces} INI ${If} $SUCCES_SECTION = 1 IfFileExists "$EXEDIR\PotPlayerMini.ini" 0 NoThere IfSilent +2 MessageBox MB_OK "Файл настроек найден, он будет скопирован в директорию установки" CopyFiles /silent "$EXEDIR\PotPlayerMini.ini" "$INSTDIR\PotPlayerMini.ini" Goto Done NoThere: IfSilent +2 MessageBox MB_OK "Файла настроек нет, он будет создан в минимальной конфигурации" SetOutPath "$INSTDIR" WriteINIStr "$INSTDIR\PotPlayerMini.ini" "Settings" "CheckAutoUpdate" "0" WriteINIStr "$INSTDIR\PotPlayerMini.ini" "Settings" "DVDAudioLang" "1049" ---бла ---бла Done: ${EndIf} SectionEnd Файл это нужен в $INSTDIR только, если система XP. На Vista и выше его нужно переместить в $APPDATA Хотел сделать логической конструкцией через ${If} ${AtLeastWinVista}, но смущает, что в секции уже есть одна логическая конструкция, заканчивающаяся ${EndIf} |
Цитата:
Извращение в логических конструкциях применять безусловные метки, так что убирайте метку Done Код:
${GetSecWriteSucces} INI |
Цитата:
(то есть просто не перемещать файл PotPlayerMini.ini) |
Цитата:
если не нужно - да не писать просто! конструкции дают без головняка великолепную универсальность и любую сложную логику типа, что хочет моя левая нога. И конечно нельзя забывать о последовательности действий. И значительно быстрей работают, чем обычные безусловные переадресации. |
kotkovets,
${If} ${AtLeastWinVista} SetShellVarContext current CreateDirectory "$APPDATA\PotPlayerMini\" MoveFile /silent "$INSTDIR\PotPlayerMini.ini" "$APPDATA\PotPlayerMini\PotPlayerMini.ini" ${Else} ${EndIf} ${EndIf} Так пойдет? Где можно почитать про перемещение файлов (не нашел в справке)? |
Цитата:
Код:
Rename "$INSTDIR\PotPlayerMini.ini" "$APPDATA\PotPlayerMini\PotPlayerMini.ini" |
kotkovets,
ЗЫ: Протестировал на Win7. В таком виде секция работает: Код:
Section /o "Хранить настройки программы в INI файле" INI |
wolkow70, Может так логичнее будет...
|
Цитата:
|
wolkow70 вот вы потестируйте пример..
Цитата:
затем внутри глобальных условий - пишем местные условия и т.д, пока не исчерпаются заданные условия. |
kotkovets,
Продолжаю работу над усовершенствованием макросов регистрации ассоциаций. В настоящее время они приняли такой вид: Код:
!macro RegisterExtension extenstion Код:
!macro UnRegisterExtension extenstion |
wolkow70,
Навскидку, принципиально, зачем такое нерациональное использование большого количества переменных? Первоначальные значения переменных макросе не используются, а значит достаточно двух переменных.. А не кажится вам команда StrCmp "$1" "$ClassName" 0 +2 слишком часто пишется? Почему бы вам не объединить под этим условием нужные команды? |
Кликабельный BrandingText
сделал по мануалу все получилось, но вот когда хочу вместо урла вставить адрес электронной почты, что бы нажав на нее открывался почтовик по умолчанию, то при нажатии на такой урл ничего не происходит подскажите как добавить урл с email в диалог ,что бы при нажатии открывался почтовик как в браузере PS сам дурак :) используйте вместо Linker::link /NOUNLOAD $0 "contact@test.com" Linker::link /NOUNLOAD $0 "mailto:contact@test.com" PPS как BrandingText показать на первой странице? MUI_PAGE_WELCOME |
Цитата:
И не нужно ничего править и свой цвет ссылки можно задавать Код:
BrandingURL::Set /NOUNLOAD "0" 0" "255" "mailto:contact@test.com" ;синий цвет ссылки Цитата:
А лучше всего нарисовать свою страничку, вариантов очень много, можно программно сместить контролы текста и повесить линк. |
Вы, как то раньше спрашивали о радио кнопках в nsDialog.
Делал это для себя, но думаю будет очень полезно для многих. Переключение с обычной установким на портабельную с обнулением чекбоксов и запретом редактирования. QTest_Hide.zip |
Цитата:
|
Цитата:
|
блин засада.. :( как оказалось ни Linker ни BrandingURL не открывают почтовик в WIN 7 возможно это из-за того что не указана программа по умолчанию для почты.
сейчас буду выяснять это Ps в стоковой семерке (и в висте тоже) по умолчанию нет почтовика (в отличие от ХР) так что все работает если есть почтовик |
kotkovets,
Как бы еще оптимизировать такой код? ReadRegStr $2 HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back" (читаем в $2 значение бэкапа) DeleteRegValue HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back" (удаляем значение бэкапа) WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "$2" (прописывавем значение бэкапа в значение расширения по умолчанию) StrCmp "$2" "$ClassName" 0 +2 (сравниваем значение бэкапа с текущим значением) DeleteRegValue HKLM "SOFTWARE\Classes\.${extenstion}" "" (если совпадает, то удаляем текущее значение) Это нужно, что бы программа не прописала из быкапа свое же значение (так бывает ,если прога переустанавливалась). Хочется сделать, чтобы вообще не прописывалось, если совпадает, что бы не пришлось удалять, так было бы рациональней, но как еще сделать не соображу... |
Цитата:
Код:
StrCmp "$2" "$ClassName" +2 0 ;если $2 = $ClassName > то пропустить команду записи Код:
ReadRegStr $2 HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back" ;(читаем в $2 значение бэкапа) |
kotkovets,
1. Я полагал, что возможны команды только типа StrCmp "$2" "$ClassName" 0 +2 Оказывается можно и StrCmp "$2" "$ClassName" +2 0 Какие нибудь особенности имеются? 2. ${Unless} ${Errors} ${EndUnless} Такая конструкция мне еще не известна. |
wolkow70, читайте внимательно справку
Код:
StrCmp "значение 1" "значение 2" [метка перехода, если 'значение 2' = 'значение 1'] [метка перехода, если не равны значения] Цитата:
а также другие команды NSIS работающие с реестром, флаг ошибки определяется через Iferrors Код:
${Unless} ${Errors} Код:
${If} ${Errors} |
Цитата:
|
kotkovets
В общем, макрос дерегистрации в окончательном виде у меня вышел такой: Код:
!macro UnRegisterExtension extenstion Файл ответов Winamp.ini по наименованию совпадает с подхватываемым файлом настроек Winamp.ini , что исключает их нахождение в одной директории. Думаю, как лучше выйти из положения, можно ли изменить наименование файла ответов? Или проще наименование файла изменить? |
Цитата:
Код:
OutFile Winamp_5.xx.exe |
Цитата:
Думаю, надо наименование файла настроек изменить, но при копировании восстанавливать оригинальное наименование. Секция такая: Код:
Section "Конфигурация и базовые настройки программы" Settings Забыл как файлы переименовывать при копировании :) |
wolkow70, смотрю уже разбираетесь в конструкциях, явный прогресс... :yes:
с безусловными метками в раз бы запутались :biggrin: |
Цитата:
а то я умею менять текст на контролах, делать их активными/неактивными, показывать/убирать а вот смещать как не знаю... |
Цитата:
Смотрим в папке NSIS файл Contrib\Modern UI 2\Pages\welcome.nsh |
kotkovets,
Цитата:
Я правильно принцип понял? |
Цитата:
Сдвигая размер контролов - имеем возможность дополнить страничку приветствия - исключительно для удобства вот такая хитрость, причем такой способ, косвенно используют плагины для украшения NSIS |
Цитата:
Подправим! |
kotkovets,
Нашел в своей конструкции макроса де-регистрации серьезную логическую ошибку Код:
StrCpy $ClassName "Winamp.File.${extenstion}" ReadRegStr $2 HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back" DeleteRegValue HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back" StrCmp "$2" "$ClassName" +2 0 WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "$2" вообще не должны выполняться.... . Думаю, как это сделать лучше... |
wolkow70, ну так читайте изменения в реестре, до этих команд и ставьте условия.
|
Пока только такие мысли...
Код:
StrCpy $ClassName "Winamp.File.${extenstion}" |
wolkow70,
А если нету параметра Winamp_Back? Код:
ReadRegStr $2 HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back" Код:
WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "$2" а $ClassName будет равно $1 ??? |
Чем дальше в лес, тем толще партизаны...
Я так понимаю, что если нету параметра Winamp_Back, то в значение по умолчанию ничего не пропишется. Расширение будет не ассоциированным. |
Цитата:
|
Цитата:
|
может кому будет полезно
как получить Unix time аналог того что на php вернет функция time () нашел на nsis-совском форуме Код:
system::call *(&i16,l)i.s Цитата:
|
kotkovets,
Будьте любезны посоветовать по одному вопросу: После выполнения комманд ExecWait "msiexec.exe /i $\"$TEMP\TUUSetup\TUU2011LP.msi$\" /qn /norestart" sleep 700 ExecWait "msiexec.exe /i $\"$TEMP\TUUSetup\TUU2011.msi$\" /qn /norestart" sleep 700 msiexec.exe остается висеть в памяти. Это нормально? |
Цитата:
|
Цитата:
Цитата:
Код:
SetShellVarContext all Цитата:
Код:
SetShellVarContext current |
kotkovets,
Разобрался уже , вот нашел: %ALLUSERSPROFILE% - C:\Documents and Settings\All Users - C:\ProgramData %APPDATA% - C:\Documents and Settings\{username}\Application Data - C:\Users\{username}\AppData\Roaming %COMPUTERNAME% - {Computer Name} %COMSPEC% - C:\Windows\system32\cmd.exe %HOMEDRIVE% - C: %HOMEPATH% - \Documents and Settings\{username} - \Users\{username} %PATH% - C:\Windows\System32\;C:\Windows\;C:\Windows\System32\Wbem %PATHEXT% - .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.WSF;.WSH - .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC %PROGRAMFILES% - C:\Program Files %PROMPT% - $P$G %SYSTEMDRIVE% - C: %SYSTEMROOT% - C:\Windows %TEMP% and %TMP% - C:\DOCUME~1\{username}\LOCALS~1\Temp - C:\Users\{username}\AppData\Local\Temp %USERNAME% - {username} %USERPROFILE% - C:\Documents and Settings\{username} - C:\Users\{username} %WINDIR% - C:\Windows Думал, по win7 нужно учитывать некоторые особенности. Оказалось что переменные более универсальны. |
Цитата:
Код:
ExpandEnvStrings $R1 %ALLUSERSPROFILE% |
Если, я правильно понял,
SetShellVarContext current "$APPDATA" для Win7 это C:\Users\{username}\AppData\Roaming для XP это C:\Documents and Settings\{username}\Application Data SetShellVarContext all "$APPDATA" для Win7 это C:\ProgramData для XP это C:\Documents and Settings\All Users , то есть команды для удаления профилей программ одинаковы для обеих систем? Вопрос возник в связи с тем, что надо несколько комманд cmd кода конвертнуть в NSIS if exist "%AppData%\TuneUp Software" rd /s /q "%AppData%\TuneUp Software" if exist "%AllUsersProfile%\Application Data\TuneUp Software" rd /s /q "%AllUsersProfile%\Application Data\TuneUp Software" if exist "%ProgramData%\TuneUp Software" rd /s /q "%ProgramData%\TuneUp Software" if exist "%AllUsersProfile%\{24036256-BFDB-4CD3-BE8A-A3D6160F2E16}" rd /s /q "%AllUsersProfile%\{24036256-BFDB-4CD3-BE8A-A3D6160F2E16}" if exist "%AppData%\Microsoft\Windows\Start Menu\Programs\TuneUp Utilities 2011" rd /s /q "%AppData%\Microsoft\Windows\Start Menu\Programs\TuneUp Utilities 2011" if exist "%ProgramData%\Microsoft\Windows\Start Menu\Programs\TuneUp Utilities 2011" rd /s /q "%ProgramData%\Microsoft\Windows\Start Menu\Programs\TuneUp Utilities 2011" if exist "%AllUsersProfile%\ѓ«*ў*®Ґ ¬Ґ*о\Џа®Ја*¬¬л\TuneUp Utilities 2011" rd /s /q "%AllUsersProfile%\ѓ«*ў*®Ґ ¬Ґ*о\Џа®Ја*¬¬л\TuneUp Utilities 2011" if exist "%UserProfile%\ѓ«*ў*®Ґ ¬Ґ*о\Џа®Ја*¬¬л\TuneUp Utilities 2011" rd /s /q "%UserProfile%\ѓ«*ў*®Ґ ¬Ґ*о\Џа®Ја*¬¬л\TuneUp Utilities 2011" |
wolkow70, совершенно верно.
Цитата:
Это переменная возвращает путь к профилю пользователя |
Цитата:
RMDir /r "$APPDATA\TuneUp Software" |
Конференция Build пройдет в Калифорнии и начнется 13 сентября в 20:00 МСК.
Вы сможете присоединиться, услышать новости от разработчиков-единомышленников и увидеть новые возможности Windows 8. Прямая трансляция основного доклада конференции будет организована на сайте - http://clk.atdmt.com/MRR/go/352572697/direct/01/ Скорее всего новый апи функции не буду освещены. |
Хочу сделать режим отладки
что бы потом если инсталер запущен с параметром,то выдавать сообщения типа делаю макрос подключаю его в onInit.nsi Код:
!insertmacro DEBUG если программа запущенна без параметров, то в условие Код:
${If} $R1 == "y" Что я делаю не так? |
Цитата:
Код:
StrCpy $ClassName "Winamp.File.${extenstion}" |
Цитата:
!define - это механизм времени компиляции, вы скомпилировали проект, все!!!, константа объявлена! Свои переменные объявляйте, и задавайте значения согласно вашим поставленным задачам. Цитата:
|
Цитата:
-если нету параметра Winamp_Back -если Winamp_Back=$ClassName |
Цитата:
Код:
ClearErrors |
kotkovets,
Код:
StrCpy $ClassName "Winamp.File.${extenstion}" |
Цитата:
потому что, где то у вас скрипте установится 100% флаг ошибки, какой-нибудь командой, для правильной работы логики: Код:
ClearErrors Код:
ReadRegStr $2 HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back" ;(читаем в $2 значение бэкапа) Учитесь читать код, а не, пардон, заниматься тупым копипастом! |
Цитата:
Все равно эта конструкция при тестировании не сработала. Пока вернулся к своей конструкции, которая работает: StrCpy $ClassName "Winamp.File.${extenstion}" ; DeleteRegKey HKLM "SOFTWARE\Classes\$ClassName" ReadRegStr $1 HKLM "SOFTWARE\Classes\.${extenstion}" "" ReadRegStr $2 HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back" DeleteRegValue HKLM "SOFTWARE\Classes\.${extenstion}" "Winamp_Back" StrCmp "$1" "$ClassName" 0 +2 DeleteRegValue HKLM "SOFTWARE\Classes\.${extenstion}" "" StrCmp "$1" "$ClassName" 0 +3 StrCmp "$2" "$ClassName" +2 0 WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "$2" У меня такой вопрос возник: Почему не компилируется устанвощик с такой строкой File /oname=$APPDATA\Winamp\Winamp.ini "$EXEDIR\WinampSet.ini" Хочу, чтобы файл настроек WinampSet.ini копировался в профиль с переименованием в Winamp.ini. Файл настроек я решил переименовать, что бы он не конфликтовал по наименованию с файлом ответов. |
Цитата:
|
А почему тогда так работает?
CopyFiles /silent "$EXEDIR\Winamp.ini" "$APPDATA\Winamp\Winamp.ini" |
Цитата:
1. Это совершенно 2 разные команды 2. Во 2-ом параметре команды File где вы указываете переменную $EXEDIR должен быть путь к файлу, который вы упаковываете в инсталлятор, т.е. с относительным путём к файлу скрипта с проектом, без переменных |
Почитал справку...Допустим, сделаю так:
IfFileExists "$EXEDIR\WinampSet.ini" 0 +3 CopyFiles /silent "$EXEDIR\WinampSet.ini" "$APPDATA\Winamp\WinampSet.ini" Rename "$APPDATA\Winamp\WinampSet.ini" "$APPDATA\Winamp\Winamp.ini" ЗЫ: СРАБОТАЛО! |
Цитата:
Код:
IfFileExists "$EXEDIR\WinampSet.ini" 0 +2 |
Автор программы Ангус Джонсон неоднократно заявлял, что не планирует продолжать Resource Hacker. Однако 16 сентября 2011 года программа вновь была обновлена, на этот раз до release-версии 3.6.0.92. В ней была добавлена поддержка иконок в формате .PNG.
Я тот-же её перевёл для себя Resource Hacker 3.6.0.92 Rus Перезалил... --- |
sawe, Установил вашу версию сборки Resource Hacker'а, установщик малось наглючило от плагина скина. После завершения процесса установки вывело пустое окно инсталляции без какой либо инфы, с еррором скина. Закрывал инсталлер через убиение процесса в диспетчере задач.
Собственно вопрос, чем вам не угодил стандартный скин Нсис?! :dont-know |
Цитата:
|
Народ, встрял с одной проблемой, и не могу ее разрешить.
Есть задача: при установке определить существует ли один из определенных файлов (этих файлов может быть много) в каталоге назначения, и если файл например А1. есть, то осуществить определенное дествие, если файла А1. нет, то проверить существует ли файл Б1, и т.д, как и в случае с файлом А1. Т.е. в зависимости от наличия того или иного файла выполнить определенное действие. Перепробовал кучу разных решений, ни одно толком не работает. Сейчас нашел одно, но при этом копируется сразу все, а не в зависимости от условия. Вот пример этого кода: Код:
[...] Кто что об этом думает ?! |
MaGoth
Ты забыл о последовательности исполнения команд в NSIS, а это очень важно! Если, к примеру перейдем по каким-то причинам к глобальной метке .NextP1, то исполнение кода начнется с этой метки, дальше по скрипту, следовательно будет исполняться весь код начиная с метки .NextP1 Цитата:
Код:
Section "share" нахождения файла: копируем группу файлов - все делается последовательно! Код:
Section "one" Код:
Section "one" Если нужно копировать несколько групп файлов (при нахождении указанных файлов) можно делать так: Код:
Section "one" |
kotkovets, Нет, это не прокатывает перепробовал разные варианты, вот пример:
Есть файл Ридми.тхт на диске, в зависимости от локализации в нем седьмая строка меняет значения: 1. Системные требования 1. Hardwarevoraussetzungen Код:
Name "Cls Test" Причем, не зависимо от того как реализованы последние две секции, первый пример выше, а второй так: Код:
Section -"one" |
Цитата:
Цитата:
секции всегда будут срабатывать, это очевидно! Во что за извращения с глобальными метками в функции с переходом в секции?????????? Пиши сразу код в вызываемой в функции, или под конструкцией. И ты забыл очевидное, про непечатываемые символы(мессага их не показывает) - переходы на новую строку и т.д По этому и логика твоя и не работала, а если бы логика работала и прыжок был на метку .NextAk:, то секции one1 и one2 выполнялись в любом случае. Пример на логике И-ИЛИ который прекрасно работает Код:
Section "" |
не могу найти плагины для расаковки 7z и arc архивов, можете подсказать или отправить по пм ?
|
kotkovets, спасибо
|
Вложений: 1
vahe-91,
для аrc во вложении |
Поигрался с CallGetUserSID и обнаружил интересные положительные свойства этого макроса, ещё раз спасибо!
|
Цитата:
в макросе я добавил чуть больше возможностей использовать потенциал этой апи функции. |
Дорогие товарищи помогите подчистить (подкорректировать, упростить) код:
Код:
!include "FileFunc.nsh" Вашему вниманию представляю часть кода, принцип его работы такой: Запускаем программу. Если при запуске программы указываем ключ /PAS="пароль" , тогда если пароль правильный программа устанавливается без окна запроса пароля, если пароль неправильный то ничего непроисходит. Если при установке ключ /PAS неуказывается тогда пользователю предлогается ввести пароль в окошке, естественно при правильном пароле программа устанавливается, а при неправильном нет. Писал этот код почти по наитию, методом проб и ошибок, поэтому строго несудите. Самому неочень нравится переходы на метки, считаю что это неочень правильно но по другому еще пока неумею. Буду рад любой помощи. |
Цитата:
Цитата:
поэтому тоже нужна еще проверка на флаг тихого режима. Цитата:
вызываем функцию прерывания установки - просто и эффективно. |
Возникла необходимость в транслитерации.
Имеем в $0 "По умолчанию" Нужно получить в $0 "Po umolchaniu" а лучше в $0 "\x41f\x43e \x443\x43c\x43e\x43b\x447\x430\x43d\x438\x44e" Такое можно сделать в NSIS? |
Цитата:
не очень это востребовано и столь часто необходимо. С помощью плагина Registry можно конвертировать строку в бинарный вид и наоборот. Полное русское описание плагина вы найдете в справочнике по NSIS, ссылку на справочник найдете в шапке темы |
kotkovets, спасибо, посмотрел плагин Registry, конвертирует немного не в то чего бы хотелось.
|
Цитата:
Например с помощью команды поддерживающий 256 символов, пример в цикле, число=символ, матрица: Код:
Section |
Еще вопрос...
большая буква "А"=>"x0410" маленькая буква "а"=>"x0430" для Код:
StrCmp $1 "а" 0 +2 Как-то можно это обойти? |
Цитата:
|
забор :)
Как различить регистр букв? Код:
StrCmp $1 "а" 0 +2 |
Цитата:
Очередное приближение, как вариант а :drug: Код:
!include "MUI2.nsh" |
То что нужно, спасибо огромное.
|
Impeck,
Еще маленькая загвоздка, как известно NSIS хранит в переменной максимум 1024 символа расширенная версия NSIS хранит максимум 8192 символа (более подробно почитайте в справочнике по NSIS - > Расширенная версия NSIS Так вот при конвертировании одного символа - конвертированный символ занимает 5 символов, при превышении максимального хранения символов входной строки - будет обрезаться, т.е выходная строка будет обрезана до максимума хранения. ${NSIS_MAX_STRLEN} Здесь очень выгодно использовать расширенную версию NSIS. |
как правильно
SetShellVarContext all CreateDirectory "$APPDATA\Adobe\" SetShellVarContext all CopyFiles /SILENT "$EXEDIR\Data\Adobe\*.*" "$APPDATA\Adobe\" или SetShellVarContext all CreateDirectory "$APPDATA\Adobe\" CopyFiles /SILENT "$EXEDIR\Data\Adobe\*.*" "$APPDATA\Adobe\" ? |
Цитата:
|
Товарищи, есть ли комманда автоматически поместить ярлык программы на панель задач для windows 7?
|
Цитата:
|
Цитата:
В Inno примерно так пишется (подсмотел в скрипте): Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\PotPlayer"; Filename: "{app}\PotPlayerMini.exe"; WorkingDir: "{app}"; Check: "MakeQuickLaunchIcon"; BeforeInstall: "PinToTaskband ('{userappdata}\Microsoft\Internet Explorer\Quick Launch\PotPlayer.lnk')"; MinVersion: 0.0,6.01; |
Цитата:
Код:
#помещаем ярлык к блокноту |
kotkovets,
Других вариантов нет, без VBS? |
wolkow70, можно наверно через апи, а чем не устраивает "бейсик" ????
|
Цитата:
SetShellVarContext current CreateShortCut "$QUICKLAUNCH\User Pinned\TaskBar\Daum PotPlayer.lnk" "$INSTDIR\PotPlayerMini.exe" Как нибудь так не выйдет? По такому адресу ярлыки нашел: C:\Users\User\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar |
Цитата:
Ярлык создается для текущего пользователя, кто запустил у того и будет ярлык. Цитата:
1 запуск только от Vista и выше ОС 2. проверьте, где создается ярлык, и если он есть, то в деинсталляторе запускаем скрипт на удаление ярлыка. папка: C:\Users\UserName\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar ярлык: Имя заголовка приложение.lnk |
kotkovets,
При таком коде: SetShellVarContext current CreateShortCut "$QUICKLAUNCH\User Pinned\TaskBar\Daum PotPlayer.lnk" "$INSTDIR\PotPlayerMini.exe" ярлык создался по адресу C:\Users\User\Application Data\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Daum PotPlayer.lnk Но, в панели он визуально не появился. Перезагрузил систему, но, ярлык так и не появился. Хотя, в папке с ярлыками он есть. Видимо, его в реестр надо еще прописать. Программа из этого ярлыка вручную запускается. |
Закрепленные ярлыки хранятся в реестре
HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Taskband в двоичном коде... |
Подскажите пожалуйста, как на собственной кастомной странице реализовать выбор директории установки ?
В доке http://nsis.sourceforge.net/Docs/nsD...ctfolderdialog только одна строчка : Цитата:
В примерах NSIS\Examples\nsDialogs\InstallOptions.nsi - нечто подходящеее, но реализованное , как я понял, через INI файл... Тоже не то... |
Цитата:
|
Ещё такой вопрос : после редактировании ресурса NSIS\Contrib\UIs\modern.exe (размера окна) у меня посреди страницы
застряло начало BRANDING_а "Nuls.... " далеее обрыв. Где это дело находится, в каком ресурсе и как его устранить ? Также интересует, возможно ли использовать два ресурса MUI для разных страниц - к примеру для кастомной -откорректированный modern.exe, а для прочих, родной modern.exe ? |
Цитата:
по умолчанию: Код:
CONTROL "", 1028, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_GROUP, 5, 188, 322, 8 |
Цитата:
|
kotkovets,
Несколько вопросов по кастомной странице : Поясни пожалуйста назначение Function Directory в твоём примере. (И почему то без неё, выбор директории установки работает, а с ней - ругань при компиляции...) И где в коде должна быть запись : Page custom SelectDirectory Directory ? Ведь пользовательская страница уже создана записью типа : Page custom fnCustomInit fnCustomDestroy Каким образом осуществляется зависимое (ИЛИ-ИЛИ) переключение чекбоксов (двух и более) в коде кастомной страницы ? Почему при создании GroupBox имеем только надпись над группой, а не сам чекбокс, как при создании на обычной странице,(отключающий\включающий все чекбоксы, входящие в группу) ? Что для этого надо сделать ? Как реализовать отметку всех имеющихся на странице чекбоксов при помощи одной (или двух ?) кнопки ? Т.е. имеется несколько десятков чекбоксов (в группах в том числе). Нажал кнопку - все отмечены. Ещё раз нажал (или нажал вторую кнопку ?) - отметки сняты. |
Цитата:
Page custom pre post pre - имя функции[Функция которая будет выполнена при выполнении своей странички] post - имя функции[Функция которая будет выполнена при закрытии странички] Таким образом можно объявлять множесто своих страничек, эти странички и команды, функции в страничках - не работают при тихом режиме. Цитата:
Флажок-точка(радиобутоны) - системные контролы, зависимое переключение получается через системные ресурсы Если радиобутонов много, можно объединить в свои группы переключений. http://nsis.sourceforge.net/NsDialogs_FAQ (How to create two groups of RadioButtons) Цитата:
http://nsis.sourceforge.net/NsDialogs_FAQ nsDialogs::OnClick [хэндл контрола] [имя функции] Определять статусы контролов, как первоначальные, так при обработке событий ${NSD_SetState} [хэндл контрола] 1 - статус отмеченный, 0 - наоборот В функции, которая будет выполнена при закрытии странички удобно снимать статусы чекбоксов, радиобутонов ${NSD_GetState} [хэндл контрола] $var $var = 0 -> чекбокс, радиобутон не отмечен, 1 -> наоборот |
MKN, Пример к всему вышесказанному, будет полезно всем:
|
Что то не вышло использовать для $INSTDIR (InstallDir "$SysDrive:\App") переменную системного диска по способу
StrCpy $SysDrive $WINDIR 2 в Function .onInit. Есть ли какие иные способы для $INSTDIR ? зы А почему собственно в NSIS нет переменной системного диска ? |
Цитата:
Почитай синтаксис StrCpy - очень полезно для разбора строк, советую! открываем справку по nsis -> Перевод справки NSIS -> ExpandEnvStrings В справке почти все есть, для создания среднестатического дистрибутива! Код:
|
Подскажите , как решить такую задачу :
Создал прогресс бар на кастомной странице : Код:
Var ProgressBar1 В примерах всюду какой то Timer применяют... Или это для демонстрационной автономной "презентации" ? ps Хорошо бы дополнить справочник по NSIS, в разделе кастомные страницы, расширенным описанием и конкретными примерами для разных вариантов установок. А то сейчас по этому вопросу, информации обзорна и крайне скупа... |
Цитата:
и снимаем позицию бара - помещаем текст позиции над баром. Код:
SendMessage $PROGBAR ${PBM_SETPOS} 0 10 Код:
!include LogicLib.nsh |
То есть, можно сделать и обратное продвижение бара?
|
kotkovets,
Пример с баром красивый и наглядный, но это ведь будет отдельная задача, выполняемая при клике на конкретную новую кнопку "Создать файл", на имеющейся кастомной странице. А как быть , если на этой странице уже есть куча чекбоксов, с поставленной для них задачей, исходя из их состояния ? А задача эта будет выполнена так, как уже указано в Function fnCustomDestroy (причём после закрытия страницы, т.е после нажатия стандартной кнопки "Установить")... А если надо, чтобы задачи связанные с состоянием чекбоксов, были выполнены при нажатии кнопки "Создать файл" (Или всё таки можно при нажатии кнопки "Установить" ?) с индикацией прогресс баром, при открытой странице ? Получается надо как то перестроить все действия ? Как ? |
Цитата:
Пример использования таймера - системный цикл, который порождает отдельный поток основной программы, "многопоточное приложение", на примере таймер обновляет время частотой в 200 миллисекунд Цитата:
Создаем еще страничку свою с прогрессом, типа нажали кнопку, неужели так трудно подумать и включить мозг :) и конечная стандартная страничка финиша........ |
Цитата:
|
Цитата:
MKN специально для тебя :) |
Добрый день
нужен совет в таком деле. используем кастомные странички и кастомный UI.exe хочется на кастомных страничках, рядом со стандартными кнопками. Я "ресхаком" растянул диалог 1018 на все окно и теперь соответственно стандартных кнопок не видно. точнее он становятся видимыми, когда в тех местах, где они должны быть, поводить мышкой. пробовал кнопки "опустить ниже" не знаю как объяснить. Что бы он были как бы на переднем плане. не помогает. пробовал в скрипте прописывать, что он видимые что то типа ShowWindow .... ${SW_HIDE} результат тот же подскажите, можно ли диалог 1018 растянуть на все окно и что-бы стандартные кнопки при этом были видимыми? |
1018 и 1044 имеют похожий размер но используются по разному.
1044 для окна Приветствия и Финального 1018 для всех остальных. Можете создать свой любой другой контрол, к примеру 1304 и растягивать его как вам угодно, но учтите, что один контрол может перекрывать другой, здесь последовательность очень важна. Мало того, вы можете добавить графику CONTROL "", 1304, STATIC, SS_BITMAP | WS_CHILD | WS_VISIBLE, 0, 0, 332, 222 Чтобы рисунок заполнял всё окно, без просветов, мона даже нуна так CONTROL "", 1304, STATIC, SS_BITMAP | WS_CHILD | WS_VISIBLE, 65534, 65534, 334, 224 Но всё это можно сделать и по другому не трогая форму а вставить соответствующий макрос в скрипт -- |
Цитата:
я могу растянуть 1018 использовать его так? но когда растягиваю то получаю не то что надо. те кнопки есть но они появляются когда там мышкой проведешь.... при этом, как и писал ранее я кнопки переместил в ресхаке сначала 1018, потом кнопки и в ресхаке их видно вроде все логично скорее всего я что-то не так делаю...хз... |
yyv, А вот чем не устраивает 1044....
|
Цитата:
Я немного догадываюсь, что вы хотите сделать, вы можете поступить немного иначе..... Может вам проще будет использовать SpiderBanner плагин, он примерно в стиле MSI. Он автоматом скрывает окно NSIS на время выполнения, после окно NSIS восстанавливается. |
Я наверное действительно плохо объясняю. попробую еще раз
вот код 105 диалога из ресхака не суть важно, буду я рисовать в 1018 или в 1044 контроле. результат везде один и тот же. сейчас, к примеру, я использовал контрол 1044 я его растянул не на весь диалог, а на середину кнопок, чтобы было более наглядно. вот скрины на этом ![]() видно. что кнопки на половину закрыты (если бы контрол 1044 был растянут на весь диалог, то кнопок не было бы видно совсем) вот второй скрин ![]() это состояние кнопки после того как на ней поводить мышкой, она появляться. мне нужно, что бы контрол был растянут на весь диалог. И что бы стандартные кнопки при этом был видны сразу. пробовал разные сочетания этих конструкций Код:
если что-то еще не понятно, спрашиваете, попытаюсь объяснить. |
yyv, Я все прекрасно понял, что вы хотите! поэтому предложил 1044 в своем примере
Вы не добьетесь желаемого результата стандартными средствами NSIS, для этого есть плагины или написать свой плагин, коль разбираетесь в языках программирования, хотя не факт, каким то образом можно сделать плагином system - входящий в комплект стандартной поставки NSIS - вызовами WinAPI. Я имею ввиду, 1044 растянуть до кнопок, а на поверх кнопок, наложить фоновую картинку под цвет основного фона, примерно как это сделано в ExperienceUI и за одно можно наложить текстуру кнопок под цвет фона - есть такой плагин на офф.сайте |
kotkovets, дело в том, что мне нужно не просто растянуть контрлол на весь диалог, а мне нужна возможность рисовать необходимые мне элементы в нижней части.
например добавить чекбокс между кнопками или возле кнопки добавить лейбл и картинку и я уже завис совсем и ни чего не понимаю... вот к примеру я создаю страницу и в диалоге у меня к примеру контрол Static например 1149 если я добавлю после Show nsDialogs::Create 1149 то это же я так понимаю не правильно.... как мне на этом контроле на одной страничке также с помощью nsDialogs (ну или с любой другой помощью) нарисовать нужные мне элементы? или я все таки не понимаю самой сути процесса? появилась идея.. попробую вечером... но вопрос открыт :) |
Цитата:
Вместо 1018 или 1044, которые могут Вам ещё пригодится, использовал 1099, контрол 1055 используйте для подложки цвета в тон вашего основного. Также рекомендую использовать плагин SkinnedControls |
kotkovets,
Всё-таки никак не решён вопрос - как произвести все необходимые действия на одной единственной кастомной странице ? И выбор чекбоксов и выполнение задачи с индикацией прогресса. Не создавая более никаких других страниц ! |
MKN, а в чем проблема? рисуем страничку со всем необходимым, обрабатываем события, снимаем статусы чекбоксов или радиобутонов, назначаем событию функцию и в этой же назначенной функции изменяем позиции бара
и делаем все необходимые действия, оставаясь на этой же странице. Код:
Function Install А чтобы не морочиться прогрессом, используем стандартную страничку установки |
kotkovets,
Вроде разобрался с этим моментом (полтыщи строк, путаюсь очень...). Спасибо. Теперь никак не получается закрыть кастомную страницу (по сути закрыть скрипт, выйти из него) после : Код:
MessageBox MB_OK "Файл успешно создан!" IDOK Почему то вообще не действует : Код:
Section |
Цитата:
Код:
SendMessage $HWNDPARENT 0x408 1 0 Код:
Function CreateFile |
Было несколько решений реализации страницы Readme, наконец решил переделать по нормальному из страницы лицензии.
PageReadme_NSIS.zip ---- |
sawe, Все хорошо, но есть серьезные недостатки,
Код:
!include "MUI2.nsh" Код:
4 warnings: Например, я в скрипте не указал цвет Код:
!define MUI_READMEPAGE_BGCOLOR Код:
!ifndef MUI_READMEPAGE_BGCOLOR |
sawe, подскажите, как мне подложить картинку в нужный мне контрол к примеру в 1055?
вот я рисую страничку используя nsDialogs::Create не важно 1018 или 1044 или 1099 нарисовал, отобразил как в контрол 1055 вставить нужную картинку? это нужно PRE функцию вызывать? или как? вроде что-то получилось.... |
Цитата:
---------- CONTROL "", 1055, STATIC, SS_BITMAP | WS_CHILD | WS_VISIBLE, X, X, X, X ---------- Если я не ошибаюсь, то MUI2 функция PRE занята. Откройте NSIS\Contrib\Modern UI 2\Interface.nsh и посмотрите, как реализуется следующее ---------- SetBrandingImage /IMGID=1055 /RESIZETOFIT "$PLUGINSDIR\картинка.bmp" ---------- или универсальный макрос В nsDialogs, если рисунок не перекрывается ни чем, делается просто ---- Цитата:
По быстрячку не прошло, бум карпеть! |
sawe,
получилось в этот момент там было очень много мата и слюней радости, ибо уже более трех дней бьюсь с этой проблемой :) вот мой контрол Код:
CONTROL "", 1139, STATIC, SS_BITMAP | WS_CHILD | WS_VISIBLE, 0, 250, 462, 43 Код:
;) как мне сделать фон в BrandingText нужным мне? использую BrandingURL plug-in пробую Код:
фон системный серый... |
Цитата:
которая будет выполнена перед открытием странички. Цитата:
BrandingURL::Set /NOUNLOAD [R] [G] [b] [link_url] |
Цитата:
а мне нужно задать цвет фона под текстом в итоге цвет фона вокруг у меня светло синий цвет линка черный, а цвет под линком серый прямоугольничек..)) PS Получилось просто Код:
GetDlgItem $0 $HWNDPARENT 1028 |
Цитата:
и смотрим --------- GetDlgItem $mui.Branding.Background $HWNDPARENT 1028 SetCtlColors $mui.Branding.Background /BRANDING --------- надеюсь понятно SetCtlColors $mui.Branding.Background ${MUI_BGCOLOR} transparent тоже самое с 1256, эти контролы 1028 и 1256 работают вместе -- |
Цитата:
Код:
!include "MUI2.nsh" только после применения плагина Код:
;функция плагина |
Цитата:
не я как бы знаю что это прозрачность? но что это даст в данном контексте? |
SetCtlColors $mui.Branding.Background ${MUI_BGCOLOR} transparent
это тоже самое как SetCtlColors $0 0x0000FF transparent SetCtlColors - команда $0 - для кого 0x0000FF - цвет объекта transparent - цвет прозрачности фона Только одно я не могу понять, а на кой вам этот Branding, придушите его и вместо него используйте простую ссылку, тогда и плагин не нужен. |
sawe, это же была одна из проблем, как ее нарисовать там где Branding? ведь контролы 1044 и 1018 мне пришлось поднять выше кнопок, а Branding должен был быть как раз на уровне с кнопками...
это была одна з причин, почему растягивали контрол, что бы иметь возможность в любом месте нарисовать то, что нужно... но уже и так работает и то хорошо.... осталось так марафет навести по мелочи :) вы мне лучше вот что скажите какие единицы измерения использует Resource Hacker? это явно не пиксели, ибо когда я ввел нужные мне пиксели для размера окна, то итоговое окно оказалось больше пикселей на 200 вот у меня окно должно быть 665 на 485 px а введено 105 DIALOGEX 0, 0, 440, 285 линеечкой померил,итог - нужный мне размер как конвертировать единицы что бы не на глаз вводить? |
yyv, ликбез
В NSIS получить базовую единицу: Код:
System::Call "user32::GetDialogBaseUnits()i.R9" Это вам Вам надо???? это выходит за рамки темы.. |
Цитата:
Ни чего страшного если они будут дублировать базовые, к примеру Branding. Цитата:
Лучше чем kotkovets вам это ни кто не объяснит, если у него хватит терпения. |
kotkovets, спасибо, как раз то что надо было... все искал где про вин апи почитать..)
|
Цитата:
Там я "вкратце" описал возможности и синтаксис плагина. |
подскажите. может есть другая возможность :)
вот я делаю к примеру лейбл константа ${NEW_DESK_TITLE} содержит предложение. в котором одно слово мне нужно сделать жирным сейчас я это делаю так создаю поверх лейбл с одним нужным словом делаю ему Код:
CreateFont $hCtl_CustomLicensePage_Desk_Font "Microsoft Sans Serif" "8.25" "700" но этот вариант меня не очень устраивает. может ест возможность делать что-тот типа такого "текст текст текст текст текст текст <b>этот текст жирный</b>" что бы не городить лишних конструкций |
Цитата:
контрол к предыдущему контролу, чтобы получился "монолитный текст" Можно пойти по сложному пути, нарисовать контрол - "RichEdit20A" там можно текст подгонять специальными тегами, но это будет слишком сложно для Вас... http://nsis.sourceforge.net/LoadRTF http://nsis.sourceforge.net/Componen...rtf_formatting Проще нарисовать еще один "Label" :drug: |
Требуется найти в $INSTDIR, файл с произвольным именем и расширением .msi
Использую команду FindFirst Код:
Name "Find" Но в MessageBox вместо внятного имени - набор цифр... Почему ? И что надо сделать ? |
Вообще здесь цикл...и значения стремительно меняются
Цитата:
K.A.V. попутал переменные, поэтому страдают неискушенные пользователи :) ------ MKN в твоем примере, сообщение покажет только последний найденный файл. |
kotkovets,
Я "искусился", первым делом изменив переменную в MessageBox MB_ICONINFORMATION|MB_OK "В $INSTDIR найден файл $1" IDOK Только при этом вообще никакой информации о файле... Файл один, и надо бы узнать его имя и занести в переменную... |
MKN немного не то имел ввиду:
StrCmp $1 "" done - выход из цикла, если $1 == пустому значению Поэтому и будет всегда по окончанию поиска, пустое сообщение. А имена найденных файлов в $1... Код:
FindFirst $0 $1 $INSTDIR\*.msi !include "FileFunc.nsh" - не забудь включить хидер в тело скрипта Цитата:
Код:
FindFirst $0 $1 $INSTDIR\*.msi |
Есть ли, надёжные способы удаления в Windows 7 системного, защищённого файла
|
Цитата:
Цитата:
а потом с помощью icacls.exe назначить полный доступ к этому файлу ? По моему на winreview.ru про это подробно говорилось... |
Цитата:
2. Работаем непосредственно в цикле Код:
FindFirst $0 $1 $INSTDIR\*.msi Цитата:
takeown /? icacls /? |
Доброго времни суток, вопрос такоей, как можно сконвертить CMD/BAT файл в nSIS
Вот пример файла... просто после миллениумовской версии винды, параметр CHOICE не рабоатет. В частности не на XP не на более выше не идет +( Кто сможет помочь? Сразу скажу не нуб в этом деле, делаю портайбл прилоджения на nSIS но вот это привело в тупик! PHP код:
|
Вот такая задача : необходимо чтобы на кастомной странице, на которой имеются несколько чекбоксов и кнопка (по умолчанию не активная) - эта кнопка становилась и оставалась активной, при отметке любого чекбокса (одного, нескольких или всех).
Когда же все отметки сняты кнопка ессно перестаёт быть активной. В примерах имеется код только для одного чекбокса и кнопки : Код:
!include "nsDialogs.nsh" |
Цитата:
Цитата:
Есть плагин на офф. сайте по работе с сервисами, ссылка в шапке. |
Цитата:
Набросай пожалуйста если есть время... Тут смысл в том... что снавал определяется версия разрядности винды.. 32 или 64 (плагин GetVersion) потмо запускается установщик дров майкрософтовский из Sdk мелгомягких (не спрашивайте от куда я его открутил, это очень долгая история), но от версии винды меняется имя уставнощика, После того как драва установились... дальше идет работа скрипта, запускается ADB процесс (работает обчно с командной строки) - (приложение для работы с Android смартфонами) оно определяет, какой структуры файловая система смртфона, если Generation 1 - то далее вопрос какой файл устанавливать.. CLW или FTM также если у тея Generatoion2... вот какбы так установка на смартфон идет также через ADB (с командной строки)... вот както так... ну и в конце сообщение - энжой! и перегружается тело... |
Цитата:
Код:
!include "x64.nsh" Код:
ExecWait `Путь к \dpinst.exe "Ключи запуска"` $0 смотрим ключи запуска dpinst.exe /? или как то dpinst.exe /help Cоответственно dpinst.exe заводим соответствущий разрядности системы. Далее заводим приложение для смартфона, что оно возвращает без понятия (код возврата) Код возврата нужен для точного определения структуры файловой системы смартфона Затем анализируем код возврата, строим логику какой файл устанавливать в зависимости, что возвращается и ребутимся. План таков - деталей я не знаю, это все, чем я могу помочь... |
Спасибо да, разобрался +) сделал через ( GetVersion::WindowsPlatformArchitecture) все сделал, остался вопрос на последок.. как в MessageBox кнопкам присовить свои названия, чтобы не оК и Отмена а к примеру Проверка 1 и ПРОверка 2 ?
|
вопрос про картинки в nsis
Я знаю что из "коробки" nsis понимает только BMP для загрузки картинок в контрол используются следующие методы NSD_SetImage - загрузить картинку как есть NSD_SetStretchedImage - загрузить подогнав ее под размеры контрола что бы использовать другие форматы например jpg можно инклюдить файлns Dialogs_setImageOle и использовать NSD_SetImageOLE NSD_SetImageOLE загружает картинку как есть вопрос в следующем, есть ли аналоги SetStretchedImage но для jpg? что бы можно было загрузить jpg картинку и подогнать ее под размеры контрола? |
Цитата:
Код:
ExecCmd::exec /TIMEOUT=1000 'takeown.exe /F $SYSDIR\Файл.sss' |
Цитата:
Был такой плагин - messagebox v0.98 beta 3, погуглите, под рукой этого плагина нету, если не найдете выложу позже. Цитата:
В Win7 попробуйте для начало командной строкой, через апи очень сложно это делать(многие апишки дают отбой намеренно, нужно эти апи вызывать в привелегированном режиме, это не то, типа запуск от админа, хотя тоже нужен :)). вирус в итоге получится сделать...это я об антивирусных программах - завизжат, как пить дать!!! Цитата:
по названию вызываемой функции - найдете прототип, соответственно описание принимаемых аргументов :) инкдюдить - наверно нельзя :lol: |
kotkovets,
хм, я следовал этой логике до того как задал вопрос.. но дело в том что я или не понял или не то нашел... сначала я посмотрел как это делается с SetStretchedImage там сначала с помощью GetClientRect узнают требуемые координаты, а затем подставляют их в LoadImage Код:
HANDLE WINAPI LoadImage ( Код:
__in Int cxDesired, Dialogs_setImageOle использует OleLoadPicturePath Код:
HRESULT OleLoadPicturePath ( Код:
__in Int cxDesired, выходит используя OleLoadPicturePath я не могу сделать то что мне нужно? |
Цитата:
Судя по описанию функции - нельзя Как узнать, что это: Код:
System::Call 'oleaut32::OleLoadPicturePath(w"${IMAGE}", i0, i0, i0, g"${IID_IPicture}", *i .r0)i.r1' Код:
w"${IMAGE}" -> szURLorPath |
Цитата:
|
Цитата:
|
kotkovets :Beer: спасибо за направление на путь вот собрал :)
PHP код:
|
Возможно ли изменить параметры шрифта в MessageBox ?
|
MKN,
Нет и также это касается переименованием кнопок, все ресурсы MessageBox берутся из системной библиотеки user32.dll |
kotkovets,
А возможно ли вместо стандартных неприкосновенных MessageBox, вызывать-запускать сообщения, в виде всплывающего собственного окна-странички с текстом или, на худой конец в виде графической картинки ? |
MKN, плагин нужен писать, не умеет nsis четко работать "напрямую" через api callback (с функциями обратными вызовами) , я имею ввиду, чтобы все получалась красиво и без глюков :beta:
|
Здравствуйте всем! Скажите пожалуйста, есть ли в NSIS возможность вызова окна диалога не как следующей или предыдущей страница (по кнопкам next/prev), а по нажатию кнопки, например, advanced или browse (для дополнительных настроек в отдельном окне или выбора файла в диалоге openfile).
|
Цитата:
#960 или так #956 |
Вопрос в том, чтобы открывать дополнительное окно не закрывая основное окно страницы инсталлятора.
|
kotkovets,
Подскажи пожалуйста, а как подкорректировать вышеприведённые примеры, чтобы при нажатии кнопки отметки всех чекбоксов, "кнопка" становиласьь активной ? Вот так, при нажатии кнопки отметке всех чекбоксов "кнопка" не активна : Код:
!include "nsDialogs.nsh" |
Цитата:
выполнится при при обработке события - DisableButton Соответственно: Код:
Function ButtonClickCheckBox |
Цитата:
|
Что то я не нашел описания для действий DropList, попробовал через NSIS Dialog Designer, какая дрянь этот Dialog Designer.
Прошу помощи? PS. примерно такое. -- |
Цитата:
${NSD_GetState} - это метод для чекбоксов и радиобутонов! --- --- ${NSD_GetText} $DropList $LngName - для текстовых контролов, считываем текст контрола |
Спасибо, а то зациклился почему то на listbox, а слона то и не заметил...
${NSD_LB_GetSelection} listbox_HWND output_variable -- |
sawe, кстати насчет CommCtrl.nsh - офигительный хидер!
Сейчас на этом хидере отрисовку TreeView налаживаю - подобно как страничка выбора компонентов! С деревом выбора + иконочка к каждому чекбоксу + сворачивать дерево. Может и выложу когда нибудь по секрету как это делается... |
Цитата:
... |
Уважаемый товарищ kotkovets,
Столкнулся с такой проблемой, что при работе с файлом ответов не срабатывают секции из группы радиобутона отмеченные как /o код секции: Section /o "Создать однопользовательскую установку" AllUser ${GetSecWriteSucces} AllUser ${If} $SUCCES_SECTION = 1 SetOutPath "$INSTDIR" File "${pkgdir}\FastStone Image Viewer\FSSettings.db" File "${pkgdir}\FastStone Image Viewer\Portable.db" ; SetShellVarContext current RMDir /r "$APPDATA\FastStone\FSIV\" ${EndIf} SectionEnd Я думал, что при установке ${If} $SUCCES_SECTION = 1 имеет приоритет над /o Получается, что генератор ответов и радиобутоны несовместимы? В файле ответов AllUser=1 |
Цитата:
Но при запуске установщика секция по умолчанию не отмечена... Генератор не влияет на флаги секций, делайте программно расставляйте, указывайте флаги инсталлятора в различных режимах запуска, для таких дел есть хидер Sections.nsh - там куча макросов воздействия на секции программно. |
Цитата:
Только тип устанвоки получается "по выбору", а без флагов "полный". |
wolkow70, я что нибудь говорил про типы установок? коль вы мое предыдущее сообщение не читали,
даже не пытаясь поработать с section.nsh, то очевидно - вам это не нужно, тем более мне. |
Цитата:
|
Цитата:
SectionGetFlags: получаем статус секции SectionGetText: получаем название секции SectionSetFlags: устанавливаем статусы секциям SectionSetText: назначаем название секции Через section.nsh очень удобно использовать эти команды пару дней тренировок на разборки и + применить правильно - больше ниче не нужно! |
kotkovets,
Мне алгоритм решения задачи до конца не ясен. То есть, нужно получить имя и статус секции, назначить ей другое название и изменить статус? А как связать это с генератором ответов потом? Просто прописать в файле ответов значение другой секции? |
Цитата:
Код:
!include "MUI2.nsh" |
Похоже для начала как-то так:
SectionGetFlags ${AllUser} $0 IntOp $0 $0 | ${SF_SELECTED} SectionSetFlags ${AllUser} $0 Тут сложность в том, что незвестно поведение пользователя. Исходно, имеем радиобутон на две кнопки: 1. Многопользовательская установка (по умолчанию включено) MultiUser 2. Однопользовательская установка (по умолчанию отключена /o) AllUser При ручной установке все работает. По файлу ответов AllUser не отрабатывет. Не известно какой вид установки будет выбран. Видимо после этих секций вставить функцию SectionGetFlags ${AllUser} $0 IntOp $0 $0 | ${SF_SELECTED} SectionSetFlags ${AllUser} $0 Попробовал скомпилировать ничего не получилось. |
wolkow70,
Для генератора важно, что бы секция просто была отмечена. Условие работы генератора Тихий режим и файл конфиг, я вам дал пример программной отметки секции, больше ни тут ниче и не нужно, в огород не ходи. |
Цитата:
${If} ${FileExists} "$EXEDIR\config.ini" !insertmacro SelectSection ${AllUser} ?? Но там и так эта функция гигантская и в какое место тогда логичнее вставить? Код:
Function .OnInit |
Цитата:
Код:
Function .OnInit если узнаем, что юзер отметил - отмечаем программно нужную секцию. Это вам задачка будет поучиться... |
Цитата:
Имеет значение секция с каким типом установки выбрана и прописана в файле конфигурации. Что-то так примерно... Код:
Function .OnInit ${EndIf} ${EndIf} FunctionEnd так не компилируется, пришлось расставить ${EndIf} ${If} ${Silent} и так не компилируется, пришлось закоментировать. |
Цитата:
Код:
${If} ${Silent} Код:
StrCmp $0 "1" 0 +2 |
Цитата:
${EndIf} ${EndIf} FunctionEnd Цитата:
И почему-то с ${If} ${Silent} показывает логическую ошибку |
wolkow70, на глупые вопросы не буду отвечать, ищите ляпы в своем скрипте,
все компилится и работает. И функию .OnInit следует прописать в скрипте, после определения всех секций, это нужно компилятору. |
Цитата:
Если конструкцию закрыть так ${EndIf} ${EndIf} FunctionEnd , то компилиться, но секция АllUser не отрабатывает. А если расставить как у меня , то отрабатывает. |
${If} ${Silent}
${If} ${FileExists} "$EXEDIR\FSImage.ini" MessageBox MB_OK "файл конфигурации есть" ReadINIStr $0 "$EXEDIR\FSImage.ini" "Sections" "AllUser" MessageBox MB_OK $0 ${If} $0 == 1 !insertmacro SelectSection ${AllUser} ${Else} ${EndIf} ${EndIf} ${EndIf} ${EndIf} FunctionEnd Вот так компилируется, но секция не отрабатывает все равно... |
kotkovets,
${EndIf} ;========================================================================================== ${If} ${Silent} ${If} ${FileExists} "$EXEDIR\FSImage.ini" MessageBox MB_OK "файл конфигурации есть" ReadINIStr $0 "$EXEDIR\FSImage.ini" "Sections" "AllUser" MessageBox MB_OK $0 ${If} $0 == 1 !insertmacro SelectSection ${AllUser} ${Else} ${EndIf} ${EndIf} ${EndIf} FunctionEnd Вот так работает. Я через логическую конструкцию стал запускать макрос. Но, если ${EndIf} сверху перетащить вниз, то секция перестает отрабатывать. То есть, первую логическую конструкцию приходится закрывать перед открытием второй. Видимо конфликтует что-то внутри функции.. |
wolkow70, Ну слава богу!
Код:
${If} ${Silent} начало и конец каждой логики, чем лепить все в один столбик - легко запутаться. |
у меня есть вопрос
вот я создаю контрол с линком Код:
${NSD_CreateLink} 235u 220u 40u 15u "${TERMS_LINK}" Код:
${NSD_OnClick} $Custom_Page_link onClickMyLink Код:
Function onClickMyLink или можно как то передать параметрами? что тот типа Код:
${NSD_OnClick} $Custom_Page_link onClickMyLink (link) Код:
Function onClickMyLink (link) |
Цитата:
|
Товарищи, нет ли в NSIS комманды обновить все иконки в системе.
${RefreshShellIcons} не катит. Смысл в том, что при установке подменяется файл с иконками типов файлов и надо его сразу подключить, а то почему-то старые отображаются (видимо сохраняются в системе от старой установки). |
Цитата:
Refresh Desktop или это Refresh shell icons или это RfshDktp plug-in Кто нибудь пробовал File Association ? ... |
Цитата:
Можно взять за основу макрос из скрипта от сборки AIMP (тут выложен на форуме) и доработать его. Цитата:
|
Цитата:
Код:
+ изменение размера иконки в HKCU\Control Panel\Desktop\WindowMetrics\Shell Icon Size |
Цитата:
А мне нужна такая комманда в формате NSIS скрипта. |
wolkow70, первой-же ссылкой - http://lmgtfy.com/?q=%22Shell+Icon+Size%22+NSIS
|
Цитата:
ReadRegStr $0 HKCU "Control Panel\Desktop\WindowMetrics" "Shell Icon Size" IntOp $0 $0 + 1 WriteRegStr HKCU "Control Panel\Desktop\WindowMetrics" "Shell Icon Size" $0 SendMessage 0xffff 0x001A 42 0 /TIMEOUT=100000 IntOp $0 $0 - 1 WriteRegStr HKCU "Control Panel\Desktop\WindowMetrics" "Shell Icon Size" $0 SendMessage 0xffff 0x001A 42 0 /TIMEOUT=100000 PS: Thank You |
Цитата:
|
Дак себе то я сделал :)
Прикрепил скрипт от своей сборки PotPlayer. Посмотрите, как там сделано . У меня все прекрасно работает. |
возможно сделать так, чтобы установшик воспроизводил песню как в Inno Setup ? :unsure:
|
Цитата:
|
Цитата:
А также с помощью bass.dll (отдельно нужно искать(version 2.0.0.23), где то есть даже пример в сети с кнопками, не помню) http://forums.winamp.com/showthread.php?t=195814 еще : http://nsis.sourceforge.net/Play_Sound Вообщем то давно этим занимался, возможно sawe лучше меня разъяснит. :) |
kotkovets, спасибо :)
wolkow70, спасибо :gitara: :up2: |
Цитата:
Цитата:
-- |
sawe, большое спасибо, попробую
|
Цитата:
Можете еще посмотреть оригинальный скрипт VLC Player. Там тот же макрос , что и в хедере задействован, только через функцию, что на мой взгляд более гибко, чем хедер переделывать. |
Цитата:
|
Цитата:
|
Я же только подумать обещал, а не сделать.
Реально попробовал с этим хедером работать. Намного более ограниченная вещь, чем переделанный макрос от сборки Aimp. |
Часто сталкивался с задачей, когда много DLL-ок, нужно положить в системную папку.
А если такие DLL-ки уже существует и даже кем-то используются, и таких если возникает много. Вот накалякал простой макрос для подобного случая. Вопрос такой, а стоит овчинка выделки? -- |
Здравствуйте, возможно ли разбить установочный файл на части?
Например это полезно при очень больших размерах установочного пакета, тогда, если разбить пакет на небольшой исполняемый файл и файлы данных (в формате BIN или PAC), инициализация установки будет происходить быстрее. |
Цитата:
VC++ 2005 - 2010 и .NET платформ.(фрамеворки) Cоответственно простая проверочка на установку этих продуктов достаточно. Цитата:
Лучше создать многотомный архив(к примеру каждый том по 100 метров), а установочным файлом распаковывать архивы. |
Да, действительно очень жаль, а у вас есть рабочие примеры, предложенной вами схемы?
|
На x64 это точно сработает?
ExecWait '$SYSDIR\RegSvr32.exe /s "$SYSDIR\ContextMenu.dll"' .. |
Цитата:
|
Добрый день!
У меня не работает KillProcDLL::KillProc "iexplore.exe" Браузер не закрывается |
|
Цитата:
|
Цитата:
.. |
как скрыто запустить батник, как в 7-zip sfx ?
|
vahe-91, Попробуй стандартный плагин
Код:
nsExec::Exec "file.cmd" http://nsis.sourceforge.net/ExecCmd_plug-in Пример создания SFX архива Код:
ExecCmd::Exec 'COPY /b "Путь\7ZSD_LZMA2.sfx" + "Путь\config.txt" + "Путь\Archive.7z" "Путь\app.exe"' |
Цитата:
Код:
Pop $0 |
Цитата:
уверенностью сказать, как отработала прога. Код:
Pop $0 У меня так конструктор на руборде организован на кодах возврата - и я узнаю сразу в чем проблема |
kotkovets, еще хотел спросить, из-за чего может создание деинсталятора задержатся примерно на пол минуты ?
|
Цитата:
|
Цитата:
|
vahe-91, закомментируй команды последовательно, пока не исчезнет "эффект"
удаление плагом аль стандартными командами? циклы есть? |
Цитата:
Код:
setregview 32 |
Ясно, если стока строк - то только оптимизация кода немного может.
Деинсталлятор то компилится на "горячую руку"...поэтому такая задержка. Цитата:
из глубоких логических конструкций и циклов! посему советую использовать логические конструкции (обертки переходов на уровне компилятора) работает быстрее, ведь код сразу компилится, а при goto установщик прыгает в процессе установки!т.е установщик еще не знает, что ему подсунут :) |
kotkovets, спасибо, попробую избавится от goto :)
|
Попробуй, но не гарантирую, что будет "существенно" быстрее, трудно судить не видя проблемного кода,
если все таки есть цикл - это и есть тормоз, ведь ему надо "двигать" прогресс - это существенно замедляет работу в целом Здесь только поможет макрос писать с использованием хидера Util.nsh - который основан на функции и перехода по абсолютной метке - это сильно ускоряет работу цикла. Если надо могу показать такой пример цикла. |
kotkovets спасибо за советы,если сам не справлюсь, отправлю скрипт по ПМ, если у вас будет время, посмотрите ? :)
|
да ради бога, сейчас не буду смотреть - позже.
|
макрос FileAssociation.nsh скачанный отсюда http://nsis.sourceforge.net/File_Association пишет в HKCR, а мне нужно в HKLM \SOFTWARE\Classes. Если я в FileAssociation.nsh изменю все HKCR в HKLM "SOFTWARE\Classes", то будет все корректно работать ? если уже есть исправленная версия дайте ссылку пожалуйста.
|
Цитата:
Ну коль зачесалось, то меняй HKCR или HKLM расставь для отладки в макросе сообщения для наглядного просмотра и правки макроса, если нужно: Код:
MessageBox MB_OK "$$R0 = $R0$\n$$R1 = $R1" нетрудно сопоставить с нужными тебе ветками реестра. Еще имеет смысл $R0 - в кавычки одеть. Код:
WriteRegStr HKCR "$R1" "" "$R0" |
Чет не врубаюсь, почему InstallDirRegKey не хочет брать путь из реестра? 100500 раз проверял путь в реестре - все правильно и запись существует. Если закомментировать InstallDir "$PROGRAMFILES\Directory", тогда поле "Папка установки" в ингаляторе вообще пустое.
Код:
!define PRODUCT_NAME "TeamSpeak 3 Client" |
Цитата:
Код:
;Default installation folder А ваш InstallDirRegKey не соответсвует, тому что нужно, 100% Код:
InstallDirRegKey HKLM "Software\TeamSpeak 3 Client" "" Цитата:
Код:
ReadRegStr $0 HKLM "SOFTWARE\TeamSpeak 3 Client" "" |
Код:
ReadRegStr $0 HKLM "SOFTWARE\TeamSpeak 3 Client" "" Код:
Windows Registry Editor Version 5.00 |
Цитата:
InstallDirRegKey - имеет доступ только к 32-разрядному виду реестра. Поэтому нужно редирект делать в первой функции. Для начало подключаем хедер к телу скрипта - !include x64.nsh Код:
Function .OnInit |
подскажите как & вставить в лейбл?
в место него просто пробел вставляется $\& - не помогает... другие сочетания с '/' '\' также не помогли ( |
2 раза написать не пробовали: test&&
|
А что за версия NSIS 2.46.3 ? Не официальная какая то ?
Наткнулся здесь : http://dl.dropbox.com/u/40510768/NSI...2011-10-25.exe |
Цитата:
|
Цитата:
не знал... :) |
нужно, чтобы вместо "Извлечение: имя файла" на странице MUI_PAGE_INSTFILES был другой текст
в самом начале секции пишу Код:
Section "Gago" |
|
kotkovets, спасибо :)
В справочнике нашел, что-то подобное, в Примеры кодов - Интерфейс модерн - Ресурсы интерфейса. Там изменен этот текст на "Установка приложения...", но немного по-другому. |
Цитата:
как только появляются команды - установщик вносит надписи стандартных команд быстро, отсюда "мелтешь" контента. |
Что-то я не пойму почему файл так не работает
File /oname= ${PATH_OUTPUT}\${PRODUCT_OUTPUT_FILE_NAME} ${pkgdir}\${PRODUCT_FILE_NAME} Все заработало |
Почему
Exec "firefox.exe" не работает? |
Цитата:
в папке Windows и Windows\system32 Указывайте явный путь к "firefox.exe" |
Уважаемый товарищ kotkovets,
Некоторое время назад, преимущественно Вашими усилиями, мы работали над функцией: Function un.INSTFILES_LEAVE В общем виде выглядит так: UninstPage custom un.INSTFILES_LEAVE Section Uninstall UnRegDLL "$INSTDIR\DefragglerShell.dll" ; ;-бла-бла-бла RMDir /r /REBOOTOK "$INSTDIR\" SetAutoClose true SectionEnd Section "Un.Перезагрузка Проводника Windows" RestartExplorer SectionIn 1 ExecWait 'taskkill /F /IM explorer.exe' $0 DetailPrint "taskkill exit: [ $0 ]" Sleep 500 StrCmp $0 0 0 +2 Exec "explorer.exe" Delete "$INSTDIR\DefragglerShell.dll" RMDir /r "$INSTDIR\" SectionEnd ; Function un.INSTFILES_LEAVE ${If} ${FileExists} "$INSTDIR\DefragglerShell.dll" SetRebootFlag true ${Else} SetRebootFlag false ${EndIf} FunctionEnd Выявилось следующее: Если удалить программу с использованием данной функции, и затем переустановить снова, то после перезагрузки компьютера файл DefragglerShell.dll (или аналогичный) все равно удаляется физически, так как оказывается прописанным в ключе реестра HKLM\SYSTEM\CurrentControlSet\Control\Session Manager "PendingFileRenameOperations" Приводит это к последующей неработоспособности программы. В данном случае мне не понятно, почему файл прописывается на удаление, если мы сняли флаг перезагрузки? |
wolkow70,
Код:
RMDir /r /REBOOTOK "$INSTDIR" |
|
wolkow70,
Говорит о том, что если файл по какой либо причине не удалится, то удалится при перезагрузке. |
Цитата:
(даже, если при этом, при предварительной деинсталляции файл был удален через функцию)? |
kotkovets,
Тут еще дело в том, что /REBOOTOK удалять не желательно, так как это относится к стандартной функции удаления, в то время как Function un.INSTFILES_LEAVE - эксперементальная функция. Придется лучше от нее отказаться. |
Помогите пожалуйста!
есть файл реестра как мне добавить эту запись в реестр используя NSIS скрипт? |
Цитата:
Код:
WriteRegDWORD HKLM "SOFTWARE\ESET\ESET Security\CurrentVersion\Info" "PackageFeatures" 0x1 |
Стоит следующая задача:
Есть нейкий инстолятор programma.msi и есть дополнение к ней fix.bat Нужен скрипт, чтоб на выходе получился инстолятор progfix.exe , учитывая что при запуске progfix.exe сначала устанавливается programma.msi затем, после окончаельной установки запускался fix.bat Буду благодарен за помощь |
Цитата:
Вы то хоть сами то, что сделали шаг к поставленной задаче? |
Еслиб это было так просто я бы сам смог. Я прошу помощи.
|
Цитата:
Код:
ExecWait 'msiexec /i "Путь к\programma.msi" /qb' |
Вот скрипт антивируса:
Код:
!include "$%WinDir%\Temp\ESETSIM\defines.txt" |
М-дя, давно такого "кодынга" не видел....все таки логические операторы рулят однозначно(логичекие конструкции)
Не запутались прыгать и скакать по меткам? :o О_о :) Код:
ExecWait 'msiexec.exe /i "$TEMP\EsetSIM\$setup.msi" /$silent' системная временная папка определяется так: $TEMP |
целый день мучаюсь. сча попробую еще раз
Цитата:
|
Цитата:
Там все разжевано! $EXEDIR — папка, откуда запущен инсталятор |
вот что вышло:
Код:
!include "$%WinDir%\Temp\ESETSIM\defines.txt" |
Заметил странность! Если запускать готовый конечный инстолятор и положить рядом фикс - то работает! А если запускать истолятор с пустой папки то фикса нет!
|
kotkovets, если не применять фикс, а в место этого добавить ветки реестра в скрипт (которые применились после инстоляции setup.msi) то что и как мне надо прописать?
вот ветки реестра: Код:
Windows Registry Editor Version 5.00 |
У вас в батнике прописаны импорт кустов реестра, то это однозначно в 1000 раз лучше.
Код:
ExecWait "msiexec bla bla" |
kotkovets,
Цитата:
|
почему возникают проблемы во время установки, если переменная темп не находится в папке по умолчанию ? :unsure: файлы распаковываются в нужное место, а команда запуска ехе-шника из папки темп идет в другое место :dont-know
|
vahe-91, Подробней, переменная никуда не девается
$TEMP- возвращает путь к системной временной папке. |
kotkovets, дело в том что у меня всегда папка темп находится в папке по умолчанию и никогда ошибок не было. Но у тех, где она не в этой папке, иногда, возникают проблемы во время утановки. Мой скрипт делает распаковку файлов в $temp\folder , потом идет команда запуска $temp\folder\setup.exe , потом удаление папки folder. В некоторых системах, где путь к темп изменен, сначала идет распаковка и потом сразу удаление папки, без запуска Setup.exe :o
|
товарищи,а существует ли функция для удаления файлов?
|
наверное немного не в тему но... Батник, который запускает инсталлятор, написанный на nsis не выполняет нужных изменений в реестре. А если тот же самый батник запустить в ручную то все срабатывает. Почему?
|
lokoham
Да, существует. Читай справку. Alexey_KF Ты бы хоть писал понятнее, со всеми запятыми. Как батник запускаешь? Хоть кусок кода выложи |
Цитата:
И что, возвращает: Код:
ExecWait "$temp\folder\setup.exe" $0 Код:
SetShellVarContext All Цитата:
|
Цитата:
|
Да....Мало того, что NSIS не так уж прост, дык еще вешают себе же гемор в одно место,
в виде батника, который запускает пресловутый NSIS :jester: Цитата:
|
Цитата:
Уважаемые пользователи! На глупый вопрос вы рискуете получить глупый ответ. Пишите правильно, дабы можно было понять ваш вопрос. Помните, экстрасенсы в отпуске, телепаты на больничном, а шаманам нет дела до ваших проблем |
Если б вы прочитали предыдущие посты то было бы вам понятно.
Я вылаживал сложный скрипт с командами (nsis) который запускал .bat файл. вот его часть: Код:
start: Чтоб еще раз убедиться, что батник срабатывает только вручную-создал sfx архив с командой запуска батника. Батник запустился, а изменений в реестре нет. Собственно для чего этот батник: -в антивирусе nod 32 (5 версии) по умолчанию в настройках не доступен выбор сервера обновлений антивирусных баз. Этот батник разблокирывает эту функцию и устанавливает путь для обновлений. Код батника: Код:
@echo off |
Alexey_KF
какие нафиг батники еще надо, ради внесения пару строк реестра, гемор на одно место... :cool: Код:
WriteRegStr HKLM "SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\Profiles\@My profile" "SelectedServer" "http://4local.ru:2221" Цитата:
Есть утилитка: Reg2NSIS конвертер reg файлов в скрипт NSIS Это не панацея от всех проблем, но прежде всего думайте своей головой, а не головой утилитки. |
kotkovets, спасибо за оперативную помощ но:
Код:
!include "$%WinDir%\Temp\ESETSIM\defines.txt" Все таки сработала одна строка из 3-ех: Код:
WriteRegStr HKLM "SOFTWARE\ESET\ESET Security\CurrentVersion\Plugins\01000400\UI_Settings\Servers"Server_0" "http://4local.ru:2221" |
Цитата:
Цитата:
--- А вот это бред полный, на кой черт счищать флаг ошибки, а затем проверять флаг ошибки?? однозначно флага ошибки НИКОГДА не будет! Cледовательно весь код ниже будет выполняться всегда, независимо от метки exit Код:
ClearErrors |
Цитата:
|
Цитата:
|
Цитата:
|
|
Цитата:
прописыванием в реестр запуск инсталла специальным назначенным ключом, чтобы после занесения в реестр данных инсталлятор закрывался сразу же, т.е такие действия лучше всего прописать в функции .OnInit - дабы не было видно окошка запуска инсталла. |
Смею предложить в этом случае использовать именно батник. ИМХО проще, меньше строк + самоудаление
|
:off: я бы вместо Alexey_KF все изменения сделал бы на самой msi, а не через NSIS
|
Krinkels, не люблю я эти батники, все делаю через NSIS раз NSIS,
а это не сложно - 5,6 строк кода, без записей команд с реестром Цитата:
|
На вкус и цвет товарища нет. А вообще я считаю что некоторые вещи все таки можно себе позволить.
Цитата:
|
Цитата:
|
Цитата:
Код:
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" "Setup" '"$EXEPATH" /regdat' Код:
!include "FileFunc.nsh" |
Цитата:
P.S. Перезагузка не обязательна. Изменения вручную срабатывают. |
Alexey_KF, уже 1000 раз говорили избався ты от этого батника и пропиши ключи добавляемие батником в установщик :biggrin:
|
kotkovets,
Пришлось некоторым образом изменить функцию, но вроде все работает... Код:
UninstPage custom un.INSTFILES_LEAVE Но если, пользователь выбрал секцию RestartExplorer, то залоченный файл удаляется без перезагрузки. А флаг REBOOTOK в этом случае не срабатывает, в результате файл не прописывается на удаление после перезагрузки. Только вот не знаю имеет ли смысл в функции рядом ставить комманды RMDir /r /REBOOTOK "$INSTDIR" SetRebootFlag true Может SetRebootFlag true можно тогда и не использовать? |
wolkow70, функция un.INSTFILES_LEAVE выполняется ВСЕГДА!
Проверяет наличие файлика DefragglerShell.dll и на основе проверки "решает" показывать стр. перезагрузки сейчас или нет! И принудительно устанавливает флаги перезагрузки - банальная перестраховка. Код:
${If} ${FileExists} "$INSTDIR\DefragglerShell.dll" установщик устанавливает флаг перезагрузки - false, если неудачное удаление(по каким то причинам) установщик устанавливает флаг перезагрузки - true Это легко проверить инсценировкой ситуации, например создать архив и держать архив открытым программой архиватором, то вы не сможете удалить архив, файл занят: Код:
Delete /REBOOTOK "$EXEDIR\Linker.zip" А уже на страничке финиша, если true - установщик предложит перезагрузку. если false - установщик не предложит перезагрузку. --- И еще важный аспект, если вы ловите в скрипте флаг пререзагрузки, не забудьте снова установить предыдущий флаг перезагрузки при необходимости, потому что команда Ifrebootflag определяет состояние флага и после определения сбрасывает в false или в неопределенное состояние. Код:
Delete /REBOOTOK "$EXEDIR\Linker.zip" |
Цитата:
Проблема заключалась в том, что при наличии флага /REBOOTOK в самой секции инсталляции после удаления программы с применением RestartExplorer файлик прописывался в реестре на удаление. И в с случае переустановки программы (без перезагрузки) удалялся после перезагрузки уже из папки новой установки. Удаление же этого ключа приводило к тому, что при удалении без применения RestartExplorer папка с залоченным файлом оставалась на месте после перезагрузки. Перенос флага /REBOOTOK в функцию позволил применять RestartExplorer для удаления файла вообще без флага /REBOOTOK (так как при уже при фактическом отсутствии файлика срабатывает второе условие (Else). В результате файл на удаление в реестре не прописывается и можно сразу переустанавливать программу без опасения удаления файлика после перезагрузки. Вот в чем заключалась проблема, которую пришлось решать. Delete /REBOOTOK "$INSTDIR\DefragglerShell.dll" SetRebootFlag true Перестраховки здесь, на мой взгляд, нет. Так как SetRebootFlag true ставит флаг перезагрузки для финишной страницы, но не прописывает в реестр запись на удаление файла после перезагрузки. Как я понял это делает только флаг /REBOOTOK. поэтому он нужен, но пришлось перенести его в другое место для сохранения возможности двух вариантов деинсталляции. |
Товарищи, подскажите как вылезти из засады:
Function .onInit ; MessageBox MB_YESNO|MB_ICONQUESTION "ВНИМАНИЕ!$\n\ $\nЕсли у вас открыты окна браузеров Internet Explorer, Mozilla Firefox, Opera, Chrome закройте их перед продолжением установки. \ $\nВ противном случае, они будут закрыты принудительно! \ $\nЭто избавит от конфликтов интеграции программы. \ $\n$\nПРОДОЛЖИТЬ ?" /SD IDYES IDNO Note ; KillProcDLL::KillProc "opera.exe" Sleep 700 KillProcDLL::KillProc "firefox.exe" Sleep 700 KillProcDLL::KillProc "chrome.exe" Sleep 700 KillProcDLL::KillProc "IEXPLORE.EXE" Sleep 700 Note: Abort # выйти из программы. FunctionEnd По любому происходит аборт. Без /SD еще получается перевести стрелки. А с ним фиг. Справка не помогла. |
Цитата:
Цитата:
Цитата:
Такое впечатление, что вы не понимаете, че и пишите то :o --- При тихом режиме нажмется кнопка "нет" : Код:
IfSilent NOTE Код:
MessageBox MB_YESNO 'Какую кнопку нажать?' /SD IDNO IDYES YES Цитата:
Такой кодинг неприемлем ИМХО :shocked: Такое мочилово неприятно грубыми последствиями, достаточно предупреждать юзера, если у вас открыты окна браузеров Internet Explorer, Mozilla Firefox, Opera, Chrome, и все! иначе выход! Юзер сам закроет, что ему нужно и когда! |
Цитата:
FunctionEnd Это мне понятно. Мне не понятно как обойти abort в данном случае. Цитата:
Никаких грубых последствий такого мочилова я не наблюдал. |
Цитата:
выражаюсь вполне чотко и ясно :) Цитата:
Цитата:
если не нужно прерывание, примеры выше |
Добрый день. Есть вопрос по программе NSIS.
Возникла следующая проблемка с функцией проверки файла. Только, пожалуйста, не отправляйте меня читать справку, т.к я с ней ознакомился, там действительно есть описание функции проверки файла, но мне это не помогло. И я хотел бы попросить вас, если такое возможно, написать мне чёткий пример кода, который решил бы мою проблему. Заранее благодарю! А суть вопроса следующая: Необходимо внедрить в установщик функцию проверки на наличие конкретного файла (а лучше двух или нескольких конкретных файлов) в той папке, которую пользователь указал в окне "выбор папки для установки". Т.е пользователь выбирает папку, заметьте именно ВЫБИРАЕТ папку, т.е инсталлятор должен ему позволить выбрать папку и нажать ОК. Итак папка выбрана. Теперь пользователь нажимает кнопку "Далее" (заметьте кнопка "Далее" должна быть АКТИВНА в любом случае (ранее у меня почему-то получалось так, что если в выбранной папке нет файла, то кнопка "Далее" неактивна, т.е нажать её нельзя). И вот именно в этом месте, после того как пользователь выбрал папку и нажал кнопку "Далее" и должна срабатывать функция проверки файлов. Если файлы в указанной папке найдены, то установка продолжится и перейдёт на след.страницу инсталлера, если же файлов в папке не обнаружено, то необходимо чтобы появлялось уведомляющее окно с сообщением вида "В указанном Вами каталоге отстуствуют компоненты игры YYY. Пожалуйста, укажите правильный каталог". Уведомление должно быть только с кнопкой ОK, после нажатия которой пользователь мог бы изменить каталог для установки и вновь нажать "Далее". Такая проверка мне нужна для того, чтобы пользователь не смог распаковать мой дистрибутив ни в какой другой каталог, кроме как в каталог с игрой YYY. Это ещё не всё, так как помимо указанной проверки, мне ещё нужна другая проверка - проверка на какую версию игры пользователь собирается установить мой дистрибутив. Необходимо чтобы проверка выявляла наличие у пользователя чистой (неперепатченной) версии игры, т.е чтобы пользователь мог установить мой дистрибутив только на чистую версию игры. Принцип должен быть такой. Необходимо, чтобы проверка срабатывала в тот же момент, что и предыдущая, т.е после выбора папки для установки и нажатия кнопки "Далее". Принцип: проверка должна выявить наличие в выбранной папке конкретных файлов (других файлов, никак не связанных с предыдущей проверкой) и если файлы обнаружены - должно всплывать уведомление вида "Компоненты игры YYY были ранее изменены. Установка приложение возможна только поверх оригинального дистрибутива. Пожалуйста, переустановите игру". И последнее, наверное, самое простое. Необходимо, чтобы при запуске инсталлятора, совершалась ориентация на ключ реестра. Т.е если ключ реестра обнаружен - инсталлятор запускается. Если нет - появлялось бы всплывающее окно с кнопками ДА и НЕТ, вида: "На вашем компьютере не обнаружено установленной игры YYY. Убедитесь, что устанавливали дистрибутив игры. Продолжить установку?" Суть: инсталлятор выявляет есть ли у пользователя вообще установленная игра. Однако, ключ реесстра может и отсуствовать, если юзер качал игру с винта на винт, поэтому даже если ключ не обнаружен, должна быть возможность продолжить установку. Надеюсь на Вашу помощь, ребят. Уважаю ваш труд, справка по NSIS действительно внушительная и виден громадный объём проделанной работы. Что касается моих вопросов, на мой взгляд вопросы про этим проверкам также могли бы быть наиболее подробно описаны в вашей справке. Думаю, это было бы интересно. Благодарю за внимание. С уважением, Aster. |
Цитата:
Цитата:
на примере 7-zip девятой версии Цитата:
|
Цитата:
|
kotkovets
Спасибо за отклик! Цитата:
Именно, чтобы пользователь указывал каталог для установки и нажимал "Далее". Если он указал его неправильно - должно всплыть сообщение о неправильном каталоге. А Вы мне привели пример выполнения функции проверки при "закрытии страницы с компонентами". При этом у Вас в примере путь проверяемого файла берётся из реестра или из папки Program Files. Про реестр я написал отдельно, не факт что ключ есть в рестре. А Program Files мне вообще никак тут не нужна. Игра у пользователя может быть установлена где угодно вообще. Именно поэтому мне необходимо, чтобы пользователь САМ указывал папку для установки и нажимал "Далее". И после этого шла бы проверка. Ничего другое мне не подходит. Цитата:
____________________________________________ Имеется к Вам предложение. Наш проект высочайшей технической сложности. Это обширное дополнение для игры. Требует высококачественного инсталлятора. Основы я знаю, проблемы лишь вот с такими доп.функциями, как проверки. Мы уже много лет занимаемся выпуском комплексных патчей и у нас тысячи пользователей, ждущих релиза. Дабы не заниматься рекламой - умышленно не называю имя проекта. Для создания инсталляторов у нас был отдельный человек, который создавал прекрасные инсталлы на основе Ghost Installer. В этом году он отошёл от дел и инсталлер вынужден делать я. Как Вы понимаете, должно быть не хуже чем было. Не хуже ни по функционалу, ни по оформлению. Так вот, если вы понимаете что именно я хочу реализовать по поводу проверок, могу ли я рассчитывать на Вашу ПРЯМУЮ помощь? Т.е Вы, по возможности подготовите уже готовые коды для необходимых нам функций. Если Вы согласны поучаствовать напрямую в создании инсталлятора - мы могли бы связаться с вами по ICQ, я бы вам поведал об обширности проекта и всей серьёзности дела. Проект некоммерческий и денег, к сожалению, я вам предложить не могу. Но обещаю Вам персональную благодарность в списке авторов, а также по Вашему желанию указать ссылку на Ваш ресурс или какие-либо другие координаты. Вы также можете привлечь Ваших коллег по данному ремеслу. Будем рады сотрудничеству. Жду Вашего решения. |
Цитата:
|
|
kotkovets,
Немного изменил формат сообщения и все получилось :) Function .onInit MessageBox MB_YESNO|MB_ICONQUESTION "ВНИМАНИЕ!$\n\ $\nЕсли у вас открыты окна браузеров Internet Explorer, Mozilla Firefox, Opera, Chrome закройте их перед продолжением установки. \ $\nВ противном случае, они будут закрыты принудительно! \ $\nЭто избавит от конфликтов интеграции программы. \ $\n$\nПРОДОЛЖИТЬ ?" /SD IDYES IDYES continue IDNO close ; close: Abort continue: ; KillProcDLL::KillProc "opera.exe" Sleep 700 KillProcDLL::KillProc "firefox.exe" Sleep 700 KillProcDLL::KillProc "chrome.exe" Sleep 700 KillProcDLL::KillProc "IEXPLORE.EXE" Sleep 700 FunctionEnd Цитата:
|
Цитата:
Цитата:
Цитата:
Это основа! Коль Вы в справку просили не тыкать, но все же придется на счет команд: InstallDirRegKey Раз нужно так делаем так: Код:
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE LEAVE_DIRECTORY Цитата:
Сравниваем хэш оргинала и хэш файла, точно как, как проверку версии. Если ключ реестра не найден, то команда InstallDir "bla bla" - не нужна. Откроется страничка директории без выбранного пути. Цитата:
Я в играх плохо разбираюсь :) --- wolkow70, методом упрощения, не обязательно указывать на второй индетификатор, он сам туда придет :) Код:
MessageBox MB_YESNO|MB_ICONQUESTION "ВНИМАНИЕ!$\n\ |
Alexey_KF,
Я сам собираюсь делать сборку на пятую версию Eset. Вы бы изложили свои соображения по сборке. Может совместными усилиями что-нибудь сделаем. Для четверки я делал раньше так: Код:
!define PRODUCT_NAME "Eset Smart Security" |
Обновился NSIS Dialog Designer до v 0.9.9 (http://coolsoft.altervista.org/en/nsisdialogdesigner)
Только у меня под XPx32 (другой ОС нет под рукой) - не работает. Запускается с ошибкой - Runtime error: и т.д. целая портянка. После закрытия окна с сообщением об ошибке, запускается без тулбара... У кого какие результаты с этой версией ? |
Товарищи, подскажите есть ли какая-то ошибка в моем коде.
На x86 все нормально регистрируется. Юзеры пишут, что на x64 не функционирует контекстное меню. Section "Использовать расширенную оболочку XnView" XnViewShell SectionIn 1 2 SetOutPath "$INSTDIR" ; - подключить директорию установки ; ${If} ${RunningX64} ; открыть логическую конструкцию, и если запущена х64 SetOutPath "$INSTDIR\XnShellEx64" ; - подключить путь RegDLL "$INSTDIR\XnShellEx64\XnViewShellExt.dll" ; - зарегистрировать ${Else} ; - иначе, если не x64 SetOutPath "$INSTDIR\ShellEx" ; -подключить путь RegDLL "$INSTDIR\ShellEx\XnViewShellExt.dll" ; - зарегистрировать ${EndIf} ; - закрыть логическую конструкцию WriteRegStr HKCU "Software\XnView\ShellEx" "Language" "ru" SectionEnd |
wolkow70
XnViewShellExt.dll - файл должен быть именно для x64 иногда, встречается не часто, одна библиотека для разрядности систем. Код:
--- Глянул... для оболочки в x64 нужен 64-разрядный XnViewShellExt.dll XnView Shell Extension ZIP 64bits |
Цитата:
|
Цитата:
Код:
ExecWait `regsvr32 /s "$INSTDIR\XnShellEx64\XnViewShellExt.dll"` Код:
ExecWait `regsvr32 /s /u "$INSTDIR\XnShellEx64\XnViewShellExt.dll"` независимо от системы, примерно на 100 случаев , 2 случая: regdll - не работает. Очевидно не срабатывает команда regdll из-за "особенностей" регистрируемой библиотеки. regsvr32 - не подводил пока ни разу. |
Сообщил автору NSIS Dialog Designer - баг исправлен в версии v.0.9.10
|
MKN, а я этой прогой не пользуюсь, сомнительная какая-то, не знаешь какого результата ждать.
постоянно еще фокус элемента диалога пропадает при проектироании, невозможно элемент переместить, выделить ... жуть. Чет даже, событие на кнопку не получилась создать, грубоватая прога и небтесанная еще, как первый релиз WinXP :) |
kotkovets,
Эта прога хороша исключительно для наглядного и быстрого создания компонентов на странице. Собственно и всё... Минусы очевидны - надо корректировать код и единицы координат. (Ну почему бы автору сразу было не сделать отсчёт в юнитах ! Попросил, может отзовётся...) |
Цитата:
а "страдают", как всегда обычные пользователи... |
Цитата:
Только вот на английском... |
|
|
|
Цитата:
Американцы же бывают пишут переводчиками на русскоязычных форумах, а мы голову ломаем что они имели ввиду, пускай тоже почешут затылок разбираясь в бреднях переводчика, тем более на тех. тематику :laugh: |
К слову сказать. Пока автор ломает голову, кто подскажет - а каким всё же образом, имеющиеся в пикселах координаты, перевести в юниты ? Как это логически-математически будет выглядеть и возможно ли процесс конвертации автоматизировать ?
|
Товарищи, подскажите как прописать в hosts 127.0.0.1 www.ursoftware.com. Че -то в справке не могу найти как просто добавить строку в файл.
|
Цитата:
Код:
FileOpen $0 "$temp\kav_temp.log" w |
K.A.V.,
Нормально, все получилось. Прописалось. Теперь парюсь как удалить. Так не получается: ${WordReplace} '$R9' '127.0.0.1 www.ursoftware.com' '' "+" '$R9' |
Цитата:
Код:
${WordReplace} '$R9' '127.0.0.1 www.ursoftware.com$\r$\n' " " "+" '$R9' Код:
${WordReplace} '$R9' '127.0.0.1 www.ursoftware.com$\r$\n' "" "+" '$R9' Цитата:
http://forum.oszone.net/post-1768345-1728.html С полученной базовой единицы нужно еще через битовую маску, выделить старший и младший байт и применить формулу по ссылке Как выделить старший и младший байт я точно не знаю, но примерно так: Код:
Intop $var $var >> 16 ;Выделяет из 32-битового целочисленного значения старшее слово (X) |
MKN
Цитата:
Код:
#define DLGP(wd) (LOWORD(GetDialogBaseUnits())*(wd)/4) |
Цитата:
Цитата:
А скажите пожалуйста - как вы сами расчитываете расположение создаваемых элементов на кастомной странице ? Особенно когда их несколько десятков и их положение ещё приходится корректировать в процессе. Неужели подбираете на ощупь число юнитов ? :) И сколько же времени у вас на этот гемор уходит ? ps Ссылки на теоретические юнит-основы конечно интересны, но для меня сложны... И как применить GetDialogBaseUnits на практике я не представляю... |
Цитата:
Цитата:
Цитата:
|
Krinkels,
Я так и знал, что получу обтекаемый ответ. :) Т.е. - сами мучаетесь. А ведь куда проще и быстрее расположить визуально элементы и ещё при этом получить готовый код. Цитата:
(Ну, разве что , если гонять по странице одну единственную кнопочку и любоваться её расположением к тебе... :) ) Цитата:
А касаемо нашей истории - всё же, каким образом практически перевести сотни циферок пикселей в юниты ? |
Цитата:
Включены: !include "WordFunc.nsh" !include "TextFunc.nsh" |
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
делит на половину циферки, т.е имеем 50 пикселей, возвращает 25 юнитов, соотношение 1:2, хотя на самом деле соотношение 1:~1,5 Посмотрев сырцы nsDialogs, плаг конвертит с помощью функции: http://www.firststeps.ru/mfc/steps/help/r.php?604 Если сильно чешется, могу сварганить макрос, правда насчет результатов, не знаю. Функция требует хэндл диалога и размер прямоугольника диалога, что на практике NSIS не удобно, 2 структуры еще нужно объявлять. Цитата:
Цитата:
|
Цитата:
|
Цитата:
FileOpen $0 "$temp\urs_temp.txt" w FileWrite $0 "127.0.0.1 www.ursoftware.com" FileClose $0 ${FileJoin} "$SYSDIR\drivers\etc\hosts" "$temp\urs_temp.txt" "" Delete "$temp\urs_temp.txt" SectionEnd Section Uninstall Uninstall SectionIn 1 RO ; ${WordReplace} '$R9' '127.0.0.1 www.ursoftware.com$\r$\n' "" "+" '$R9' RMDir /r "$INSTDIR" SetAutoClose true SectionEnd Не работает удаление... |
Товарищи вопрос: имею в реестре скрытый ключ типа EXECryptor 2+
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved\{34C86D6A-B57C-09D5-FE48-F0781F318B3F}|0|] простая запись на удаление ни к чему не приводит. Его можно грохнуть через деинсталлятор? |
Подскажите пожалуйста, каким образом реализовать активность кнопки2 (не акт по умолчанию), при нажатии кнопки1 и
снятие активности с кнопки2 при ещё одном (повторном) нажатии на кнопку1 ? |
Цитата:
Вы открыли файл текстовый для записи/редактирования? Вы как получаете строки из текстового файла в $R9 ? Читайте "Замена строки в текстовых файлах" Цитата:
кнопки, добавление/удалением символа & - этот символ не виден! |
Так сделал, все равно не удаляется.
!include "TextFunc.nsh" !include "WordFunc.nsh" Function un.Replace ${WordReplace} '$R9' '127.0.0.1 www.ursoftware.com$\r$\n' "" "+" '$R9' Push $0 FunctionEnd ; Section Uninstall Uninstall SectionIn 1 RO ; ${LineFind} "$SYSDIR\drivers\etc\hosts" "" "1:-1" "un.Replace" RMDir /r "$INSTDIR" SetAutoClose true SectionEnd |
Код:
Error: resolving uninstall function "Replace" in uninstall section "Uninstall" (0) Код:
Function un.Replace |
Цитата:
Function un.Replace ${WordReplace} '$R9' '127.0.0.1 www.ursoftware.com$\r$\n' "" "+" '$R9' Push $0 FunctionEnd ; Section Uninstall Uninstall SectionIn 1 RO ; ${LineFind} "$SYSDIR\drivers\etc\hosts" "" "1:-1" "un.Replace" RMDir /r "$INSTDIR" SetAutoClose true SectionEnd |
wolkow70, Проснитетесь!
У вас целостная строка строка есть в файле: Код:
127.0.0.1 www.ursoftware.com Макрос сравнивает посимвольно строку, если указанная строка не совпадает, до свидания, ничего менять не будет А если последняя строка и при условии, что нет после искомой строки пустой строки. то так: Код:
${WordReplace} '$R9' '127.0.0.1 www.ursoftware.com' "" "+" '$R9' Код:
Function un.Replace |
kotkovets,
Прикольно получается: если два раза подряд прописать, то одна строка удаляется, а последняя нет. Повторный запуск деинсталлятора тоже ее не трогает. А откуда мне знать последняя там строка или нет. И вообще сколько раз повторяется. |
Цитата:
Код:
Function un.Replace Хоть сколь угодно прописываете строку - удалятся все, главное указываемая строка совпадала с возвращенной из текста. |
kotkovets,
Может подскажите, чего делать? Прописываю в секции: Код:
DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{1F642286-85BA-DEC3-B727-47952F83BB84}" "" Если те же ключи HKLM "SOFTWARE\Classes\CLSID\{1F642286-85BA-DEC3-B727-47952F83BB84}" "" HKLM "SOFTWARE\Licenses" "{I1A025C51A1747CC8}" HKLM "SOFTWARE\Licenses" "{01A025C51A1747CC8}" HKLM "SOFTWARE\Licenses" "{R7C0DB872A3F777C0}" HKLM "SOFTWARE\Licenses" "{K7C0DB872A3F777C0}" удалить не через NSIS а в программе TrashReg, то все нормально.. |
Цитата:
Цитата:
|
kotkovets,
Подскажите плиз, как комманду из cmd-файла конвертировать в NSIS для выполнения в тихом режиме: TrashReg.exe /D=(!)HKLM\SOFTWARE\Classes\CLSID\{1F642286-85BA-DEC3-B727-47952F83BB84} При условии, что данный кюч реестра создан. |
Цитата:
Код:
IfSilent 0 +2 |
1) Подскажите как изменить картинку на странице выбора языка. Она распологается с лева.
2). Иконку инсталяции и деинсталяции (которая находится в левом верхнем углу, почти всех диалоговых окон). |
dix75,
это же иконка инсталлятора :dont-know |
Товарищи, подскажите как запустить установку драйвера из инфа коммандой NSIS.
В папку с программой распаковываются revoflt.inf и драйвер revoflt.sys. После чего должна последовать установка драйвера из инфа. В скрипте Inno оригинального инсталлятора так прописано: [Run] Filename: "rundll32.exe "; Parameters: "SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 {app}\revoflt.inf"; WorkingDir: "{app}"; StatusMsg: "Installing revoflt..."; Description: "Install driver automatically"; MinVersion: 0.0,5.01.2600 Service Pack 1; и на удаление: [UninstallRun] Filename: "rundll32.exe"; Parameters: "SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 {app}\revoflt.inf"; WorkingDir: "{app}"; MinVersion: 0.0,5.01.2600 Service Pack 1; |
wolkow70, да все также, мозг чуть включить и все!
Код:
ExecWait `rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 "путь\revoflt.inf"` |
Че-то не пашет.
В Install прописал: ExecWait 'rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 "$INSTDIR\revoflt.inf"' В Uninstall прописал ExecWait 'rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultUninstall 132 "$INSTDIR\revoflt.inf"' Выводится ошибка, что установка не произведена (при удалении тоже). С оригинальным инсталлятором нормально все. Инф какой-то примитивный. Код:
;;; |
revoflt.inf - это тоже скрипт, а где файлы должны быть по скрипту в секции DefaultInstall revoflt.inf ?
Положите рядом с revoflt.inf - revoflt.sys А вот так у меня все стало как нужно, т.е путь к revoflt.inf без кавычек ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $EXEDIR\revoflt.inf" |
revoflt.inf и драйвер revoflt.sys распаковываются в папку $INSTDIR и оттуда драйвер копируется в %windir%\system32\drivers\
|
wolkow70, путь к inf файлу без кавычек:
Код:
ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\revoflt.inf" |
Да, все заработало.
Там еще разные версии драйверов распаковываются "под систему". пока сделал так !include "WinVer.nsh" Section "!${PRODUCT_NAME}" Install ; ${If} ${IsWinXP} SetOutPath "$INSTDIR" File "${pkgdir}\Revo Uninstaller Pro\NT5\revoflt.sys" ${ElseIf} ${IsWin7} SetOutPath "$INSTDIR" File "${pkgdir}\Revo Uninstaller Pro\NT6\revoflt.sys" ${EndIf} А если установка на Vista или Win 2000? |
Цитата:
|
Цитата:
И что, мне под каждое условие придумывать метку? ИМХО, логическими конструкциями я задам столько условий, сколько фантазии хватит и при этом никаких конфликтов по именам меткам никогда не получу и с легкостью пишется любая, самая хитрая логика. Цитата:
Код:
${If} ${IsWinXP} |
Цитата:
А картинку при выборе языка? |
Цитата:
изменится иконка в диалоге |
Понятно спасибо.
|
Всем Привет!!! я навичок,хотел бы научится NSIS,не подскажите где можно найти для обучения видео??
я разбираюсь по батникам хорошо,как мне правильно написать,пример: в батник: "fail.exe" /silentinstall "fail.exe" /firewall "fail.exe" /start перевести код на NSIS?? что бы запускался. если я не потеме обращаюсь с этим вапросом,подскажите куда писать?? Зарание блогодарю |
|
Цитата:
Как я понял можно прописать в Function .OnInit ${WinVersionMajor} $4 ${WinVersionMinor} $5 ${WinPlatformArchitecture} $R1 Quit FunctionEnd К примеру стоит задача создать логическую конструкцию такого типа: Если установлена Vista или выше , то можно взять за старшую версию 6 и задать условие этим значением (оно будет работать на всех версиях включая Win7 и даже Win 8 ? Младшую версию нет смысла читать в этом случае? Дальше как это условие забить в конструкцию? Так? ${If} $4=6 ;если версия 6.0 и выше ${AndIf} $R1=64 ; и 64 битка -здесь следует комманда для Vista и выше X64 ${ElseIf} $4=6 ;если версия 6.0 и выше ${AndIf} $R1=32 ; и 32 битка -здесь следует комманда для Vista и выше X32 ${ElseIf} $4=5 ;если версия 5.0 и выше ${AndIf} $R1=64 ; и 64 битка здесь следует комманда для 2000 и XP X64 ${ElseIf} $4=5 ;если версия 5.0 и выше ${AndIf} $R1=32 ; и 32 битка -здесь следует комманда для 2000 и XP X32 ${EndIf} То есть, хочу сделать универсальную логическую конструкцию, в которой операции бы выполнялись не только в зависимости от версии, но и архитектуры оси (напрмер распаковка файлов). Какая разница в значениях X32 и X86? |
Здесь логика И, т.е читаем так, если $4 = 0 и $R1 = 64
т.е условие будет выполнено, если $4 = 0 и $R1 = 64 Код:
${If} $4 == 6 ;если версия 6.0 Код:
${If} $4 >= 6 Цитата:
|
То есть примерно так?
!include "WinVer2.nsh" Function .OnInit ${WinVersionMajor} $4 ${WinVersionMinor} $5 ${WinPlatformArchitecture} $R1 Quit FunctionEnd ${If} $4 >= 6 ${AndIf} $R1 == 64 ; и 64 битка -здесь следует комманда для Vista и выше X64 ${EndIf} ; ${If} $4 >= 6 ${AndIf} $R1 == 32 ; и 32 битка -здесь следует комманда для Vista и выше X32 ${EndIf} ; ${If} $4 >= 5 ${AndIf} $R1 == 64 ; и 64 битка -здесь следует комманда для 2000 и XP X64 ${EndIf} ; ${If} $4 >= 5 ${AndIf} $R1 == 64 ; и 32 битка -здесь следует комманда для 2000 и XP X32 ${EndIf} Здесь, по моему засада получится, так как $4 >= 5 и $4 >= 6 при этом 6 тоже >5 Не будет ли конфликта с хедером x64.nsh? |
Цитата:
А лучше делать так: Код:
${WinVersionMajor} $4 |
Цитата:
${WinVersionMajor} $4 ${WinVersionMinor} $5 ${WinPlatformArchitecture} $R1 ? 2. Если в такой конструкции для какого-то варианта нет комманды? 3. Хедер WinVer.nsh удалять ? |
|
Товарищи, как удалить папку, если она пустая? Чего-то не нашел.
|
Сам нашел такой вариант:
StrCpy $0 "$PROGRAMFILES\FinalWire" Call un.DeleteDirIfEmpty Function un.DeleteDirIfEmpty FindFirst $R0 $R1 "$0\*.*" strcmp $R1 "." 0 NoDelete FindNext $R0 $R1 strcmp $R1 ".." 0 NoDelete ClearErrors FindNext $R0 $R1 IfErrors 0 NoDelete FindClose $R0 Sleep 1000 RMDir "$0" NoDelete: FindClose $R0 FunctionEnd |
Цитата:
Цитата:
Код:
OutFile "emptydir.exe" |
Цитата:
|
wolkow70, WinAPI - четко и быстро, чем рекурсивно перебирать файлы, медленно!
Вот макрос сварганил для удобства: Код:
!define RmEmptyDir "!insertmacro PathIsDirectoryEmpty" Код:
${RmEmptyDir} "Путь к папке" |
Подскажите, пожалуйста, как можно подписать EXE-файл после компиляции. В сети натыкался на неработающие варианты:
PHP код:
PHP код:
P.S. Выяснил, что !finalize это относительно новая опция, в последнем релизе её нет. Но использовать нестабильные бета-версии нежелательно на проекте. Кстати, кто-то знает, NSIS вообще поддерживается еще или проект умер и лучше MSI использовать? |
Цитата:
${PostExec*} - пишется последней командой в скрипте. Если вкратце - для подписи файлов нужны: Цитата:
Если честно, этим делом муторным не занимался, посему деталей я не знаю |
Пытаюсь написать скрипт (на выходе должен получиться Updates ESET.exe, в котором содержится папка с антивирусными базами eset_upd и файл лицензии eset.lic)
Updates ESET.exe - при запуске должен извлеч папку eset_upd по пути $PROGRAMFILES\ESET и извлеч файл eset.lic по пути $PROGRAMFILES\ESET\ESET NOD32 Antivirus\License начал писать скрипт и застрял. Прошу помощи. Начало скрипта: Код:
!define version "4хх/5хх" |
Цитата:
|
вот где и застрял:
Код:
Function .onInit |
Цитата:
Код:
MessageBox MB_ICONQUESTION|MB_YESNO "Установить NOD_UPD ?" IDYES +2 |
Цитата:
В общем, пришлось выносить эту команду из инсталлятора, пока в bat-файл, потом в ANT-скрипт. Но несколько разочарован развитием NSIS'а. |
Запускаю истолятор и он мне выдает ошибку с тектом Error opening file for writing: \eset_upd\nod12E.nup
Где ошибка в скрипте? Код:
!define version "5.0.0.0" |
Цитата:
Код:
Section Трудно, что ли в справке почитать: » File: Добавляем файлы в инсталлятор |
Справка у меня открыта перед носом, а еще смотрю на примеры скриптов... Если не сложно то помогите
|
Цитата:
Я писал это бред, так уберите этот бред в скрипте. Код:
Цитата:
|
kotkovets,
Будет ли работать в x64 ОС команда : ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 myInf.inf" ? |
MKN,
Какие то то сомнения в x64 ? откуда? При правильном подходе все работает! |
kotkovets,
Не подскажите решение такой задачки? Скрипт установки у меня создает папку с резервными копиями файлов настроек "$DOCUMENTS\Opera Backup". Если повторно переустанавливать (устанавливать) программу опять будет создана резевная папка. Можно, конечно проверить наличие и перименовать старую папку в Opera Backup_old1 или того рода. Но как сделать, чтобы каждый раз ранее созданная папка Opera Backup автоматически переимеовывалась с новым именем (например, привязанным к дате и времени переименования или порядковым номером). Ну, короче, что бы не происходило наслоения. |
Цитата:
Код:
${If} ${FileExists} "$EXEDIR\Opera Backup" Код:
!include "filefunc.nsh" |
Здравствуйте господа, нужна ваша помощь . Есть скрипт на языке Inno Setup
Сам скрип : Код:
Filename: "rundll32.exe"; Parameters: "setupapi.dll, InstallHinfSection DefaultInstall 132 .\CisUtMonitor.inf"; WorkingDir: "{app}"; StatusMsg: "{cm:installing_driver}"; Tasks: "install_service"; Check: "NOT IsX64"; MinVersion: 0.0,5.0; Код:
ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\CisUtMonitor.inf" |
Цитата:
|
Цитата:
нужный файл не найден по скрипту inf, поэтому просит указать на файл, типа ты где, хоть сюда?! в какой разрядности системы заводите? В x64 две версии rundll.exe Цитата:
|
Цитата:
http://fotohosting.org/share.php?id=C0CA_4EE3A23B в x86 windows 7. То что просит показанном на скрине , он ищет в нужной папке |
Painkiller
Проблема не в NSIS, правте inf, в частности касаемого файла, да остальных наверняка.. заодно, не помешает, с правами разобраться. Пробуйте так, расположите скрипт inf (все нужные компоненты прописанные в inf -рядом с inf), рядом со скриптом NSIS и выполните Код:
ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $EXEDIR\CisUtMonitor.inf" |
Painkiller,
И что здесь не работает???? Код:
OutFile "test.exe" |
Цитата:
|
Цитата:
Код:
${If} ${RunningX64} |
Цитата:
Убедиться еще нужно в следующем: 1. Что объявлена $INSTDIR. 2. Что в секции, из которой производится установка подключено SetOutPath "$INSTDIR" 3. Что к моменту запуска установки драйвера нужные файлы распакованы в папку назначения с верными именами. Глюки могут быть связаны с наличием в реестре остатков предыдущей установки драйвера. Нужно попробовать установить программу из оригинального инсталлятора и также корректно деинсталлировать. |
MKN, А как он вообще ставится? т.е я имею ввиду штатными-системными способами?
Я очень многие дрова ставлю так: http://forum.oszone.net/post-1733766-1482.html но многие дрова не ставятся так. |
kotkovets,
Этот драйвер устанавливается из InstallShield инсталлятора согласно собственного сценария, доступа к которому нет... Известно какие файлы и куда копируются, какие записи появляются в реестре. Также, предположительно, в установке участвуют собственные утилиты - MyDevCon32.exe и MyDevCon64.exe, при запуске которых даже появляется хелп синтаксиса команды установки. Но драйвер-служба всё равно почему то не устанавливается... |
Цитата:
Цитата:
Там сценарий установки драйвера написан на языке си(с++), если бы он был мне известен - на nsis переделал в два счета или за сто лет :) Так, что изучай тщательнее хелп синтаксис - MyDevCon64.exе и все получится |
Нашел в скрипте таку строку
Код:
\makensis.exe" /P2 /V3 |
Цитата:
Цитата:
P - уровень приоритета выполнения процесса makensis.exe V - уровень вывода в консоли выводмого текcта и предупреждения в скрипте(при не фатальных ошибок в скрипте) при компилировании компилировании скрипта |
kotkovets,
Идет последовательность комманд на удаление ключей реестра, которые вероятно уже не сущестуют. Обязательно ли выставлять ClearErrors перед следующей коммандой на удаление ключа который тоже возможно не существует? DeleteRegKey HKLM "SOFTWARE\Pandora.TV" "" ClearErrors DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\4F6D5E84-5826-4394-9F40-3A9A19165651_is1" "" ClearErrors DeleteRegKey HKLM "SYSTEM\CurrentControlSet\Services\PanService" "" и т.д.? |
Цитата:
Код:
IfErrors 0 +2 несуществующего ключа в реестре, то обязательно, во избежание ложных срабатываний. К примеру мне выдал установщик флаг ошибки из-за несуществующего ключа в реестре. А затем в скрипте идет команда проверки удаления файла, то проверка удаления файла будет всегда срабатывать из-за ошибки ключа, а не удаления файла. По этому нужно выпиливать ненужный флаг ошибки принудительно - ошибку несуществующего ключа. |
Всем здравствуйте!
Возникла следующая проблема с Caption деинсталлятора. В зависимости от того, с каким ключом вызывается деинсталлятор, он либо деинсталлирует программу либо изменяет её настройки. Соответственно хотелось бы менять заголовок (caption) окон в зависимости от того, какие функции осуществляются деинсталлятором. Понятно, что выбор заголовка происходит только в момент запуска, а не во время компиляции. Есть вариант делать это с помощью SendMessage $HWNDPARENT ${WM_SETTEXT} 0 "STR:$(CaptionModify)" для каждого окна. Тогда у меня возникает проблема со стандартной страницей MUI_UNPAGE_INSTFILES. При запуске этой страницы я посылаю указанное сообщение, устанавливается нужный мне заголовок. После выполнения действий по изменению/деинсталляции, окно автоматически не закрывается, то есть SetAutoClose = false, и заголовок меняется на первоначальный, указанный начале кода. Не могу понять, по какому событию мне послать новое сообщение, чтобы вернуть прежний, нужный мне заголовок. Возможно, кто-то сможет мне помочь:) |
Цитата:
Аналогичные действия делаем с деинсталлятором, но с приставкой un |
kotkovets,
Ходатайствую о помощи в таком вопросе: Пишу в секции: StrCpy $3 "{Home}Мои документы" StrCpy $4 "{Resources}program" WriteINIStr "$APPDATA\Opera\Opera\operaprefs.ini" "User Prefs" "Download Directory" "$3" WriteINIStr "$APPDATA\Opera\Opera\operaprefs.ini" "Saved Settings" "Save Dir" "$3" WriteINIStr "$APPDATA\Opera\Opera\operaprefs.ini" "Saved Settings" "Open Dir" "$4" В результате в UTF8 имею такую картину: Download Directory={Home}ͮ桤���[Saved Settings] Save Dir={Home}ͮ桤���Open Dir={Resources}program Как корректно отразить строки с русским текстом? Сама Opera как-то же сохраняет: [Saved Settings] Save Dir={Home}Мои документы |
Цитата:
NSIS пишет файлы в формате ANSI: кирилица искажается при чтении браузером своих настроек Попробуйте плагином Unicode созданный конфиг (ANSI) конвертировать в формат UTF8, т.е с таким форматом хранит Opera свои настройки |
Цитата:
unicode::FileAnsi2Unicode "Input" "Output" Type unicode::FileUnicode2UTF8 "Input" "Output" Type unicode::FileUnicode2Ansi "Input" "Output" Type То есть будет так? unicode::FileAnsi2Unicode "Input" "Output" Type unicode::FileUnicode2UTF8 "Input" "Output" Type Конкретено что должно быть прописано в "Input" "Output" Type? Путь к файлу? Примерно так? unicode::FileAnsi2Unicode "$APPDATA\Opera\Opera\operaprefs.ini" "$APPDATA\Opera\Opera\operaprefs.ini" Unicode unicode::FileUnicode2UTF8 "$APPDATA\Opera\Opera\operaprefs.ini" "$APPDATA\Opera\Opera\operaprefs.ini" UTF8 Так не работает. |
wolkow70,
Код:
|
Работает.
[User Prefs] Download Directory={Home}Мои документы [Saved Settings] Save Dir={Home}Мои документы |
kotkovets,
А возможно создать титульные строки ini файла? Opera Preferences version 2.1 ; Do not edit this file while Opera is running ; This file is stored in UTF-8 encoding |
Цитата:
А так можно: Код:
Fileopen $0 "user.ini" a |
Доброго времени суток! Уважаемые гуру, подскажите пожалуйста как реализовать такое
![]() Выбор типа установки/распаковки когда выбрана распаковка портабла чекбоксы неактивны, и при выборе одного из радиобутонов изображение справа меняется! Собственно сам ехе-шник DepositFiles.com Желательно пример скрипта! Благодарствую! |
Цитата:
я потратил на создание скрипта 20 минут и +10 минут на чтение доков. Во общем пример для всех. |
kotkovets,
Нужен совет: Реализую резервное копирование настроек: Код:
Function .onInit Еще в функции копирования можно ли объединить файлы с искомыми расширениями в одну комманду? |
Большое спасибо kotkovets опробую и отпишусь обезательно :)
|
Цитата:
что бы искомая папка не была пуста Код:
${If} ${FileExists} "$APPDATA\Opera" ${OrIf} - логика ИЛИ |
Цитата:
Здесь можно прописать? ${If} ${FileExists} "$APPDATA\Opera" System::Call "Shlwapi::PathIsDirectoryEmpty(t'$APPDATA\Opera')i.R0" ${AndIf} $R0 != 1 ${AndIf} ${FileExists} "$APPDATA\Opera\Opera\*.ini" ${OrIf} ${FileExists} "$APPDATA\Opera\Opera\*.adr" ${OrIf} ${FileExists} "$APPDATA\Opera\Opera\*.xml" ${OrIf} ${FileExists} "$APPDATA\Opera\Opera\*.js" ${OrIf} ${FileExists} "$APPDATA\Opera\Opera\*.dat" ${OrIf} ${FileExists} "$APPDATA\Opera\Opera\menu" ${OrIf} ${FileExists} "$APPDATA\Opera\Opera\toolbar" MessageBox MB_YESNOCANCEL|MB_USERICON|MB_TOPMOST "ВНИМАНИЕ!$\n\.... CopyFiles /silent..... |
Пробуйте так, но различные указанные расширения, одной командой копирования невозможно по логике вещей.
|
kotkovets
Хорошее число сообщений: Сообщения: 666 :) |
Цитата:
|
Цитата:
no_backup , если искомое отсутствует, что бы не выводилось MB. Я думал можно как-то так сделать IfFileExists "$APPDATA\Opera\Opera\*.ini *.adr *.xml *.dat " 0 no_backup В логическую конструкцию нельзя переход по метке встроить? |
Попробовал, так не пашет.
IfFileExists "$APPDATA\Opera\Opera\*.ini *.adr *.xml *.dat" 0 no_backup |
kotkovets,
Пошел по сложному пути и сделал так для двух типов установки (многопользовательской и однопользовательской): Код:
Function .onInit |
wolkow70, Слишком сложно и много лишнего...
А если у меня будет профиль в папке программы и профиль в $APPDATA и $LOCALAPPDATA ??? |
Цитата:
goto check_programdir check_programdir: После проверки и копирования профиля в $APPDATA и $LOCALAPPDATA в "Мои документы" функция переходит в программную папку и резервирует папку profile, если в ней есть нужные файлы в "Общие документы". Я гипотетически исходил из того, что такое может у кого-то случится. В контексте всего скрипта эта функция не кажется сложной или содержащей что-то лишнее. Всего лишь маленькая часть. |
wolkow70,
Код:
CreateDirectory "$DOCUMENTS\Opera Backup\AppData\Opera" |
kotkovets есть такой вопрос глянул скрипт (разобраля с бутонами, чекбоксом, картинками), но есть проблема по сути...
вот скрин ![]() вот код... Код:
!define PRODUCT_NAME "Winamp" |
kotkovets,
Цитата:
А проблема решилась просто установкой переменной в UninstallCaption и изменением этой переменной в процессе выполнения деинсталлятора. |
Цитата:
Код:
Function PageDestroy Код:
${NSD_GetState} $CheckBox2 $Check2 но не иницилизирована (не используется), а условие поставлено для распаковки скинов:если $Check2 = 1 Поэтому ничего и не работало. Цитата:
|
Добрый день.
Такой вопрос - можно ли во время выполнения инсталятора выбирать - показывать или нет страницы. Например у меня стоит: Код:
!insertmacro MUI_PAGE_WELCOME Можно ли такой в рантайме делать? |
Спасибо человечище kotkovets...буду курить скрипт дальше...
Еще есть такие вопросы Документация Справочник по NSIS . Создан силами нашего сообщества. Начните с него. Официальное руководство Статья: создаем инсталлятор под Windows в NSIS Статья: Инсталляция by NSIS Примеры от K.A.V. Кликабельный BrandingText Картинки-превьюшки для радиокнопок От меня лично (hb860): Я давно хотел создать что-то вроде учебника по NSIS. Я уже начал работать над этим, с целью написать простое руководство на практических примерах. Что у меня на данный момент получилось: Создание своего инсталлятора на NSIS. Первые шаги Создание своего инсталлятора на NSIS. Секции и выбор компонентов Создание своего инсталлятора на NSIS. Деинсталлятор NSIS. Создаем собственные страницы инсталлятора Создание своего инсталлятора на NSIS. Ассоциации файлов. Макросы Создание своего инсталлятора на NSIS. Определяем системный диск Создание своего инсталлятора на NSIS. Один инсталлятор для x86 и х64 систем сразу Создание своего инсталлятора на NSIS. Подробней о скрытых секциях. Скрытые группы секций. Реализация дополнительных ключей командной строки Определение версии и редакции операционной системы в NSIS Запуск "родного" x64 процесса из x86 инсталлятора NSIS. Перенаправление папок Большинство ссылок не доступны..у кого нибудь нет оф лайн варианта... Как сделать так что бы при нажатии на готово в конце открывался url адрес.. И еще єто интересует Создание своего инсталлятора на NSIS. Один инсталлятор для x86 и х64 и Реализация дополнительных ключей командной строки систем сразу но нигде нет... Еще раз большое спасибо! |
Если по ссылкам переходить вот что выдает:
Нужно обновить ссылки, но я, увы, не могу редактировать шапку Хм, поиск на сайте по слову "NSIS" ничего не дает. |
Цитата:
Если есть то скинь пожалуйста на електронку romasok88@gmail.com! |
Не, у меня такого нету. Мне хватает справки
|
Вот здесь выложил подборку статей hb860 по созданию собственных инсталляторов на NSIS.
http://ifolder.ru/27697716 Я с этих материалов начинал :) |
Цитата:
Код:
Function .onInstSuccess Код:
!define MUI_FINISHPAGE_SHOWREADME "http://forum.oszone.net/" |
Цитата:
Например в такой секции, что на Ваш взгляд является лишним? Код:
Section "Установить скрипт fastesttube" fastesttube Код:
Section "Альтернативный список служб Поиска" Search |
Цитата:
SetOutPath "$APPDATA\Opera\Opera" CreateDirectory "$APPDATA\Opera\Opera\user_jscript" ;;; SetOutPath "$INSTDIR\profile" CreateDirectory "$INSTDIR\profile\user_jscript" SetOutPath - тоже создает директории и делает текущую указанную папку инсталяционной |
Цитата:
|
wolkow70, Это у вас в этом месте 2 раза SetOutPath:
после первой команды SetOutPath - ничего нет, отсюда и вывод, в остальном я не телепат Код:
Цитата:
|
Цитата:
Цитата:
Подключается папка. В ней создается папка и подключается вновь созданная. SetOutPath "$APPDATA\Opera\Opera" CreateDirectory "$APPDATA\Opera\Opera\user_jscript" SetOutPath "$APPDATA\Opera\Opera\user_jscript" Вообще мне с коммандой SetOutPath не ясно создает ли она промежуточные директории? Для сравнения тождественны ли комманды? SetOutPath "$APPDATA\Opera\Opera" и SetOutPath "$APPDATA" CreateDirectory "$APPDATA\Opera" SetOutPath "$APPDATA\Opera" CreateDirectory "$APPDATA\Opera\Opera" SetOutPath "$APPDATA\Opera\Opera" |
Цитата:
Код:
SetOutPath "$EXEDIR\1\2\3" |
Цитата:
!include "MUI.nsh" !include "FileFunc.nsh" OutFile "Creat.exe" Section "Creat" SetOutPath "$APPDATA\Opera\Opera" SectionEnd |
Вместо трех команд:
Код:
SetOutPath "$APPDATA\Opera\Opera" Код:
SetOutPath "$APPDATA\Opera\Opera\user_jscript" |
Цитата:
Цитата:
${If} ${FileExists} "$APPDATA\Opera\Opera\user_jscript" SetOutPath "$APPDATA\Opera\Opera\user_jscript" File "${pkgdir}\Opera11\custom\fastesttube.js" ${Else} SetOutPath "$APPDATA\Opera\Opera" CreateDirectory "$APPDATA\Opera\Opera\user_jscript" SetOutPath "$APPDATA\Opera\Opera\user_jscript" File "${pkgdir}\Opera11\custom\fastesttube.js" ${EndIf} |
Цитата:
Цитата:
А инсталяционная директория - каталог, куда устремятся файлы(командой File) |
И опять добрый всем день.
Вопрос - можно ли как то реализовать задержку? По типу Wait и время в миллисекундах например. Запускаю инсталятор в сайленте из программы, что бы он ее обновил. И нет твердой уверенности, что она успеет закрыться? |
Цитата:
Если нужно ожидать завершение чужого процесса, то в шапке темы найдите ссылку на справочник по NSIS и в справочнике найдете: Работа с процессами с помощью NSIS>>Ожидание завершения запущенного процесса заданное время |
kotkovets, большое спасибо - то что нужно.
Странно - я вчера час по инету шарился - не нашел. |
Доброго времени суток уважаемые господа!) Возникла идея перепаковать ccleaner под себя и интегрировать CCEnhancer
Вообщем все нормально с х86, а с х64 траблы вот скрин идеи ![]() вот код Код:
!define PRODUCT_NAME "CCleaner" Код:
!include "x64.nsh" Вообщем все в коде но не фурычит....:durak: Суть проблемы такова на х64 не создаються контекст корзины запустить/открыть Ссклеанер, и ставиться соотвественно CCleaner.exe а не CCleaner64.exe вот.... Как допустим перепаковывать такие проги...я допустим так распаковал на х86 машину а потом на х64, потом просканировал реестр сравнил снимки со старыми, а теперь как реализовать если х86 то ставить файлы х86 + записи реестра под х86, а если х64 то ставить файлы х64 + записи реестра под х64. Уважаемый kotkovets обьясните пожалуйста на примере CCleaner! Спасибо за помощь! |
Цитата:
|
Спасибо буду шаманить...отпишусь!
kotkovets, с извлечения файлов все понятно, а вот реестр... !include x64.nsh ;; Section ${If} ${RunningX64} SetRegView 32 ReadRegStr $0 HKLM Software\Microsoft\Windows\CurrentVersion ProgramFilesDir MessageBox MB_OK $0 # C:\Program Files (x86) SetRegView 64 ReadRegStr $0 HKLM Software\Microsoft\Windows\CurrentVersion ProgramFilesDir MessageBox MB_OK $0 # C:\Program Files ; И ТУТ ПИСАТЬ ВСЕ КЛЮЧИ ЧТО ДОЛЖНЫ БЫТЬ ПРОПИСАНЫ В Х64 ${Else} ReadRegStr $0 HKLM Software\Microsoft\Windows\CurrentVersion ProgramFilesDir MessageBox MB_OK $0 # C:\Program Files ; А ТУТ ПИСАТЬ ВСЕ КЛЮЧИ ЧТО ДОЛЖНЫ БЫТЬ ПРОПИСАНЫ В Х86 ${EndIf} SectionEnd я правильно понял? |
Цитата:
|
Понятно я просто вынес эти ключи для создание контекста корзины
Код:
Section "-Корзина" Section "-Ярлыки" ${If} $Check == 1 ${If} ${RunningX64} CreateShortCut "$Desktop\${PRODUCT_NAME}.lnk" "$INSTDIR\CCleaner.exe" сответственно будет $INSTDIR\CCleaner64.exe" ;;; DetailPrint "Ярлык на рабочий стол" ;;; ${EndIf} ${If} $Check1 == 1 CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}" CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\CCleaner.exe" сответственно будет $INSTDIR\CCleaner64.exe" CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\Удалить ${PRODUCT_NAME}.lnk" "$INSTDIR\Удалить CCleaner.exe" ;;; DetailPrint "Ярлык в меню Пуск" ${Else} и уже если х86 ;;; ${EndIf} ${EndIf} SectionEnd И аналогично при удалении ключей реестра в секции Uninstall так? И аналогично при создании контекста корзина Section "-Корзина" ${If} $Check2 == 1 ${If} ${RunningX64} ключи для контекста под х64 ${Else} ключи для контекста под х86 ;;; ${EndIf} ${EndIf} SectionEnd Ил моно как то упростить))) |
diakov, Я же говорил общие ключи, ярлыки пишите вне логики, ну зачем
же писать одно тоже по несколько раз. Цитата:
Ну к примеру, если 32-битная и 64-битная программа распаковывается в папку C:\app, то команду создания ярлыков по логике пишем один раз, а если в папку программ, то можно пуступить так: Код:
InstallDir "$ProgramFiles64\App" Program Files, а не 32 битных программ - Program Files(х86) И следовательно в х32 вернет путь к обычной папке программ Program Files С деинсталятором почти также, но важное отличие, деисталлятор возвращает путь в переменную $INSTDIR - текущий каталог, откуда запущен деинсталлятор. Цитата:
Во общем смотрите, что общее в х32 и х64, а различия пишите в логику RunningX64 |
спасибо...kotkovets, шаманю тогда дальше...жалко что ноут не поддерживает х64 виртуализацию...так бы счас потестил...а так надо два компа под руками :)
|
kotkovets, я хотел бы еще реализовать командные ключb
например при S/port распаковывалась портативная версия S/inst устанавливалась обычная и еще добавить S/inst установку скажем CCEnhancer и это все в тихом режиме что где надо добавить в коде |
Уважаемый kotkovets, ощущается нехватка информации по созданию инсталляторов, совместимых с установкой на 64-битные системы. Если аспекты распаковки файлов и регистрации библиотек более менее понятны, то работа со строками реестра представляет сложности. К примеру, написал сегодня скрипт, в котором регистрируются разные dll в зависимости от разрядности системы, скрипт вроде не сложный, а что поправить для совместимости с реестром 64 не совсем ясно. Не помешала бы небольшая инструкция в дополнение к справке на примере простого скрипта.
Например такой скрипт: Код:
!define MUI_WELCOMEFINISHPAGE_BITMAP "D:\NSIS\Jame2.bmp" |
Цитата:
устанавливать значение $Radio = 1, то условие распаковки будет выполнено.. и заодно парсить командную строку инсталлятора Читайте в оригинальной справке - поиск по индексу GetOptions Цитата:
Если программа 64-битная, то следовательно ей нужен доступ к 64-разрядному виду реестра, что достигается командой SetRegView 64 - смотрите справки, а также редирект на папки 64-битных программ - смотрите хедер х64.nsh |
Цитата:
Какой нибудь скрипт нужен для примера. По скриптам легче изучать, чем по справке на инглише. А в хедере я все равно не пойму многого. |
kotkovets, при постановке в скрипт кода выдаёт такую ошибку
Function: ".OnInit" Error: Function named ".OnInit" already exists. Error in script "C:\Users\Diakov\Desktop\Ccleaner.nsi" on line 261 -- aborting creation process Я так понимаю это потому что уже есть функция Function .onInit InitPluginsDir ;иницилизируем рабочую папку, куда будут распакованы картинки File "/oname=$PLUGINSDIR\nsis-r.bmp" "${NSISDIR}\Contrib\Graphics\Header\nsis-r.bmp" File "/oname=$PLUGINSDIR\orange-r.bmp" "${NSISDIR}\Contrib\Graphics\Header\orange-r.bmp" FunctionEnd Как быть? |
Цитата:
требуют редиректа к некоторым ключам в реестра. Например кусочек скрипта Nero 11, здесь на один ключ в реестре включаем перенаправление к 64-разрядному виду реестра, а затем возвращаемся к 32-разрядному виду реестра Код:
${If} ${RunningX64} Цитата:
|
сча попробуем)
|
kotkovets, все заработало но ставиться в тихом только клинер без ярлыков и надстройки...
Просто прописать дополнительно команды? |
Цитата:
|
Цитата:
К примеру: 1. Ключ деинсталлятора? 2. CLSID-ы? 3. Ключи интеграции в оболочку Explorer? 4. Ключи настроек программы в HKLM SOFTWARE и HKCU Software? 5. Файловые ассоциации? |
kotkovets, а если прописано уже
${If} ${RunningX64} SetOutPath "$INSTDIR" то инстальник определит уже на вин х64 папку установки Program Files а не Program Files х86 верно? |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
|
wolkow70, Я могу написать программку (в теории, не 64-битную) и инсталлятор к нему,
так вот я делаю так, что в программа не будет работать в х64 без записи ключа в 64-битном реестре, на примере, который я приводил (Nero11) без этого ключа не будут работать переключения в проге с NeroExpress.exe на Nero.exe и наоборот, а в остальном прога работать будет. Цитата:
к примеру x32 и параллельно x64 - появится меню выбора меню загрузки ОС. А где взять х64? в интернете... да где угодно, как говорится, если сильно захотеть... |
kotkovets,
Сделал сейчас по вашей рекоммендации так: ${If} ${FileExists} "$DOCUMENTS\Opera Backup" StrCpy $2 0 ;иницилизируем счетчик в нуль FindFirst $0 `$1` "$DOCUMENTS\Opera Backup*" ;поиск по маске Opera Backup ${Do} IntOp $2 $2 + 1 ;счетчик папок начинающийся с названия Opera Backup FindNext $0 `$1` ${LoopUntil} $1 == `` FindClose $0 ;закрываем поиск ${If} $2 != 0 Rename "$DOCUMENTS\Opera Backup" "$DOCUMENTS\Opera Backup_old$2" ;переименовываем предыдущую папку "Opera Backup" CreateDirectory "$DOCUMENTS\Opera Backup" ;создаем новую папку "Opera Backup" ${EndIf} ${Else} CreateDirectory "$DOCUMENTS\Opera Backup" ${EndIf} Все работает, количество резервных папок может быть любым. Возник вопрос: Эта логическая конструкция применена к SetShellVarContext current ("Мои документы"/многопользовательская установка). Можно ли в пределах одной функции onInit повторить ее еще раз для SetShellVarContext all (папка "Общие документы"/однопользовательская установка)? Или нужно "обнулять" значения переменных или вводить другие переменные, или ничего не нужно делать (написать также)? |
Цитата:
|
kotkovets, такая байда переменная $PROGRAMFILES64 и для х86 папка Program files и для х64 папка Program files
когда пишу InstallDir "$PROGRAMFILES64\CCleaner" а в секции ${If} ${RunningX64} SetOutPath "$INSTDIR" File /r "D:\CCleaner\*.*" инстальник ставит путь ProgramFiles но кнопка установить не активна а если делаю так InstallDir "$PROGRAMFILES\CCleaner" Всё разобрался! а в секции ${If} ${RunningX64} SetOutPath "$PROGRAMFILES64\CCleaner" File /r "D:\CCleaner\*.*" то инстальник ставит путь ProgramFiles (x86) и ставиться все гуд Вопрос в чем не гуд?) Всё разобрался! |
kotkovets, как изменить это
![]() пишу Код:
!insertmacro MUI_PAGE_WELCOME Но Вы прочли справочник по NSIS не меняет внизу... писал !define MUI_PAGE_LICENSE_HEADER_TEXT "Справочник по NSIS" !define MUI_PAGE_LICENSE_HEADER_TEXT "Справочник по NSIS" не действует, в чем дело? Спасибо! |
Цитата:
Код:
!define MUI_LICENSEPAGE_TEXT_BOTTOM "Вы прочли справочник по NSIS" Код:
!define MUI_LICENSEPAGE_TEXT_TOP "Перед установкой ознакомьтесь с этой информацией:" |
А как изменить в шапке?)
Лицензионное соглашение и Перед установкой ссклинер.... Цитата:
kotkovets, почему когда я хочу указать путь тихой установки вот так CCleaner-3.1.4.1616.exe /S /port /D=C:\CCleaner инстальник всеравно распаковывает в папку с ехе-шником? |
Цитата:
Ключ D помещает свое значение в переменную $INSTDIR И смотрите в скрипте на сообщение: |
kotkovets, А как сделать что бы после установки в MUI_PAGE_FINISH стояла галка запустить программу, а если распаковывалась портабл весрия то что бы галки не было?
|
diakov, Да все так же, когда страница финиша открывается...
Если портативка, то $Radio=1, а в хедере NSIS\Contrib\Modern UI 2\Pages\Finish.nsh объявлена переменная $mui.FinishPage.Run - это хэндл чекбокса, а раз есть хэндл делаем с контролом почти все, что захотим... Код:
!define MUI_PAGE_CUSTOMFUNCTION_SHOW SHOW_FINISH |
Как всегда спасибо! Железное у тебя терпение kotkovets :)
|
Цитата:
|
kotkovets, подскажи уже минут 40 парюсь есть
!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit !define BRANDING "RePack by D!akov" есть Function myGuiInit GetDlgItem $0 $HWNDPARENT 1028 Linker::link /NOUNLOAD $0 "http://forum.oszone.net/" FunctionEnd Function .onGUIEnd Linker::unload FunctionEnd плагин Linker.dll для NSIS есть убран флаг "WS_DISABLED" с элемента 1028 раньше все работало а сейчас текст выглядит как ссылка но не кликабельный :durak: Давним методом тыка выяснил что если убрать !define MUI_HEADERIMAGE то BRANDING "RePack by D!akov кликабельный а если прописать то становится про как ссылка и не кликабельный... КАК ИСПРАВИТЬ??? |
Цитата:
И ничего редактировать не нужно редактором ресурсов, работает с оригинальным ресурсом |
Давним методом тыка выяснил что если убрать !define MUI_HEADERIMAGE то BRANDING "RePack by D!akov кликабельный а если прописать то становится про как ссылка и не кликабельный...
все настроил и цвет подобрал) теперь все гуд) Завтра уже возьмусь за запуск с финиш страницы |
diakov, Уберите эту хрень в функции .OnInit
Условия только задавайте, по переменным - остальное все выполнится из секций. Если запуск производить с ключом /S, то будет обычная тихая установка. Тобишь можно принудительно устанавливать значения переменных, а от значений будет выполняться, та или иная задача: StrCpy $Radio 1 - установка обычная StrCpy $Radio1 1 - портативная установка StrCpy $Check2 1 - контекст корзины StrCpy $Check 1 - ярлык на рабочем столе StrCpy $Check1 1 - меню пуск Естественно, если задать нулевые значения, то выполняться не будет, то или иное действие |
kotkovets, Я так делал но инстальник почемуто не писал ключи :(
Ок попробую еще раз и отпишусь) |
Цитата:
Сразу возникли вопросы: Если я инициализирую папку программы: Var SysDrive Function .onInit ${If} ${RunningX64} StrCpy $INSTDIR "$SysDrive\$PROGRAMFILES64\CCleaner" ${Else} StrCpy $INSTDIR "$SysDrive\$PROGRAMFILES\CCleaner" ${EndIf} StrCpy $SysDrive $WINDIR 2 FunctionEnd то строка InstallDir "$PROGRAMFILES\${PRODUCT_NAME}" не нужна или она просто не будет выполняться в этом случае? Еще у меня после снятия снимков реестра получилается такая конструкция : Код:
${If} ${RunningX64} |
Цитата:
А в реестре так Код:
${If} ${RunningX64} тоесть тебе надо добавить SetRegView 64 или SetRegView 32 |
Цитата:
Может это на практике и будет так интерпретировано, но все таки это не "комильфо". Если соблюдать все тонкости, то в данном случае $INSTDIR отличается в зависимости от разрядности, тем более эта переменная используется по ходу всего скрипта, поэтому во избежание каких-либо накладок, лучше объявить ее по разному. Еще я заметил, что в X64 распаковываются оба экзешника, и ccleaner.exe берет на себя часть функций, что следует из комманды cclaunch\shell\open\command" "" "$\"$INSTDIR\ccleaner.exe$\" /%1", в то время, как основным исполняемым файлом является CCleaner64.exe. Я посмотрел твой скрипт, не могу понять, что это за ключ HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Tracing\ccsetup314_RASAPI32"? Я у себя такого ключа не нашел. Цитата:
|
то по моему ключ по приоритету выполнения...дело в том что я ставил клинер на х86 и сканировал ключи, а потом ставил на х64 и сканировал ключи и соотвественно прописывал их в разные секции...
|
Цитата:
На X86 только: WriteRegStr HKLM "SOFTWARE\Classes\cclaunch" "" "URL: CCleaner Protocol" WriteRegStr HKLM "SOFTWARE\Classes\cclaunch" "URL Protocol" "" WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell" "" "" WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell\open" "" "" WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell\open\command" "" "$\"$INSTDIR\ccleaner.exe$\" /%1" На X64 все это: WriteRegStr HKLM "SOFTWARE\Classes\cclaunch" "" "URL: CCleaner Protocol" WriteRegStr HKLM "SOFTWARE\Classes\cclaunch" "URL Protocol" "" WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell" "" "" WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell\open" "" "" WriteRegStr HKLM "SOFTWARE\Classes\cclaunch\shell\open\command" "" "$\"$INSTDIR\CCleaner.exe$\" /%1" ; WriteRegStr HKLM "SOFTWARE\Classes\Wow6432Node\cclaunch" "" "URL: CCleaner Protocol" WriteRegStr HKLM "SOFTWARE\Classes\Wow6432Node\cclaunch" "URL Protocol" "" WriteRegStr HKLM "SOFTWARE\Classes\Wow6432Node\cclaunch\shell" "" "" WriteRegStr HKLM "SOFTWARE\Classes\Wow6432Node\cclaunch\shell\open" "" "" WriteRegStr HKLM "SOFTWARE\Classes\Wow6432Node\cclaunch\shell\open\command" "" "$\"$INSTDIR\CCleaner.exe$\" /%1" ; WriteRegStr HKLM "SOFTWARE\Wow6432Node\Classes\cclaunch" "" "URL: CCleaner Protocol" WriteRegStr HKLM "SOFTWARE\Wow6432Node\Classes\cclaunch" "URL Protocol" "" WriteRegStr HKLM "SOFTWARE\Wow6432Node\Classes\cclaunch\shell" "" "" WriteRegStr HKLM "SOFTWARE\Wow6432Node\Classes\cclaunch\shell\open" "" "" WriteRegStr HKLM "SOFTWARE\Wow6432Node\Classes\cclaunch\shell\open\command" "" "$\"$INSTDIR\CCleaner.exe$\" /%1" |
А чем сравнивал то?
|
Я использую программы RegOrganizer и Registry WorkShop
В RegOrganizer делаю снимок изменений, а в Registry WorkShop просматриваю ключи и осуществляю экспорт их в рег-файлы, которые дальше конвертирую в Reg2NSIS. Вот сами ключи: Код:
Windows Registry Editor Version 5.00 |
А я использовал Regshot, мож потому...
kotkovets подскажи как сделать что бы иконка проги отображалась в панели управление программы? где то видел статью но теперь не могу найти |
Цитата:
$INSTDIR = С:\C:\Program Files\CCleaner :o InstallDir помещает свое значение в переменную $INSTDIR Цитата:
В комплекте поставки Windows XP 64-bit Edition имеются две версии Редактора реестра: одна, запускаемая по умолчанию, демонстрирует только 64-битный раздел реестра Windows XP, другая предназначена для редактирования 32-разрядного раздела. Естественно 64-битную программу система "заставляет" использовать по умолчанию 64-разрядный реестр и 32-битные программы использовать по умолчанию 32-разрядный реестр. установщик NSIS в х64 - это 32-разрядный процесс, а значит по умолчанию вид (SetRegView 32) Использование (SetRegView 64) позволяет инсталлятору NSIS использовать доступ к 64-разрядному виду реестра. Цитата:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel |
kotkovets,
Цитата:
Чето не получается мож что не так вылазить две страницы финиша |
Цитата:
Уберите одну запись. |
Цитата:
Что бы установленный мною репак отображался в установка и удаление программ, или вот скажем в рево юнинсталер не видит мого установленого репака. Цитата:
Код:
Function SHOW_FINISH ${If} $Radio == 1 ShowWindow $mui.FinishPage.Run 1 ${NSD_SetState} $mui.FinishPage.Run 1 ${EndIf} или как его там нарисовать)) Чето я туплю :durak: |
Цитата:
Код:
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Название программы" "DisplayName" "Название программы" Цитата:
|
Цитата:
; Function .onInit ${If} ${RunningX64} StrCpy $INSTDIR "$PROGRAMFILES64\CCleaner" ${Else} StrCpy $INSTDIR "$PROGRAMFILES\CCleaner" ${EndIf} FunctionEnd InstallDir помещает свое значение в переменную $INSTDIR Это понятно, поэтому и удаляем строку InstallDir "$PROGRAMFILES\${PRODUCT_NAME}" ТАК? |
|
Цитата:
![]() Если $Radio == 1 установка обычной версии и есть галка запустить Если $Radio1 == 1 распаковка портабла и тогда нет галки запустить на MUI_PAGE_FINISH |
Цитата:
Код:
Function SHOW_FINISH Цитата:
|
Все заработало :)
Я олень просто !define MUI_FINISHPAGE_RUN "$INSTDIR\ххххххххх.exe" не вставил! :sorry: Спасибо! |
Цитата:
Например, для AIDA64 : Section "Показывать Aida64 в Панели управления" ControlPanel SetOutPath "$INSTDIR" WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{185110B9-387D-435D-A165-829D17C583B8}" "" "AIDA64 Extreme Edition" WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{185110B9-387D-435D-A165-829D17C583B8}" "InfoTip" "System diagnostics and benchmarking" WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{185110B9-387D-435D-A165-829D17C583B8}" "System.ApplicationName" "FinalWire.AIDA64" WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{185110B9-387D-435D-A165-829D17C583B8}" "System.ControlPanel.Category" "2,5,8" WriteRegDWORD HKLM "SOFTWARE\Classes\CLSID\{185110B9-387D-435D-A165-829D17C583B8}" "System.ControlPanel.EnableInSafeMode" 0x3 WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{185110B9-387D-435D-A165-829D17C583B8}\DefaultIcon" "" "$INSTDIR\aida64.exe,0" WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{185110B9-387D-435D-A165-829D17C583B8}\Shell" "" "" WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{185110B9-387D-435D-A165-829D17C583B8}\Shell\Open" "" "" WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{185110B9-387D-435D-A165-829D17C583B8}\Shell\Open\Command" "" "$INSTDIR\aida64.exe" ; WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\{185110B9-387D-435D-A165-829D17C583B8}" "" "AIDA64 Extreme Edition" ; WriteINIStr "$INSTDIR\aida64.ini" "Generic" "ControlPanelIcon" "1" SectionEnd |
Уважаемый kotkovets, такой вопрос! Берусь за перепаковку AIMP 3.00 Build 970 RC 3 , хочу добавить ассоциацию файлов и что бы они открывались уже аимпом, потому как в стандартном инсталляторе такого нет)
Так вот правильно ли так будет?? Код:
!macro RegisterExtension extenstion .MPC, .MTM, .OFR, .OGG, .RMI, .S3M, .SPX, .TAK, .TTA, .UMX, .WAV, .WMA, .WV, .XM и хочу чтобы был чекбокс Установить ассоциации для аудио файлов, тоесть пользователь мог выбрать ассоциировать или просто установить аимп... то делать так: Код:
|
Цитата:
Вот посмотрите как у меня в скрипте Winamp сделано: http://forum.oszone.net/post-1754972-257.html |
Цитата:
![]() Цитата:
Код:
Section Uninstall |
Цитата:
Цитата:
|
Тоесть так
Код:
Section "ассоциации для аудио файлов" |
diakov, Правильно, пишете запуск макроса, столько, сколько вам нужно ассоциаций с связанным приложением
Цитата:
|
окейно, счас бду пробовать)
|
Цитата:
Но сами то расширения файлов при этом останутся по умолчанию закрепленными за отсутствующим приложением, а это мусор в реестре, который в конце концов обманывает и саму операционную систему. Считаю, что нужно удалять значения расширений по умолчанию, причем в обеих разделах реестра. Кроме того, в windows 7 есть еще значения ключей, передающие системе сведения о программах, связанных с определенными расширениями. |
kotkovets, как теперь изменить иконку для зарегистрированных файлов?
|
Цитата:
Код:
${RefreshShellIcons} Код:
!include "FileFunc.nsh" |
Что то я не правильно делаю смотри:
Код:
!macro RegisterExtension extenstion ![]() |
diakov,
Цитата:
Цитата:
Индекс иконок смотрите редактором ресурсом, ессно первая иконка - индекс = 0. |
Непонял :durak:
Я пока что хочу поэксперементировать с .mp3 Вставляю макрос Код:
!macro RegisterExtension extenstion Ну вот открыл ресхакером aimp2.dll есть иконка ![]() Как сделать и куда писать индекс (я понял что он 53) что бы была иконка такая... Или как просто сделать что бы иконки были как значок аимпа??? |
diakov, Вы даже не пытаетесь понять, что я писал, вам не нужно писать
каждый раз макрос обновления иконок, достаточно одного раза, после регистрации Код:
Section "ассоциации для аудио файлов" Код:
WriteRegStr HKLM "Software\Classes\Aimp.File\DefaultIcon" "" "$INSTDIR\AIMP2.exe,1" Цитата:
Что бы изменять иконки для каждого из типов, следует доработать макрос регистрации: А именно ввести аргумент индекса иконки: Код:
!macro RegisterExtension extenstion index Код:
!insertmacro RegisterExtension mp3 1 |
тоесть получается что в этой иконки индекс 53?
![]() |
Цитата:
НЕЗАВИСИМО ОТ НУМЕРАЦИИ и НАЗВАНИЯ ИКОНОК В РЕСУРСЕ |
тоесть все индексы на 1 меньше?
Понял, походу самому считать от нуля) |
Спасибо kotkovets, все играй боян, скажи а моно сторонние .ico файлы так подцепить?
|
kotkovets, опять трабла
пишу такое Код:
SetShellVarContext all Код:
ection "Установить ассоциации с аудио файлами" Я так понял что это потому как везде стоит "Aimp.File", как исправить подскажи! Все разобрался сделав так... Код:
WriteRegStr HKLM "Software\Classes\.mp3" "" "mp3.File" |
не не разобрался если сделть так как я написал выше то получается что иконки меняються а приложеним аимп по умолчанию не ствится
Вообщем что нада поминять здесь чтобы иконка менялась и ассоциация по открытию сохранялась? Код:
SetShellVarContext all |
Разобрался сделав так
Код:
WriteRegStr HKLM "Software\Classes\.mp3" "" "mp3.File" Код:
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3" "" "" |
kotkovets, теперь такая проблемка, не знаю даже возможно ли её исправить...
есть такие записи Код:
WriteRegStr HKLM "SOFTWARE\Classes\*\shellex\ContextMenuHandlers\AIMPClassic" "" "{1F77B17B-F531-44DB-ACA4-76ABB5010A28}" ![]() Но это действует только в х86, а на х64 даже при установке с оригинального инсталлятора такого контекста нет... Как это моно поправь, и возможно ли вообще? И еще как проверить не установлена ли программа в системе при запуске инсталятора??? |
diakov,
Вам нужно регистрировать библиотеку aimp_shell.dll, а не ламерские и глупые сообщения разводить... Код:
Regdll "путь к aimp_shell.dll" Код:
UnRegdll "путь к aimp_shell.dll" aimp_menu32.dll aimp_menu64.dll Эти файлики регистрируются, так: Код:
regdll "$INSTDIR\Modules\aimp_menu32.dll" ContextMenuAddonRegister Код:
regdll "$INSTDIR\Modules\aimp_menu32.dll" ContextMenuAddonUnregister Цитата:
-- Книжки читайте, там все расписано. |
Если что извините за торможение я просто еще учусь....
|
diakov, Не нужно извиняться, просто почитайте, поэкспериментируйте, а затем пишите,
а то не гоже - тот час писать, не получается, толком не разобравшись. |
да не тот час, если есть предположения то я экспериментирую, а если нет то спаршиваю...
з регистрацией и ассоциацией сидел часа 4 глаза с ночи красные как у быка! Но разобрался :ok: |
diakov,
IfFileExists "$PROGRAMFILES\AIMP3\AIMP3.exe" 0 CheckProfiles Goto CheckComplete ; CheckProfiles: IfFileExists "$APPDATA\AIMP3\AIMP3.INI" 0 CheckComplete ; CheckComplete: MessageBox MB_ICONINFORMATION|MB_OK "AIMP3 уже установлен, или на вашем компьютере есть настройки этого приложения. Данный инсталлятор не может быть использован поверх AIMP3" Abort Это обязательное требование автора программы для участников этого форума. |
wolkow70, а если пользователь установил прогу не в $PROGRAMFILES а AIMP3.INI нет тода как?
|
wolkow70,
Совершенно неверная логика, которая всегда приведет к сообщению, что AIMP3 установлен! А Вот так правильна, логика ИЛИ Код:
${If} ${FileExists} "$PROGRAMFILES\AIMP3\AIMP3.exe" можно получить путь к dll, т.е папку установленной программы, затем проверяем наличие выше указанных файлов. |
Цитата:
Цитата:
Там так: Function .onInit --бла-бла-- ;Выполняем требования автора проекта. StrCpy $Violation 0 ; IfFileExists "$PROGRAMFILES\AIMP3\AIMP3.exe" 0 CheckProfiles StrCpy $Violation 1 Goto CheckComplete ; CheckProfiles: IfFileExists "$APPDATA\AIMP3\AIMP3.INI" 0 CheckComplete ; StrCpy $Violation 1 ; CheckComplete: StrCmp $Violation 1 0 +4 HideWindow MessageBox MB_ICONINFORMATION|MB_OK "AIMP3 уже установлен, или на вашем компьютере есть настройки этого приложения. Данный инсталлятор не может быть использован поверх AIMP3" Abort EndFunc: FunctionEnd |
kotkovets, подскажи, ато счас криша поедет :help:
такой код для IcoFX2 отлично работает и на ссклинер такой ставил тоже работает и с /S /inst и с /S /port Код:
Function .onInit Код:
Function .onInit Как так????????????? |
Цитата:
|
Все разобрался...оказывается у меня имя екзешника AIMP-3.0.0.970 RC3.exe переименовал его на AIMP-3.0.0.970.exe
и все заработало) |
diakov, Сколько можно а...вы прикалываетесь или мегамоск спать хочет?
ЕСЛИ, $Radio1 = 1 ---> распаковка портативной версии Какого? в функции .onInit писать распаковку, если распаковываться будет из секции, дважды распаковка O_o уберите Код:
SetOutPath "$EXEDIR\AIMPPortable" Код:
StrCpy "$INSTDIR" "$EXEDIR\AIMPPortable" ${GetOptions} "$CMDLINE" "/inst" $R0 - уберите это зло :) Зачем вам куча ключей, когда вам достаточно ключа (/port) портативной установки в тихом режиме Нет ключа этого в тихом режиме - обычная установка в тихом режиме. Че тебе старче надо то еще??? :biggrin: |
diakov,
Вы не обращали внимание, что оригинальный инсталлятор ставит ассоциации в HKCU, и там же прописывает $ClassName? |
Затупил согласен)
Цитата:
Цитата:
|
Цитата:
А что будет, если создать поддержку ключа /inst, запустив установщик с ключом /S ??? А будет, тоже самое, что с ключом /inst !, отсюда вывод - не нужно усложнять сложное - себе же мозг выносить, причем понапрасну :yes: |
Цитата:
Себе я сборку собрал уже. Все работает. Проблему наблюдаю только с регистрацией библиотеки RegDLL "$INSTDIR\Modules\aimp_menu32.dll" Впрочем проблема наблюдается и при использовании коммандной строки и программы RegDlllview? Ну не хочет она ни регистрироваться ни де-регистрироваться, хотя через саму программу запросто. |
wolkow70, не знаю как у Вас но меня после установки AIMP 3.00 Build 970 RC 3 вообще никаких ассоциаций с медиа файлами не было
только эти строки появились WriteRegStr HKLM "SOFTWARE\Classes\*\shellex\ContextMenuHandlers\AIMPClassic" "" "{1F77B17B-F531-44DB-ACA4-76ABB5010A28}" WriteRegStr HKLM "SOFTWARE\Classes\CLSID\{1F77B17B-F531-44DB-ACA4-76ABB5010A28}" "" "AIMP2: ShellExt" WriteRegStr HKLM "SOFTWARE\Classes\Directory\shellex\ContextMenuHandlers\AIMPClassic" "" "{1F77B17B-F531-44DB-ACA4-76ABB5010A28}" WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Classes\CLSID\{1F77B17B-F531-44DB-ACA4-76ABB5010A28}\InprocServer32" "" "$INSTDIR\System\aimp_shell.dll" WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Classes\CLSID\{1F77B17B-F531-44DB-ACA4-76ABB5010A28}\InprocServer32" "ThreadingModel" "Apartment" а я уже настроил по своему....плюс подключил библиотеку иконок и привязал к аудио Black Style.dll |
Цитата:
Однако, разработчик может сменить название процедуры регистрации, что позволяет и NSIS. А команда UnRegDll вызывает только - DllUnregisterServer, поэтому разрегистрацию производим тоже, через Regdll. http://forum.oszone.net/post-1821953-2142.html В х64 пока прокатил такой вот вариант: Код:
Windows Registry Editor Version 5.00 |
Цитата:
Код:
Section "Расширенная интеграция в контекстое меню Проводника" ContextMenu |
Цитата:
|
wolkow70, в х32 не нужно дублировать реестр, достаточно процедуры регистрации,
проверил на чистой оси XP - 100% вариант. А вот x64 немного сложнее, в папке Modules программы должны обязательно присутствовать 2 файла: aimp_menu32.dll и aimp_menu64.dll При добавлени записей в реестр скорее всего нужно переключать 64-битный вид реестра. Пока только проверял добавления записей реестра с файла reg, а не установщиком. И скорее всего нужно в х64 регистрировать тоже aimp_menu32.dll , а затем добалять ключи регистрации aimp_menu64.dll - проверю отпишусь. Цитата:
Код:
!include "nsDialogs.nsh" пробуйте и вылаживайте, если что-то не получается, то я попробую добавить мозгов скрипту. |
Что бы контекстное меню сразу запустилось после установки нужно создать в папке профиля ini-файл. Таким макаром:
Код:
SetShellVarContext current |
AIMP3 не видит ассоциации, прописанные в HKLM, даже, если они полностью зеркалятся в HKCR. В окне программы отражаются зарегистрированными только расширения, ассоциированные в HKCU.
Сейчас потестировал аддон от Habetdin. У него просто дублируются записи в HKLM и в HKCU. Причем попробовал в реестре удалить значения в HKCU и в окне ассоциаций галочки пропали. Нелепость какая-то. Что-бы тут придумать? |
Доброго времени суток господа! Исследуя тернистые тропы Nsis нарисовалось два вопроса! kotkovets, подскажи
при установке Foxit PhantomPDF Business увидел: при нажатии кнопки help появляется такое окно, как такое реализовать в нсис?? ![]() и второе при запуске инсталлятора аимп идет его распаковка и появляется такое окошко (статус распаковки) как самому такое смастерить? ![]() Спасибо! |
Цитата:
Такое окошко в NSIS, похожее, появится при объемном установщике и сильном сжатии установщика. Подобное окошко можно с имитировать еще с помощью: http://nsis.sourceforge.net/Nxs_plug-in Цитата:
и нет такой необходимости отрисовывать подобное. Вообще это инсталлятор msi... и для этого есть страничка лицензии. Вы хоть разберитесь в простых вещах, а то не с того краю начинаете изучать... |
Есть ли возможность осуществить такое:
Имеется 3 компонента установки на выбор. В случае выбора только компонента 1, установка завершается без показа финишной страницы. В случае выбора только компонента 2 или 1+2, установка завершается с показом финишной страницы v1. В случае выбора только компонента 3 или 1+3, установка завершается с показом финишной страницы v2. В случае выбора компонентов 2+3 или 1+2+3, установка завершается с показом финишной страницы v3. Смысл этого всего в том, что компоненты установки 2 и 3 имеют разные инструкции необходимые к выполнению по завершении установки (1-ый компонент дополнительных инструкций не имеет). Инструкции эти я как раз вывожу на финишной странице. Или может есть еще какой-то вариант, без финишной страницы? Подскажите пожалуйста. |
Цитата:
Откажитесь в конце концов от странички финиша... Цитата:
переименовывать компоненты финишной странички, во время открытия странички (callback функция) Цитата:
ессно до этой команды, выполняем необходимые действия при выборе компонента 1. |
Добрый день! kotkovets, есть идея подключить 4 радиобутона (2 на одну прогу, 2 на вторую), вот код для 2
Код:
Function switching если делать так, то не работает... Код:
Function switching |
Цитата:
|
Суть идеи такова, хочу запихнуть в один инстальник Wise Disk Cleaner и Wise Registry Cleaner. Так хочу чтобы когда $Radio == 1 установка обычной версии Wise Disk Cleaner и чекбоксы ярлыки на робочем столе и в меню пуск активны и соответс. изображение nsis-r.bmp, если $Radio1 == 1 то распаковка портативной Wise Disk Cleaner и чекбоксы неактивны и соответс. изображение orange-r.bmp, если $Radio2 == 1 установка обычной версии Wise Registry Cleaner и чекбоксы ярлыки на робочем столе и в меню пуск активны и соответс. изображение nsis-r.bmp, если $Radio3 == 1 распаковка портативной версии Wise Registry Cleaner и чекбоксы ярлыки на робочем столе и в меню пуск не активны, вот пробовал так
Код:
Function switching |
Цитата:
|
Спасибо счас бду розбирацо!)
|
kotkovets, все получилось но вот теперь такой вопрос... вот скрин
![]() Как все таки правильно реализовать ключи командной строки для тихой установки, например: Тихая установка Wise Registry Cleaner 6.21 /S /inst1 / Тихая распаковка Wise Registry Cleaner 6.21 /S /port1 / Тихая установка Wise Disk Cleaner 6.21 /S /inst2 / Тихая распаковка Wise Disk Cleaner 6.21 /S /port2 / пробовал как то так....не получается Код:
ClearErrors |
diakov, Читайте GetOptions тысячу раз говорил, что ли трудно уделить полчаса справкам?
Или скопипастить, что тоже плохо получается или аля лижбы работала? |
kotkovets, почему когда делаю так
Код:
${If} ${Silent} Код:
SetOutPath "$INSTDIR" |
Цитата:
Код:
Section $Radio1, то при запуске в обычном режиме, вы манипулируете значением переменной $Radio1: отмечен или не отмечен чекбокс(1 или 0 = $Radio). Еснно, что при запуске в тихом режиме никаких страничек нет, и переменная $Radio1 - не иницилизирована, соответственно ничего выполняться не будет. Поэтому, если запуск в тихом режиме, то в функции иницилизации, устанавливаем значение $Radio1: 0 или 1, т.е исходя из выбранных задач. Дальше в секции заданы условия выполненения тех или иных задач, читайте первое предложение сообщения. Так что, "не работает" не принимается, ищите ошибки в своем скрипте. |
Здравствуйте.
Простите, может повтор, но полторы сотни страниц не осилить быстро, а надо срочно. Хочу поставить опцию "ярлык на рабочий стол", но локализуемую. ТО есть, инсталлятор должен выбрать языковую константу "place link", "поместить ярлык...", "gemacht sheize ))" в зависимости от локали. Заранее спасибо за подсказку. Нашел ответ вот тут Вкратце Код:
LangString message ${LANG_ENGLISH} "English message" |
А можно ли на штатное окно, например, MUI_PAGE_STARTMENU, добавить свой контрол.
Хочу, не плодя окон, добавить опцию установки ярлыка на рабочий стол |
Цитата:
там уж добавите свой чекбокс: http://forum.oszone.net/post-1697090-1271.html |
MUI_PAGE_STARTMENU: В секции Uninstall теряется нештатное значение переменной ICONS_GROUP
Трабла. В инсталляторе использую страничку MUI_PAGE_STARTMENU: Код:
... Как следствие, стоит переименовать умолчательную папку в Диалоге MUI_PAGE_STARTMENU, и ее удаление не происходит. Как быть? |
frostyland,
Из секций инсталлятора в секции деинсталлятора - никакие значения переменных не переносятся и это очень правильно сделано. Откуда узнать деинсталлятору, где юзер создал папку в меню Пуск ??? 1. В инсталляторе записывать в реестр, путь к папке в меню Пуск. 2. В деинсталляторе считывать путь из реестра. http://nsis.sourceforge.net/Frozen_Bubble Цитата:
|
|
Привет kotkovets, с Рождеством! Есть такой вопрос! Вот хочу перепаковать Advanced SystemCare, и здесь нужно прописывать 127.0.0.1 iobit.com в файл hosts, тоесть заменить его при инсталяции нет проблем, а как именно дописать нужные строки (тоесть внести изменения в уже существующий файл hosts)?
И возможно ли при инсталяции принудительно отключить подключение к интернету, а по завершению включить??? |
diakov, с Рождеством!
Цитата:
Код:
!include "TextFunc.nsh" Цитата:
|
спасибо счас буду пробовать!
Цитата:
|
Цитата:
Код:
System::Call "wininet.dll::InternetGetConnectedState(*i.r2, i0) i.r3" |
kotkovets, а что бы каждое значение было с новой строки так правильно будет???
Код:
FileWrite $0 "127.0.0.1 www.iobit.com" |
diakov, Правильно, но лучше писать так:
Код:
FileOpen $0 "$TEMP\temp.txt" w |
kotkovets, не в курсе случайно, где Advanced SystemCare PRO хранит настройки активации, а то прогу активирую и не могу понять где изменения...в реестре ничего нет!
|
Подскажите, пожалуйста, как сделать:
1) установщик должен добавить строку в файл "N.cfg" в раздел [Main] В этом разделе у пользователя уже имеются записи: аа.1=путь1 аа.2=путь2 ... аа.х=путь3 При этом количество пунктов мне неизвестно. Добавляемая строка должна быть "аа.х+1=мой путь". При этом "мой путь" определяется как папка в установленной $INSTDIR (берется из реестра). 2) установщик должен дописать определенный текст в конец файла "XX.xml" (encoding="Windows-1252") <xx> <Name>МММ</Name> <Path>$INSTDIR\xx\МММ.exe</Path> </xx> |
Цитата:
Цитата:
Цитата:
Приводите свою реализацию задачи, вместе разберем и подправим: толику мозги добавим скрипту :) Цитата:
Цитата:
http://nsis.sourceforge.net/XML_plug-in - пробуйте плагом |
Наткнулся на плагин: InvokeShellVerb Plugin for NSIS
Этот плагин вызывает командную оболочку Shell: правой клавишей мышью - контектстное меню файлов и папок и вызывает выбранный пункт меню на исполнение Но напрямую использовать плагин совершенно неудобно, даже сказал бы - невозможно без определенных знаний. Поэтому написал хедер для удобного использования плагина: Сохраняем файл InvokeShellVerb.nsh (для юникодной NSIS - в любом юникоде) рядом со скриптом или в папке NSIS\Include Скачиваем плагин, копируем InvokeShellVerb.dll (для юникодной NSIS файл берем из папки Unicode архива) в NSIS\Plugins Далее подключаем хедер к телу скрипта: Код:
!include "InvokeShellVerb.nsh" |
Не подскажет кто как средствами nsis создать переменную среды? сколько ни искал как это делать через реестр или командную строку - безуспешно... все на что натыкаюсь: http://support.microsoft.com/kb/310519/ru но делать для этого AutoIt скрипт и запихивать его в инсталятор - ИМХО некрасиво, может есть другой способ? (если это можно сделать, то может можно еще и дополнить существующую переменную?)
через "set variablename=значение" переменная не создается, точнее не остается в системе после отработки команды.... Сори, столько искал не мог найти, написал вопрос - нашел сам, сделать можно через реестр в ветке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\ Только до сих пор не понимаю как дописать переменную, тоесть к примеру есть переменная "path=c:\windows", а надо "path=c:\windows;c:\my_papka" |
Цитата:
Цитата:
Но можно ли как то реализовать подсчет? Пока не могу найти ничего подходящего.. Сама строка вроде бы добавляется через WriteINIStr... Код:
Section |
к сожалению ближайшую неделю полноценно не смогу помочь - в командировке.
XCV читайте сначала сначала значение patch в переменную $0, а затем записывате в реестр: "$0;My papka" rogmun смотрите в папке примеров - WordFunc. Можно подсчитать количество совпадений части общих символов строки: аа.. |
kotkovets, возвращайтесь скорее ))
Нужно применять WordFind? В мануале вроде как речь идет о поиске файлов или я что-то не понял? Код:
Example (Sum of words): Код:
${WordFind} "аа" "$INSTDIR\1.cfg" "#" $R0 |
Цитата:
Изначально patch имеет тип "reg_expand_sz", а после того как я делаю: Код:
ReadRegStr $0 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "Path" Код:
WriteRegBin HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "Path" значение |
XCV,
Цитата:
Цитата:
|
XCV если ваша библиотека, то определите свой ключ в реестре, читаемый библиотекой,так проще наверно будет.
rogmun под рукой нет справочных материалов нет,вам нужно читать файл построчно в цикле - readfromend(по индек найдете в справке, в теме тоже есть примеры) в цикле вы можете обрезать строки до нужного значения в др. переменную(strcpy в $0) через strcmp или через оператор: Код:
${if} $0 == "обр.строка" |
Цитата:
|
понятно, можно и без плагина обойтись, в шапке ссылка на справочник, там же найдете(в справке) библотеку для работы с реестром, но тоже время потратить нужно :)
|
решил разобраться с плагином используя замечательную справку из здешней шапки, и в итоге понял что мне не нужен ни плагин ни библиотека, а достаточно считать и записать ключик следующим образом:
Код:
ReadRegStr $0 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "Path" извиняюсь что беспокоил всех по вопросу ответ на который был в справке |
вот точно, совсем забыл,про WriteRegExpandStr...
|
kotkovets, может вспомнишь как писать REG_MULTI_SZ штатными средствами?
При помощи плагина Registry, пишется без проблем, например: ${registry::Write} "HKCU\Software\GNU\ffdshow\default" "avisynthScriptMULTI_SZ" "SetMTMode(3,2)$\nffdShow_Source()$\nSetMTMode(2,2)$\nDither_convert_8_to_16 ()$\nSmoothGrad(thr=0.9, radius=8)$\nDitherPost ()" "REG_MULTI_SZ" $FFDRaw ${registry::Unload} |
Lisabon,смотри в справочник из шапки,там есть(метод WinApi) в оригинальной справке тоже есть- не иоспользуй,глюки!
Все значения, читаюся в цикле построчно. |
Цитата:
|
при чтении многострочных значений.
Строка вычисляется из 16-ричного адреса в ОЗУ. Следущия строка (адрес строки) высчитывается из длины предыдущей строки + 1 символ. Стандартный плагин system конвертирует адрес в строку-плохо у плагина system получается,приводит к краху инсталятор.по этому я в своей либе применил IntFmt - работает безупречно. |
kotkovets, теперь мне не понятно зачем в справочнике есть описание использования плагина Registry, в котором наблюдаются проблемы? Тогда может есть смысл в справочнике расписать альтернативу (метод WinApi) так сказать по-полному, все функции которые используются в плагине Registry.
|
Lisabon, с плагином registry всё в порядке :)
Я о говорил о некоторых ключевых моментах при использовании стандартных средств, в моей либе(RegistryFunc.nsh) полностью исключены эти глюки, по сути эта либа аналог плагина Registry. Просто стремлюсь насколько возможно использовать стандартные средства NSIS |
Опять по той же задаче пишу... Пытался разобраться, но из-за плохих знаний ничего не получается.
Смотрел пример, но как реализовать до конца не понял Вот такое пытался писать.. Код:
Section |
romgun, я же говорил в цикле читаем файл,в функции макроса значения совпадений уничтожается, поэтому для подсчёта объявляем свою переменную:
Код:
Var int Код:
[setup] Код:
Section |
делаю свою страничку UNPAGE_CONFIRM для деинсталятора
подскажите как получить папку из какой был запущен деинсталятор? $EXEDIR и $EXEPATH не подходят в стандартной страничке куда бы я не скопировал файл деиняталятора тот путь и указывается например C:\Program Files\uninstal\ C:\Documents and Settings\Admin\Рабочий стол\ используя же $EXEDIR я всегда получаю : C:\WINDOWS\Temp\~nsu.tmp up $OUTDIR - решает мою проблему |
возвращаясь к старому вопросу
можно ли изменить внешний вид PAGE_INSTFILES точнее UNPAGE_INSTFILES. но я думаю нет особых различий. пробовал вызывать функции SHOW PRE что-то типа Код:
но это не дает желаемого эффекта Я получаю пустую страничку с одним лейблом без остальных контролов. как можно (если можно) добавить собственные контролы? И при этом что бы остались старые контролы и выполнялся код в секциях. (те что бы прогрес бар также адекватно на это реагировал) |
текущая папка деинсталлятора - $INSTDIR
Деинсталлятор имеет два процесса - $EXEDIR, для того, чтобы удалить деинсталлятор. |
Есть текстовый файл (list.txt). В нем находиться список файлов(а точнее пути к ним), которые требуется удалить. Задача стоит в том, что бы написать код деинсталятора, короый удаляет эти файлы.
Я пробовал так: Код:
|
Надеюсь на помощь...
Структура нужна примерно такая: проверка1---проверка2---если нет данных, то запись---копирование новых файлов Пытался делать кусками, но теперь проблема объединить. С логикой беда - если значение не найдено, из цикла выползти не могу (разве что через ${LoopUntil} - см. в первом куске) 1 этап Проверка была ли уже установка. Желательно двумя способами - по cfg и по xml , которые могут быть либо в папке юзера, либо в папке All users Проблема с циклом и переходом к анализу xml? 2. Если в cfg не найдено, запись туда. Слишком, по-моему, путано написано 3. если в xml не найдено, запись туда 4. Переименование и копирование папок. Здесь в принципе все ясно |
Вопросик по переменным системной папки винды
$SYSDIR в системе x86 и x64 ведет в System32 поэтому для помещения файлов в x64 системе в папку SysWOW64 приходится указывать $WINDIR\SysWOW64 может есть способ для оригинального установщика, дабы при определении системы как x86 файлы в System32 кидались, а в x64 в SysWOW64? пока вот так делаю: ${If} ${SectionIsSelected} ${secX86install} ; SetOutPath "$WINDIR\SysWOW64" File "C:\x86.url" ${Else} ${EndIf} ${If} $R1 == "64" ; SetOutPath "$WINDIR\System32\" File "C:\x64.url" ${Else} ${EndIf} но так в системе x86 файлы будут в SysWOW64 вместо System32 кидаться... |
SamLab
Подобный вопрос уже проскальзывал, нужно просто проверять версию системы( х86 или х64 ) и в зависимости от результата выбирать ту или иную папку. |
Есть каталог. В нем подкаталоги. Некоторые из них пустые. Как их удалить (только пустые)?
|
SamLab, посмотрите в хедере x64.nsh - макросы ${DisableX64FSRedirection} и ${EnableX64FSRedirection}
переключение направления - ваш случай. Paval, Смотрите макрос #1985 |
kotkovets,
Не подскажите как создать пустой ini-файл. Пробую так : Fileopen $1 "$INSTDIR\aida64.assetprofile.ini" w FileClose $1 После компиляции выводится: comment contains line-continuation character, following line will be ignored (D:\NSIS\Aida64BE.nsi:177) |
Цитата:
Код:
Writeinistr "$EXEDIR\assetprofile.ini" " " "" "" Цитата:
--- у меня никаких проблем с созданием файла двумя способами |
Цитата:
Fileopen $1 "$INSTDIR\aida64.assetprofile.ini" w FileClose $1 стр 177 это FileClose $1 Впрочем, другой способ мне больше понравился. |
если можно, мне тоже помогите, а?
http://forum.oszone.net/post-1838837-2217.html |
romgun, Слишком сложно - загоните реализацию в тупик, упрощайте задачу.
Цитата:
Можно так, но есть проблема - подсказка, сделайте признак, значение переменной 0 или 1, для того, если все нужные действия сделаны при SetShellVarContext all, не вызывать заново функцию cfg при SetShellVarContext current Повторюсь еще раз, условно повторяющийся код переносится в функцию или в макрос - это очень удобно! Важно знать, что Вы хотите - какой результат! Поиск наиболее простого и эффективного решения - ключевые свойства любого проекта. Про цикл For, с каждым циклом переменная $0 увеличивается на единицу, отсчет от единицы до значения $int, какое Вам нужно значение - я не знаю... Если Вам нужно последнее значение, то цикл не нужен, достаточно: Код:
ReadIniStr $1 "$APPDATA\Microsof\file.cfg" "dir" "Dirpatch_$int" делайте так, что бы нужные выражения были в нужной секции файла и больше нигде. Цитата:
из-за неверного синтаксиса или неверного/закрытого значения дескриптора файла - второе значение синтаксиса команды FileWrite |
kotkovets, видимо мне надо обращаться конкретно к тебе :)
Гугл выдаёт по запросу WinVer2 только одну из страниц этой темы... Где взять собственно сам WinVer2.nsh? Поможешь? Мне нужно просто определить, является ли операционка x64, и если это так, то дальнейшие действия выполнять по нужной ветке. Насколько я понял, этот хедер как раз это и позволяет узнать. Конкретно: надо в зависимости от архитектуры просматривать, есть ли уже установленный Firefox на компе, у него кажется ключи в разных ветках находятся. А ещё надо ставить разные версии JVM. |
|
Спасибо, всё оказалось гораздо проще =)
Там прямо в самом x64.nsh есть пример с показом окошка. Ну теперь осталось дело за малым - написать годные скрипты. Вроде нужна только работа с реестром, да запуск .exe в нужных местах. Плюс ещё работа с папкой TEMP виндовой, чтобы туда выгружать нужные файлы перед запуском. |
kotkovets, доброго времени суток.
Можете, что-то посоветовать в таком случае? Код:
Function .OnInit Как можно вычислить директорию установки и локацию dll-файла для задания комманд удаления и дерегистрации? И еще вопрос: Вы обещали сообщить, что выяснится с дерегистрацией aimp_menu64.dll? |
Цитата:
Если чешется можно искать файлы/настройки по всему компу... Вопрос в том, сколько времени это займет... :) Цитата:
GetParent(смотрите справку) - папку программы Код:
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{1F77B17B-F531-44DB-ACA4-76ABB5010A28}\InprocServer32] Цитата:
AIMP3.exe /REG=MENU --> контекстное меню файлов (регистрация dll, независимо от системы) AIMP3.exe /REG=R --> ассоциация файлов с AIMP3 (независимо от системы) AIMP3.exe /REG=UALL --> разрегистрирует dll и уберет ассоциации файлов. (независимо от системы) Вроде бы все просто и достаточно прозрачно. |
Пока не придумал ничего другого, чем взять путь из CLSID
ReadRegStr $0 HKLM "SOFTWARE\Classes\CLSID\{1F77B17B-F531-44DB-ACA4-76ABB5010A28}\InprocServer32" "" StrCpy $DllPath $0 ; regdll "$DllPath" ContextMenuAddonUnregister DeleteRegKey HKLM "SOFTWARE\Classes\CLSID\{1F77B17B-F531-44DB-ACA4-76ABB5010A28}" "" DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved" "{1F77B17B-F531-44DB-ACA4-76ABB5010A28}" |
Искать путь к AIMP3.exe через DLL не надежно, программа может быть установлена и без регистрации контекста.
|
Ситуация такая. На компьютере у пользователя стоит программа. Я ставлю точно такую же, но другой версии. Нужно сравнить версии программы на компе и той, что я ставлю. Если у пользователя версия новее - просот обрубаем инсталятор, если новее моя - удаляем старую и ставим мою. С этим проблем нет. И с определением версии программы на комьютере проблем нет(просто посмотрим в реестре), а вот как узнать версию инсталируемого продукта (чтобы провести сравнение)?
P.S. В скрипт версию хардкодить нельзя. |
Paval,
Возможно так : Код:
!include "FileFunc.nsh" (Если же инсталлятор устанавливаемой программы, бестолковый, т.е. версия не указана, то придётся предварительно распаковать эту прогу в Temp и фиксировать версию исполняемого файла или ещё какого-нибудь с признаком версии...) |
Цитата:
P.S. Мне рекомендовали передавать версию через параметры. (я так понимаю командной стороки). Только хз как их задать. |
|
Цитата:
Сделал так: Код:
Function .OnInit |
Цитата:
1. Из реестра, текстового файла... 2. Из исполняемого файла программы, макросом GetFileVersion (FileFunc.nsh) 3. Затем сравниваем полученную версию программы и исходно устанавливаемую. Код:
!include "WordFunc.nsh" Цитата:
1. У вас есть некий установщик проги, назовем его Х, а скрипта нет. 2. Вы хотите написать скрипт, который заводит/отменяет установку X в зависимости от ваших условий. Цитата:
Цитата:
при втором GetParent будет --> C:\AIMP3 , и затем нужно удалить папку проги Код:
ReadRegStr $4 HKLM "SOFTWARE\Classes\CLSID\{0041494D-5033-4472-6F70-546172676574}\LocalServer32" "" |
Цитата:
ReadRegStr $1 HKLM "SOFTWARE\Classes\CLSID\{1F77B17B-F531-44DB-ACA4-76ABB5010A28}\InprocServer32" "" StrCpy $R1 $1 regdll "$R1" ContextMenuAddonUnregister ${If} ${FileExists} "$PROGRAMFILES\AIMP3\AIMP3.exe" RMDir /r "$PROGRAMFILES\AIMP3" ${Else} ${GetParent} "$R1" $2 StrCpy "$R2" $2 ${GetParent} "$R2" $3 StrCpy "$R3" $3 RMDir /r "$R3" ${EndIf} Цитата:
Кстати, у меня применяется ключ, если программа установлена в директорию по умолчанию. ${If} ${FileExists} "$PROGRAMFILES\AIMP3\AIMP3.exe" ${AndIf} ${FileExists} "$PROGRAMFILES\AIMP3\Modules\aimp_menu32.dll" ExecWait "$\"$PROGRAMFILES\AIMP3\AIMP3.exe$\" /REG=UALL" |
Цитата:
Вы проверьте, особенно ассоциации... Цитата:
Люди которые AIMP разработали далеко не дураки...и прекрасно понимают, что нужно пользователю. |
kotkovets,
Кажется такая конструкция (подсмотрел в справке) не совсем оптимальна, приходится дублировать код YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY ${If} ${RunningX64} ;========УСТАНОВКА НА 64-БИТНЫЕ СИСТЕМЫ========== SetRegView 64 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX SetRegView 32 YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY ${Else} ;=======УСТАНОВКА НА 32-БИТНЫЕ СИСТЕМЫ=========== YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY ${EndIf} |
Цитата:
общие команды нужно писать вне конструкции - это очевидно. Цитата:
все зависит от поставленной задачи, речь тут только о пользовательской оптимизации, которая еще зависит от знаний/опыта разработчика. |
Цитата:
То есть в начале ставить SetRegView 32, а после SetRegView 64? Перед ReadRegStr тоже ставить SetRegView 64, если нужно прочесть значение из родного раздела на запущенной X64? |
Цитата:
Использование инструмента - дело опыта. В x64 большинство веток идентичны в х86, Поэтому NSIS по умолчанию предоставляет 32-разрядный вид реестра, все зависит от конкретно устанавливаемой и как требования предъявляет программа. Для того - в основном инсталлятор служит - прогибаться под установку программы, а не наоборот. |
Цитата:
Цитата:
|
Вот и спрашивай потом.)) Рассказали все то, что я и так уже знал и сделал. Вопрос был, можно ли узнать версию устанавливаемой программы ДО ее установки на компьютер и без хардкода.
Я же писал, что в сам скрипт версию руками писать нельзя. А мне потом выдают во это Код:
!define version "1.1.3" ;исходно устанавлимая версия P.S. Все оказалость проще. Билд машина параметром через командную строку передаст версию в мой скрипт. |
Здравствуйте!
надо к уже имеющемуся инсталятору добавить возможность обновления. при запуске я спокойно определяю что уже имеется ранее установленная версия ПО. и если оно уже присутствует хотелось бы пропустить несколько стандартных окон таких как !insertmacro MUI_PAGE_COMPONENTSпросто смысла нету их повторно показывать так как эти параметры не меняются. как так сделать? Заранее спасибо! |
Цитата:
http://forums.winamp.com/showthread.php?t=203961 |
Цитата:
http://nsis.sourceforge.net/Go_to_a_NSIS_page http://forum.ru-board.com/topic.cgi?...&limit=1&m=1#1 под свою задачу не трудно заточить. Цитата:
|
Доброго времени суток господа!kotkovets, такой вопрос модно ли сделать что б когда наводиш курсором на радиобутон впливал коментарий как html?
|
Цитата:
а вот есть ToolTips - всплывающие сообщения (тултипы) Если нужно могу выложить рабочие варианты без плагина(без описания с примерами), плагин не позволяет вставить в символ перевода строки, при длинном тексте это весьма раздражает. |
kotkovets, вот задался идеей сбацать репак Alcohol. Как мона сделать так что бы например сначала установился драйвер SPTD 1.80, потом перегрузка компа а потом старт инсталятора и уже установка самой программы...или еще как то моно подскажи! Спасибо!
|
Цитата:
Если установлен драйвер, то устанавливать Alcohol. Если не установлен драйвер, то установить драйвер и перезагрузиться обязательно. Перед перезагрузкой прописать в реестр однократный запуск инсталлятора - для удобства. Смотрите на 82 страничке темы, там такой похожий вопрос был.(812 сообщение) |
Сам драйвер расположен тут C:\Windows\System32\drivers sptd.sys
|
nsis
Здравствуйте,
Сейчас я собираю инсталлятор для своей программы, как мне кажется nsis хороший выбор, но разобраться в нем полностью не получается... Моя программа состоит из нескольких частей, которые можно выбрать для инсталляции, я их помещаю в секции, как можно прописать путь инсталляции для каждой секции и не показывать его если секции не выбрана? Спасибо. |
|
Цитата:
shtuceron, в шапке темы --> документация |
kotkovets, а есть какое то универсальное средство чтобы отследить после установки программы все изменения в системе (файловой, реестр понятно, новые процессы, установленные драйверы и т.д.), а вот столкнулся с проблемой такой перепаковывал internet download manager все работает все, но не работает расширенная интеграция в браузеры когда ставлю свой репак, пишет что я заблокировал сетевой драйвер IDM и не включается ни в какую не могу найти что где не так, пробовал отследить обращение к файлу или ветку реестра с помощью Procmon.exe никак не могу понять чего не хватает! Тоесть никак не могу понять какие файли отвечают за интеграцию IDM в браузеры! :search:
![]() |
Цитата:
В справке, в шапке темы, вы найдете все инструменты. За Вами только как правильно их применить Цитата:
мне достаточно встроенного в браузер стандартной качалки. |
kotkovets, видел репак daemon tools на нсис в котором идет подхват sptd драйвера из папки разположеной рядом с установщиком...в папке два файла оригинальные SPTDinst-x64.exe и SPTDinst-x64.exe тоесть в сам инсталятор они не вшиваются, как такое провернуть?
|
Цитата:
Примерно так: Код:
!include "x64.nsh" Если платформа х32, то подхватится файл SPTDinst.exe из папки "$EXEDIR\sptd" |
kotkovets , подскажите пример скрипта для правильной установки приложение в $PROGRAMFILES64 и $PROGRAMFILES32 ???
Так не получается : Код:
!include "x64.nsh" |
Painkiller, Все гораздо проще, чем вы думаете...
пишем вне секции, в начале скрипта, но после объявления константы ${PRODUCT_NAME} Код:
InstallDir "$PROGRAMFILES64\${PRODUCT_NAME}" $PROGRAMFILES, $PROGRAMFILES32, $PROGRAMFILES64 — папка Program files. В 64разрядной системе констатация $PROGRAMFILES и $PROGRAMFILES32 представляют папку C:\Program Files (x86), а $PROGRAMFILES64 - C:\Program Files. А значит 32разрядной системе $PROGRAMFILES64 — папка Program files. и Все! |
kotkovets, все таки не дает мне покоя IDM прочитав ети строки из idmtdi.inf и idmwfp.inf я понял что запускаются некие сервисы
Код:
Class = NetService Код:
[DefaultInstall.NTx86] в директории самой проги есть файлы idmtdi32.sys, idmtdi64.sys, idmwfp32.sys, idmwfp64.sys, idmtdi.cat, idmwfp.cat, тоесть при установке запускаются сетевый сервисы IdmTdi.Service и IdmWfp.Service как запустить такие сервисы средствами нсис? Спасибо! |
Цитата:
|
буду пробовать!
|
возможно начиная с какого-то момента полностью скрыть интерфейс установщика ?
|
Цитата:
|
Нужно установить ASP.NET веб приложение. Информации в интернете почти нет. Дайте ссылку кто-нибудь.
|
Народ сижу и туплю уже сколь времени!!!!!НЕ могу просто догнать.......Даже если не могу создавать скрипты не дано просто ((((ну скачал скрипт уже готовый а дальше то что .....как создать сам ехе , чтоб в тихую ставить то ????Что нужно для тихой установки программы ????
|
Цитата:
Цитата:
Цитата:
Или в начале скрипта, вне секции или функции, написать команду: Код:
SilentInstall Silent |
kotkovets
Да я скачал готовый скрипт уже, потому как делать его похоже для меня сложно наверно. НАверно надо знать языки програмирования, но разобраться очень хотелось бы. Просто что дальше делать с готовым скриптом. Как сделать сборку программы, какие папки и что делать. Спасибо что ответили на предыдущее письмо!!!! |
|
Тему до конца ещё не дочитал... (47 страница)
Мож было уже... Не могли бы разжевать как пользоваться этим плагином?.. Что-то никак не соображу. Надо сделать так, чтоб при объёме памяти меньше, чем 1 ГБ, установка не запускалась. Потому как во время установки будет распаковываться архив 7z, на распаковку которого нужно не менее 1Гб RAM. Да и ещё. Можно сделать так чтоб не кракозябры были? ![]() Там файлы копируются... Код:
Section Хотя ладно... Не буду так копировать - попробую CopyFiles. |
kotkovets
Готовый скрипт скачал сдесь на форуме, похоже он уже скомпилирован, просто я так понимаю дальше нужно сделать сборку exe, либо действительно надо сидеть и читать.......Просто хотелось бы сделать программы для само установки, потому как приходиться ставить клиентам, а потом просто менять версии а не создавать новыеЮ, поэтому просто и хочеться разобраться как делать это, потому как версии программ выходят все более новые. Просто хочеться сделать WPI свою сборку, и не все проги могут ставиться через cmd ключи, на некоторые нужно писать скрипты, вот и хочу разобраться но пока это туго получается.....((( |
Цитата:
Цитата:
|
Krinkels
Нет это понятно что нужно знать в програмировании, Но в фотошопе тоже трудно, однако с помощью уроков можно понять что то,\ Я так пониаю лучше не заморачиваться с NSIS и качать сборки WPI и оттуда себе вытягивать проги и добавлять просто в свою сборку (((((((( Обидно а хотелось бы понимать(((( Спасибо всем в помощи..... |
Donniblack
В шапке есть справочник на русском языке, в нем есть и описания функций и примеры. Я рекомендую начать с него. А вообще пиши код, если что то не получиться выкладывай, может и поможем :) |
Цитата:
Цитата:
Код:
!include "MUI2.nsh" |
Цитата:
|
kotkovets
Спасибо. Всё получилось :) Ещё один вопрос... При запуске инсталлятора в тихом режиме из командной строки, он (инсталлятор) выдаёт такое: ![]() Благодаря чему можно узнать как прошла установка... Можно как-то сделать чтоб это отображалось тут? ![]() Пробовал примерно так: Код:
nsExec::ExecToLog '"cmd.exe" START /WAIT setup.exe --mode=Silent --deploymentFile=install.xml' Пробовал запускать bat'ник таким же макаром. Но тоже глухо. Копирование/удаление файлов через командную строку показывает, а Exit Code не хотит. |
Цитата:
Цитата:
И чему равно, значение кода возврата, если оно не равно нулю, что то не то... И вообще для запуска внешних приложений в режиме ожидания есть команда ExecWait: Код:
ExecWait `"Путь к \setup.exe" --mode=Silent --deploymentFile=install.xml'` $0 |
Цитата:
Всё устанавливается.. Но не отображается. Код:
nsExec::ExecToLog '"cmd.exe" /C CD $WINDIR&CD TEMP&CD ADBEAFETCS4_LS7&START /WAIT setup.exe --mode=Silent --deploymentFile=install.xml' Отображаются команды CD, потом пустота (хотя приложение установилось) ну и далее удаление файлов... Цитата:
Так и делал. Просто хотелось бы чтоб код отображался. Потому как приложение может не установиться и не будешь знать куда копать. А так глянул в LOG-файл. Ага Exit Code: 0. Значит всё Ok.. Exit Code: 7. Значит ниOk... |
Nsis и цифровая подпись.
Мы добавляем к нашему инсталеру цифровую подпись. Есть пхп скрипт который модифицирует файл инсталера. Стали делать деинсталятор и увидели что файл деинсталятора по итогу остается не подписанным. Подскажите пожалуйста, как можно подписать файл деинсталятора? |
Цитата:
Цитата:
Что бы отобразить окно деталей `сразу` пишем вне секции или функции: Код:
ShowInstDetails show Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Если только процесс убить. Тогда будет не ноль... Цитата:
Ладно проехали... Либо Вы меня не так поняли, либо это невозможно. Спасибо за помощь. |
Цитата:
который не транслирует лог установки и соответственно... |
kotkovets, Да ладно. Не так критично :) просто хотелось как лучше...
Другой теперь вопрос. Про установку на x64. В справочнике не нашёл. Может плохо искал... Если так делать: Код:
InstallDir "$PROGRAMFILES\прога" Как сделать чтоб в x86 и x64 показывал Program Files. И как сделать чтоб запускался msi нужной разрядности? Кто-то тут уже приводил пример кода. Потерялось у меня... Как-то так вроде было. Код:
Section У меня ошибку выдаёт... Код:
!insertmacro: _If |
Цитата:
http://forum.oszone.net/post-1848691-2264.html Цитата:
Код:
!include "x64.nsh" |
Цитата:
|
Krinkels, льстишь... :)
|
Вот что здесь может быть неправильного?
Код:
|
kotkovets,
Подскажите как проверить наличие ключа на наличие, при внесении в реестр записей. Хочу руссифицировать контекстное меню MPC -HC для типов файлов после установки K-Lite. Примерно так: если существует ключ HKLM SOFTWARE\Classes\mplayerc.avi , то WriteRegStr HKLM "SOFTWARE\Classes\mplayerc.avi\shell\Open" "" "&Воспроизвести в MPC-HC" WriteRegStr HKLM "SOFTWARE\Classes\mplayerc.avi\shell\Enqueue" "" "Добавить в плейлист MPC-HC" иначе перейти к следующему типу и т.д. |
Как вариант сделал пока так:
!macro ContextLocalization extenstion Push $0 StrCpy $ClassName "mplayerc.${extenstion}" ; ReadRegStr $0 HKLM "SOFTWARE\Classes\$ClassName\shell\Open" "" StrCmp $0 "&Play with MPC" 0 +5 DeleteRegValue HKLM "SOFTWARE\Classes\$ClassName\shell\Open" "" DeleteRegValue HKLM "SOFTWARE\Classes\$ClassName\shell\Enqueue" "" WriteRegStr HKLM "SOFTWARE\Classes\$ClassName\shell\Open" "" "&Воспроизвести в MPC-HC" WriteRegStr HKLM "SOFTWARE\Classes\$ClassName\shell\Enqueue" "" "Добавить в плейлист MPC-HC" Pop $0 !macroend !insertmacro ContextLocalization "AVI" |
Цитата:
Код:
${If} ${KeyExists} "${HKCU}\Software\7-zip" Цитата:
IfFileExists - команда времени инсталляции, вы же пытаетесь всунуть папку определенную времени компиляции, что для команды file подходит успешно - время компиляции. |
Цитата:
|
wolkow70, читайте » Работа с реестром с помощью NSIS
пример конструкции не учитывает значение ключа, только наличие ключа в реестре. |
kotkovets,
Я еще пользуюсь DelRegKey.nsh. Как они соотносятся с RegistryFunc.nsh? |
Цитата:
не требующая плагина Registry, библиотека написана на чистом API |
kotkovets, и снова здравствуйте :)
Ничего в языке NSIS не понимаю. и в англицком тоже... Листаю тему, да леплю всякую "бяку" из нескольких примеров. И, что неудивительно, ничего не получается :laugh: Хочу сделать поиск в файле hosts определённой строки... Но при компиляции ошибка: Интересно, но нифига непонятно :teeth: |
BuZzOFF
Дык сначала нужно было хоть справочник из шапки почитать, вот пример логической конструкции: Код:
Section |
Цитата:
Так же как и в Вашей этой самой логической конструкции. Если бы на конкретном примеру поглядеть, то мож чего и сообразил. А так эти цифры мне ничего не говорят :teeth: Тонкий намёк на помощь.. :) |
BuZzOFF, Чем обусловлено применение жесткой константы ${OutDiR} ?
Если рядом с установщиком сетап, то переменная $exedir - возвращает текущую папку инсталлятора. Цитата:
Код:
!include "MUI2.nsh" Код:
StrCpy $R1 "$R9" "" 12 |
Цитата:
Код:
!define OutDir "$WINDIR\Temp\ADBEAFETCS4_LS7" Или Вы не это имели ввиду? :) Цитата:
Спасибо за помощь. А Вы это на x64 проверяли? У меня не работает.. Сразу выскакивает сообщение, что памяти не хватает. Говорит что -1 byte. Да и на x64 думаю можно отключить. Там всё равно по-любому больше 1ГБ будет... |
Цитата:
Цитата:
Код:
Function "LineFindFunction" Цитата:
!include "x64.nsh" ;-- ${IfNot} ${RunningX64} ;команды опр. физ памяти ${Endif} |
kotkovets, такой вопрос когда пишу код в скрипте
Код:
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\PotPlayerMini.exe" Код:
"C:\Program Files\DAUM\PotPlayer\PotPlayerMini.exe" Код:
"C:\Program Files\DAUM\PotPlayer\PotPlayerMini.exe" /RegisterAll Код:
CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" '"$INSTDIR\PotPlayerMini.exe" /RegisterAll' |
diakov, в справочнике все расписано, введите в указателе - CreateShortCut
Код:
CreateShortCut "Расположение_ярлыка.lnk" "Путь_до_файла.exe" "параметры_запуска" "Файл_иконки" "Индекс_иконки" "Тип_окна" "Горячая_клавиша" "Описание_ярлыка" |
kotkovets, вот такая ситуация, есть 5 чекбоксов, для 3 надо сделать так чтобы выбирался только один из них (языки установки).
|
Насколько я понял, имеются в виду радиобутоны на своей страничке
http://nsis.sourceforge.net/NsDialogs_FAQ Объединяем чебоксы в "свои" группы переключений: |
Ага тоесть оперировать, именно радиобутонами...ато я хотел так
![]() |
Цитата:
|
будем пробовать...
|
kotkovets,
Опять я с поиском в файле :) Есть файл "Adobe After Effects CS5*.log" (* - это дата). Нужно найти строчку "Exit Code:", начинать искать с 27 строчки. И чтоб когда нашлось вылазило окно "Exit Code: и то что после этого написано" "Ok" ( к примеру "Exit Code: 0 - No error") Но при этом нужно оставить ещё вот это. |
Цитата:
Код:
;27 - прочитать только 27 строку сначала файла |
kotkovets, такой вопрос
Код:
Section "Установить надстройку" |
|
Счас попробую...
|
kotkovets, все получилось именно с SetShellVarContext current! Спасибо!
Подскажи пожалуйста как организовать выбор языка самого установщика при его запуске? (допустим сделать его (украинским,английски и русским). И еще раз спасибо что ты есть! |
diakov,
cмотри в примерах Examples\Modern UI\MultiLanguage.nsi |
diakov, смотри еще здесь
http://forum.oszone.net/post-1553443-903.html |
Цитата:
В результате директория установки нормально отображается в строке инсталлятора, но не работает ключ /D=путь установки. Пробовал также так: Var SysDrive Function .OnInit StrCpy $SysDrive $WINDIR 2 FunctionEnd InstallDir "$SysDrive\app" В строке не отражается буква диска, только папка (не красиво). Мне нужно сделать, чтобы и в строке нормально отражалось, и ключ /D нормально работал. Подмогнете? |
Цитата:
выбора пути установки в функции .OnInit |
Цитата:
InstallDir "$SysDrive\app" , то не предопределяется, но почему-то букву диска не отображает, только саму папку. Может надо добавить что-то вроде того "$\ ? |
kotkovets, а как с помощью LangString задать текст описания радиобутонов и чекбоксов на кастомной страничке?
|
Все разобрался тока не знеаю правильно ли но работает)) вот так вот
В самой функции кастомной странички пишу "$(RadioButton)" Function PageInit !insertmacro MUI_HEADER_TEXT "Выбор типа и компонентов установки" "..." nsDialogs::Create 1018 Pop $dlg ${NSD_CreateLabel} 0u 0u 120u 12u "Пожалуйста, сделайте выбор:" Pop $Label ;; ${NSD_CreateRadioButton} 0u 15u 150u 12u "$(RadioButton)" Pop $RadioButton ${NSD_SetState} $RadioButton 1 ;делаем радиобутон отмеченным ${NSD_OnClick} $RadioButton RadioButton ;событие отметки радиобутона а перед этим пишу LangString RadioButton ${LANG_RUSSIAN} "значение" LangString RadioButton ${LANG_ENGLISH} "значение" |
kotkovets, теперь такая загвоздка как на страничке лицензия указать файлы под конкретный язык, пробовал так:
Код:
!insertmacro MUI_PAGE_LICENSE "$(LICENSE)" Код:
LangString LICENSE ${LANG_RUSSIAN} "${NSISDIR}\COPYING.rtf" |
diakov, не получится страничка лицензии, подгрузка файла в окно лицензии - это время компиляции,
а тебе нужно время установки - на подгрузку нужного файла в зависимости от языка установщика. попробуй плагом: http://nsis.sourceforge.net/CustomLicense_plug-in Код:
!addplugindir . |
Добрый день.
Изучал справку NSIS, но к сожалению не нашёл ответа на интересующий меня вопрос. Если вас не затруднит, пожалуйста, подскажите как можно организовать реальный прогресс установки на странице инсталляции? Просто у меня на данный момент получается так, что инсталляция реально не завершена и на половину, а прогресс-бар заполняется уже на 90%. Поискав плагины на эту тему, обнаружил что имеется NSIS Real Plugin (http://nsis.sourceforge.net/RealProgress_plug-in). Но моя криворукость не позволяет мне понять принцип работы данного плагина... Быть может в стандартных средствах NSIS есть более простой способ решения моей проблемы? Спасибо! |
Цитата:
Ищите команды - abort, return - наверняка по неправильным условия срабатывают, а может и правильным...:) |
kotkovets
Да нет, установка не прерывается. Дело в том что прогресс установки ориентируется на выполнение команд скрипта, т.е к примеру в скрипте 500 команд, если выполнено уже 450 строк, то прогресс-бар заполнится на 90%. Меня это не устраивает, мой инсталлятор построен на принципах запуска и ожидания конца работы внешних приложений, это всё прописано ближе к концу скрипта, поэтому и показывает прогресс 90%... Но работа внешних приложений длится приличное кол-во времени, а прогресс бар как за 5 секунд дошёл до 90% и потом уже не двигается. Установка продолжается - прогресс бар стоит. Нужно как-то настраивать прогресс-бар... В справочнике по NSIS тоже увы нет примеров для этого. Как-то странно, вроде нормальный прогресс установки - элементарная вещь, а такие вот проблемы ( |
Цитата:
попробуйте между перед каждым запуском приложения прописать: Код:
DetailPrint "Установка название приложения" Код:
DetailPrint "готово" |
На таких блоках поставлен запуск и ожидание внешних приложений:
SetDetailsPrint textonly DetailPrint "Установка основных компонентов" SetDetailsPrint listonly SetOutPath "$INSTDIR" ExecWait '"$INSTDIR\install_old.exe"' SetDetailsPrint textonly DetailPrint "Установка дополнительных компонентов" SetDetailsPrint listonly SetOutPath "$INSTDIR" ExecWait '"$INSTDIR\install_new.exe"' Задача передо мной стоит чтоб в тот момент когда идёт установка основных компонентов прогресс бар был на 30%, когда начинается установка дополнительных компонентов - на 40% и так далее... Но так понимаю в NSIS это архисложная задача ( |
Пробуйте так, хотя думаю врядли, nsis тоже двигает прогресс
|
Спасибо за вариант.
Жаль, но не помогает... Прогресс всё равно стремглав бежит вперёд, ориентируюясь на команды скрипта. Нужно установить тотальный контроль за прогрессом... Если вам не сложно, посмотрите что за зверь такой Real Progress plugin. Как его можно использовать в моём случае. Думаю это не должно пройти за зря, т.к можно потом для пользователей отобразить пример в русской справке по NSIS. Кстати, спасибо вам за этот справочник. Незаменимая вещь в хозяйстве. Надеюсь проект справки не заброшен и будет обновляться - это в качестве пожелания. ________________________________ Была у меня также мысль (подсмотрел в каком-то из установщиков) относительно того, чтобы когда начинают выполняться функции запуска и ожидания - в этот момент всплывает долнительный мини-прогресс бар где и показывался ход установки компонентов. Но опять же, нигде не нашёл примеров кода по прогрессу. |
kotkovets, Подскажите пожалуйста возможно ли сделать такое:
Есть группа секций "Установить Winamp Agent" В одной из секций опция "Запустить WinampAgent после установки" Exec "$INSTDIR\winampa.exe" Как можно реализовать, что бы при установке галочки на чебоксе действительно агент запускался после успешной установки? Если прописать в функцию Function .onInstSuccess, то как реализовать условие значения в секции? |
Цитата:
Код:
SectionGroup /e "some stuff" Цитата:
т.е после каждого блока команды двигаем на 20% и так до 100%, т.е рассчитываете сколько у вас блоков однотипных команд и сотню делите на кол-во блоков однотипных команд. |
Большое спасибо. вроде примерно понял.
Вы привели пример File Progress Там также есть Detail и Gradual progress. Неплохо бы узнать чем они отличаются. В моём установщике несколько компонентов, которые устанавливаются по желанию клиента. Т.е несколько секций в скрипте имеется... Как в этом случае сохранить адекватность продвижения прогресс бара, если заранее не известно будет ли клиент устанавливать тот или иной компонент или нет. Первая секция обязательна к установке остальные на выбор. На примере двух секций. ;__________________________________________________ Section "Ключевые составляющие" Sec1 SectionIn RO RealProgress::FileProgress /NOUNLOAD 0 Sleep 300 ;[блок команд] RealProgress::FileProgress /NOUNLOAD 20 ;установка прогресса на 20%. Sleep 300 ;[блок команд] RealProgress::FileProgress /NOUNLOAD 40 Sleep 300 ;[блок команд] RealProgress::AddProgress /NOUNLOAD 60 Sleep 300 ;[блок команд] RealProgress::AddProgress /NOUNLOAD 80 Sleep 300 ;[блок команд] RealProgress::AddProgress /NOUNLOAD 100 ;установка прогресса на 100%. SectionEnd Section "Авторские обновления" Sec2 Sleep 300 ;[блок команд] RealProgress::AddProgress /NOUNLOAD ??? ;какой параметр прогресса должен быть? SectionEnd ;__________________________________________________ Какой параметр прогресса должен быть в случае если клиент захочет установить "Авторские обновления"? По скрипту выходит что после выполнения первой секции прогресс-бар будет на 100%, а установка не завершится, т.к пойдёт выполнения следующей секции. С другой стороны - если клиент не захочет устанавливать "Авторские обновления", то тогда прогресс 100 в первой секции правильный... Довольно сумбурная схема... Как бы так сделать чтобы волков накормить, и овец сохранить?:) |
Sidril эксперементально,расчетом времени, кстати это уже не nsi'шный прогресс
Код:
RealProgress::GradualProgress /NOUNLOAD 1 5 25 Можно делать скрытой секцией (последней), которая всегда выполняется - прописать на 100 %. В любом случае завершение - это 100% индикатор --- Точно, все равно не рассчитаете, ибо родной правильнее будет, потому что компилятор считает сколько команд будет при разных условиях, еще есть команды из хедеров (!include *.nsh - тысячи команд), устанавливает шаг изменения прогресса, тем меньше команд - больше шаг. |
kotkovets. В очередной раз спасибо вам за помощь в разборе вопроса.
Так, GradualProgress не подходит... Т.к в моём случае рассчёт по времени неактуален, потому как время установки зависит от конфигурации компа клиента и от загруженности системы, т.е у всех будет разное время установки в примерных границах от 7 до 30 минут. *** Собственно, говоря о трёх вариантах прогресса, которые предлагает плагин NSIS Real Rpogress, я понял следующее:- GradualProgress представляет собой рассчёт процента прогресса исходя из времени (нужен рассчёт секунд). - DetailProgress ориентирует процент прогресса на количество строк в скрипте секций (нужен рассчёт строк). - FileProgress даёт возможность выставлять проценты прогресса на определённых этапах выполнения скрипта. Как Вы сразу правильно предложили - File Progress наиболее оптимален для моего инсталлера. *** Цитата:
Подскажите, в данной секции достаточно только прописать команду прогресса на 100%? Т.е, такой вид скрытой секции будет? Section "-Секция скрыта" RealProgress::AddProgress /NOUNLOAD 100 SectionEnd *** Цитата:
|
С прогрессом вроде всё ок. Спасибо kotkovets.
Новый вопрос. Хочу перед запуском инсталлятора чтобы появлялось приветственное изображение, и чтобы оно появлялось под сопровождение музыкального отрывка. Не нашёл этого в справке. NSIS поддерживает такие функции? |
NewAdvSplash plug-in поможет.
|
Уважаемые форумчане! Подскажите, как в NSIS "вынести" установочные файлы из инсталлятора в отдельные бинарники (с возможностью назначения их количества и размера) --> т.е. получить маленький (~100Kb) файл инсталятора и пару-тройку "привязанных" к нему больших файлов. До этого пользовался Smart Install Maker'ом, но он тупо "делит" большой инсталятор на равные части.
PS: Если ответ уже был - кинте, плз, ссылку на этот пост. |
brauni, нет, только можно внешним упаковщиком, например 7z, потом распаковывать консольной утилитой 7z.exe
Естественно придется таскать собой файлы 7z.dll и 7z.exe. Установщик распаковывает в временную папку 7z.dll и 7z.exe и файлы архивов созданные 7z, затем установщик заводит 7z.exe c ожиданием завершения (ключи запуска консоли, смотрите в справке 7z), архивы распаковывается в указанную к ключе запуска 7z.exe, временная папка затем удаляется. |
Цитата:
|
Цитата:
Цитата:
|
Ребята, подскажите, плиз как в программу внедрить опцию проверки наличия ключа в реестре при запуске инсталлятора? Т.е в момент когда клиент запускает инсталятор шла бы проверка наличия ключа. Если ключ найден то установка переходит сразу на стартовую страницу. Если не найден - предупреждение о том что следы программы не обнаружены, установка может пройти неправильно.
*** И ещё такой вопрос, на что влияет параметр XPStyle on? Какой стиль XP тут имеется ввиду и зачем вообще это нужно. Спасибо! |
Цитата:
значение параметра тоже проверяется(если не пустое): Код:
!include "logiclib.nsh" Цитата:
Код:
OutFile "setup.exe" добавьте команду в начале скрипта -- XPStyle on, затем найдите 10 отличий :biggrin: |
Цитата:
Я уже и в своём скрипте добавлял - изменений не видел, по этому и спросил смысл этой опции. Может как-то влияет что у меня у самого Win XP. |
Цитата:
ну что бы не заметить... :cool: особенно прогресс |
На зрение не жалуюсь)
Цитата:
Стоит у меня классическая тема оформления. Что с командой, что нет - тема та же самая. В чём принцип так и не понял. |
Sidril, а Вы смените тему оформления Windows на не классическую...и смотрите разницу
с примером, который я приводил: с XPstyle on и c XPstyle off :lol: |
Цитата:
Вставил "XPstyle on" в свой скрипт. сравнил результат с командой и без. всё то же самое. и с командой и без - стиль хп показывается. Опять не догнал в чём смысл команды)) играет она какую-то роль, если подключен MUI?) |
kotkovets, почитал в справочнике про определение ОС. и чё-то всё равно не понял как можно сделать...
Нужно определить ОС. И если это один из Server'ов, то выполнить одно действо. Если не Server, то другое... |
Цитата:
Код:
!include "WinVer2.nsh" |
Товарищи, добрый вечер. Буду очень благодарен, если подскажете как впихнуть изображение на кастомную страницу при помощи плагина nsisSlideshow.
Надо просто вставить PNG-изображение (справа вверху), а не размазать его по всему окну, как этот плагин делает по умолчанию... |
Begin2Fly, на кастомную никак, плаг для этого не предназначен.
|
Цитата:
|
Цитата:
Код:
!define MUI_HEADERIMAGE Естественно через nsDialogs (определить координаты CreateBitmap), если в "самом верху", то через nsDialogs::Create 1044 http://nsis.sourceforge.net/NsDialogs_SetImageOLE Как рисовать и т.д в шапке - справочник по NSIS |
kotkovets, та это всё я уже перепробовал. Стандартные средства, к сожалению, не позволяют вставить PNG с прозрачностью. А нужна именно прозрачность, для того, чтобы пользователи с нестандартными темами оформления не видели монотонный квадрат вокруг изображения.
|
Begin2Fly, bmp и фотошоп, или др. программы
позволяющие задавать "прозрачный "(прозрачный цвет, Windows - как его воспринимает) слой картинке, не раз так сам проделывал...только bmp |
kotkovets, благодарю, уже этим и воспользовался, хотя эдак с полгода назад ничего не получилось. Спасибо за отзывчивость!
|
kotkovets.
Если позволите, ещё пара простых для Вас вопросов: Про проверку наличия ключа в реестре при запуске инсталлера я понял. Подскажите пожалуйста как прописать проверку определённого запущенного процесса на компе у клиента. Т.е также при запуске инсталлера проверяется запущен ли процесс, если запущен - то нельзя продолжить установку. И ещё такая тема заитересовала меня... Хотелось бы, чтобы готовый дистрибутив инсталлятора ничем нельзя было распаковать. Всегда думал, что инсталляторы созданные в NSIS ни один архиватор распознать не может. Отчасти это правда, судя по информации в титульном сообщении. Но там также есть и оговорка: Цитата:
Большое спасибо. |
Цитата:
1. » Предотвращение множественности запуска. 2. » Работа с процессами с помощью NSIS (Process). Цитата:
|
kotkovets, подскажите пожалуйста как все-таки лучше установить службу:
В дистрибутиве есть файл DfSdkS.exe (служба дефрагментации дисков ashampoo) В принципе запускается и устанавливается такой коммандой DfSdkS.exe -install Запускается с консольным окном. Потом приходится запускать DfSdkS.exe -stats для определения списка дисков и записи в реестр, и тоже с консольным окном. Родной Inno инсталлятор как-то запускает все сразу и без окон. Причем родительским процессом является service.exe, а если запускать как я делаю, то родитель - инсталлятор. |
kotkovets, такой вопрос вот есть в теле скрипта коды
Код:
Section "-Распаковка фул" |
wolkow70, смотрите скрипт Inno и ключи запуска приложения.
Цитата:
Цитата:
» Работа с процессами с помощью NSIS (Process). Цитата:
кстати вера, что ли не дает, проверить состояние $Radio5 например отдельной, самой первой секцией, или при закрытии кастомной странички, после определения статусов контрола: Код:
Section |
нашел в PageDestroy случайно стер n тоесть было $RadioButto6 $Radio6
однако вчера думал лоб розшибу :lol: |
Цитата:
В Process monitor вот, что видно: Путь: E:\WINDOWS\system32\services.exe Командная строка: E:\WINDOWS\system32\services.exe Класс события: Процесс Операция: Process Create Результат: SUCCESS Путь: E:\Program Files\Ashampoo\Ashampoo WinOptimizer 9\DfSdkS.exe TID: 1364 Длительность: 0.0000000 PID: 3928 Command line: "E:\Program Files\Ashampoo\Ashampoo WinOptimizer 9\DfSdkS.exe" пока сделал так: nsExec::Exec '"$INSTDIR\DfSdkS.exe" -install' Ну это только установка службы, а последующего автозапуска не происходит. |
wolkow70, а если попробовать с помощью NsSCM plug-in
Код:
; Service (auto starting) |
Цитата:
|
Сделал так:
nsExec::ExecToLog '"$INSTDIR\DfSdkS.exe" -install' Pop $0 nsSCM::Start /NOUNLOAD "DfSdkS" Pop $0 |
Товарищи, реально ли для деинсталлятора сделать такие же комманды интефейса:
!define MUI_WELCOMEPAGE_TITLE "Добро пожаловать! Вас приветствует мастер установки MyApp" !define MUI_FINISHPAGE_NOAUTOCLOSE ???? Всяко пробовал. не получается... |
Задача из скрипта nsis запустить другую инсталяцию в пассивном режиме и прописать путь установки. Реально ли это вообще.
Когда устанавливал подобным образом .NET Framework Писал так: Код:
ExecWait "$INSTDIR\vcredist_x64.exe /passive" Рылся в инете в поисках параметров командной строки, так ничего и не нашел. Подскажите, если кто сталкивался. |
wolkow70, от чего уж, реально...
Код:
!define MUI_UNTEXT_WELCOME_INFO_TITLE "????" Цитата:
|
!define MUI_UNTEXT_WELCOME_INFO_TITLE "????"
ЭТО РАБОТАЕТ! К сожалению, !define MUI_UNFINISHPAGE_NOAUTOCLOSE - это нет. Может, потому, что у меня так: !define MUI_UNTEXT_WELCOME_INFO_TITLE "Добро пожаловать! Вас приветствует мастер удаления MyApp" !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_COMPONENTS !insertmacro MUI_UNPAGE_INSTFILES UninstPage custom un.INSTFILES_LEAVE !define MUI_UNFINISHPAGE_NOAUTOCLOSE !insertmacro MUI_UNPAGE_FINISH |
Цитата:
Вроде объяснил понятно. Теперь, как их вызвать в пассивном режиме и прописать путь для установки. |
Добрый день.
Подскажите пожалуйста следующее... Имеем: и Подскажите как сделать чтобы пока выбран первый RadioButton, активным остается только второй RadioButton, Checkbox все выбраны и неактивны. Если выбрать второй RadioButton, Checkbox становятся активными и все выбраны, первый RadioButton становится неактивным. |
Цитата:
Могу Вам сказать, что команда RealProgress::AddProgress /NOUNLOAD XX отвечает не за установление прогресса на определённом проценте, а за добавление процентов прогресса. Т.е Вы ставите скажем RealProgress::AddProgress /NOUNLOAD 20 (где 20 - прибавляемый процент). Далее ставите RealProgress::AddProgress /NOUNLOAD 40, прогресс-бар будет на уровне 60%, а не 40%, т.к стартовую величину задала предыдущая команда. 20+40=60. Команда же RealProgress::FileProgress XX ориентируется на постепенное продвижение до заданного параметра (XX - процент продвижения до которого двигается прогресс бар). Т.е скажем вы установили RealProgress::FileProgress 20. В момент установки (в зависимости от ваших команд) идёт извлечение файла, пока идёт это извлечение - индикатор прогресса постепенно продвигается до 20%. А за установление прогресса на определённом проценте отвечает команда RealProgress::SetProgress /NOUNLOAD 10 (где 10 - процент прогресса). На любом этапе установки Вы можете выставить эту команду и прогресс бар будет заполнен на указанный вами процент. Рекомендую грамотно смешивать эти возможности. Если продуманно подойти, то прогресс-бар будет максимально реальным. Ну а автору плагина (Afrow UK) большой респект. |
Aster, да, теперь всё окончательно понятно. спасибо
RealProgress::SetProgress /NOUNLOAD вот что нужно было юзать мне |
Paval,
Цитата:
Код:
ExecWait '"$INSTDIR\VCRedist_x64.exe" /q:a /c:"msiexec /i VCRedist.msi /qn"' Код:
ExecWait '"$INSTDIR\VCRedist_x64.exe" /q:a /c:"msiexec /i VC_Red.msi /qn"' |
Товарищи подскажите оптимальное решение таких задач:
1. Нужно скопировать (распаковать) файл в системную папку, при соблюдении условия, если в ней нет одноименного файла более новой версии. 2. Соответсвенно при деинсталляции комманда на удаление этого файла, если он имеет определенную версию (файл новой версии не должен удаляться). Задача возникла из-за того, что две программы от одного производителя ставят драйвера службы дефрагментации, причем в одной программе версия более новая. |
wolkow70, Получать версию файла умеете?
ну так сравните исходно устанавливаемую версию с полученной версией файла, при наличии файла, иначе ставим файл какой есть в установщике. Здесь легко потренироваться, подставляя циферки в константу |
kotkovets, не могу понять как сделать проверку выбран ли пункт в SectionGroup или нет...
И в зависимости от того выбран он или нет выполнить в другой Section (не в SectionGroup) то или иное действие. Всяко разно извращаюсь, но так и не получается :( И как всегда всё окажется проще простого :D |
BuZzOFF, секционная группа имеет. если не ошибаюсь, 5 состояний:
1. группа вся выбрана - т.е все секции в группе выбраны 2. группа частично выбрана - т.е секция выбрана, а другие не выбраны, не важно количество выбр. или не выбр. секций 3. группа не выбрана - т.е все секции в группе не отмечены. 4. группа свернута - секции спрятаны в группе 5. группа развернута - т.е видны все секции в группе. Если нужно найти определенную секцию - отмечена или нет, то группа по барабану. Если нужно, проверить состояние группы, здесь надо учитывать флаг еще: развернута группа или нет. почитайте в справке: » SectionGetFlags: получаем статус секции, там мало букафф. что не поймете - пишите. кстати я всегда снимаю состояние секций в функции закрытия странички компонентов, очень удобно, ибо я уже знаю, на страничке установки какие секции отмечены или нет, с любой отмеченной секции, на страничке установки, ведь код будет выполняться, только, если секция отмечена :) |
Цитата:
Ушёл читать. Спасибо. |
|
kotkovets,
Помогите разобраться с автозакрытием программ Нужно перед установкой Орбита закрыть браузеры В скрипте: !include WinMessages.nsh Function CloseProgram Exch $1 Push $0 loop: FindWindow $0 $1 IntCmp $0 0 done #SendMessage $0 ${WM_DESTROY} 0 0 SendMessage $0 ${WM_CLOSE} 0 0 Sleep 100 Goto loop done: Pop $0 Pop $1 FunctionEnd Function .onInit ; loop: FindWindow $0 "IEFrame" IntCmp $0 0 done IsWindow $0 0 done System::Call 'user32::PostMessageA(i,i,i,i) i($0,${WM_CLOSE},0,0)' Sleep 100 Goto loop done: ; Push "MozillaWindowClass" Call CloseProgram Push "OperaWindowClass" Call CloseProgram ; FunctionEnd IE закрывается , а FireFox и Opera нет. Классы заголовков смотрел в Win32Spy. |
|
Цитата:
|
BuZzOFF, Чет у вас извращенная логика, проще-проще, вот на кой черт нужно еще:
silent mode и normal mode && silent original и normal original? Не проще сделать всего лишь: silent mode && silent original, при оболочке - выбор, че ставить, при тихом режиме заводить ключом ком.строки: silent mode или silent original Хозяин барин: wolkow70, скрипт какой-то древний китайский, покрыт несвежей пылью(но рабочий): Если браузер найдется появится сообщение(для отладки добавил). Вообще пускай юзер думает, че ему надо-то, поэтому лучше при запущенном браузере, сообщение о запущенном браузере и выход из установщика - на мой взгляд оптимальный вариант. |
Цитата:
|
wolkow70, Это нормально, пробуйте так, более надежно и быстрее.
FindWindow вызывается в каждом цикле 50 раз с задержкой 2мс, при найденном окне - прерывание цикла. Код:
!macro CloseProgram NameProgramm При желании оттачивания надежности, время задержки можно увеличить и количество вызовов FindWindow |
kotkovets,
Насколько подобная процедура применима к процессу деинсталляции программы? То есть, при удалении программы тоже надо закрывать браузеры. |
kotkovets,
В последнем варианте Mozilla не гасится. В предложенном ранее варианте закрывалась надежно. |
Цитата:
Второй вариант предназначен на одно окно. кстати во 2 варианте попробуйте убрать макрос - ${Break} Цитата:
|
Цитата:
Вернулся к первоначальному варианту. Надежно закрывает пять запущенных копий Мозиллы (больше копий запускать не пробовал :)). |
Не могу решить одну задачку. Нужно внести при установке программы регистрационные данные из рег-файла.
На 32-битной системе все получается. На 64-битной чего только не шаманил, данные вносятся, но только в раздел HKLM32, а нужно в HKLM64 В скрипте так: IfFileExists "$EXEDIR\reg.reg" 0 Done ${If} ${RunningX64} execwait '$windir\SysWOW64\regedit.exe /s "$EXEDIR\reg.reg"' ${Else} execwait '$windir\regedit.exe /s "$EXEDIR\reg.reg"' ${EndIf} Done: В рег-файле: REGEDIT4 [HKEY_LOCAL_MACHINE\SOFTWARE\Ashampoo\Ashampoo UnInstaller 4] "HLRegKEY"="xxxxxxx-xxxxxxx-xxxxxxxx" |
kotkovets, как в MUI2.nsh реализовать такое
Код:
Function WelcomePageSetupLinkPre |
Цитата:
|
Уважаемый kotkovets, не подскажите в чем может быть загвоздка:
В сборке XnView регистрирую библиотеку: ${If} ${RunningX64} ExecWait 'regsvr32 /s "$INSTDIR\ShellEx\XnViewShellExt64.dll"' ${Else} ExecWait 'regsvr32 /s "$INSTDIR\ShellEx\XnViewShellExt.dll"' ${EndIf} На 32-битной системе контексное меню появляется сразу, а на 64-битной системе появляется после перезагрузки. Хотя в RegDllView видно, что библиотека зарегистрировалась. Подозреваю, что так не должно быть. Еще прошу помочь в решении проблемки описанной в посте http://forum.oszone.net/post-1876024-2401.html |
Вложений: 1
Подскажите, пожалуйста, как решить такую задачку
http://forum.oszone.net/post-1873540-2380.html Буду рад ссылкам, где можно найти подробное описание как работать со статусами флажков в NSIS |
Gnast, рисуйте лучше через nsDialogs (MUI2.nsh),
подобных примеров в этой теме я очень много приводил. справки есть здесь и на офф. сайте. Цитата:
Цитата:
смотрите еще макросы в х64.nsh -DisableX64FSRedirection и EnableX64FSRedirection |
Цитата:
Цитата:
${If} ${RunningX64} ${EnableX64FSRedirection} execwait '$windir\regedit.exe /s "$EXEDIR\reg.reg"' ${DisableX64FSRedirection} ${Else} execwait '$windir\regedit.exe /s "$EXEDIR\reg.reg"' ${EndIf} Данные вносятся в HKLM32 |
Цитата:
Код:
${If} ${RunningX64} процесс установщика должен быть 64-разрядным, что по сути невозможно, установщика процесс всегда - 32. Кстати пробуйте плагом Registry |
Цитата:
${If} ${RunningX64} ${EnableX64FSRedirection} MessageBox MB_OK "Enable) $windir\regedit.exe" execwait '$windir\regedit.exe /s "$EXEDIR\reg.reg"' ${DisableX64FSRedirection} MessageBox MB_OK "Disable) $windir\regedit.exe" ${Else} execwait '$windir\regedit.exe /s "$EXEDIR\reg.reg"' ${EndIf} В обоих сообщениях было WINDOWS\regedit.exe Цитата:
|
wolkow70, ну быстрей соображайте, какой это путь и че вы указываете:
1.X:\Windows\SysWOW64\regedit.exe 2. X:\Windows\regedit.exe |
Цитата:
Цитата:
1.X:\Windows\SysWOW64\regedit.exe - путь к regedit.exe -x64 2. X:\Windows\regedit.exe - путь к regedit.exe -x32 |
wolkow70,
X:\Windows\SysWOW64\regedit.exe - это же $SYSDIR\regedit.exe c редиректом в x64 ${EnableX64FSRedirection} :) |
Что-то я запутался совсем.
Так не работает. execwait '$windir\SysWOW64\regedit.exe /s "$EXEDIR\reg.reg"' Так не работает. ${EnableX64FSRedirection} execwait '$windir\regedit.exe /s "$EXEDIR\reg.reg"' Получается, что нужно так? ${EnableX64FSRedirection} execwait '$windir\SysWOW64\regedit.exe /s "$EXEDIR\reg.reg"' |
wolkow70,
Код:
!include "MUI2.nsh" |
Цитата:
|
kotkovets, добрый день.
Пытаюсь разобраться в вопросе определения ключей реестра Нашел в справке вот что: ${If} ${KeyExists} "${HKCU}\Software\7-zip" # здесь выполняются команды, если ключ существует DetailPrint "Ключ есть!" ${Else} # здесь выполняются команды, если ключа не существует DetailPrint "Ключа не существует!" ${EndIf} Но это не вовсем то, что требуется. Пытаюсь сделать обновленный более гибкий макрос файловых ассоциаций Алгоритм нужен такой: 1. Если существует ключ; 2. И если не присвоено значение по умолчанию; 3. Или значение имеет нулевую длину - то переход бо безусловной метке. Иначе выполняются комманды бэкапа и перезаписи асооциаций. У самого получилось пока вот что: Код:
!macro RegisterExtension extenstion |
kotkovets, а как включить orange.bmp в сам exe шник что бы на другом компе работало
Код:
!include "MUI2.nsh" |
Цитата:
Код:
Function ClickButton |
Здравствуйте.
Подскажите, Как в нсис убрать кнопку "детали" при установке? |
Цитата:
hide|show|nevershow --- В начале скрипта вне секции или функции: Код:
ShowInstDetails nevershow |
kotkovets. Вот это оперативность. Огромное спасибо.
|
Почтенные ГУРУ подскажите пожалуйста как вместо ярлыка *.lnk [параметры "http:/ тру-ля-ля"] вставить значение *.url - Ярлыка интернета с прописанным адресом страницы. Именно значение, а не .lnk ссылку на таковой ярлык
Цитата:
|
Valdise, а чем плох обычный ярлык, который ссылается на адрес в сети:
Код:
CreateShortCut "$EXEDIR\aimp.lnk" "http://wwww.aimp.ru" "" "shell32.dll" 220 Код:
WriteINIStr "$EXEDIR\aimp.url" "InternetShortcut" "URL" "http://wwww.aimp.ru" |
kotkovets, по хорошему, нужно делать и первый и второй вариант
Почему второй вариант нужен? Например для Portable программ, будет очень хорошо зайдя в папку с программой, "ткнуть" на url файл и перейти на домашнюю страничку |
Цитата:
Цитата:
Иногда делаю перепаки полных русских версий, чтобы в два клика, а не париться программа, русификатор, регистрация\кряки. В одной из программ, в авторской сборке, в ярлыках именно URL а не LNK вот и заинтересовало, захотел сделать так-же, как в Авторском оригинале, правда он собран ISetup, а мне он совершенно не нравится. Цитата:
ВОПРОС: К слову, а для NSIS путь $EXEDIR и $INSTDIR равны и имеют одинаковое значение? |
Valdise, url это обычный текстовый конфигурационный файл - ярлык Интернета
Цитата:
|
Цитата:
WriteINIStr "$SMPROGRAMS\${PRODUCT_NAME}\Сайт ${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" Верно? Сообразил, всё получилось, ОГРОМНОЕ спасибо :Beer: P.S Не сразу сообразил и заметил чего NSIS требовал - Error in script WriteINIStr expects 4 parameters, got 8, т.к оставил 8 кавычек, как в обычном *.lnk ВОПРОС: К слову, а для NSIS путь $EXEDIR и $INSTDIR равны и имеют одинаковое значение? |
Valdise, все вопросы в шапке темы в справочнике, хотите гадать на кофейной гуще - дело ваше.
|
Подскажите пожалуйста , как решить такую задачу :
Нужно, чтобы последовательность из 5 команд "${WordReplace} и т.д.", выполнилась N раз подряд, причём значение переменной $R1 в каждой команде , с каждым следующим "проходом", должно увеличиваться на 1. N - берётся из переменной $1 Пытался организовать цикл ${For} с счётчиком, но команды ${WordReplace} внутри него не срабатывают... Если нельзя организовать 5 командную последовательность, то как организовать вышеназванные действия для одной команды ${WordReplace}? |
Цитата:
Код:
${for} $1 1 10 можно организовать цикл и так: Код:
${Do} любой цикл можно прервать макросом - ${Break} |
Цитата:
Может я не правильно использую код для замены... Делаю так : Код:
Section И с ${ForEach} , что как мне кажется лучше, ничего не выходит... |
MKN, а зачем здесь цикл в функции чтения файла :o , здесь и так цикл работает в функции Replace
до конца файла, в голову не приходила мысль откуда берутся строки в $R9 до конца файла? это получается, один цикл функции на три цикла вложенного цикла фор, с каждым циклом, то переменная $R9 разная, причем не известно условие выхода из внутреннего цикла: IntOp $R2 $R0 + 1 - что это? :o Код:
${For} $R1 $R0 3 выход из внутреннего цикла, если $R1 = 3, а если $R0 > 3 (начало отсчета), что будет проверял? ну месаджексы проставь, проследи за значениями переменных $R1 и $R0 |
kotkovets,
Нужно в таком файле : Код:
count=5 В этот файл нужно, записывать ещё одну группу, номер которой будет также произвольным (от 1 до count+1) При этом вся последующая нумерация групп, после "вставки" новой группы, смещается на 1. Я и хочу заменять нумерацию значений "от" и "до", (по сути смещение значений на 1) - в зависимости от значения count и местоположения новой группы. |
Цитата:
P.S I думаю что Ваш ответ "ДА" - "НЕТ", или "+" "-" был-бы более приемлемым P.S II ещё раз ОГРОМНОЕ спасибо за помощь! |
Цитата:
|
Если чем-то оскорбил - пардону просим (+ см ЛС)
Можно новый вопрос? Почему на некоторых системах WinX32 бинарные значения при установке упорно не желают прописываться? Из 113 установок 28 почему-то "взбрыкнули" (за статистику спасибо пользователям ru-board-a) Конкретно - крякунутый PhotoInstrument 5.5 на большинстве систем молча кушает прописываемые значения в Реестр, а на некоторых упирается рогом и при первом запуске программа успевает нацарапать своё "Купить" |
kotkovets. Привет.
Возник вопрос изменения ресурсов... На странице установки хочу опустить прогресс бар чуть пониже и небольшую картинку на этой же странице разместить (хотелось бы это сделать без плагинов). а то пробовал как-то плагин, картинка работала только на хп, а на висте и семёрке не отображалась. |
Цитата:
Цитата:
CreateWindowEx если апи не знаете, то код приводить бессмысленно |
kotkovets,
То, что отсчёт будет происходить от и до, понятно, (но видно только при "служебных сообшениях") : Код:
${for} $1 1 10 а - в файл ? b - в переменные (чего очень хотелось бы !), где каждое значение (от 1 до 10 в данном примере), "прирощенное" в каждом отсчёте цикла, записывается в свою переменную ? Т.е. небходимы 10 переменных. Ну, очень... |
MKN, StrCpy не пробЫвал, работу со строкой, брать 1 символ строки или последний один символ, кидать в свою переменную,
если строка имеет вид: a1, то Код:
StrCpy $count $R9 "" 1 Код:
StrCpy $count1 $R9 1 дальше логика И-ИЛИ, метод сравнения, ведь в одном цикле прохода $R9 неизменна. |
Всё равно не ясно, как перенумеровывать значения, находящиеся в середине текста строк (ещё и в разных местах), в не предсказуемом кол-ве строк...
|
MKN, давай полный пример, а то ты меня уже достал своей непонятностью :)
|
kotkovets,
Да, чувствую что достал... Но кроме тебя, никто на белом свете, не откликается так развёрнуто, с помощью по NSIS заморочкам... :) Задача такая - в файле Default.bar, в котором определяется расположение и содержание кнопок на тулбаре в ТotalCommаnder_e : Код:
[Buttonbar] Например, вставляем кнопку первой на тулбар. Следовательно бывшая первая кнопка станет второй , вторая третьей и т.д. Такая же нумерация со смещением в + единицу, будет и укаждого параметра этих кнопок. Параметров для разных кнопок может быть от 2 до 5. |
MKN, насколько я понял:
Код:
|
kotkovets,
Это понятно, самое простое для вставки одной кнопки в конец тулбара. А надо вставить кнопку в середину или в начало. Т.е. надо управлять нумерацией всех остальных параметров других кнопок. |
MKN, я тебя уже поставил на правильный путь, если тебе это уже понятно, так почему ты задаешь
Цитата:
|
kotkovets,
Приведи пожалуйста пример для вставки первой кнопки. |
Цитата:
Код:
ClearErrors следовательно, 11-3=9, находим разницу между 11 и 9 = 3, ну ставим условие только 3 кнопка математика 3 класса, ей богу! |
kotkovets,
А как же с перезаписью номеров следующих за 1ой кнопкой , параметров остальных кнопок ? Вот что не понятно... Перезаписать надо ведь только нумерацию, но не сами команды "bla...bla...". Или именно так и произойдёт ? Я ведь не заменяю кнопку, а добавляю... |
MKN, я уже сказал и показал, вот что мешает прочитать предыдущее значение в переменную, и записать вычитая или отнимая единичку.
|
MKN
Как-то так... Код:
|
kotkovets, K.A.V., - спасибо за помощь и терпение... :)
Но всё же не даёт мне покоя, как из цикла извлекать значения каждого прохода (в файл ли или в переменные) ? В поисках информации, которой нет, наткнулся на такой код : Программа, выводящая песню о пиве (beer.nsi) ; Beer song. Written by Evgeny Stepanischev Дело конечно не в песне, а в наглядности возможностей NSIS. Так вот - возможно ли из такого рода кода извлечь текст песни не DetailPrint_ом, а в обычный файл ? Как это сделать ? Код:
|
MKN, что мешает заменить команду DetailPrint командой FileWrite?
Код:
Function .onInit Цитата:
|
Цитата:
Код:
${for} $1 1 10 а - в файл ? b - в переменные , где каждое значение (от 1 до 10 в данном примере), "прирощенное" в каждом отсчёте цикла, записывается в свою переменную ? Т.е. небходимы 10 переменных. |
MKN
а - в файл, либо методом WriteINIStr, чтобы сохранить значение каждого цыкла в разный параметр Либо из примера б запишите одной строкой и возьмите как указано в том же примере Код:
${for} $1 1 10 Или насчет б я бы зделал так: Создал переменную, и в ней уже проделывал все манипуляции Скажем, создал переменную и могу хранить в ней значение 10 других "переменных" Код:
Function .onInit |
Существует ли в NSIS ключ, наподобие ключа из InnoSetup /silent, но не /verysilent, чтобы процесс установки не был скрыт, как ключём /S, а шёл автоматически, без возможности отмены, но видимо?
|
BigBoo, Типы инсталляторов
|
kotkovets скажи пожалуйста, вот на счет описанного тобой плагина InvokeShellVerb Plugin for NSIS и хедера InvokeShellVerb.nsh вот если делать так ${PinToPusk} "$WINDIR\notepad.exe" то название закрепленного ярлыка так и есть notepad.exe как то не эстетично, возможно как то задать иное название?
|
Цитата:
|
Цитата:
|
Цитата:
Запуск с ключом /silent - заставляет установщик перенестись на страничку установки. Почему на 3 страничку, стандартных страничек приветствия и финиша в нсис нет!, значит их не учитываем, остается только по скрипту 3 странички: 1 выбор директории 2 выбор компонентов 3 страничка установки - на страничку эту и ведем счет. создаем "последнюю" секцию по скрипту, что бы не показывалась страничка финиша. Цитата:
|
kotkovets
Здравствуйте! Читал в теме, вы давали советы для лучшего сжатия файлов установщика. Это ,конечно хорошо когда всё жмётся по самые пельмени. Но вот когда инсталлер весит больше гигабайта - то распаковывается это дело жутко долго... Ещё вначале "veryfuing installer" вылезает и долго грузится. Как можно обеспечить более быструю распаковку? Пожалуйста, посоветуйте наиболее оптимальные параметры в соотношении "сжатие - скорость распаковки". Готов пожертвовать размером установщика (ибо щас это не принципиально, почти у всех безлимитки на хороших скоростях). Спасибо! |
K.A.V., kotkovets,
Позвольте испытать ещё раз ваше терпение ... :) помочь с вот такой головоломкой : Опять те же кнопки, те же пронумерованные параметры... Есть последовательность из 10 чекбоксов для 10 секций с параметрами кнопок. Отметка чекбокса устанавливает кнопку на тулбар и при этом нумеруются параметры. Нужно учитывать последовательность отметки и снятия отметки чекбоксов так, чтобы последовательность установки кнопок(а значит и нумерация параметров) - всегда соответствовала последовательности действий с отметками чекбоксов. Например - первым отметили 10й чекбокс - кнопка будет установлена 1й. Вторым отметили 7й чекбокс - кнопка установится 2й по счёту. Третьим отметили 1й чекбокс - кнопка установится 3й по счёту. 1 2 3 4 5 6 7 8 9 10 3 И т.д. Потом решили снять отметку с 10ого чекбокса (который устанавливал 1ую кнопку) - при этом 1ой кнопкой стала 2ая, а 2ой - 1ая 1 2 3 4 5 6 7 8 9 10 2 Далее сняли отметку с 1ого чекбокса - 1ая кнопки осталась на месте 1 2 3 4 5 6 7 8 9 10 1 И так для любых комбинаций снятий-отметок чекбоксов. зы В примерах по несколько цифер под рядом 1...10 поместить в сообщении не получается. Пост как то странно форматируется.. |
Цитата:
Цитата:
BZIP2 - всё по "средне" LZMA - низкая скорость, высокая степень сжатия Уже не раз обсужждалось, можете использовать внешние упаковщики типа RAR и создавать многотомные архивы...Читайте в теме ранее уже раз 100 обсуждали это MKN, ну прям вынос мозга :) Сейчас голова не соображает, но может потребуется создать пару отдельных переменных и хранить там какой пункт отметили и из него вычитать... Позже подумаю, если kotkovets раньше не реализует =) P.S. Нужно в справочник добавлять страничку "Часто задаваемые вопросы" Первым делом добавить инфу по поводу создания многотомных архивов |
Цитата:
рядом с установщиком, т.е таскать собой файлы архиватора 7z: 7z.dll и 7z.exe(консольную версию) Код:
Function .onInit Цитата:
Цитата:
|
Вложений: 1
MKN, возьмите на тест...
Если я правильно понял задачу, то вроде работает =) Там в папке с EXE в INI файл будет записываться значение чекбоксов, при отметке и при снятии отметки в 2 параметра P.S. Вы там взялись за написание софта с помощью NSIS как я? :) Такие головоломки прям))) |
Цитата:
Test делает прямо то, что надо ! ps А можно оформить этот код как .nsh или плагин (приобщив туда же предыдущие изыскания с вставкой кнопки в произволное место последовательности) ? Это я так спросил... :) |
Вложений: 1
Цитата:
Заменить текстовые поля на кнопки? =) Вообщем вот смотрите...Если чего не поймёте - спрашивайте |
K.A.V.,
Благодарю за код. Буду изучать. ps Я имел ввиду объединение кода с предыдущим моим вопросом, о вставки кнопки в произвольное место ряда, когда уже имеется ряд кнопок. Но наверное не нужно смешивать задачи... |
Цитата:
Сделаю позже ;) Изучайте пока то что уже есть :tongue: |
K.A.V. и kotkovets, спасибо.
Цитата:
Цитата:
SetCompressorDictSize 64 SetDatablockOptimize on Они на что влияют? Цитата:
|
Цитата:
-- SetDatablockOptimize - оптимизирует блоки данных сжатия. разработчики рекомендуют включать его (on) -- SetCompressor -Это команда устанавливает алгоритм сжатия файлов/данных в инсталляторе. Поддерживаются три метода сжатия: ZLIB, BZIP2 и LZMA. ZLIB (значение по умолчанию) это - быстрый и простой метод. С заданным по умолчанию уровнем сжатия он использует приблизительно 300 Кбайт памяти. BZIP2 дает лучшую степень сжатия чем ZLIB, но он немного медленнее и использует больше памяти. С заданными по умолчанию уровнем сжатия он использует приблизительно 4 Мбайта памяти. -- LZMA - метод сжатия, который дает хорошую степень сжатия. Скорость распаковки высокая (10-20 МБ/сек на процессоре в 2 ГГц), а скорость сжатия ниже. Размер памяти, который будет использоваться для распаковки, равен размеру словаря плюс несколько Кбайт, значение по умолчанию составляет 8 Мбайт. Если используется команда с /FINAL, то последующие запросы в SetCompressor будут проигнорированы. Если используется команда с /SOLID, то все данные инсталлятора будут сжаты в одном блоке. Это приводит к большому степени сжатия. Цитата:
т.е скорость распаковки в основном зависит от ресурсов компьютера. |
MKN
Цитата:
Вот смотрите: У нас заполнено уже 5 первых кнопок например (для простоты примера кнопка = попытка) 1 = 1 2 = 2 3 = 3 4 = 4 5 = 5 вот...ну добавляю я кнопку с попыткой 6 на место 4 кнопки, ну понятно, значение 4 меняем 6 (ну мы же меняем у чекбокса попытку?) и становится так: 1 = 1 2 = 2 3 = 3 4 = 6 5 = 5 и что дальше?? куда девать 4 попытку? Что, заполнять "случайную" кнопку которая будет пустой при пересчёте или как?? Или заменять 5 на 4? Даже если мы заменим 5 на 4, то у нас будет "дыра", "пятёрочка" просто исчезнет =) Вообщем что-то здесь не складывается))) Толи время суток сказывается толи что, не соображаю чего-то :drug: Вообщем пойду спать :lazy: |
Цитата:
|
K.A.V.,
Чёрт с ней со вставкой. Наверное я перемудрил и зря тебя озадачил... А мысль была такая : :) Мы ведь рассматривали вариант, когда устанавливали кнопки на "девственный" тулбар без кнопок, сохраняя последовательность установки кнопок сообразно последовательности выбора чекбоксов. А если на тулбаре уже есть сколько то кнопок ? Вот тогда и предполагалось, что новые кнопки (1, 2 или все 10) вставлялись бы и в любое место в уже имеющийся ряд кнопок и, в то же время, сохранялась последовательность установки новых кнопок, как уже было рассмотрено ранее. Вот такая загогулина... Цитата:
Т.е. "вклинивание" новых кнопок в ряд старых, смещает имеющуюся последовательность старых кнопок (как было в предыдущей задаче). И в то же время, как бы мы не тасовали новые кнопки, сохранялась бы последовательность их установки сообразно последовательности их выбора чекбоксами (как в последней задаче). |
kotkovets, такой вопрос вот в KMPlayer '"$INSTDIR\KMPlayer.exe" -install' такой ключ устанавливает ассоциации, в PotPlayer '"$INSTDIR\PotPlayerMini64.exe" /RegisterAll' такой ключ устанавливает ассоциации там WinRAR еще какойто не помню. Есть ли возможность узнать как то эти ключи исходя из самого exe-шника? Спасибо.
|
Цитата:
|
Цитата:
|
Olef2387, сами смотрите...
кстати, настройки архиватора 7z по умолчанию соответствуют балансу между уровнем сжатия и скоростью, т.е размер словаря по умолчанию 64 Мбайт, в NSIS (?) размер словаря больше, чем 163 Мбайт не поставите, почему не знаю. |
в 7зип Размер словаря по умолчанию 16 mb стоит...
![]() |
Olef2387, я имел ввиду при уровне сжатия "ультра"
|
Цитата:
kotkovets, Подскажите как конвертировать комманду с консольным окном ExecWait "$INSTDIR\vlc-cache-gen.exe $INSTDIR\plugins" в вариант со скрытым запуском. Попробовал так, не запускается: nsExec::Exec '"$INSTDIR\vlc-cache-gen.exe $INSTDIR\plugins"' |
wolkow70, пробуйте так:
Код:
SetOutpath "$INSTDIR" |
kotkovets, что бы не отображалась кнопка детали можно написать
Код:
ShowinstDetails nevershow ![]() |
Цитата:
SetDetailsPrint none|listonly|textonly|both|lastused --- Код:
Section Uninstall |
kotkovets. Здравствуйте.
Можно ли изменять заголовок для всплывающих мессажбоксов? Ну например чтобы был заголовок "Ошибка!". А так пока заголовок такой же как заголовок окна инсталлятора. И ещё один вопрос. В силу специфики моей установки - у меня временные файлы копируются на системный диск пользователя. Не знаете как можно было бы проверить количество свободного места на системном диске? Если нехватает - сообщение что нужно место освободить! спасибо! |
Цитата:
Код:
System::Call `kernel32::GetDiskFreeSpaceEx(t'C:\', *l.R3, *l.R4, *l)` |
kotkovets. благодарю за код! (откуда только Вы всё знаете...)
А не могли бы дополнить... Я вот имел ввиду именно системный диск (ну там где Виндоус поставлен), просто не у всех диск С - системный. Можно ли как-нибудь сперва определить где стоит операционка и потом определять уже свободное место на этом диске? |
Цитата:
|
Цитата:
первый символ переменной всегда возвратит букву системного раздела Код:
System::Call `kernel32::GetDiskFreeSpaceEx(t'$WINDIR', *l.R3, *l.R4, *l)` |
Цитата:
Аргумент номер один: Данная тема существует для общения, для вопросов и для ответов - посмотрите хотя бы на название. Какие вопросы глупые, а какие нет - решать не Вам. Аргумент номер два: есть справка и что? Справка - это понятие растяжимое, и всего в ней невозможно предусмотреть. Поэтому, если есть какие-то конкретные претензии к моим вопросам в частности - говорите четко и ясно, кашу по тарелке размазывать не надо! Аргумент номер три: нужно уметь уважительно относиться к людям. Тем более к неопытным пользователям. Я никого не обидел ни прямо, ни косвенно. Веду нормальное общение - спрашиваю, интересуюсь. И между прочим kotkovets, как отзывчивый человек - отвечает, помогает, советует. |
Цитата:
Но на помощь пришли "гуру" NSIS и сделали справочник на русском языке. Но на то они и гуру, что имея опыт программирования пишут и говорят вроде бы по-русски, но ничего не понятно из-за специфики материала... То, что понятно и ясно им, вовсе не означает понимание материала неискушенным пользователем. Это уже чисто педагогический момент - изъясняться так, чтобы у читателя-ученика, не было разнотолков и недоумения в глазах. :) А с этим пока проблематично... Как выход - подкрепление теории, примерами. Примеры конечно есть, но и примеры без внятных и развёрнутых комментариев - часто не понятны. Без примеров - NSIS не изучить и не постичь. Начинающим пользователям - точно. И не надо их за это винить и ругать. :) Больше примеров и Макаренского терпения... :) |
АВТОР ТЕМЫ, ПОПРАВЬТЕ ШАПКУ И НА ПЕРВУЮ СТРОЧКУ ПОМЕСТИТЕ ССЫЛКУ НА СПРАВОЧНИК
Из моих постов "прошлых лет" вытаскиваю самое главное http://forum.oszone.net/post-1301660-235.html http://forum.oszone.net/post-1334031-371.html http://forum.oszone.net/post-1335270-375.html Цитата:
Цитата:
Цитата:
Цитата:
Что мы видим СЕЙЧАС: У вас всех есть то самое золото, которого не было ни у меня и ни у кого - Справка NSIS на русском языке, и, как мне кажется, в которой довольно-таки грамотно описаны все ньюансы И теперь скажите, мне, лично вы Olef2387 Цитата:
Я могу ответить за вас, ЛЕНЬ или просто не хотение "возиться с кодом", как я и процитировал сам себя в этом сообщении "NSIS - все вопросы, а не NSIS - скажите, что вам нужно, а мы напишем за вас готовый код" В файле справке есть информация, КАК определить системный диск, КАК определить свободное место на диске, ВСЁ это там есть Любой кто здесь напишет опять же "я не знаю английского" уже не отговорка (я тоже его не знаю и никогда не знал) т.к. уже есть не плохой справочник на русском Почему я, будучи ещё ребёнком (16-17 лет) начал изучать NSIS с 0, без знания английского, без интернета и пришел к тому, что создал справочник для начинающих программеров? Просто было огромное желание учиться, повторюсь, ничего с первого раза не получалось Мне никто ни в чем не помагал А вы здесь "беспомощные" задаёте одни и те же вопросы, ответы на которые уже давно есть в нашей справке Я просто недоумеваю... Если вы не хотите в этом разбираться (мол, лучше зайду-ка задам вопрос и получу готовый код) и банально прочитать уже справку на родном языке для вас затруднительно, то бросайте вообще программирование на NSIS и вообще не беритесь за любое программирование |
Цитата:
Цитата:
Я вас назначаю куратором темы, только нужно обратиться к властям :lol: |
Власти поддержали инициативу.
Поздравляем Вячеслава (kotkovets) с назначением на кураторство сей полезной темы! :) |
Поздравляем, чо :)
|
kotkovets, тоже поздравляю вас. :)
Но я уже тут боюсь что-то спрашивать. K.A.V. выпрыгнет и отправит справочник читать) А сам справочник будет ли ещё обновляться ? |
|
Цитата:
Если после прочтения всё равно остались вопросы по какой-то команде - это другое дело, мы хотя бы будем знать, что вы нашли ответ, но у вас что-то не получилось, мы поможем в любом случае Цитата:
|
kotkovets,
Нашел в справке ваш хедер ProcessFunc.nsh Подскажите правильно ли я его понял и применяю, в таком случае: ? ${FindProcessName} "opera.exe" $0 StrCmp $0 none NotProcess MessageBox MB_YESNO|MB_ICONINFORMATION|MB_TOPMOST "ВНИМАНИЕ!$\n\ $\nВ настоящее время программа ${PRODUCT_NAME} запущена!" $\nПри нажатии кнопки 'Да' программа будет принудительно закрыта и удалена. \ $\nПри нажатии кнопки 'Нет' будет выполнен выход из программы удаления. \ $\nВы хотите продолжить удаление программы ${PRODUCT_NAME} ?" /SD IDYES IDYES close IDNO cancel cancel: abort close: ${KillProcess} "opera.exe" $0 ${ProcessWait} "opera.exe" "2000" $0 NotProcess: |
Цитата:
Код:
${If} ${ProcessExists} "opera.exe" |
Привет всем.
Не как не могу разобраться с разбором строк... Из реестра считывается строка вида: Provider=SQLOLEDB;Data Source=W2K3SP2\SQLEXPRESS;Initial Catalog=user_db;Persist Security Info=True;User ID=user;Password=user;Min Pool Size=5; либо Provider=LCPI.IBProvider;Data Source=localhost:C:\Program Files\user\DB\user_db.gdb;ctype=win1251;auto_commit=true;auto_commit_level=0x1000;User ID=user;Password=user; По значению "Provider=" планирую определять тип продукта. Как видите - используется разделитель - ";", как бы с его помощью разбить строку на переменные? Спасибо! |
DruOleg,
Можно для начала так : Код:
!include "WordFunc.nsh" Потом отсекаем "Provider=" |
DruOleg, MKN, так будет работать, если подстрока Provider= - в начале строки,
иначе нужен цикл, к примеру в переменную $2 получаем строку из реестра: Код:
StrCpy $2 "Provider=LCPI.IBProvider;Data Source=localhost:C:\Program Files\user\DB" |
Дайте мне хоть слово сказать :clapping:
А можно и воть так: Код:
!include "StrFunc.nsh" Вроде работает :yes: Цитата:
|
K.A.V.,
Расскажи подробнее про ${StrStrAdv}. Когда, как и зачем... :) ps Хорошо бы в справочнике рассказать про ВСЕ "штучки" ${} используемые в различных Function Header и логических конструкциях. С примерами... |
Цитата:
Я с ней не работал и не разбирал её, первый раз я с ней столкнулся в этой теме, когда у одного из участника возник похожий вопрос "Как получить значения в строке" (в справочнике это страничка Примеры кодов => Работа со строками => Фильтр символа "|": Разбивка значений) Вот тогда я методом "тыка" получил результат В StrFunc.nsi есть пример работы этой команды, я в ней не разбирался, но там какие-то сложные логические действия :) На данный момент в работе со строками у меня проблем не возникает, и, собственно, в чем-то разбираться пока нет необходимости :drug: Вот здесь возникла проблема у человека, мы её решили и я успокоился :tongue: |
Оказывается есть описание StrStrAdv : http://nsis.sourceforge.net/StrStrAdv
как и некоторые, перечисленные в StrFunc.nsi Подставляем в http://nsis.sourceforge.net/нужное и ищем... А я искал в доке... Получается в доке, тоже далеко не всё есть... |
Цитата:
причем константу, можно заключать макросы и функции, что очень удобно. Код:
!define msgbox "!insertmacro _msgbox" затем разрушается, что очень удобно, в отличии от глобальной константы ${msgbox}, где значение этой константы можем поменять - только в функции иницилизации установщика (.OnInit) |
kotkovets,
Я не совсем это (простое объявление констант) имел ввиду. А разбор конкретных ( ${StrCase} ${StrClb} ${StrIOToNSIS} ${StrLoc} ${StrNSISToIO} ${StrRep} ${StrStr} ${StrStrAdv} ${StrTok} ${StrTrimNewLines} ${StrSort} и т.д. и для разных хедеров (не только для StrFunc) ) с примерами и комментами... Хотя бы тех, что не вошли пока в справочник. Например, сделать пример работы, скажем наугад, - ${StrCase} так : Сначала указываем Syntax : ${StrCase} "ResultVar" "String" "Case" Потом код примера : Код:
!include "StrFunc.nsh" И так для всего прочего. Хлопотно конечно и справочник разбухнет, но оно того стОит. Для примеров оформления страниц и для примеров всевозможных вариаций переключения кнопок-чекбоксов , самое лучшее это GIF-анимашки. Ежели сделаешь в коде так, то смотри как это будет выглядеть и главное, как работать, а если так то смотри далее... И если уж после таких примеров будут вопросы.... :) |
MKN, открывай публикацию своих тестов и "новых неизвестных народу макросов" :)
а мы добавим в справочник. Цитата:
|
Цитата:
Цитата:
На это опять же, нужно убить колосальное количество времени, сюда я не отношу такие простые команды как ${GetOptions} например, это всё просто (или взять те же команды, которые я уже перевёл из справки, там всё легко), говорю о сложных манипуляциях со строками как например эта же команда ${StrStrAdv}, на страничке документации по ней информации не мало и, нужно сесть, и хорошенько напрячь извилины :) Почему я не берусь за эти команды я уже сказал, нет надобности, тем более, что сложными операциями со строками сталкиваются еденицы |
Цитата:
Синтаксис : ${StrStrAdv} "ResultVar" "String" "SubString" "SearchDirection" "StrInclusionDirection" "IncludeSubString" "Loops" "CaseSensitive" Код:
!include "StrFunc.nsh" ****************** (По этому же принципу работает и ${StrStr}, только с ограничением - оставляется только то, что находится справа от SubString плюс сам SubString . ${StrStr} "ResultVar" "String" "SubString") ${StrStrAdv} - это ${StrStr} Advanced ****************** Значение "CaseSensitive" - 0 или 1 - учитывать регистр или нет. Если подстрока не найдена, то в переменную будет возвращена пустая строка . Если подстрока пустая, то строка будет возвращена с флагом ошибки. Если строка пустая, то будет возвращена пустая строка с флагом ошибки. |
Товарищи, как прописать в скрипте команду на запись параметра: ?
Opera.HTML тип параметра REG_NONE Экспорт в рег-файл дает: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.htm\OpenWithProgIDs] "Opera.HTML"=hex(0): Первый раз с таким сталкиваюсь.... |
wolkow70,
Это умеет Registry plug-in http://nsis.sourceforge.net/Registry_plug-in |
Так правильно будет?
${registry::Write} "HKLM "SOFTWARE\Classes\.htm\OpenWithProgIDs" "Opera.HTML" "" "REG_NONE" |
wolkow70,
где то так : Код:
!include "Registry.nsh" |
wolkow70
Справочник по NSIS => Описания плагинов => Registry: Работа с реестром |
${registry::Write} "HKLM "SOFTWARE\Classes\.htm\OpenWithProgIDs" "Opera.HTML" "" "REG_NONE" $R0
!insertmacro: macro "registry::Write" requires 5 parameter(s), passed 6! |
|
Товарищи, реально ли средствами NSIS в файле opera_install_log.xml все пути C:\Program Files\Opera поменять на путь прописанный в $INSTDIR или нет?
|
Цитата:
|
Возвращаясь к вышеразбираемому вопросу с определением Provider=* в длинющей строке :
Можно и так : Код:
Section |
Цитата:
|
wolkow70, в шапке пример парсинга xml
или макросами Word* в папке примеров - большая куча примеров. |
Цитата:
Цитата:
Кстати я хотел добавить в справочник пример данного кода (недавно реализовывал для одного проекта) Чуть причесал и вот сюда выкладываю Скрипт построчно читает в текстовом файле строки и заменяет определённый текст в строке на ваш |
Цитата:
Примерно так, да? !include "XML.nsh" SetOutPath "$INSTDIR" ${xml::LoadFile} "$INSTDIR\opera_install_log.xml" $0 ${xml::GotoPath} "C:\Program Files\Opera" $0 ${xml::SetAttribute} "pathPrefix" "$INSTDIR\" $0 ${xml::SaveFile} "" $0 ${xml::Unload} |
Спасибо все за рецепты, сделал так:)
Код:
;Тип СУБД ExecWait "sqlcmd.exe -S $DB_server -d $DB_name -U $DB_user -P $DB_password -i get_version.sql" Запрос: SELECT REV FROM VERSN - возвращает обычное число... Его и нужно сравнить с числом 14525. |
K.A.V.,
Попробовал применить приведенную вами функцию. Все работает. Возникло два вопроса: 1. Если нужно заменить еще значение - назначать новую функцию? 2. Что закомментировать, что бы не было баннера в режиме тихой установки? |
wolkow70, сделайте так:
В начале кода Код:
Var _FindInFile ; В эту переменную поместим полный путь к файлу, в котором будем производить замену В любой секции или функции вызываем функцию сколько угодно раз, только перед новой заменой, если данные отличаются (в каком файле и что заменить) назначайте переменным новые значения Код:
|
Напомните пожалуйста, каким образом средствами NSIS манипулировать (удалять, заменять, разрегистрировать) "занятые" системой файлы и ключи реестра.
Например, надо разрегистрировать и удалить файлы Adobe Acrobat Reader_а (надо подчистить "хвосты" после неудачного удаления ПО, перед последующей установкой. Такое часто необходимо.) : \Program Files\Common Files\Adobe\Acrobat\ActiveX\AcroIEHelper.dll и удалить записи его ключей в реестре и др. подобные файлы... "классически" разрегистрировать и удалить этот файл не возможно... (Куча ручных действий с выставлением прав - ессно не годится.) Помнится был способ с назначением системных прав с полным доступом к файлу и рестартом оболочек (Эксплорера или Тотала) Не нахожу никак эту инфу... Желательно без сторонних средств (в смысле, без доп. утилит и дремучих досовских команд). Интересует способ для любых версий ОС. kotkovets, наверняка решил бы эту проблему средствами API... :) |
Помогите, пожалуйста, с запросом к БД.
Нужно сделать запрос к 2 БД: Firebird 2.1 и MS SQL 2005 и выше. Почти готов инсталлятор, осталось лишь сделать запрос и сравнить результат с числом... |
Цитата:
Код:
Delete /Rebootok "File" Цитата:
УЗНАТЬ какой процесс держит файл и грохать процесс. читай в справке: » Работа с процессами с помощью NSIS |
Цитата:
Предварительно резрегистрируем файл, или, если комманда не выполняется через рег-сервер, удаляем все ключи реестра, относимые к dll. ExecWait 'taskkill /F /IM explorer.exe' $0 DetailPrint "taskkill exit: [ $0 ]" Sleep 500 StrCmp $0 0 0 +2 Exec "explorer.exe" Delete "$INSTDIR\menu.dll" ${If} ${FileExists} "$INSTDIR\menu.dll" Delete /REBOOTOK "$INSTDIR\menu.dll" SetRebootFlag true ${Else} SetRebootFlag false ${EndIf} |
kotkovets, wolkow70,
Вы наверное, не так меня поняли или я не точно выразился... То что вы сказали , зто понятные рядовые ситуации. Здесь же, файл или ключ "охраняет" защищает система и пока не получишь(не выставишь) системные права и полный доступ к файлу (ключу) - никакой Rebootok ОК не поможет и ничего с файлом и ключом сделать нельзя. (и никакой процесс этот файл не "держит", а перезапуск оболочки - это будет последний этап для некоторых случаев) . Интересует , что можно предпринять в таких случаях средствами NSIS ? Т.е. каким образом организовать назначение системных прав и полного доступа к файлу и ключу реестра, при чём без сторонних утилит (типа Cacls.exe , SubInACL.exe и т.п. ) Почему я и помянул API, т.к. видел инфу как раз по этому поводу с упоминание MoveFileEx с флагом MOVEFILE_DELAY_UNTIL_REBOOT Только я в API ни черта не понимаю. |
Цитата:
Код:
Delete /Rebootok "File" Цитата:
|
Товарищи, не пойму почему
IntOp $0 ${SF_SELECTED} | ${SF_RO} SectionSetFlags ${Install} $0 ТАК РАБОТАЕТ! IntOp $0 ${SF_SELECTED} | ${SF_RO} | ${SF_BOLD} SectionSetFlags ${Install} $0 ТАК НЕ РАБОТАЕТ! |
kotkovets,
Так как быть то с удалением таких файлов и ключей реестра ? Delete /Rebootok "File" - файл не удаляет. Что делать с ключами - не ясно... |
Еще такую задачку не знаю как проще решить:
InstallDir "$PROGRAMFILES\${PRODUCT_NAME}" Если директория установки не отличается от C:\Program Files\Opera прописанной в файле opera_install_log.xml то менять значение в файле не нужно, если директория установки выбрана другая, то вызвать функцию Call ReplaceLinesInFile. То есть тут проверка нужна не только на $PROGRAMFILES\${PRODUCT_NAME} , но и с учетом буквы диска. MKN В этом разделе не пробовали удалять предварительно ключи? DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls" "$SYSDIR\px.dll" |
Цитата:
!include "Library.nsh" Код:
Name "Library Test" |
wolkow70,
Без прав и доступа к файлу - ничего не сделать. Об этом и речь. |
wolkow70, складывать флаги нужно:
Код:
intop $R0 ${SF_RO} + ${SF_BOLD} Код:
intop $R0 ${SF_RO} | ${SF_BOLD} Цитата:
|
kotkovets,
Это я знаю. Но это командная громозда с cmd.exe и т.д. , которой хотелось бы избежать. Неужели нет иных способов ? |
Цитата:
а че такие вопросы задаешь, думай как - вот тебе подсказка, где можно при следущей перезагрузке прописать, что угодно http://forum.oszone.net/post-1795270-1898.html |
kotkovets,
takeown.exe - в XP нет, уже не удобство.. в RunOnce я команду удаления тоже прописывал - никакого эффекта... |
Над своей задачкой подумал и набросал так:
!include "FileFunc.nsh" ${GetRoot} InstallDir "$PROGRAMFILES\${PRODUCT_NAME}" Section "${PRODUCT_NAME} (установка программы)" Install ; StrCmp $INSTDIR "$PROGRAMFILES\${PRODUCT_NAME}" CheckDisc ParsingXML CheckDisc: ${GetRoot} "$PROGRAMFILES\${PRODUCT_NAME}" $R0 StrCmp $R0 "C:" NoParsing ParsingXML ParsingXML: StrCpy $_FindInFile '$INSTDIR\opera_install_log.xml' ; Заменяем строки в этом файле StrCpy $_LineReplace 'C:\Program Files\Opera' ; Ищем и заменяем ЭТУ строку StrCpy $_LineToInsert '$INSTDIR' ; На что будем заменять Call ReplaceLinesInFile NoParsing: SectionEnd |
wolkow70, а вы мастер! с завидной упертостью наступать на одни и те же грабли с метками :)
Код:
StrCmp $INSTDIR "$PROGRAMFILES\${PRODUCT_NAME}" 0 ParsingXML Код:
StrCmp $R0 "C:" NoParsing 0 какой то киноляп.... |
Цитата:
Ну сомневаюсь я , что можно в StrCmp ставить рядом условные и безусловные метки. По моему или то или другое (поскольку в справке нет иных примеров). Вы мне подскажите такую весчь: ReadRegStr $R6 HKLM "SOFTWARE\Classes\Applications\Opera.exe\shell\open\command" "" получаем "C:\Program Files\Opera\Opera.exe" "%1" далее ${GetParent} "$R6" "$R7" получаем "C:\Program Files\Opera RMDir /r "$R7" Папка не удаляется. Потому, что кавычки не закрыты. Надо из этого ключа взять папку установки для удаления при переустановке. |
Цитата:
Определяя метки для различных команд, помните, что 0 или пустое значение, означает переход к следующей команде. Цитата:
|
Цитата:
Push $R6 Push $R7 Push $R8 ReadRegStr $R6 HKLM "SOFTWARE\Classes\Applications\Opera.exe\shell\open\command" "" ${GetParent} "$R6" "$R7" StrCpy $R8 "$R7" "" 1 RMDir /r "$R8" Pop $R8 Pop $R7 Pop $R6 Цитата:
Мне не совсем ясно из каких соображений можно имея системный диск D; ставить программу в C:\Program Files\ |
wolkow70, проще и эффективнее и главное удаляет любой указанный символ,
в начале и в конце строки - независимо от количества символов Код:
ReadRegStr `$R6` HKLM "SOFTWARE\Classes\Applications\Opera.exe\shell\open\command" "" Цитата:
а у вас тупо диск С поставлен. то будет при другом раскладе ставлю прогу на диск С в любую папку - не парсится. ставлю в другой системный раздел отличным от диска С, то парсится.... смысл ???? |
Цитата:
Цитата:
Поэтому проверяется как переменная пути установки , так и буква диска. Цитата:
|
${StrSort}
${StrSort} "ResultVar" "String" "LeftMarkerSubString" "SubString" "RightMarkerSubString" "IncludeLeftMarkerSubString" "IncludeSubString" \ "IncludeRightMarkerSubString" В зависимости от выбора установки "SubString" и маркеров "LeftMarkerSubString" и "RightMarkerSubString" - будет "тасоваться" содержимое строки Характерные примеры использования : Код:
!include "StrFunc.nsh" |
Нужно было организовать вызов MessageBox с последующим его автозакрытием черех n время.
Реализовал c помощью штатного плагина "Banner" так : Код:
!include "WinMessages.nsh" |
Цитата:
1. Либо вызывать из внешней DLL функцию показа кнопки 2. Либо взять и изменить плагин Banner (ResHacker'ом), отредактировать диалог и вызывать его уже со всеми заданными данными Вот как в SFX Creator'e диалог "О программе", только там я какой то другой плагин изменял P.S. В баннере нет ресурса :D Это другой плагин "баннера", посмотрю как он называется |
Цитата:
А вот с штатными, нужно поизгиляться, определяя параметры окна сообщения и вызывая автонажатие кнопки (кнопок) или , если возможно, сразу закрытие нужного окна. Только это довольно-таки сложно и в коде, громоздко... И для сообщений будет уж очень нецелесообразно... |
Цитата:
Код:
!define MsgBoxTimeout "!insertmacro macro__MsgBoxTimeout" |
Товарищи, подскажите как можно вычислить путь к папке плагинов FireFox
При установке 11-ой версии прописывается так. HKEY_LOCAL_MACHINE "SOFTWARE\Mozilla\Mozilla Firefox 11.0\extensions" "Plugins" "$PROGRAMFILES\Mozilla Firefox\plugins" Но мы не знаем заранее какая версия установлена (9,10,11 или другая....) В общем нужно как-то записать в переменную значение параметра "Plugins" , чтобы скопировать плагин в эту папку. |
wolkow70, макрос ${RegFind} из справки.
Код:
Section |
Цитата:
[HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Thunderbird\Extensions] "{eea12ec4-729d-4703-bc37-106ce9879ce2}"="E:\\Program Files\\Kaspersky Lab\\Kaspersky Internet Security 2011\\THBExt" Тут нужно исключить ключ Thunderbird и Value должно быть "Plugins" Можно еще найти путь к экзешнику, но это еще геморнее. [HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox 11.0\bin] "PathToExe"="E:\\Program Files\\Mozilla Firefox\\firefox.exe" |
Обязательно программу распаковывать в TEMP? Хочу как обычно, чтоб прямо из setup.exe устанавливать. Зачем ее куда то копировать.
А вот какие файлы подлежат распаковке, определяет команда File: File"${pkgdir}\opera\1049.MST" File"${pkgdir}\opera\opera installer.msi" в учебнике написано. У меня вообще другая программа. Ну запускаю Opera там целая куча этих файлов и нет нужных. |
Цитата:
КОНСТАНТА pkgdir, точнее ее значение говорит скрипту во время компиляции, откуда файлы(с какой папки) будем брать. Код:
SetOutPath "D:\opera" |
kotkovets, а можно сразу из setup.exe файлы брать? подскажите скрипт как должен выглядеть.
|
bugmenotagain, справка в шапке, глупые вопросы при внимательном чтении букафф резко отпадут.
|
kotkovets, процитируйте, пожалуйста, это место.
|
bugmenotagain, пожалуйста, имейте совесть :read:
Скачайте справочник по NSIS на русском языке, ссылка в шапке темы Народ, вы что-то совсем наглеете... :o |
bugmenotagain,
Распаковывваете оригинальный дистрибутив в 7z FM или в Universal Extractor. SetOutPath "$INSTDIR" ; File "${pkgdir}\Opera11\c3nform.vxml" File "${pkgdir}\Opera11\encoding.bin" File "${pkgdir}\Opera11\files.sig" File "${pkgdir}\Opera11\files_list" File "${pkgdir}\Opera11\files_old.sig" File "${pkgdir}\Opera11\html5_entity_init.dat" File "${pkgdir}\Opera11\html40_entities.dtd" File "${pkgdir}\Opera11\lngcode.txt" File "${pkgdir}\Opera11\mathml.dtd" File "${pkgdir}\Opera11\opera.dll" File "${pkgdir}\Opera11\opera.exe" File "${pkgdir}\Opera11\operaprefs_default.ini" File "${pkgdir}\Opera11\pubsuffix.xml" File "${pkgdir}\Opera11\opera_install_log.xml" ; File /r "${pkgdir}\Opera11\defaults" File /r "${pkgdir}\Opera11\extra" File /r "${pkgdir}\Opera11\gstreamer" File /r "${pkgdir}\Opera11\locale" File /r "${pkgdir}\Opera11\program" File /r "${pkgdir}\Opera11\region" File /r "${pkgdir}\Opera11\skin" File /r "${pkgdir}\Opera11\styles" File /r "${pkgdir}\Opera11\ui" File /r "${pkgdir}\Opera11\unite" Файл Opera11\opera_install_log.xml берется отдельно уже из установленного дистрибутива и правится. Без файла opera_install_log.xml Opera не устанавливается на Windows 7 как браузер по умолчанию и в расширенных настройках не работает вкладка Программы\Настройки. С пустым opera_install_log.xml Opera не устанавливается на Windows 7 как браузер по умолчанию, но при этом вкладка Программы\Настройки работает Если в install_log.xml пропарсить пути установки на реально используемые в "$INSTDIR" Opera устанавливается на Windows 7 как браузер по умолчанию, и вкладка Программы\Настройки работает. |
kotkovets,
Вот так сделал, работает: Function EnumReg StrCpy $5 "$1" "" -10 ${If} $5 == "extensions" ${AndIf} $2 == "Plugins" ${AndIfNot} $1 == "SOFTWARE\Mozilla\Thunderbird\Extensions" ; DetailPrint "Раздел реестра: $1" DetailPrint "Имя параметра: $2" DetailPrint "Тип параметра: $4" DetailPrint "Значение параметра: $3" StrCpy "$5" "$3" StrCpy $0 StopRegFind ${EndIf} FunctionEnd Section "Интеграция в браузер Firefox" Firefox ${RegFind} "${HKLM}\SOFTWARE\Mozilla" "/T=REG_SZ /V=1" EnumReg CopyFiles /silent "$INSTDIR\npdm.dll" "$5" SectionEnd |
Подскажите, каким образом в стандартных и кастомных страницах, запретить действие кнопок "Next" и "Install".
Не скрыть эти кнопки , а именно запретить, при их нажатии (и, что важнее - клике на "Enter") , дальнейшее действие. |
Цитата:
Но отловить событие нажатия кнопки "Далее" и возвратиться на предыдущую страничку можно, вот так я бы сделал на стандартных страничках, добавив между страничками свою функцию: Код:
!insertmacro MUI_PAGE_WELCOME Код:
Function MyCustomPage P.S. А вообще не понятно, зачем их блокировать?? |
Я спрашивал программа должна распаковаться потом устанавливаться? а сразу она не может устанавливать? зачем мне стандартный установщик Я делаю свой собственный. что так она не может программа сама не может понять какие ей нужны файлы для установки?
|
Цитата:
на другой элемент окна Код:
${NSD_SetFocus} "описатель(хэндл) элемента" |
глухая тема
|
Цитата:
Согласен с вами, 2500+ сообщений в теме...совсем тихо здесь как в тайге :biggrin: Да и люди здесь, какие-то не отзывчивые, не помагают ничем :lol: Как найдёте на просторах рунета более "подвижную" тему в которой обсуждают язык NSIS, сообщите сюда пожалуйста :drug: |
K.A.V., вам наверно 15 лет, столько смайликов понаставили
|
bugmenotagain, хорош оффтопить, все претензии в личной переписке высказываете
|
NSIS замена файлов
Когда появляется новая версия моей программы. Люди ее инсталлирую поверх старой программы.
Возможно ли NSIS заставить не перезаписывать некоторые файлы? Тоесть есть файл settings.ini в нем хранятся настройки. И его не нужно перезаписывать (не нужно заменять на исходный который есть в инсталляторе). Спасибо. |
|
К сожалению я там не нашел ответ на свой вопрос.
|
celovec, Посмотрите страничку в справке на всякий случай "Перевод справки NSIS => File"
А вообще чтобы НЕ перезаписывать файл, нужно перед командой распаковки (File) прописать команду SetOverwrite off Вот так: Код:
SetOverwrite off ; Отключаем перезапись файла Код:
IfFileExists "$INSTDIR\settings.ini" +2 0 ; Проверяем, есть ли файл в каталоге, куда происходит установка |
Цитата:
Если после запуска скрипта, случайно или как, кликнуть на Enter, то начинается выполнение команд. Совершенно не нужное и бестолковое, вплоть до сообщений об ошибках, хотя ничего ещё не выбрано и не отмечено. Поэтому и надо блокировать Enter. |
bugmenotagain,
По моему, недоумение и разночтение вызывает не внятно поставленная тобой задача и не ясные конечные цели. Т.е. в целом - весь твой вопрос. Вот ты пишешь : Цитата:
|
MKN, кнопки ты не заблокирушь так просто, событие обрабатывает nsis, поимимо твоего кода со скрипта, добавляется еще куча
сдужебных и необходимых команд. конечно можно блокирнуть, перехватывать событие кнопки и ставить хук, но тока через внешнюю dll - много возни, поверь. |
Цитата:
|
Цитата:
перенести фокус на кастомную кнопку странички, при нажатии кнопки кастомной(после необходимых манипуляций), разблокировать кнопку командой EnableWindow и через SendMessage передать событие нажатия кнопки, ${BM_CLICK} - как то так, что ли... |
Цитата:
Я смотрел макросы например MUI_WELCOM в System.nsh (на него ссылается MUI.nsh), но там по сути, нигде не отрабатывает команда EnableWindow на кнопку Далее Даже если добавлять функцию как я написал ранее, перед самой страничкой с командой EnableWindow, она тоже не делает кнопку не активной :dont-know Единственный способ как мне кажется, это проверять в функции (как опять же я выше написал) свои "потребности "и нажимать на кнопку "Назад", если что-то не так... Если кто узнает другой способ, пишите :) |
Цитата:
nsis предоставляет к стандартным страничкам 3 функции 1. перед открытием странички 2. когда страничка открыта 3. когда страничка закрывается пример на стандартной страничке: |
маленький вопросик, какой командой можно прекратить установку nsis? тоесть есть в скрипте проверка на существование ключа в реестре, если он есть установка продолжается, а вот если нет инсталяция должна прекратится...
|
XCV,
При не соответствии условию - Quit |
kotkovets,
посоветуйте в таком вопросе: !insertmacro MUI_PAGE_STARTMENU Application $MENU Section "Создать группу ярлыков в меню Пуск" StartMenu !insertmacro MUI_STARTMENU_WRITE_BEGIN Application ; SetShellVarContext all CreateDirectory "$SMPROGRAMS\$MENU" CreateShortCut "$SMPROGRAMS\$MENU\${PRODUCT_NAME}.lnk" "$INSTDIR\USBSafelyRemove.exe" CreateShortCut "$SMPROGRAMS\$MENU\Справка ${PRODUCT_NAME}.lnk" "$INSTDIR\USBSafelyRemoveRu.chm" CreateShortCut "$SMPROGRAMS\$MENU\Удалить ${PRODUCT_NAME}.lnk" "$INSTDIR\uninstall.exe" ; !insertmacro CreateInternetShortcut \ "$SMPROGRAMS\$MENU\Веб-сайт ${PRODUCT_NAME}" \ "${PRODUCT_WEB_SITE}" \ "$INSTDIR\USBsrURL.ico" "0" ; !insertmacro MUI_STARTMENU_WRITE_END SectionEnd Все нормально папка с ярлыками создается, где указано. В деинсталляторе прописал: Section Uninstall ; SetShellVarContext all RMDir /r "$SMPROGRAMS\$MENU" при удалении на XP снесло почти все меню Пуск. пришлось восстанавливать систему. Что тут может быть не так? |
wolkow70, Тысячу раз говорил:
значения переменных из секций инсталлятора не переносятся в секции деинсталлятора!!! --- поэтому значение переменной $MENU в деинсталляторе может быть, какое угодно! примеров стартменю великое множество! |
Цитата:
Переменную я объявлял как в справке написано: Var MENU #объявляем нашу переменную |
Цитата:
Попробуйте в секцию Uninstall добавить первой строкой Код:
!insertmacro MUI_STARTMENU_GETFOLDER "Application" $MENU Цитата:
|
Цитата:
;RMDir /r "$SMPROGRAMS\$MENU" и перестало сносить. Отдельно комманды прописываю, не удаляет. Похоже не понимает переменную. Delete "$SMPROGRAMS\$MENU\${PRODUCT_NAME}.lnk" Попробую сделать как вы подсказали. |
Привет.
После прочтения вашего справочника по NSIS, сваялся маленький скриптик, с использованием RegistryFunc.nsh v2.0. Вот только незадача в том, что при попытке выдернуть из справочника саму библиотеку она выдергивается без форматирования. Мощности устройства head не хватает что бы красиво ее отформатировать и сделать так, что бы она нормально заработала. Сам файл библиотеки мне найти не удалось. Можете кинуть ссылочку откуда можно скачать эту библиотеку в нормально виде. Спасибо. |
Сделал так:
Section Uninstall SectionIn 1 RO ; !insertmacro MUI_STARTMENU_GETFOLDER "Application" $MENU SetShellVarContext all RMDir /r "$SMPROGRAMS\$MENU" Сносить меню перестало, но и удалять папку не удаляет. |
Цитата:
Что мешает, тогда, сохранить её значение в реестр при установке?? Вы же создаёте деинсталлятор, запишите в ветку "Uninstall" своей программы значение этой переменной, и читайте значение параметра в эту переменную во время запуска деинсталлятора.... Цитата:
kotkovets, внеси в шапку ссылку на плагины, либо я её не вижу, либо её там реально нет :) |
Цитата:
|
Из содержания хедера StartMenu.nsh похоже, что значение переменной само в реестр прописывается и читаться должно макросом. Как его вызвать не пойму.
Цитата:
|
Вложений: 1
Цитата:
Цитата:
Берёте прописываете свою команду на запись в реестр и сохраняете значение этой переменной во время установки: В секции установки: Код:
WriteRegStr "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "MyCustom" "$MENU" Код:
ReadRegStr $MENU "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" "MyCustom" |
Цитата:
|
Цитата:
Вот же там есть: !macro MUI_STARTMENU_GETFOLDER ID VAR !verbose push !verbose ${MUI_VERBOSE} ;Get Start Menu folder from registry ;Can be called from the script in the uninstaller !ifdef MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT & MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY & MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME ReadRegStr $mui.StartMenuPage.RegistryLocation "${MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME}" ${if} $mui.StartMenuPage.RegistryLocation != "" StrCpy "${VAR}" $mui.StartMenuPage.RegistryLocation ${else} StrCpy "${VAR}" "${MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}" ${endif} !else StrCpy "${VAR}" "${MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}" !endif !verbose pop !macroend |
wolkow70, у вас
Код:
!define MUI_STARTMENUPAGE_DEFAULTFOLDER Значение записывается вообще в реестр или нет?? Вы проверяли? Где именно ошибка, может даже и запись в реестр не происходит, а мы тут читать пытаемся :drug: |
Вот как прописано:
Var MENU !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "${pkgdir}\USB Safely Remove\License.txt" !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_STARTMENU Application $MENU !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH Section "Создать группу ярлыков в меню Пуск" StartMenu !insertmacro MUI_STARTMENU_WRITE_BEGIN Application SetShellVarContext all CreateDirectory "$SMPROGRAMS\$MENU" CreateShortCut "$SMPROGRAMS\$MENU\${PRODUCT_NAME}.lnk" "$INSTDIR\USBSafelyRemove.exe" CreateShortCut "$SMPROGRAMS\$MENU\Справка ${PRODUCT_NAME}.lnk" "$INSTDIR\USBSafelyRemoveRu.chm" CreateShortCut "$SMPROGRAMS\$MENU\Удалить ${PRODUCT_NAME}.lnk" "$INSTDIR\uninstall.exe" !insertmacro MUI_STARTMENU_WRITE_END SectionEnd В деинсталляторе: !insertmacro MUI_STARTMENU_GETFOLDER "Application" $MENU SetShellVarContext all RMDir /r "$SMPROGRAMS\$MENU" |
Цитата:
Вы мне скажите, у вас значение записывает в реестр?? Сами откройте редактор реестра и посмотрите! На рабочем столе папка создаётся с именем в меню пуск?? У меня код рабочий... Попробуйте вот так написать... Код:
Var MENU |
Да, прописывается в реестр
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu2\Programs\Утилиты\USB Safely Remove] "Order"=hex:08(большое значение). |
Цитата:
Записывается в реестр как будто это тип ключа REB_BINARY или REG_EXPAND_SZ По умолчанию должно прописывать в: Код:
Software\Microsoft\Windows\CurrentVersion\Uninstall |
В Software\Microsoft\Windows\CurrentVersion\Uninstall создается запись деинсталляции
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\USB Safely Remove (но там пути создания ярлыков нет, только то, что прописано в секции создания деинсталлятора.). Еще заметил, если создавать ярлыки в самом StartMenu, то стало удаляться, а если поместить в подгруппу "Утилиты" , то не удаляется. Значит $MENU не пустое. |
wolkow70, пропишите в скрипт запись значения $MENU при установке и при вызове деинсталлятора во внешний файл, чтобы понять, что у вас там назначается этой переменной...
|
Сделал так:
Section Uninstall !insertmacro MUI_STARTMENU_GETFOLDER "Application" $MENU MessageBox MB_OK "$MENU" IDOK SetShellVarContext all RMDir /r "$SMPROGRAMS\$MENU" Пробовал ставить непосредственно в "Программы" - мессадж - в "$MENU" USB Safely Remove (при этом все нормально удаляется). Ставлю в "Программы\Утилиты" - мессадж - тоже в "$MENU" USB Safely Remove (но при этом не удяляется). То есть, полный путь (относительно "Программы") не прописывается в "$MENU". Только сама папка. Еще сделал проверку при установке: Section "Создать группу ярлыков в меню Пуск" StartMenu !insertmacro MUI_STARTMENU_WRITE_BEGIN Application MessageBox MB_OK "$MENU" IDOK ; SetShellVarContext all CreateDirectory "$SMPROGRAMS\$MENU" Все нормально в мессаджах записывается. В первом случае: USB Safely Remove Во втором случае: Утилиты\USB Safely Remove |
Цитата:
wolkow70, классический пример: |
kotkovets,
Ваш пример сработал на 100%. В вашем примере в реестре специально создается параметр для хранения значения переменной. С такими строками у меня тоже все заработало. !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\SafelyRemove" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" Только я подозреваю, что макросы MUI2 сами это должны делать, используя специальные значения реестра Windows. Не должно быть так, чтобы специально их прописывать. |
Товарищи, подскажите по такому вопросу:
Process Monitor показывает выполнение : rundll32.exe aimp_menu32.dll,ContextMenuAddonRegister Делаю cmd файл в папке с aimp_menu32.dll rundll32.exe aimp_menu32.dll,ContextMenuAddonRegister При этом все работает. В скрипте NSIS пишу : ExecWait '"rundll32.exe $INSTDIR\Modules\aimp_menu32.dll,ContextMenuAddonRegister"' Комманда не работает. |
Цитата:
|
wolkow70, а вы маньяк, по тысячу раз на одни и те же грабли наступать...:)
http://forum.oszone.net/post-1821953-2142.html или как то так... Код:
ExecWait 'rundll32.exe "$INSTDIR\Modules\aimp_menu32.dll", ContextMenuAddonRegister' $0 |
Цитата:
ExecWait 'rundll32.exe "$INSTDIR\Modules\aimp_menu32.dll,ContextMenuAddonRegister"' Process Monitor показывает выполнение : rundll32.exe "E:\Program Files\AIMP3\Modules\aimp_menu32.dll,ContextMenuAddonRegister" Но при этом регистрации библиотеки не происходит. В то время как батником регистрируется. Видимо дело в длинном пути к файлу. Цитата:
RegDLL "$INSTDIR\Modules\aimp_menu32.dll" ContextMenuAddonRegister. Но, при оригинальной инсталляции процесс регистрации происходит не через рег-сервер, а через выполнение rundll32.exe aimp_menu32.dll,ContextMenuAddonRegister В чем отличие затрудняюсь прокомментировать. |
Цитата:
|
Цитата:
В предыдущем сообщении, у меня все отработало в двух вариантах на 100%, ЧИТАЙТЕ ВНИМАТЕЛЬНО, что вам пишут!!! |
Сделал так:
ExecWait 'rundll32.exe "$INSTDIR\Modules\aimp_menu32.dll",ContextMenuAddonRegister' $0 MessageBox MB_OK "$0" Возврат 0 Все зарегистрировалось. Всем спасибо. Вот еще обратил внимание, что при оригинальной деинсталляции AIMP aimp_menu32.dll как то тихо удаляется без всякой перезагрузки и перезапуска эксплорера. Вот бы также сделать. |
kotkovets,
Возник ряд вопросов по логическим конструкциям, может подскажите: 1. Возможно ли использовать логическую конструкцию в составе макроса с подставляемой переменной? 2. Возможно ли при этом сравнивать не только числовые, но и иные значения хранящиеся в переменных? 3. Возможно ли совпадение условию использовать для исключения выполнения комманды по отношению к условию Else? Пример к вопросу - фрагмент макроса: Var ClassName !macro UnRegisterExtension extenstion StrCpy $ClassName "AIMP.${extenstion}" ; ; тут разное ; ${If} ${AtLeastWinVista} ReadRegStr $7 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" "Progid" ReadRegStr $8 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" "AIMP.Backup" ${If} $7 == "$ClassName" ${OrIf} $7 == "Applications\AIMP3.exe" DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" ${If} $8 == "" ${OrIf} $8 == "$ClassName" ${OrIf} $8 == "Applications\AIMP3.exe" ${Else} WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" "Progid" "$8" ${EndIf} ${EndIf} ${EndIf} !macroend |
Цитата:
Цитата:
Цитата:
Цитата:
Код:
${IfNot} $8 == "" условие И, сработает, если $8 не равно пустому значению и не равно $ClassName и не равно Applications\AIMP3.exe: Код:
${IfNot} $8 == "" |
Цитата:
Код:
${If} $8 == "" 1. "" - пустому значению 2. значению "$ClassName" (текущему значению) 3. значению "Applications\AIMP3.exe" (назначению приложения) Поэтому и разделил ${Else}. Может как-то по другому можно сформулировать? |
Цитата:
Код:
${Select} $8 |
Из справки:
Здесь макрос ${Case} может срабатывать до пяти значений переменной $0 Имеется в виду в один ${Case} можно включать до пяти значений? Самих ${Case} может быть множество? Почему в примере присвоено 3 ${Case3} - потому, что три значения, или любую нумерацию можно поставить? Обладает ли такая формула преимуществами перед тем, что я написал? |
Цитата:
Код:
---- Цитата:
Цитата:
данный макрос удобнее применять, когда сравнивается множество значений одной выбранной переменной. |
kotkovets,
При совместном применении в макросе ${Select} и ${Switch} ${extenstion} скрипт не компилируется. Код:
!macro RegisterExtension extenstion |
Цитата:
|
Цитата:
|
kotkovets,
Использую ваш хедер "RegistryFunc.nsh" , но не могу в нем найти функцию определения пустого ключа. Станадартная функция из справки DeleteRegKey /ifempty HKLM "Software\A key that might have subkeys" несколько раз подводила. Еще вот нашел такое: Код:
ClearErrors Интересует и возможная логическая конструкция для такого случая. Пока сам сделал так, но думаю не идеальный вариант... Код:
ReadRegStr $6 HKCU "Software\Classes\.${extenstion}" "" |
Цитата:
если он пуст и нет параметров. Цитата:
Код:
ClearErrors |
kotkovets,
Я так понимаю, что такая конструкция проверит и удалит ключ если он не содержит вообще никаких параметров. Код:
${If} ${KeyExists} "${HKCU}\Software\Classes\.${extenstion}" А такая конструкция удалит ключ, если нет параметра по умолчанию Код:
ClearErrors |
добрый день!
Почему может не срабатывает условие !define DISPLAY_NAME "COOL" ReadRegStr $0 HKCU "Software\Microsoft\" "var" !if $0 == ${DISPLAY_NAME} MessageBox MB_OK|MB_ICONQUESTION|MB_TOPMOST "IS... $0" Quit !endif MessageBox MB_OK|MB_ICONQUESTION|MB_TOPMOST "It'S $0 ${DISPLAY_NAME}" Заноситься строка и считывается нормально, визуально условие должно сработать так как они равны |
dix75,
Цитата:
Код:
!include "MUI2.nsh" Код:
StrCmp $0 ${DISPLAY_NAME} 0 +3 |
Спасибо.
А как можно переименовать ветку реестра? |
Так и не соображу как более рациональнее сделать.
Нужно соблюдение условий: Код:
${If} |
dix75, в шапке темы прочитайте
Цитата:
|
Цитата:
Код:
ReadRegStr $4 HKCU "Software\Classes\.${extenstion}" "" Код:
${If} ${KeyExists} "${HKCU}\Software\Classes\.${extenstion}" |
Что здесь не так
Код:
${StrRep} $folder $folder "/" "\" Код:
!insertmacro: macro "FUNCTION_STRING_StrRep" requires 0 parameter(s), passed 4! |
Подскажите как экранировать "
|
Цитата:
Либо знак ` (буква Ё) Например: Код:
' "Двойные кавычки" ' Код:
` "Двойные кавычки" 'Одинарные кавычки' ` |
Спасиб.
|
Возможно ли такое
Имеется JSON строка неопределенного размера {"hello":"bla-bla"} Как изменить bla-bla на что нить другое |
Цитата:
В шапке темы уже и красным жирным шрифтом выделили, а вы забегаете и быстрей сообщение писать Изучите наш справочник и не задавайте вопрсов, на которые уже есть ответ в справочнике Справочник по NSIS |
K.A.V.,
В доль и поперек его изучил плюс изучил все функции http://nsis.sourceforge.net/Category:String_Functions ничего нет и близко. |
Цитата:
Там есть описание функции, которая позволяет заменять в строках слова, я сам добавлял описание и знаю, что там есть, а чего нет Описание нужной вам команды там есть Там кода - 1 строка, 1 команда, но я из принципа её сюда не буду писать |
K.A.V.,
Блин неправильно задание написал. Имеется JSON строка вида {"hello":"bla-bla"} Как изменить bla-bla на что нить другое, известно только слово "hello" "bla-bla" неизвестно. такой кусок может располагаться в любом месте строки кол-во пробелов между : неограничено или может вообще отсутствовать. Поэтому ${WordReplace} не подходит, да практически все что просмотрел. Regex того что нужно Код:
/^.*\"hello\"\s*:\s*\"([^\"])+\"$/ |
|
|
kotkovets,
Я же ясно написал что Цитата:
вместо bla-bla может быть что угодно. Заранее не известное т.е мне нужно найти то, что идет за hello в двойных кавычках При этом не известно через сколько символов начинаются двойные кавычки |
Цитата:
|
|
Добрый день!
Для описания Read me в rtf-файле использовал шрифт Consolas. Узнал что этого шрифта нет по умолчанию в WinXP. Т.е получается чтобы текст у всех правильно отображался, надо этот шриф включать в инсталлер. Вопрос, как это правильно сделать? Ведь он же ещё установиться должен, как я понял сразу при запуске инсталлера, наверно. Чтобы когда юзер дойдёт до страницы ридми шрифт уже был в системе. Нарыл плагин вроде на эту тему. Но разобраться не смог в нём http://nsis.sourceforge.net/Advanced_Font_Installation |
Вопрос про шрифты интересный.
Я бы тоже не прочь использовать в установщике не стандартные шрифты. А если бы вместо rtf, NSIS поддерживал бы интеграцию из html-страниц - была бы вообще песня) Olef2387, к сожалению напрямую в Вашем вопросе помочь не могу. Могу лишь посоветовать альтернативу Consolas'у. Используйте шрифт Trebuchet MS, он входит в состав дефолтных шрифтов как минимум начиная c Win XP. Похож на Consolas и выглядит вполне себе приятно (лучше применять к нему курсив и размер 10-11). |
Цитата:
Попозже посмотрю, если kotkovets раньше ответ не даст Цитата:
|
Вложений: 1
Olef2387
Быстрый набросок... |
Цитата:
Цитата:
nvalid command: FontName::Name Error in macro FontName on macroline 3 Error in macro InstallTTF on macroline 43 |
Цитата:
установите себе этот плагин, у вас библиотеки нет |
Вложений: 1
Olef2387, Возможно и так упрощенным вариантом без плагина.
|
kotkovets. Супер! Во всех тонкостях разбираетесь, парни. Респект!
Как пожеланье - материал по установки своих шрифтов в инсталлер можно включить в обновлённый справочник NSIS,шрифты - очень полезная вещь для креатива :) |
Цитата:
Вот в той теме и описывайте, что хотите видеть в справочнике А в этой теме мы обсуждаем только вопросы по коду, давайте будем писать там, где нужно ;) Тем более, в той теме проще будет зайти и посмотреть пожелания к справочнику, чем в этой теме искать потом... |
K.A.V., ok.
Вопросы по мелочи... 1. Можно ли как-нибудь сделать так чтобы в NSIS при подрузке текста из rtf, не показывался мерцающий курсор... Это немного раздражает... 2. У меня в скрипте выбран русский язык. Почему вот это сообщение с ошибкой у пользователей появляется на инглише? ![]() Хотелось бы исправить. Спасибо! |
K.A.V.,
Спасибо |
Добрый день!
Такой вопрос имеется база данных SQLite. Есть ли модули позволяющие получить доступ к бд и выполнить запрос? |
Цитата:
Цитата:
Цитата:
|
Цитата:
|
dix75,
Где то видел использование совместно с NSIS - sqlite3.exe (http://sqlite.org/download.html) здесь - http://forums.winamp.com/showthread.php?t=339375 |
Всем привет.
_______ Цитата:
И ещё Вопрос... Как переместить файл, если известно только его расширение? То есть как при перемещении файлов использовать маску файлов например *.dll Так не работает... Rename $DOCUMENTS\Dock\*.dll $DOCUMENTS\Dock2\*.dll |
Цитата:
Вам нужно качать исходные коды самого NSIS, менять эту запись, и компилировать NSIS сборку (либо часть файлов, точно не скажу, т.к. не уверен) Цитата:
Смотрите в справочнике команду "Перевод справки NSIS => FindFirst" Делайте переименование при перечислении файлов |
K.A.V., я дико извиняюсь, знаю, что вы скажите что Вас опять просят прислать готовый код, а сами думать не хотят... Но тем не менее... Маленький примерчик не могли бы мне показать.
P\s: Нужно не переименовать, а переместить |
Цитата:
-- Код:
FindFirst $0 $1 "$DOCUMENTS\Dock\*.dll" |
K.A.V.
Моё почтение. Просто не знал после чего добавить команду перемещения в скрипт перечисления. ----------------- А по ошибке... Я скачал исходники NSIS... В каком файле искать текст с ошибкой и как потом компилировать сборку? У меня народ не понимает что от них хотят, когда видятэтот текст на буржуйском языке) А сборку я для всех потом выложу :) |
Цитата:
Цитата:
Возьмите, к примеру, Total Commander и произведите поиск фразы в файлах, ищите фразу со ссылкой на страницу "NSIS_Error" Цитата:
Смотрите страницу "Building NSIS" в оригинальной справке NSIS |
Код:
FindFirst $0 $1 "$DOCUMENTS\Dock\*.dll" loop: StrCmp $1 "" done Rename "$DOCUMENTS\Dock\$1" "$DOCUMENTS\Dock2\$1" FindNext $0 $1 Goto loop done: FindClose $0 К сожалению не срабатывает тоже... :( |
Цитата:
У меня всё работает... Может, у вас конечной директории не существует?? |
K.A.V., да, действительно. Я рассчитывал что эта директория автоматически создастся...
Теперь к коду ещё надо создание директории прописывать?... А также в дополнении, если файлы не только dll-разрешения нужно переместить но ещё и *sys допустим? Как это в коде добавить? или заново писать? FindFirst $0 $1 "$DOCUMENTS\Dock\*.sys" loop: StrCmp $1 "" done Rename "$DOCUMENTS\Dock\$1" "$DOCUMENTS\Dock2\$1" FindNext $0 $1 Goto loop done: FindClose $0 |
Цитата:
Как вы съедите мандаринку, если её у вас нет? ;) Нужно создать мандаринку, а только потом её скушать :) Цитата:
Либо запустить перечисление всех файлов, а уже при определении отсекать 3 символа с конца строки, которая содержит имя файла, и сравнивать, если DLL или SYS расширение у файла, перемещать... Код:
FindFirst $0 $1 "$DESKTOP\1\*.*" |
SetOutPath "$INSTDIR\primer\"
File "failo\olef.txt" вот при такой команде папка primer создаётся автоматически... K.A.V. большое спасибо за помощь. У меня серьёзный цейтнот. Подскажите, пожалуйста, где в справочнике смотреть команду для создания папки? |
Цитата:
Код:
CreateDirectory "$INSTDIR\Моя папка" |
Цитата:
|
Цитата:
Пока надо найти откуда выводится текст... Перерыл исходники - не обнаружил текста (но это может из-за того что я слепошарый ламер). А может текст как-то кодируется\ генерируется - я ламер, сложно разобраться. :) погуглил - буржуи пишут что правда надо менять в исходных кодах текст. Но какой файл отвечает за это не указывают. http://stackoverflow.com/questions/1...about-crccheck |
Вложений: 1
Olef2387, поиск фразы занял 3 секунды на моём слабеньком процессоре
Если вы даже не в состоянии найти текст в файле, то...бросайте эту задумку, да не в обиду будет сказано |
Может кто-нибудь подсказать почему не работает вот это в деинсталляторе?
!define MUI_UNFINISHPAGE_NOAUTOCLOSE И если так не правильно , то как тогда правильно сделать? Мне нужна возможность в деталях просматривать процесс деинсталяции. |
Цитата:
SetAutoClose true |
Товарищи, подскажите как в
MB_USERICON подставить другую иконку, а не инсталлятора? |
Цитата:
Код:
${MessageBoxEx} "путь к файлу ресурсу, где иконка" "текст надписи" "текст заголовка" "стиль сообщения" "индекс иконки" "код возврата" |
Цитата:
Мне надо в сообщении типа этого просто иконку другую указать. MessageBox MB_YESNO|MB_USERICON|MB_TOPMOST "Внимание!$\n\ $\nЕсли у вас открыты окна браузеров Internet Explorer, Mozilla Firefox,$\nOpera, Google Chrome закройте их перед продолжением установки. \ $\nВ противном случае, они будут закрыты принудительно! \ $\nЭто избавит от конфликтов интеграции программы. \ $\nПродолжить установку ${PRODUCT_NAME} ?" /SD IDYES IDYES continue IDNO close ; close: Abort continue: |
Цитата:
Код:
${IfNot} ${Silent} |
Товарищи, может кто подскажет как на собственную страницу поместить просмотр текстового документа? Чего-то не получается:
Мне нужно, чтобы этот текстовый файл отображался с прокруткой. И еще заголовок страницы поменять нужно, а то отображается от следующей страницы. В функции вот что: Код:
Function fnCustomInit |
Цитата:
|
kotkovets, Работает вариант, но не думал, что так сложно. Исходил из предположения, что в NSIS есть механизм чтения RTF - файлов (ведь текст лицензии он прокручивает).
|
kotkovets, Откопал на Ру-борде ваш старенький скрипт, который мне весьма помог:
http://forum.ru-board.com/topic.cgi?...&limit=1&m=1#1 Для меня полезным оказалось !insertmacro MUI_HEADER_TEXT_PAGE Не мог понять как вставить заголовки на костомную страницу. Этот вариант сработал. |
Набрёл случайно на вопрос, суть которого такова - "Как сделать так, чтобы кликнув на хелп-кнопочке (обозначенной знаком вопроса), рядом с каким либо элементом или надписью на странице - появлялось окно с сопроводительным текстом и, если надо, элементами управления ? Есть ли для этого какой либо плагин ?"
Оказывается есть такой (но его почему то нет в списке http://nsis.sourceforge.net/Category:Plugins) Называется плагин nsWindows и живёт здесь : http://forums.winamp.com/showthread....ight=nswindows Только нагорожено в нём изрядно, а примеры мутные... Ежели бы этот плагин кто из специалистов "причесал" и упростил для поставленной задачи, то наверное была бы польза... |
Цитата:
но неинтересно ковыряться абсолютно! |
kotkovets, может посоветуете как справиться с задачкой:
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "MyApp" !define MUI_STARTMENUPAGE_REGISTRY_ROOT ${PRODUCT_UNINST_ROOT_KEY} !define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Icon Group" На x86 все нормально. На системе X64 запись деинсталляции как и нужно создается в 64-битном реестре (через SetRegView 64), а значение "Icon Group" прописыается в 32-битный реестр. И как тут лучше сделать, учитывая, что путь к параметру задается через !define ? |
wolkow70, обычной записью в реестре и чтением значение параметра деинсталятором.
|
Цитата:
!insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder !insertmacro MUI_STARTMENU_WRITE_BEGIN Application CreateDirectory "$SMPROGRAMS\$StartMenuFolder" И в деинсталляторе: !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder Можно ли переназначать !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" в зависимости от разрядности системы, может в Function .onInit как то ? |
Цитата:
|
Цитата:
Код:
Function .onInit ;!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" ;!define PRODUCT_UNINST_ROOT_KEY "HKLM" При копиляции ошибка в строках: Код:
Usage: ReadRegStr $(user_var: output) rootkey subkey entry |
wolkow70,
Цитата:
а зачем трогать, коль ветка неизменна и значения переменных не изменяются, тупо! да еще в функции .OnInit сразу переключаться в 32-разряд :) я же говорил, непосредственно перед записью самым обычным способом, переключать вид реестра. |
Цитата:
Код:
Section "Создать ярлыки в меню Пуск" StartMenu Перед макросом что-ли ставить SetRegView 64 ? |
wolkow70, вроде бы по русскому говорю...
Цитата:
Код:
!macro MUI_STARTMENU_WRITE_END |
Цитата:
А сделал я все ориентируясь на пример из справки. |
Цитата:
Код:
Section "Создать ярлыки в меню Пуск" StartMenu |
wolkow70, можно проще, зачем повторно прописывать команды?
Код:
Section "Создать ярлыки в меню Пуск" StartMenu |
Привет.
Продолжаю изучение NSIS... Задачка Есть 20 компонентов. При установке юзер должен выбрать 1 из этих 20. На эту тему нашёл информацию в справке. И всё работает. Пример на 6 компонентах Нужно дополнить... 1. Чтобы кнопка ДАЛЕЕ была неактивна пока не будет выбран 1 из компонентов. 2. Так как компонентов много, хотелось бы их объединить в группу... Команда SectionGroup объединяет их в группу, но там если галочку нажать - выбираются сразу все компоненты в группе... А у меня в данном случае только 1 компонент должен быть выбран. Вот так. Извиняюсь, если опять что-то наиэлементарнейшее спросил :) |
Цитата:
|
Блестяще, что тут ещё сказать. Большое спасибо
Правда, компоненты в группе раскрыты, как можно сделать чтоб по умолчанию они были свёрнуты? Команду SubSection /e test IDS_1 изменил на SubSection test IDS_1 всё равно раскрыты компоненты.. |
Цитата:
Код:
SectionSetFlags ${IDS_1} ${SECTION_OFF} Код:
SectionSetFlags ${IDS_1} -290 |
kotkovets,
Можете помочь в таком вопросе: Работает такая конструкция: ReadRegStr $R6 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Opera 11.64.1403" "InstallLocation" RMDir /r "$R6" Стоит задача найти директорию установки независимо от версии и удалить. Пробую так: Код:
Function EnumReg ${RegFind} "${HKLM}\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" "/T=REG_SZ /V=1" EnumReg |
Цитата:
зато есть - SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Opera**** --- Читайте и изучайте - StrCpy - там все по полочкам с примерами расписано. --- Код:
Section |
Доброй ночи. Пожалуйста, помогите разобраться. Пытаюсь с помощью плагина AccessControl зачистить хвосты от драйвера:
Код:
AccessControl::GrantOnRegKey \ |
Привет всем!
Прошу помочь с обработкой файла. В ходе установки получаем файл - result.txt. Файл содержит в себе: Код:
STR |
Цитата:
|
Цитата:
Код:
ExecWait '"sqlcmd" -S "$DB_server" -U "$DB_user" -P "$DB_password" -d "$DB_name" -i "$Temp\Fix_IIRF\get_revision.sql" -o "$Temp\Fix_IIRF\result.txt"' |
DruOleg, И как прочитать содержимое файла, тоже не знаете?
И что в переменную $0 возвращает? Код:
ExecWait '"sqlcmd" -S "$DB_server" -U "$DB_user" -P "$DB_password" -d "$DB_name" -i "$Temp\Fix_IIRF\get_revision.sql" -o ' $0 |
Цитата:
Код:
ClearErrors Цитата:
Если пароль неверно указать - возвращает - 1. |
Цитата:
Код:
Section |
kotkovets,
Подскажите пожалуйста как в режиме генератора ответов избежать вывода некоторых страниц? Код:
!define MUI_PAGE_CUSTOMFUNCTION_SHOW SHOWWELCOME и не показывать на Finishpage опцию "запустить". |
Цитата:
|
Цитата:
Код:
${While} $1 != "0400" Кто знает как поправить? |
Прошу помочь с ведением лога.
Код:
Если падает на первой секции в лог не чего не пишется. Лог подключил методом из FAQ. |
Цитата:
Код:
OutFile "example.exe" |
Сделал так:
Код:
!define MUI_PAGE_CUSTOMFUNCTION_PRE PRELICENSE на финишной странице не отображалось: !define MUI_FINISHPAGE_RUN "$INSTDIR\winamp.exe" !define MUI_FINISHPAGE_RUN_TEXT "Запустить Winamp" !define MUI_FINISHPAGE_RUN_NOTCHECKED и не выполнялось: !define MUI_FINISHPAGE_NOAUTOCLOSE При этом имеется функция : Код:
Function SHOWFINISH |
Цитата:
|
kotkovets,
Да, работает. Я было пошел по другому пути, нашел где-то так: Функция Show_PageFinish_custom GetDlgItem $ R9 $ MUI_HWND 1203; ShowWindow $ R9 $ {} SW_HIDE MessageBox MB_OK $ R9 # MessageBox MB_OK $ MUI_HWND FunctionEnd Но нужно было узнать номер поля из ioSpecial.ini , но я у себя такого файла не нашел во временной папке NSIS. |
Цитата:
его использует MUI (InstallOptions.dll) - ИМХО ! устаревшая и неудобная вещь(плаг). |
kotkovets, подскажи
Код:
Section "-установка" |
Цитата:
Код:
${If} $Check == 1 |
Эт я в курсе! Но надо чтобы еще если выбран другой радиобутон $Radio1 и этот же чекбокс и на х86 и на х64 создавался ярлык на файл TOTALCMD.EXE!
|
Цитата:
Код:
|
kotkovets, как сделать в nsDialogs такую рамку например вокруг групи чекбоксов?
![]() |
Цитата:
|
kotkovets, добрый день.
Вот здесь вы отвечали на мой вопрос о выборе одного компонента из группы секций http://forum.oszone.net/showpost.php...postcount=2705 Пожалуйста, скажите как теперь создать секцию, которая не зависела бы никак от группы секций, где предусмотрен выбор одного компонента. А то сейчас получается так, что при установке флажка на новую секцию, автоматически устанавливается флажок и на группе секций... Мне же нужно, чтобы при установке флажка на созданную секцию флажок на группу не ставился бы, т.к в группе секций пользователь должен сам отметить нужный компонент.... А сейчас код настроен таким образом, что считываются абсолютно все секции, включая ту, которую я бы хотел сделать независимой. Вот ниже ваш код, где я добавил независящую секцию (курсивом выделил)... Если Вас не затруднит - подправьте в коде что необходимо для реализации моей просьбы. Большое спасибо. Код:
OutFile "example.exe" |
Olef2387, ничего дальше путного, стандартными методами не получится...
для этого нужно плаг писать - нет желания. |
Хорошо, ну всё равно спасибо.
Подожду K.A.V'a, может быть он что-нибудь сообразит :) |
Добрый день!
подскажите как узнать есть ли у пользователя права администратора? IsUserAdmin утверждается, что старый макрос что испольщовать сейчас? |
Цитата:
--- в справочнике --> UserInfo: Определение типа учетной записи и правами по этому же движку работает плаг, тока удобнее пользоваться. |
kotkovets,
подскажите пожалуйста в чем допущена ошибка? Сделал так: Код:
Function Find При деинсталляции и новой установке все нормально. Реагирует на наличие любого файла в папке. Сообщение выводится $R0= |
Цитата:
указанной папки для поиска - не существует, а если папка пуста, то флага ошибки нет. Соответственно в переменной $R0, после завершения работы макроса, оказывается последнее значение (функция Find вызывается в макросе циклически, пока не будет найден последний файл), а если папка пуста ???!!! |
Цитата:
Код:
Section |
Цитата:
да еще размерам файлы равным 1024 байтам (/S=1K) ? делается очень просто, если папка есть(или нет), но нет файлов нужных - $R0 = 0, иначе в $R0 количество найденных файлов Код:
Function Find |
Цитата:
У меня условие прописано: ${Locate} "$PROGRAMFILES\CyberLink" "/L=F /M=PowerDVD* /S=" "Find" Цитата:
|
Сделал так:
Код:
Function Find |
wolkow70, Лучше и надежнее так, сравнение, когда $R0 > 0, работа с целочисленным типом.
Код:
Function Find |
Приветствую. Знающие люди, подскажите пожалуйста как реализовать следующие задачи:
1. Как сделать чтобы поле выбора папки установки было затемнено(неактивно)? 2. Как сделать чтобы инсталлятор брал файлы из той же папки где лежит он сам? |
Цитата:
Цитата:
ЗЫ. че наверно за зря писал красным в шапке темы... |
kotkovets, ну просто захотелось сделать недоступной выбор папки без искючения из скрипта. Это возможно? А справку я читал, не нашел там ответа на свой вопрос, ткните носом где там это описано. Я с nsis'ом знаком всего пару дней, не ругайте сильно за нубство:-)
|
Цитата:
Код:
!include "MUI2.nsh" |
kotkovets, спасибо, запрет выбора папки работает, но второе не то что мне нужно, мне не надо чтобы файлы устанавливались туда же, где запущен инсталлятор.
Мой путь installdir берется из реестра. Мне нужно вот что: в папке с инсталятором лежит файл, нужно в секции прописать чтобы этот файл всегда брался из директории где лежит инсталлятор. Через File "$EXEPATH\мой файл.txt" не выходит, ошибка файл не найден |
Vincent7, читайте до дыр команду - File
|
Вложений: 1
Во первых хочу поделиться примером вызова функций из библиотеки dll, написанной на vb .net.
Во вторых - может кто знает, как написать плагин для nsis на визуал бейсике .net. |
Цитата:
Вам нужно, чтобы при отметке отдельной секции (в примере "Независящая секция") не отмечалась секция в группе или что? Цитата:
В основном же, плагины к NSIS написаны на С++ (ну а там впринципе ничего сложного для С программиста), возьмите поскачивайте плагины со странички http://nsis.sourceforge.net/Category:Plugins Возможно, какой-либо плагин и написан на нужном вам языке, практически все плагины с исходниками Либо задайте вопрос на англоязычном форуме в разделе NSIS :) |
john_ylygovich_sora@vk,
на бейсике жесткая привязка к платформе .NET - что не гоже, размер библиотеки 13.5 кб!!! Да еще таскать собой CLR.dll ?????????????????? если, честно в топку! куда лучше, гибче в тысячи раз писать на с (с++) - примеров очень много. такой пример на си как минимум 5 кб, т.е ничего лишнего не пихается в код, чем на бейсике. |
Цитата:
|
kotkovets, изучил, все работает, спасибо. Теперь еще вопросы:
1. Можно ли увеличить окно выбора компонентов? 2. Как работать со строкой 'требуется на диске: ' как написать туда свое значение например при выборе одного компонента, приписывалось 2 mb, и к этому значению прибавлялись другие значения выбранных компонентов? |
Vincent7, справкой для начала научитесь пользоваться.
|
А вам сложно ответить чтоли?
|
Цитата:
2. А мы что, попугаи, чтобы повторять одно и тоже и здесь, и в справочнике? 3. А для чего создан справочник? Чтобы такие как вы (задам быстренько вопрос и воспользуюсь Ctrl+C) смогли найти ответы на большинство вопросов 4. Ленивых мы не любим, так что если вы сами не хотите ни в чем разбираться, а хотите "всё готовенькое", то вы ошиблись форумом Цитата:
Возможно, можно будет его каким-то образом усовершенствовать для "универсальности", но пока что нет желания этим заниматься :) Вроде бы, работает так как нужно ;) Код:
OutFile "example.exe" |
K.A.V,
1. Подробнейшая документация как вы изволили выразится, вовсе не такая подробная, или я не прав? 2. Я говорил, что я знаком с nsis всего несколько дней, поэтому справке могу что либо непонять, поэтому и спрашиваю сдесь. 3. Какой смысл в форуме если есть 'подробнейшая документация' , напишите в шапке темы 'обратитесь к документации чтобы решить вопрос, который вам необходим' , и попугаями быть не придется. Извините. Я вас понимаю, но и вы поймите меня, не просто брать ответы на вопрос новичку из документации в которой еще не все понимаешь. |
Цитата:
Цитата:
В справке описано то, что вам нужно, поэтому мы из принципа не будем здесь заниматься копированием информации из файла справки Цитата:
Прочитайте эту тему, я уже не раз заводил разговор на эту тему, мы вам можем помочь на сколько у нас хватит знаний, но мы не желаем делать всё за вас, просто потому что вам просто напросто лень прочитать документацию на русском языке Цитата:
=== Цитата:
Либо редактируйте с помощью ResHacker *.exe файл оболочки (по умолчанию modern.exe), диалог 104 Файлы оболочки находятся в папке \NSIS\contrib\UIs Цитата:
Инсталлятор автоматически добавляет необходимое для файлов свободное место на диске при отметке секций, главное чтобы распаковка файлов была прописана в самой секции Либо пользуйтесь командой AddSize в секции, чтобы добавить необходимое свободное место на диске для установки компонента |
Уточните пожалуйста разницу по справке:
Параметр /oname позволяет переименовать файл: SetOutPath "$INSTDIR" File /oname=файл.exe file.exe Если хотим распаковать переименованный файл, к примеру в папку Windows, то пишем: File /oname=$WINDIR\файл.exe "C:\Install\file.exe" Если я пишу в скрипте: SetOutPath "$LOCALAPPDATA\LightAlloy" File /oname=$LOCALAPPDATA\LightAlloy\LA.xml "${pkgdir}\Light Alloy\LA1.xml" Это ошибка или не рациональный код? |
Цитата:
|
Цитата:
Получается, что команды идентичны: File /oname=$LOCALAPPDATA\LightAlloy\LA.xml "${pkgdir}\Light Alloy\LA1.xml" SetOutPath "$LOCALAPPDATA\LightAlloy" File /oname=LA.xml "${pkgdir}\Light Alloy\LA1.xml" И можно написать и так и сяк. |
Цитата:
А Функция будет на всех системах работать или возможны ошибки? ещё у меня также есть скрытая секция в скрипте, которая всегда работает и непоказывается в списке компонентов. Она никак не нарушит скрипт? Ну и ещё по мелочи: если поставить галочку на "Независящей секции", то эта галочка никак не убирается пока не поставишь галочку на одной из секций в группе... |
Цитата:
Цитата:
Цитата:
|
Цитата:
А у Артёма просто нельзя убрать галочку с независящей секции пока не поставишь галочку на секции в группе. Когда поставишь галочку на секции в группе, то галочку с независящей секции уже убрать можно и другую секцию в группе тоже можно выбрать . з.ы Запутано, но всё так и есть. Наблюдал специально)) |
Цитата:
Если проблемы с экспортом функций, то напишите, что экспортировать. А clr.dll ни кто с собой таскать не будет :) |
Цитата:
изучите си на примерах, я уверяю вы сами переведете, хотя врядли посчитаете это нужным :) |
Цитата:
Код:
OutFile "example.exe" |
Приветствую. Нужна помощь, я использую плагин nsis7z для распаковки архивов, можно ли через функцию callback, сделать чтобы при распаковке было вот как на скрине http://upwap.ru/2552952
|
Цитата:
Цитата:
достаточно прописать вне функции или секции: Код:
ShowInstDetails show Код:
SetCompressor /SOLID LZMA |
Ясно. Спасибо за обьяснение. Теперь еще одно, как создать вот такую страницу: http://upwap.ru/2553232
|
Vincent7, это Ваш инсталлятор или чужой?
|
|
Друзья, подскажите, как сделать CheckBox или RadioButton неактивными? В теме пишут, что примеры уже были, но найти не могу...
|
Цитата:
Код:
EnableWindow [xэндл контрола] 0 |
Да, инсталлятор не мой, но я хочу сделать подобный. kotkovets, у меня пока отключен интернет, пишу с мобильника, и искать примеры среди 278 страниц с него довольно сложно. Подскажите хотябы на каких страницах примеры. Еще вопрос - если есть плагин, но нет описания для него, можно узнать как им пользоватся?
|
Еще ткните носом, в справочнике тоже не нашел - можно ли на MUI_PAGE_FINISH скрыть (сделать неактивной) кнопку "Назад"?
Проблема в том, что перед финишной страницей помещена пользовательская |
kotkovets,
Подскажите плиз как проще сделать ? Код:
Function .OnInit |
Цитата:
Код:
Цитата:
Код:
;--- |
Цитата:
${WordReplace} $R0 "%programfiles%" "$PROGRAMFILES" "+" $R1 |
Если так сделать?
Код:
${If} ${RunningX64} |
Цитата:
$PROGRAMFILES, $PROGRAMFILES32, $PROGRAMFILES64 The program files directory (usually C:\Program Files but detected at runtime). On Windows x64, $PROGRAMFILES and $PROGRAMFILES32 point to C:\Program Files (x86) while $PROGRAMFILES64 points to C:\Program Files. Use $PROGRAMFILES64 when installing x64 applications. Поэтому расписываю отдельно. |
Вот еще интересно:
Насколько оправдано использование хедера MoveFileFolder? http://nsis.sourceforge.net/MoveFileFolder Имеет ли он какие либо преимущества перед коммандой Rename $INSTDIR\file.ext $INSTDIR\file.dat ? |
Цитата:
вложенные каталоги с файлами. |
kotkovets,
Существует ли какой-либо сопособ (плагин например) разлочить занятый эксплорером файл. Например по пиду процесса (подобно анлокеру). Выясняется, что залоченный файл RarExt.dll (или аналогичные) можно в процессе деинсталляции переименовать напрмер в RarExt.dll.0.tmp переместив в папку TEMP, и удалить программную папку без перезагрузки. Это дает возможность сразу переустановить программу без перезагрузки. Но хочется уже в папке TEMP как-то добить этой файл, так как его удаление требует все-равно перезагрузки или перезапуска экспорера. Еще задачка перед перемещением файла проверить временную папку на наличие файла с таким же именем, и если есть то переименовать RarExt.dll.0.tmp в RarExt.dll.(номер).tmp и задать комманду на удаление. |
загруженная в оболочку проводника делка работает по пидом :) проводника.
Остальное, что вы пишите и видете - просто скрытие от глаз, что типа библиотека удаляется... (хотя можно удалить физически файл, но это зависит от разработчика библиотеки, какие функции он всунул при разрегистации библиотеки) в оперативной памяти загруженная библиотека остается, до перезагрузки компа/оболочки. вообще это оффтоп, поэтому обсуждение не хочу продолжать - написал так, как я считаю. |
del
|
|
kotkovets,
ага, а макрос в какую часть кода лучше вставить? в начало? |
kotkovets,
Подскажите плиз где ошибка в функции - счетчик не меняет значения Код:
Function un.RarExt |
Цитата:
Цитата:
Код:
${If} ${FileExists} "$INSTDIR\RarExt.dll.0.tmp" |
Цитата:
1. Если нет файла $INSTDIR\RarExt.dll.0.tmp, то файл $INSTDIR\RarExt.dll переименовывается в $INSTDIR\RarExt.dll.0.tmp Это в приведенной функции работает. 2. Если есть $INSTDIR\RarExt.dll.0.tmp, то он переименовывается в "$INSTDIR\RarExt.dll.$2.tmp", а файл "$INSTDIR\RarExt.dll" переименовывается в $INSTDIR\RarExt.dll.0.tmp Это не работает. Нумерация файла в $2 не меняется. |
Цитата:
Код:
${If} ${FileExists} "$INSTDIR\RarExt.dll.0.tmp" 1. Если есть RarExt.dll.0.tmp, то $2 уже будет равен одному. 2. Все последующие файлы с именем RarExt* будут увеличивать на единицу переменную $2 3. Если таких файлов будет больше двух, будет переименовываться последний найденный. --- или так все таки лучше :) вскидка на дальнейшее размышление... Код:
${If} ${FileExists} "$INSTDIR\RarExt.dll.0.tmp" |
Цитата:
|
тренер
Код:
!include "MUI2.nsh" |
kotkovets, вы ответите на мой вопрос?
|
Цитата:
--- Сами то что сделали по вопросу - не вижу ничего... |
Цитата:
С WinRar вот как стоит задача: При удалении программы RarExt.dll переименовывается в RarExt.dll.0.tmp. При этом RarExt.dll.0.tmp и остается залоченной в оперативной памяти. Это позволяет продолжать работу с программой при обновлении или переустановке программы. Только после перезапуска оболочки полномочия переходят к новой делке. При этом, если в папке с программой уже есть файл с наименованием RarExt.dll.0.tmp, то при следующей деинсталляции RarExt.dll переименовывается в RarExt.dll.1.tmp и т.д. |
Цитата:
|
Цитата:
Код:
StrCpy $2 -1 Помещаю код в функцию: Код:
Function un.RarExt Call un.RarExt Не работает. Точнее переименовывает в первый раз. А потом показывает integer -1. Кладу в папку тестер, запускаю, все срабатывает. Почему из функции не работает, не понятно. |
А можно как-то редактировать значение параметра в xml файле?
|
Цитата:
а текущая директория, где находится деинсталлятор, точнее откуда он запущен, процесс деинсталлятора "раздваивается", что бы удалить самого себя --- Ivn78, Можно, если представить, что это обычный текстовый файл. есть плагин, но довольный тяжелый в плане изучения/применения. http://nsis.sourceforge.net/XML_plug-in |
Цитата:
|
kotkovets,
Цитата:
нужно заменить значение Patch Код:
<NotepadPlus> |
Цитата:
Код:
${StrRep} |
Цитата:
|
kotkovets,
Цитата:
http://forum.oszone.net/post-1936249.html#post1936249 |
Цитата:
|
kotkovets,
Весь день бился с проблемой - решилось постановкой ClearErrors перед началом кода. Код:
ClearErrors |
Цитата:
|
wolkow70, Там проблема с количеством строк, оно может быть разным. Но попробую прикрутить.
А как можно переименовать уже установленный (не при распаковки) файл? |
|
Цитата:
Rename "$INSTDIR\Ext.dll" "INSTDIR\Ext.dll.bak" |
kotkovets, как сделать неактивным поле выбора папки на кастомной странице?
|
Vincent7, как прочитать пару предыдущих страничек темы? например 278...
|
kotkovets, kotkovets, ага, сделал, но фон поля остался белым, а нужно чтобы был серый как тут http://upwap.ru/2553232
Как сменить цвет? И как вы звать 'свободно/требуется места на диске' опять же как на скрине? |
Цитата:
а то я не знаю.... у меня всегда серый :) или белый :) |
kotkovets, вот так: nsDialogs::SelectFolderDialog /NOUNLOAD $9 "$R0"
Pop $R0 GetDlgItem $R0 $HWNDPARENT 0 EnableWindow $R0 0 |
Vincent7, а причем тут выбор папки??????????????????????????????????
Если SelectFolderDialog возвращает выбранную папку (путь к папке) иначе error Код:
nsDialogs::SelectFolderDialog /NOUNLOAD $9 "$R0" Цитата:
может вам почитать справочку на русском -» nsDialogs: Создаем собственные страницы инсталлятора И не делать и писать глупые сообщения, я не попугай, каждый раз повторять одно и тоже |
kotkovets, В русском справочнике не так много информации по плагину nsDialogs как хотелось бы, я английский читал. Да вы правы, глупость я написал, но с полем я разобрался. Осталось последнее, реализовать надписи 'свободно/требуется места на диске' как на скриншоте. Как их вызвать?
|
Из СПРАВКИ:
Код:
Макрос ${AndIf} сработает (при выполнении условия равенства в ${AndIf}) в том случае, Код:
Пример на макросе ${IfNotThen}: |
Цитата:
Здесь нужно правильно раставить логику, просто размышлять логически. AndIf - логика И, срабатывает при выполнении двух условий, типа, если только палка колбасы и сарделька, условие выполнения наличие двух продуктов... OrIf - логика ИЛИ, срабатывает. если одно из условий выполняется, независимо от другога, к примеру, если палка колбасы ИЛИ сарделька...достаточно имения одного из перечисленных продуктов. чтобы условие выполнилось. Цитата:
то же самое для чисел с одной командой Код:
${If} 5 != 6 Код:
${IfNot} колбаса == колбаса |
С макросами ${AndIf} ${OrIf} ${IfNot} в общем понятно.
Не понятно ${IfThen} ${IfNotThen} Например в такой логике : ${IfThen} ${RunningX64} ${|}SetRegView 64${|} Здесь выполняются комманды ${IfThen} ${RunningX64} ${|}SetRegView 32${|} |
Цитата:
Код:
${If} $0 == 5 |
kotkovets, я так понимаю, с моим вопросом вы не поможете?
|
kotkovets,
Возник вопрос по использованию ${Errors} в логических конструкциях Код: Код:
ClearErrors |
Цитата:
Код:
ClearErrors Кстати, очень часто попадает в файле такая строка: Код:
[System] Поэтому из полученной строки, лучше всего брать только первый символ и затем под логику отдавать: Код:
StrCpy $0 $0 1 |
Цитата:
|
Цитата:
|
Что-то не найду в справке как после команды
WriteINIStr имя_файла "секция" "параметр" "значение_параметра" создать пустую следующую (или последнюю) строку. |
Цитата:
$\r --> переход каретки на новую строку $\n --> создание новой строки Код:
WriteINIStr $EXEDIR\test.ini "test" "test" "test$\n" |
kotkovets,
Возникло два практических вопроса: 1. Как действует флаг типа SetOverwrite on - в пределах секции? - применительно к конкретной команде? - На протяжении всего скрипта? - Пока не будет заменен другим флагом? 2. Существует ли несложный способ перед указанием команды RMDir /r "$INSTDIR" проверить не является ли удаляемая папка важной папкой Windows (типа $SYSDIR, $WINDIR, $APPDATA, $PROGRAMMFILES и т.п.? |
Цитата:
- Пока не будет заменен другим флагом К командам распаковки во время инсталляции - перезаписывать файл или нет(заменять новее старый файл) Цитата:
Код:
${If} $INSTDIR == $SYSDIR |
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Добрый день! Выбирается ПО для создания инсталляции. Предполагается долгосрочное использование данного ПО для распространения большого количества разрабатываемых программ (организация). Очень нравится NSIS по своим возможностям. Но смущает, что текущая версия от 2009 года. Что вы можете сказать по поводу проекта NSIS: он еще жив, будет развиваться или как?
|
Цитата:
Насчет развития: или как..:) |
Цитата:
|
Цитата:
|
Цитата:
А так, из проекта ушел главный разработчик, так что будет новая версия или нет толком неизвестно. Как по мне, так у NSIS достаточно своеобразный синтаксис, в который сразу тяжело въехать. За то есть огромная куча плагинов, через которые реализовано очень многое. |
Отписал на оф. сайт. Получил вот такой ответ:
There wasn't a release, but SVN is being updated in the background. A new release will hopefully be coming soon. No timeframe is available. Amir Szekely Надеются, что новый релиз будет позже, но сроков назвать не могут. Вобщем буду думать... Спасибо всем за ответы! |
kotkovets, помогите советом.
Наблюдаю такую проблему: От случая к случаю в инсталляторе сбрасывается флаг SectionIn RO при коцании по другим чебоксам. При этом до перезапуска инсталлятора вернуть его снова не удается. Совершенно недоумеваю по какой причине это может происходить. Причем иногда сбрасывается, иногда нет. Section "!${PRODUCT_NAME} (установка программы)" Install SectionIn RO ---бла---- SectionEnd PS: Обнаружил, что баг повторяется с несколькими инсталляторами, в скрипте которых был применен генератор ответов. |
wolkow70, думаю, после всех сообщений в данной теме по работе с секциями (и с помощью информации в файле справки), вам не составит труда в функцию .onSelChange прописать команду на присвоение флагов (только чтение | отмечен) для даной секции
|
Цитата:
Писал в Function .OnInit IntOp $R0 $R0 | ${SF_SELECTED} SectionSetFlags ${Install} "$R0" Не помогает. Все равно, иногда сбрасывается. |
wolkow70, проблема со всем другом и не стоит гадать на кофейной гуще.
скрипт (без файлов) в студию...и будет все видно |
|
Цитата:
Код:
Так же вы можете использовать варианты типа таких: Что касается функции: .onSelChange то она у меня имеет такой вид: Код:
Function .onSelChange Section "!${PRODUCT_NAME} (установка программы)" Install SectionIn RO |
Цитата:
Я же вам ясно написал, пропишите в секции команду на установку флага секции, может и поможет Код:
Function .onSelChange |
Цитата:
Представляется мне, что такой проблемы вообще не должно быть Цитата:
|
K.A.V., приветствую. Я попробовал, но неполучилось . Посмотрите, пожалуйста скрипт и скажите что я делаю не так..
http://upwap.ru/2571536 |
Vincent7, функцию "r" переместите ниже секций, в которых прописаны файлы для упаковки в инсталлятор, вы в функции используете идентификаторы секций, которые в скрипте не определены ДО функции "r", в этом и есть ошибка
|
K.A.V., Спасибо вам огромное, все заработало!
|
K.A.V., а если секций не 2 а 8, как тогда сделать?
|
kotkovets, помогите пожалуйста с одним вопросом.
В скрипте: Insttype "Стандартная установка" # SectionIn 1 Insttype "Распаковка портативной версии" # SectionIn 2 Не нужные секции для портативной распаковки я отключил. SectionIn 1 Вопрос возник с секцией: Section "!${PRODUCT_NAME} (установка программы)" Install SectionIn RO Там есть комманды, отвечающие за распаковку файлов, и есть комманды на внесение записей в реестр. Как то можно из секции прочитать текущий тип установки, и если он "Распаковка портативной версии", то после распаковки пропустить комманды до конца секции по метке? |
wolkow70, для этого создается кастомная страничка с двумя радиобутонами:
1) стандартная установка 2) рапаковка портативки. далее снимаются статусы радиобутонов и в секциях сравниваются состояния радибутонов для инсталляции/рапаковки. Цитата:
|
Цитата:
|
|
Цитата:
Как это реально применить? |
Цитата:
Код:
Insttype "Стандартная установка" # SectionIn 1 |
K.A.V., начал делать с восемью секциями, у sectiongetsize идентификаторы $1-8, а как тогда поставить идентификаторы к getflags?
|
|
K.A.V., ну да тоесть переменными, извиняюсь перепутал. теперь getsize $1-8, get3lags $R1-8, strcmp и strcpy тоже по аналогии сделал, но как это все сложить в oninit?
|
Vincent7, ну раз вы смогли всё сложить, почитайте ещё раз наш русскоязычный справочник по NSIS, а именно страничку "Логические конструкции", а потом попытайтесь их применить в вашем скрипте, если всё равно не получится, покажите результат того, чего вы написали
|
kotkovets,
Что-то не работает с RegistryFunc.nsh такая конструкция: ${IfNot} ${KeyExists} "${HKCU}\Software\Classes\.${extenstion}" ${AndIfNot} ${KeyExists} "${HKLM}\SOFTWARE\Classes\.${extenstion}" WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "UniExtract" ${EndIf} Сделал так, работает: ${If} ${KeyExists} "${HKCU}\Software\Classes\.${extenstion}" ${ElseIf} ${KeyExists} "${HKLM}\SOFTWARE\Classes\.${extenstion}" ${Else} WriteRegStr HKLM "SOFTWARE\Classes\.${extenstion}" "" "UniExtract" ${EndIf} |
Как определить есть ли в указанной дирректории вложенные дирректории?
|
Цитата:
|
Цель есть или нет вложенные папки пустые или нет мне неважно
|
Цитата:
Код:
System::Call "Shlwapi::PathIsDirectoryEmpty(t'путь к папке')i.R0" |
kotkovets, Спасибо
но мне нужно чтобы в папке небыло папок а файлы могут быть Точнее задача: Если в папке есть другие(вложенные) папки то удалять папку нельзя, в противном случаи удалить эту папку и все имеющиеся в ней файлы |
Цитата:
Код:
!include "FileFunc.nsh" --- зы. каждая пустая папка увеличивает $R0 на единицу. |
Возник вопрос по радиобуттонам:
имею в скрипте: Код:
Var 7ZRBTN |
Цитата:
Код:
!insertmacro RadioButton ${7ZAssoc} |
Цитата:
Просто интегрировать в контекстное меню (два варианта - сокращенный и расширенный), или ассоциировать с файлами. При нажатии 7ZAssoc должны отключаться 7ZContextMinimal и 7ZContextFull. Они и отключаются. Но затем если на чебоксе группы секций 7zContext поставить галочку, то активными становятся обе включенные подсекции, а нужно только 7ZContextMinimal . |
wolkow70, читайте с где-то страниц 20 назад там есть решения.
|
Цитата:
Это ? SectionSetFlags ${IDS_1} ${SECTION_OFF} ;фиктивно отключаем группу ? |
Цитата:
-- ЗЫ. Поэтому такие вопросы решаю через свои странички: просто и комфортно. |
Несложный вопрос.. :)
Кодек DivX.dll на 32-разрядной ОС распаковывается WINDOWS\system32 Пишу SetOutPath "$SYSDIR". А на 64-битной распаковывается в WINDOWS\SysWOW64. Как тут правильно путь прописать? |
Цитата:
|
Так сделал.
Код:
SetOutPath "$SYSDIR" |
kotkovets,
Пока делаю так, (из вашего примера): Код:
${If} ${RunningX64} Думаю, как красивее можно сделать? Таким образом нормально? Код:
${If} ${RunningX64} |
Цитата:
Цитата:
Код:
${IfThen} ${RunningX64} ${|}SetRegView 64${|} |
kotkovets,
Нормально. Получается, что такую логику можно применить и к такой конструкции? ${If} ${RunningX64} ${EnableX64FSRedirection} File "${pkgdir}\DivX\DivX.dll" ${DisableX64FSRedirection} ${Else} File "${pkgdir}\DivX\DivX.dll" ${EndIf} У меня вызывают затруднение такие символы ${|}, что и в каких случаях ими выделяется? |
Цитата:
функция API, которой нет в х32. Цитата:
Код:
${If} ${RunningX64} Код:
${IfThen} ${RunningX64} ${|} SetRegView 64 ${|} |
Товарищи, что-то не собирается инсталлятор с таким вариантом выбора типов деинсталляции:
InstType "un.Полное удаление MyApp" /NOCUSTOM InstType "un.Удаление компонентов MyApp" Смысл такой хочу придать: Есть секция: "Un.Полное удаление" И секции "Un.Удаление компонента 1" "Un.Удаление компонента 2" "Un.Удаление компонента 3" При выборе типа удаления "Полное удаление" должна быть активна только секция "Un.Полное удаление", остальные секции не активны без выбора. При выборе "un.Удаление компонента" первая секция не активна без выбора, остальные доступны для выбора, но не активны по умолчанию. Прошу помощи. |
Цитата:
Читайте посты, читайте справку, вся информация по секциям есть, всё можно сделать! А уж обычное присваивание флага секциям, если 1 секция отмечена, что может быть проще после всех примеров в этой теме???? От вашей лени я уже в шоке Цитата:
|
А это как раз из Справки пример.
InstType "Полная" /NOCUSTOM - отключает возможность самостоятельного выбора пользователем компонентов. Пишу в скрипте InstType "un.Полное удаление MyApp" /NOCUSTOM Но, компилляция не происходит. Цитата:
|
Цитата:
Вам необходимо использова функцию: Код:
Function .onSelChange GetCurInstType (пару страничек назад я про неё рассказывал, не помню кому делал пример) SectionSetFlags Я вижу этот код уже перед глазами даже без наброска, там буквально пара строк... |
Цитата:
В справке указаны возможные параметры /NOCUSTOM, /CUSTOMSTRING, /COMPONENTSONLYONCUSTOM. |
K.A.V.,
Пришлось таки делать через Function un.onSelChange. И еще в Function un.onInit прописать комманды для инициализации значений при запуске деинсталлятора. Кто-нибудь подскажет, как из выпадающего списка типов инсталляции убрать "По выбору", дабы его не было вообще? |
Цитата:
Цитата:
Создайте "пустой" Insttype Код:
Insttype /NOCUSTOM |
C деинсталлятором такой вариант не проходит:
InstType un. /NOCUSTOM Usage: InstType [un.]install_type_name | /NOCUSTOM | /CUSTOMSTRING=str | /COMPONENTSONLYONCUSTOM |
Цитата:
Либо делайте свою страничку с выбором типа удаления (что более разумно на мой взгляд) Либо, можно вот так "извратиться" над NSIS (вроде бы работает) Код:
InstType "un.Полное удаление MyApp" И обратите внимание на SectionIn 3 на циферку 3, это будет тип удаления "Удаление компонентов MyApp" Запустил, проверил, вроде работает...Ну а обработку типа удаления в коде, я думаю вы уже сами определите, пример команды я давал здесь уже |
K.A.V.,
При таком варианте: InstType "un.Полное удаление MyApp" InstType "/CUSTOMSTRING=Удаление компонентов MyApp" в функции типа: Код:
Function un.onSelChange C вариантом : InstType "un.Полное удаление" InstType "un.Удаление компонентов" Возврат значений был 0 , 1 , 32 Код:
Section Uninstall Uninstaller |
Цитата:
Не забудьте подключить Код:
!include WinMessages.nsh Код:
Function un.onSelChange 0 - Полное удаление MyAp 1 - Удаление компонентов MyApp |
Код:
Function .onSelChange |
У кого есть возможность протестировать спец. билд NSIS на 64-bit системе?
https://bitbucket.org/dgolub/nsis64/downloads Якобы, есть возможность обойти ограничение в 2 Гб, но только на 64-bit системе, у самого данной возможности нет, если кто сможет - протестируйте и сообщите сюда |
K.A.V., приветствую вас. Подскажите пожалуйста, как сделать чтобы на странице компонентов если не выбран ни один компонент, то кнопка 'далее' была неактивна?
|
Vincent7,
Уже был пример : http://forum.oszone.net/showpost.php...postcount=2705 |
MKN, a попроще нельзя ли как нибудь?
|
Цитата:
|
MKN, окей, возможен ли другой вариант для решения моей задачи?
|
Vincent7,
Цитата:
Кода будет побольше, но и гибкости с манипуляциями кнопкой, тоже поболее - результат тот же. |
Цитата:
Или вы думаете, зададите вопрос, а вам в ответ 10 разных готовых кодов предоставят, чтобы вы ещё и посидели и выбрали, какой же самый красивый? Вам предлагают решение, вам оно не нравится Вывод: делайте сами и делайте "что-то новенькое" КУДА ещё проще того кода, который вам предоставили??? Перечитать статусы всех секций и блокировать/не блокировать кнопку... Либо вам просто лень почитать справку и вникнуть в значение команд, больше к этому варианту склоняюсь как обычно Или у меня уже мания на лень людей, всех подозреваю :lol: |
K.A.V., тогда подскажите просто как заблокировать кнопку 'далее' на странице компонентов. Я так понимаю если сделать вот так -
СектионГетФлагс{секция} $Р1 {$Иф} $Р1==0 код блокировки кнопки {$ендиф} Сработает? :lol: |
Цитата:
|
K.A.V., отлично! Подскажете код блокировки?:)
|
Цитата:
Из принципа не дам готовый код |
K.A.V., Спасибо. Такой вопрос, можно ли сделать так - проверить наличие такой то папки, если она есть то такой то компонент сделать неактивным и не выбранным?
|
Цитата:
Для данного кода вам нужно использовать команды DirState SectionSetFlags |
Товарищи, насколько корректным является использовать переходы по безусловным меткам в логической конструкции? Например так:
Код:
${If} ${FileExists} "$EXEDIR\1.reg" |
wolkow70, а чем вам не угодили простые конструкции проверки файлов, типа таких...
Код:
IfFileExists "$EXEDIR\TEST1.log" label1 0 |
Цитата:
${If} ${FileExists} ${OrIf} ${FileExists} |
K.A.V., я сделал так http://upwap.ru/2620264
Код компилируется но инсталлятор не запускается, просто висит в процессах и все. |
Цитата:
Смотрите внимательно... у вас лишний "прыжок" на метку dlc_3, который и вызывает данное поведение инсталлятора Код:
${DirState} "$INSTDIR\BioGame\DLC\DLC_UNC_Pack01" $2 |
K.A.V., премного благодарен :)
|
K.A.V., а как можно подсчитать количество файлов в папке и ее подпапках? И можно ли сделать так чтобы развёрнутую группу нельзя было свернуть?
|
Цитата:
Что-то типа такого получится у вас (поставьте в поиск только файлы) Код:
; В начале кода Цитата:
Код:
!define SF_EXPAND 32 |
если кто знает помогите плиз. хелп (ру) весь прочитал но ответа не нашел.
при установке программы запускается тулбар.ехе и появляется его окно с предложением установить, НО его окно появляется на втором плане. как его вывести на первый план? что бы его окно появилось поверх моего инсталлера? Цитата:
п.с. а можно ли его окно (1 страница: установить/закрыть) вставить как страницу своего инсталлера (размеры одинаковые) ? (типа как ифрэйм в вебе:) ) спасибо |
Не могу найти способ решить такую задачу:
Код:
InstType "Сокращенная" Кто-нибудь может подсказать возможно ли это обойти ? |
Цитата:
|
K.A.V., с подсчетом разобрался благодарю вас за пример, а вот второй пример не сработал , ошибка SF EXPAND already defined
|
Цитата:
Цитата:
Код:
Function .OnInit Цитата:
Проще создать тогда отдельный архив с помощью 7-ZIP Цитата:
А группу нельзя заморозить стандартными методами, посмотрел сейчас, можно сделать максимум чтобы группа разворачивалась, когда отмечают какой-либо компонент, не более |
Цитата:
|
K.A.V.,
Цитата:
|
Цитата:
Просто в своём SFX Creator (он написан на NSIS) нацеливаюсь реализовать поддержку создания установок свыше 2 Гб данных + возможность многотомных архивов, делать думал с помощью консольной версии 7-Zip создавая отдельный архив (пока что всё только в теории) А если бы, можно было обойтись без консольной версии 7zip чтобы не таскать его за собой и использовать плагин, не уступающий в возможностях, то было бы здорово) Цитата:
Вы такие интересные, предоставляете какой то мизерный кусочек вашего кода и ставите вопрос, а мы сиди и думай, что же ещё у вас там в коде было прописано, т.к. честно, я ничего не понял из вышесказанного вами и вашего "кода", который не полный, секции у вас не все и функция .onSelChange тоже, наверно, не полная Поэтому я ничего сказать вам не могу...Гадать я не умею, предоставляйте полный код и спрашивайте, а "а может" а не знаю, может и "может", может и "не может" |
Цитата:
А скрипт большой слишком. Вряд ли кто-то разбираться будет в нем. |
Цитата:
|
Цитата:
Блин, wolkow70, ну раз секции не отмечены, в чем проблема самому при запуске назначить флаги то? Сложно? После всех то манипуляций с секциями в этой теме, что только мы тут уже с ними не делали... :biggrin: Код:
Цитата:
При не знании всё достигается путём тестов |
Для справки :
Появилась очередная бета NSIS Studio 2.1 beta - 17th July 2012. http://teejee2008.wordpress.com/ (устанавливать сначала 2.0 , потом 2.1 , в 2.1 похоже пропущен ряд файлов... ) Файлы здесь : http://www.mediafire.com/?gnm3d4czslqat Практической пользы от проги пока мало. До SFX Creator, ещё дорабатывать и дорабатывать... :) с NSIS Dialog Designer ( http://coolsoft.altervista.org/nsisdialogdesigner ) пока затишье. Остановился автор на v.0.9.16 - 2012-04-20, работаюшей через пень-колоду... Но задумка оч. хорошая... обновился плагин nsKeyHook plug-in 1.0.0.1 - 12th July 2012 http://nsis.sourceforge.net/NsKeyHook_plug-in обновился NsJSON plug-in 1.0.0.1 - 1st July 2012 http://nsis.sourceforge.net/NsJSON_plug-in (JSON - JavaScript Object Notation http://www.json.org/) обновился LockedList plug-in 2.6.1.4 - 12th July 2012 http://nsis.sourceforge.net/File:LockedList.zip |
Цитата:
Какой FrameWork нужен этой программе? У меня постоянно вываливаются ошибки в программе и программа не работает как нужно Удобная, лучше чем SFX Creator, по функционалу так посмотреть и не удалось |
Цитата:
FrameWork используется 2 и 4 (судя по обращению к mscor*.dll |
Цитата:
В таком виде: Код:
Function .OnInit Во, первых, по умолчанию снова стал запускаться InstType "По выбору" Во, вторых секции радиобутона при запуске обе отмечены. Оставил только SectionSetFlags ${MultiUser} 1 радиобутон стал запускаться правильно, но тип установки "Сокращенная" по умолчанию не вернулся. Поменял последовательность команд так: SectionSetFlags ${MultiUser} 1 SetCurInstType 0 тип установки "Сокращенная" по умолчанию вернулся, но секции радио-буттона опять не отмечены. Вывод напрашивается такой: Команды SectionSetFlags ${MultiUser} 1 и SetCurInstType 0 не совместимы между собой. Работает в зависимости от последовательности или одна или другая. Видимо, прав был kotkovets , что в таких ситуациях лучше делать собственную страницу, только не хочется с этим заморачиваться, до сих пор удавалось без них обходиться. |
wolkow70, вы что тут мозги то подурите, я не понимаю?
Вам что от скрипта надо то в итоге??? Тип установки у вас "Скоращенная", ну так прописывайте в секции команду соответствующую "SectionIn 1" например или как там у вас, чтобы были отмечены секции, которые в данном типе установки Вы серьёзно, запутали своими "требованиями", в итоге не понятно, что вам нужно Сначала вы говорите, что не выбрана "Сокращенная", затем вы говорите, что не отмечены секции в группе радиобуттанов Что вам в итоге нужно то??? Такое ощущение, что вы сами запутались и не можете поставить свой вопрос корректно |
Цитата:
Вопрос был задан предельно просто (достаточно посмотреть пост с вопросом). Предложенное вами решение оказалось верным лишь отчасти, на что я и указал в предыдущем сообщении. То есть, одного этого решения оказалось недостаточно. Цитата:
Вопрос решился комбинацией решений: Код:
InstType "Сокращенная" |
Цитата:
|
Цитата:
В чем разница? Это проще, чем отлавливать процесс тулбара и манипулировать им |
K.A.V., такой вопрос, мне надо вывести результат такого то значения реестра в этом значении 20 символов,идут они подряд, прочитать я знаю как. Но, нужно вывести это значение так чтобы после каждого четвертого символа был знак - . Тоесть, значение допустим такое: ABCDEFGHIJKLMNOPQRST
А вывести надо так: ABCD-EFGH-IJKL-MNOP-QRST Как такое сделать? |
Цитата:
|
Цитата:
Наверняка есть и ещё варианты. |
Цитата:
Если сразу после запуска, и его окно оказывается на заднем плане, то просто запускай саму программу свёрнутой, а после отработки процесса тулбара продолжится выполнение программы (в свёрнутом состоянии) Если же , после выбора опций в тулбаре и его установки , должно продолжиться выполнение твоей программы с выбором опций, т.е. нужно появление её окна - то организуй скрипт так, чтобы запускалась первая "управляющая" скрипт-программа в свёрнутом виде, затем запускался тулбар, а по окончании процесса отработки тулбара должна запуститься основная программа. По моему это самое простое решение, если я тебя правильно понимаю... (Можно конечно отслеживать параметры и момент появления окна тулбара и окна самой программы, перефокусировать окна (делать активными) - но это будет гемор ещё тот... Разве что вклинишь в свой скрипт AutoIt_эшную приблуду. С AutoIt это будет сделать просто, но какая будет реакция антивирей на такую матрёшку... :) ) |
Цитата:
Как сделать что бы сворачивалось не сразу а через время (например 2 сек)? а то тулбар не сразу появляется (пока на сервер отправит с какой страны и получит какой тулбар показать проходит некоторое время) и следовательно это время пустой рабочий стол. Сейчас так: Цитата:
|
Цитата:
Код:
Sleep значение_в_миллисекундах Например... Код:
|
На кастомной странице есть пять TextBox_ов, в которые пользователь впишет необходимые параметры,
затем нажмёт кнопку "Create" и эти параметры должны записаться в INI файл в нужное место. Необходимо сделать кнопку "Clear" , ощищающую все записи во всех TextBox_ах, чтобы можно было записать следующую группу параметров в те же TextBox_ы, т.е. опять нажать копку "Create" и записать новые параметры в уже следующее место INI файла. Либо, чтобы после нажатия на "Create", появилось сообщение, типа , "Будут записана параметры : и эти параметры перечислены..." Далее ОК - процесс записи в файл - и последующая очистка TextBox_ов (без участия кнопки "Clear" ) И так много раз... И оч. желательно чтобы при установке была индикация-счётчик количества нажатий на кнопку "Create" Реально ли такое реализовать в NSIS и если да, то каким образом ? ps Вообще индикатор-счётчик различных событий-манипуляций в процессе установки, интересует меня давно. Чтобы на красивом табло менялись красивые циферки, а ещё лучше текст... Также интересует таймер запуска событий-заданий в заданное время и отсчёт времени (попросту часы) на странице установки. NSIS_у это "по зубам" ? :) |
Ну для всего этого, нужна какая-то callback функция (которая будет обрабатывать события нажатия клавишь), смотря с помощью чего ты делаешь диалог
Цитата:
Нужен Include Код:
!include "WinMessages.nsh" А потом послать сообщение WM_SETTEXT элементу текстбокса Пример узнавания Handle элемента когда кастомная страница сделана в InstallOptions Код:
ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 1" "HWND" Ну а сам счетчик там не сложно будет реализовать, сделай глобальную переменную и перед показом диалога (если он будет показываться несколько раз на протяжении работы программы) назнач значение 0, чтобы очистить предыдущий счетчик И после каждого нажатия на кнопку "Clear" просто плюсуй к значению этой переменной Код:
var MyCount Цитата:
|
K.A.V.,
Ещё такой момент - кастомная страница будет без дополнительного INI с описаниями Field_ов, кнопок и т.д. На такой странице - действия те же ? (а... понял через pop команды ? Но не совсем понял про глобальную переменную для счётчика-индикатора... ) |
Цитата:
Я его не знаю, но когда здесь кому-то помогал (вроде даже тебе с Total'ом там что-то мудрили :) ), то увидел, что каждому элементу можно назначить функцию callback для выполнения, если будет активирован элемент (нажат чекбокс или кнопка) Вот смотри взял из справки :) Код:
${NSD_CreateText} 0 20u 100% 15u "Здесь можно печатать..." Ну и оттуда же из справки, чтобы чуток примера, вот функия, которая будет очищать это же текстовое поле сразу же, как только ты будешь в него что-то писать Код:
${NSD_CreateText} 0 20u 100% 15u "Здесь можно печатать..." Цитата:
|
На финишной странице нужно разместить 2 чекбокса:
1) Создать ярлык на рабочем столе 2) Запустить программу Сейчас есть только один чекбокс, выглядит это так: !define MUI_FINISHPAGE_RUN !define MUI_FINISHPAGE_RUN_TEXT "$(^createDesktopShortCut)" !define MUI_FINISHPAGE_RUN_FUNCTION "createDesktopLink" подскажите как добавить второй? |
Kelinmiir, прочитайте, пожалуйста - Справочник по NSIS
Код:
!define MUI_FINISHPAGE_SHOWREADME_TEXT "Выполнить ещё одну функцию" |
Только у меня наблюдается такая проблема?
Поделитесь результатом... Пытаюсь создать установщик с MUI интерфейсом из всех доступных языков, в итоге, при запуске, пользователю не доступен весь список интегрированных в пакет инсталлятора языков, доступно только 13 языков Как-то рандомно получается список, пробовал оставить только 20 - вывод такой же, не показываются все 20 Список языков, протестите пожалуйста |
Цитата:
Код:
!define MUI_LANGDLL_ALLLANGUAGES из дока: Цитата:
Для корректности отображения всех языков требуется юникодная версия NSIS |
kotkovets, подскажи пожалуйста как сделать чекбокс на финиш странице отмеченным и затененным по умолчанию..тоесть что б галку невозможно было снять? Спасибо.
|
Цитата:
Какой смысл в чекбоксе, если пользователь не сможет изменить его состояние? Чекбокс как таковой - право выбора для пользователя, а вы лишаете его этого Какой тогда смысл в чекбоксе? Только для того, чтобы он знал, что после закрытия инсталлятора что-то запустится? |
Цитата:
|
diakov,
Для MUI2, делаем калбек при открытии финишной странички. Код:
OutFile "Basic.exe" |
kotkovets, огромное спасибо!
|
Подскажите пожалуйста, как реализовать такую задачу :
Есть два TextBox_а - TextBox1 и TextBox2 (или более двух) Есть две кнопки - Button1 и Button2 (или более двух) Необходимо, чтобы при каждом клике на кнопки (кнопки могут быть любые, клики могут быть мнгократные), данные ("привязанные" к этм кнопкам), заносились в тот TextBox, в поле которого находится курсор и конкретно в то место, где установлен курсор. Т.е. , в каком месте курсор в выбранном TextBox_е - там и фокус , туда и вставляются данные при клике на кнопки. |
Всем привет. Подскажите, как можно с помощью нсис сделать настройку сетевой карты (ип,маску, шлюз) и прописать маршрут (route add -p 10.10.0.0 mask 255.255.0.0 шлюз абонента)?
|
Cramac,
бОльшая часть сетевых параметров и настроек находится в реестре, о чём уже говорилось : http://forum.oszone.net/thread-120615.html http://forum.oszone.net/thread-87802-2.html http://forum.oszone.net/thread-72476.html http://support.microsoft.com/kb/314053/ru + несчесть инфы в сети. Соответственно, указывай нужное в скрипте. (сделай снимок реестра до, и после установки необходимых сетевых параметров) Или, по простому (если этого достаточно) - можно прописать в скрипте команду, устанавливающую сетевые параметры. |
Цитата:
Цитата:
Или ты рассчитываешь именно на то, что пользователь будет "кликать" только клавиатурой? Код:
NSD_OnClick |
Цитата:
В том и вопрос - возможно ли в NSIS, при переходе по элементам управления сохранять фокус курсора в текстбоксе ? Т.е. запомнить или заблокировать предыдущее установленное положение курсора ? Ведь в ряде программ, именно так и происходит - курсор моргает в одном месте, кликаем кнопку в другом - происходит вставка в местоположение курсора. Почему и как, там это можно ? Про NSD_OnClick NSD_OnNotify NSD_SetFocus - инфа крайне скупа и не очень подходит к моей ситуации (точнее вообще не подходит)... А NSD_SetFocus, даже "при рядовом" применении к элементу управления - почему то вообще может не работать... Спасает только System::Call "user32::SetFocus(i$HWNDPARENT)" , но опять же не всегда... И я в API не разбираюсь... Пока, как крайнее решение - при клике, данные заносятся в буфер, и вставляются в нужное место текстбокса, обычным образом, через контекст. Это дело работает, но громоздко в коде (во всяком случае, в том , который я обнаружил... ) Может есть более преемлемые варианты ? |
Цитата:
Цитата:
в компиллятор программы, для NSIS это равнозначно сторонний плагин писать, и брать оттуда (с плага функции) тем более эти функции нужно разработать и заточить под NSIS! А без 10-километрового кода это невозможно. Цитата:
например в гугле вбиваешь - WM_SETTEXT for nsis MKN опять же, без знаний API это невозможно делать... |
Цитата:
А SendMessage разве может помочь со вставкой в любое место, где находится курсор ? (Хоть в середину любого слова или предложения из слов, хоть куда... ) Именно так мне и надо, именно так я и сделал по примеру ${StrClb} (возможно не оч удачно) через буфер и контекст... Цитата:
|
Цитата:
А где курсор находится тоже можно узнать, сводится к тому, найти хендл элемента - кому "принадлежит" курсор... Цитата:
снова SendMessagе используем для вставки текста. Для текстовых контролов, надписей, кнопок есть же макросы: ${NSD_SetText} и ${NSD_GetText} |
Цитата:
Обычным образом, я устанавливаю курсор куда пожелаю и туда же делаю вставку, а если я при вводе текста (при чём разного и в процессе ввода изменяемого) десять раз передумаю куда поставить курсор - как отлавливать его положение в строке ? В NSIS нет такой функции - определить положение курсора. Или есть ? |
Цитата:
Я для SFX Creator когда писал DLL (всплывающее меню переменных), то там использовал функцию GetCursorPos, чтобы менюшка появлялась именно из того места, где находился курсор в момент нажатия на кнопку Я с System.dll не дружу, поэтому, может kotkovets тебе подскажет как описать вызов данной функции, чтобы получить координаты курсора мыши (X и Y), но не более...(а с координатами коретки вроде бы поможет функция GetCaretPos) Если писать плагин для NSIS, то функцию можно описать вот так: Код:
DLLIMPORT void GetCursorPositionMyFunc(HWND hwndParent, int string_size, char *variables, stack_t **stacktop){ Код:
cur_pos.x |
Цитата:
или http://forums.winamp.com/showthread.php?t=331631 Только там пишут : "The p pointer type does not work in 2.46" И я в этих API дебрях не разбираюсь... Ладно, тогда похороним задумку... |
подскажите плиз команду, которой можно свернуть все окна? (если такое возможно)
|
Цитата:
Код:
!include "WinMessages.nsh" |
Вопрос1 : возможно ли изменить размер чекбоксов (на стандартных и кастомных страницах ) ?
Вопрос2 : Если для стандартной страницы компонентов, графику чекбоксов можно назначить через !define MUI_COMPONENTSPAGE_CHECKBITMAP "*.bmp" то как это сделать для кастомной страницы ? |
MKN,
1) нет, на стандарте размер - да. 2) нет. Эти ресурсы берутся из системных библиотек и нет нормальной поддержки калбеков в nsDialogs, что бы заменить картинку. |
kotkovets,
Возможно ли на кастомной странице устанавливать/снимать запрет установки/снятия отметки чекбоксов ? (вариант с EnableWindow $CheckBox - не то ) |
Цитата:
Код:
SendMessage $HANDLE ${BM_SETCHECK} СТАТУС 0 СТАТУС - 0 = не отмечен ; 1 = отмечен |
kotkovets, подскажи в чем может быть проблема
Хочу в один инстальник запихнуть две проги клинер и дефрагер Ставлю InstallDir "$PROGRAMFILES64\Piriform" при установке например дефрагер ставлю SetOutPath "$INSTDIR\Defraggler", то есть при установке получается "$PROGRAMFILES64\Piriform\Defraggler", но когда в секции удаления пишу например Код:
Section Uninstall Парадокс...когда ставлю просто RMDir /r "$INSTDIR, то удаляет папку с файлами Defraggler, папку Piriform в PROGRAMFILES оставляет...тоесть делает то что нужно...но как то это не логично) |
Цитата:
|
Короче идея такая хочу запихнуть три проги в один инстал...сначала делаю файл деинсталяции для каждой отдельно...а потом привязываю его в секцию установки для каждой проги через
Код:
WriteUninstaller "$INSTDIR\CCleaner\название готово.exe" |
Или как можно умнее сделать?
|
Цитата:
Секция удаления общая одна....А вот привязать, что удалять, к папке программы и файлам программы элементарно: Например поставили одним установщиком Winrar и 7z - соответственно деинсталлятор в каждой папке. Код:
Section Uninstall |
Тогда получится что деинсталятор снесет обе проги...а у меня он сносит только ту что захотел пользователь не затрагивая функционала другой?
|
Цитата:
Цитата:
|
Цитата:
Главное деисталляторы должны быть в разных папках, а невложенных папках относительно одной папки. В каждую логическую структуру прописываем именно свои команды удаления, включая реестр и т.д. Ничего общего(по удалению) в каждом из трех деинсталляторов ничего не должно быть! Сам так делаю и пользуюсь давным давно... |
добро счас бду колдовать)
Догнал....я чето думал что будет запускаться глобальный деинстал...а запускаться будет локальные... |
|
Подскажите пожалуйста :
как удалить (или переместить) из папки все файлы (файлов много и они разные по типу и расширению), исключая - далее перечисление этих тоже разных конкретных файлов, которые должны остаться в папке. Что то наподобие действия : File /r /x *.res /x *.obj /x *.pch source\*.* (Manual 4.9.1.5. File ) но для операции удаления |
MKN, используй функцию Locate для поиска всех файлов и далее в callback функции Locate у тебя получится что-то типа такого:
Код:
Function Locate_callback |
Добрый день господа! Такой вопрос назрел после установки Ashampoo HDD Control запускаются два процесса AHDDC2_Service.exe и DfSdkS.exe и соответствующие им службы AHDDC2 и DfSdkS
![]() ![]() ![]() Как реализовать это в НСИС пробовал как то так Код:
nsSCM::Install /NOUNLOAD "AHDDC2_Service.exe" "AHDDC2_Service.exe" 16 2 \ "$INSTDIR\AHDDC2_Service.exe" "" "" "" "" |
diakov, Вас что именно смущает то? То, что описание разное или что? Объясните проблему более понятно, в чем у вас проблема
Как я понял из описания плагина nsSCM, он не умеет устанавливать описание создаваемой службе Лучше используйте плагин NSIS Simple Service Plugin |
Да нет просто при таком коде
Код:
nsSCM::Install /NOUNLOAD "AHDDC2_Service.exe" "AHDDC2_Service.exe" 16 2 \ "$INSTDIR\AHDDC2_Service.exe" "" "" "" "" nsSCM::Install /NOUNLOAD "mst Defrag SDK Service.exe" "mst Defrag SDK Service.exe" 16 2 \ "$INSTDIR\DfSdkS.exe" "" "" "" "" То есть если использовать NSIS Simple Service Plugin: Код:
SimpleSC::InstallService [name_of_service] [display_name] [service_type] [start_type] [binary_path] [dependencies] [account] [password] 2 - SERVICE_AUTO_START - Service auto start Код:
SimpleSC::InstallService "AHDDC2_Service.exe" "AHDDC2_Service" "16""2" "$INSTDIR\AHDDC2_Service.exe" """" "" |
Цитата:
Код:
nsSCM::Install /NOUNLOAD "AHDDC2" "AHDDC2_Service.exe" 16 2 \ "$INSTDIR\AHDDC2_Service.exe" "" "" "" "" Программа обращается к службам AHDDC2 и DfSdkS чтобы узнать их статус, и правильно говорит, что они не запущены, их же не существует в системе... |
Спасибо...счас опробую...туплю потому что еще не разу не работал с службами...
|
K.A.V., чето не то если писать так
Код:
nsSCM::Install /NOUNLOAD "AHDDC2" "AHDDC2_Service.exe" 16 2 \ "$INSTDIR\AHDDC2_Service.exe" "" "" "" "" ![]() Но обе службы остановлены и при попытки их запустить вручную (правая кнопка) выдает ![]() Хотя в папка $INSTDIR у меня c:\Program Files\Ashampoo HDD Control оба файла AHDDC2_Service.exe и DfSdkS.exe присутствуют! Что не так делаю? |
Код:
nsSCM::Install /NOUNLOAD "AHDDC2" "AHDDC2_Service.exe" 16 2 \ "$INSTDIR\AHDDC2_Service.exe" "" "" "" "" Код:
nsSCM::Install /NOUNLOAD "XXX" "XXX driver" 1 3 \ |
Убрал слеш получилось
Код:
nsSCM::Install /NOUNLOAD "AHDDC2" "AHDDC2_Service.exe" 16 2 "$INSTDIR\AHDDC2_Service.exe" "" "" "" "" Может есть какой то другой вариант или как? |
Цитата:
Цитата:
Так же могу посоветовать посмотреть соответствующие разделы служб в реестре, можете импортировать настройки с живой службы (сохранив ваш путь запускаемого файла) и посмотрите разницу, будет ли работать Настройки служб хранятся здесь: Код:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services |
|
diakov, ну вам же ясно говорят...Значит проверяйте, как инсталлятор прописывает путь к исполняемому файлу службы
Либо смотрите в реестре, в той ветке где я вам выше написал, либо через оснастку mmc services.msc (Пуск => Выполнить) смотрите пути исполняемых файлов, возможно что-то не так прописываете, либо распаковывается у вас не туда... |
Добро счас бду смотреть...
|
Разобрался спасибо! Дело было именно в реестре оказалось при конвертации рег файлы в скрипт путь к самому файлу был бинарником) поправил..но теперь такие вопросы
Код:
SimpleSC::InstallService "AHDDC2" "Ashampoo servise" 16 2 "$INSTDIR\AHDDC2_Service.exe" "" "" "" service_status - one of the following codes 1 - SERVICE_STOPPED 2 - SERVICE_START_PENDING 3 - SERVICE_STOP_PENDING 4 - SERVICE_RUNNING 5 - SERVICE_CONTINUE_PENDING 6 - SERVICE_PAUSE_PENDING 7 - SERVICE_PAUSED Но куда его всунуть не пойму так как в примере нет такого поля Код:
SimpleSC::InstallService [name_of_service] [display_name] [service_type] [start_type] Код:
SimpleSC::RemoveService "AHDDC2" Есть вариант канечно такой Function un.onInit ExecWait 'TASKKILL /F /IM DfSdkS.exe' ExecWait 'TASKKILL /F /IM AHDDC2.exe' FunctionEnd Но мне кажется это не совсем правильно... Все с первым разобрался просто дописал после строк установки сервиса это: Код:
SimpleSC::StartService "AHDDC2" Код:
SimpleSC::StopService "AHDDC2" 1 30 |
MKN спасибо за ссылку!
--- С позволения автора, Полякова Андрей Валерьевича, в шапке разместил ссылку: Руководство пользователя по NSIS (Перевод – Поляков А.В) Хороший и качественный перевод. |
MKN , kotkovets спасибо! Теперь можно осваивать на родном:rupor:
|
Цитата:
Изменить шапку темы Справочник по NSIS и вложить только PDF документ вместе с нашим справочником в один архив Для совсем новичков будет очень полезно почитать И ещё, было бы лучше, на мой взгляд, делать в CHM формате, удобней просматривать и передвигаться по командам, нежели в PDF формате |
Цитата:
Отдельная глава с хорошим переводом - шикарно! |
K.A.V., kotkovets,
А может не стОит смешивать-объединять мануал с нашим волшебным справочником ? Справочник примечателен расширенными комментариями, разъяснениями и , главное, доходчивыми примерами - ко всему что есть и чего нет в мануале. А что есть в мануале, всё-таки отражено скупо и сухо - так сказать, для продвинутых пользователей, уже знакомых с основами программирования и вычислительной логики... Это как в законодательстве - сам Закон и его комментарии по объёму в 5 раз бОльшие, но разжёвывающие нюансы... А справочник есть смысл расширять именно в направлении примеров и описания того, чего нет в мануале. И вполне можно опустить ту информацию, которая есть в мануале, делая толко ссылки на соответствующие исходные параграфы и главы мануала. А в мануале много чего нет... |
MKN этот перевод оригинала задумывается как отдельная глава справочника.
Это очень удобно иметь под рукой краткое описание команд! В остальном все как и есть в справочнике: множество примеров, описание плагинов, уроки по написанию своих страничек и т.д |
Цитата:
Цитата:
Наш справочник - он таким и останется и там будет информация только от пользователей данного форума, других работ посторонних там не будет Я всего лишь предложил добавить его документацию в наш архив (1 архив, в нём 2 документа), как альтернатива нашему справочнику всего лишь для совсем новичков в NSIS, только и всего Я же не ставлю первоочерёдную задачу - перевести все команды NSIS, наш справочник нацелен на предоставление кодерам именно готовых примеров кодов и перевода плагинов Наш же справочник идёт уже не совсем для новичков, а так сказать, кто более менее понял смысл NSIS и хочет получать именно примеры, а не просто перевод оригинального мануала NSIS |
У меня два вопроса:
1) При написании кода для NSIS придется использовать только NSIS'шный или еще придется использовать посторонние скрипты, как в Inno нужно использовать Pascal для продвинутых функций. Другими словами все возможности реализовываются посредством только NSIS или нужно использовать посторонние языки программирования. 2) В NSIS все современные функции инсталляторов можно реализовать? 3) Бывают курсы по NSIS? |
Цитата:
Для продвинутых функций есть плагины, в частности самый используемый(в составе NSIS) - system.dll 2) что значит современные? При отличном знании NSIS и прикладного программирования - очень много чего можно реализовать |
|
|
Цитата:
|
|
Подскажите, в нижеприведенном коде есть какой то глюк
На 2008-й винде при старте приложения вылазит Ошибка при запуске приложения 0xc000000f. На всех остальных виндах работает отлично. Что может быть? |
как сделать чтоб инсталл спросил о создании ярлыков на раб.столе и в панели быстрого запуска ??
|
Цитата:
Цитата:
Цитата:
Если бы данный скрипт не отрабатывал на всех ОС без исключения, то можно было бы искать ошибку в нём Может быть, 2008 отличается от других ОС? x64? Смотрите разницу в системах Или может запускаете инсталлятор из сетевого окружения?? - Сообщение об ошибке при попытке открыть общие сетевые приложения на клиентском компьютере под управлением Windows 7 или Windows Server 2008 R2: 0xc000000f ---- Цитата:
|
K.A.V., как привязать чекбокс к секции?
|
на полякова ссылки не рабочие. на зеркале (яндекс) скачивает какой то файл это точно не учебник. на сайте тоже нет ссылок. есть одна на один файлообменник у которого обрывается связь. залейте пожалуйста на нормальный депозит.
|
SetOutPath определяет куда будет установлена программа или распакованы временные файлы? для чего это
|
сначала нужно писать MUI_HEADERIMAGE а потом MUI_HEADERIMAGE_BITMAP ?
|
Цитата:
Цитата:
Для просмотра PDF документов используйте спец. программы, простым запросом в Google можно сразу же получить результат Цитата:
Цитата:
Сложно взять, и почитать справочник на родном языке? За вас ещё искать информацию в справочнике, это слишком... |
Цитата:
|
Вложений: 1
Цитата:
здесь у меня не качает. с яндекса вот что качается |
Цитата:
Я сейчас в данной "перепалке" в выйгрышной ситуации, т.к. вы задали вопрос, который описан в первых строках документа в справочнике, путь к которому я вам написал Мы для чего справочник вообще написали, чтобы быстрее для вас ответы что-ли искать? :lol: Я тут не собираюсь заниматься юзанием клавишь Ctrl+C и Ctrl+V только потому, что вам лень открыть справочник и перейти по пути, который я специально для вас нашел и написал его тут Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Всё разжевали как маленькому ребёнку, а он ещё и недоволен. Есть же на свете такие упыри ещё...
Ты дядька просто учись. Пробой и так, и сяк, а если компилятору что-то не понравится - он сообщит и укажет на номер строки. Но не надо искать причину своей недалёкости в других людях. А по поводу Цитата:
|
Цитата:
|
2) текст на страницах изменить нужно в файле или с помощью команд? ( MUI_WELCOMEPAGE_TITLE MUI_WELCOMEPAGE_TEXT да да я читал)
|
Цитата:
Цитата:
Цитата:
Если Вы такой умный, почему же не написали свой "точный справочник"? Вам помогаешь - вы не довольны, как будто вам тут все чем-то обязаны |
Нда, почитал я тут ваши "дебаты", складывается ощущение что Creator000 обычный троль.
З.Ы. Пардон за оффтоп, не удержался Цитата:
А теперь смотри: NSIS_Help.chm - Оформление -> Интерфейс Modern -> Страница приветствия - читай |
K.A.V., ну на custom странице при клике на чекбокс выбиралась такая то секция. Вобщем как на стандартной странице компонентов
|
Цитата:
Цитата:
у меня вопрос текст в установщике изменить можно в самом файле переписать как я делал в inno или только с помощью команд? MUI_WELCOMEPAGE_TITLE MUI_WELCOMEPAGE_TEXT MUI_DIRECTORYPAGE_TEXT_TOP MUI_DIRECTORYPAGE_TEXT_DESTINATION DirText и другие. да если мне так будут помогать то я далеко уеду. Цитата:
|
Нда, про запятые ты явно не слышал.
Если так хочется, то открываешь Russian.nsh и изменяешь все что нужно. Например: !ifdef MUI_WELCOMEPAGE ${LangFileString} MUI_TEXT_WELCOME_INFO_TITLE "Вас приветствует мастер установки $(^NameDA)" ${LangFileString} MUI_TEXT_WELCOME_INFO_TEXT "Эта программа установит $(^NameDA) на ваш компьютер.$\r$\n$\r$\nПеред началом установки рекомендуется закрыть все работающие приложения. Это позволит программе установки обновить системные файлы без перезагрузки компьютера.$\r$\n$\r$\n$_CLICK" !endif |
Цитата:
Цитата:
Только там Russian.nlf, а .nsh совсем другое. |
Цитата:
Цитата:
Разговор не имеет смысла, больше не буду вас "оскорблять" своей помощью, раз так --- Цитата:
С помощью чего делаете custom диалог? с nsDialogs я вам не помогу, если с помощью InstallOptions, то подскажу |
K.A.V., я делаю кастомную страницу выбора компонентов, и пока мне нужно чекбоксы 'привязать' к секциям(компонентам), так же как если бы это была стандартная mui components page. Делаю в nsDialogs
|
K.A.V., я не школото чтобы спрашивать не читая справку. Конечно, я читал. А вы вместо того, чтобы ответить "да" "нет" посылаете.
*** В статьях от hb860 мне не понятно. Я так понял он в свой установщик засунул установщик opera и flash player, распаковал в temp и оттуда установил? Так вот меня интересует перепаковка программ (это когда программа лишается своего установщика и надо свой написать). Я так не понял для чего нужны файлы: 1049.MST и opera installer.msi хоть убейте. Запускал opera'у там нет ничего. Точней там есть только opera.exe и целый архив. Но нужных файлов нет. Я запускал выше 10-й версии. Возможно, поэтому нет. Но вопрос даже не в этом. А в другом. Зачем это нужно? И как мне найти нужные файлы если захочу перепаковывать другие браузеры и даже программы и игры? И установка происходит посредством Windows Installer. А не надо, чтобы мой установщик сам все это делал. |
Цитата:
1. Обратиться к помощи экстрасенсов. 2. Задать вопрос в "Что, где, когда" 3. При установке софта воспользоваться специальными программами которые покажут что и куда копируется при установке. Далее брать нужные файлы и с ними работать. Выбирай |
Цитата:
|
K.A.V., не совсем то, но мне пригодился этот код, спасибо!
|
Цитата:
Вы хотите создать полностью идентичное поле со списком галочек аля "секций компонентов" как при подключении MUI_PAGE_COMPONENTS с отображением групп секций или что? Не совсем понял, что именно вам нужно :dont-know Или просто мозг не соображает, приболел малость |
K.A.V., с этим все, разрулил:). Теперь назрел вопрос, можно ли в nsDialogs сделать как в .mouseoversection, чтобы при наведении курсора на чекбокс, вылезала к примеру надпись?
|
Цитата:
Наводите на радиокнопки и смотрите на чекбокс :biggrin: |
Имеется ли в NSIS команда аналогичная команде в CMD Windows - "SC" (работа со службами)?
Даже не так, нужно просто отредактировать название службы, просто обошёлся параметром WriteRegStr |
K.A.V., не получается у меня. Делаю так
Function func nsDialogs::Create 1018 ${NSD_CreateCheckbox} 25u 27u 68u 14u "checkbox" pop $checkbox getfunctionaddress $0 text nsDialogs::OnNotify $checkbox $0 nsDialogs::Show FunctionEnd Function text ${NSD_CreateLabel} 0 5u 100u 10u "note" FunctionEnd Ведь надпись note должна по идее появлятся только когда курсор на чекбоксе, а она там сразу есть |
Krinkels, подскажите такую программу.
Но вы меня не поняли. Из папки temp в учебнике брали какие то два файла. Выше писал. Зачем? |
Vincent7, не знаю, почему так работает nsDialogs, я в нём не разбирался
Можно таким способом "выкрутиться", но это как-то не красиво получается... |
Цитата:
А со структуры (с нужного члена структуры) можно судить: вышел или нет за пределы курсор мыши прямоугольной области чекбокса. Но с чекбоксом плагин возвращает неадекватные значения членов структуры - именно чекбоксами такой глюк, может быть винда - с остальными элементами контролов вроде бы нормально. Как вариант - в событии нотификации вычислять в "ручную" прямоугольную область чекбокса и координаты курсора мыши.... Очень громоздко и сложный код - не охота возиться. Проще плагином воспользоваться (тултипы - всплывающие надписи при наведении курсора) http://nsis.sourceforge.net/ToolTips_plug-in |
Цитата:
И только на основании знаний об этих всех действиях, можно делать собственный инсталлятор. Инсталлятор в свою очередь, должен делаться с соблюдением ряда общепринятых правил. И только "на десятом месте" будет всякая ерунда, типа оформления-дизайна и др. не принципиальных вещей... А установка Oper_ы, описанная в справочнике - всего лишь пример установки готовых инсталляторов из скрипта (с рассказом что, как и зачем), где файл opera installer.msi - собственно сам инсталлятор, а 1049.MST - русскоязычный файл сценария установки этого инсталлятора. Ну и install_flash_player.exe - понятно что. |
Цитата:
|
ошибка: File: "{C:\Program Files\NSIS\Contrib\Graphics\My\orange-nsis.bmp" -> no files found
картинка там лежит. почему он ее не видит какие могут быть причины? |
|
|
Цитата:
Скрином не убедили Цитата:
Ну хорошо, держите ещё парочку ;) 1. Вы слепой 2. Вы невнимательный P.S. лааадно, вот вам подсказка: Скопируйте путь не существующего файла из лога ошибки и вставьте в Пуск => Выполнить |
Цитата:
|
|
Код:
{C:\Program Files\NSIS\Contrib\Graphics\My\orange-nsis.bmp |
Цитата:
|
Цитата:
|
Creator000, маловероятно, потому что неизвестно что будет с самим NSIS в ближайшем будущем.
|
Цитата:
Для просмотра и извлечения внешнего вида диалогов воспользуйтесь программой ResHacker Чтобы вытащить файлы изображений - откройте инсталлятор с помощью программы 7-Zip |
K.A.V., ну естественно мне нужен внешний вид установщика. а что еще то нужно?
Цитата:
|
K.A.V., а как сохранять ресурсы например картинки из этой программы? они сохраняются в rc файле
|
|
а тут как
![]() |
Цитата:
Смотрите внимательней... ![]() |
K.A.V., у папки icon нет такой функции
![]() |
Creator000, такое ощущение, что вы просто издеваетесь надо мной своими сообщениями
Как мне ещё выделить на скрине информацию, на которую вы должны обратить внимание? Если я вам специально маркером выделил нужную папку |
Creator000,
Эвоно как, сколько уже букв из-за какой то ерунды... Рисуночки-иконочки... :) Для быстрого и простого извлечения этого бесполезного хозяйства, подойдёт любой граббер ресурсов (Resource Grabber) или экстрактор ресурсов (Resources Extract). Набери в поисковике - море ссылок. А уж конкретно внешний вид инсталлятора кто же тебе извлечёт и что это вообще даст ? Это творчество разраба, описанное в его скрипте. Вот и ты, описывай, как фантазия подскажет... Нет фантазии, сделай скрин, понравившейся страницы и изучай его... Потом попробуй повтори в скрипте все его кнопочки , картиночки и пр. ... |
MKN, а как написать свой интерфейс? это тяжело?
для граббинга ico картинок из exe использую td-ei-IconExtractor. |
Цитата:
|
|
Здравствуйте!
Подскажите, пожалуйста можно ли в nsis как-нибудь добавить видео, которое будет показываться при установке? Если можно, то как его присоединять? Заранее благодарна за ответ. |
Chantico, здравствуйте
Честно сказать, таким вопросом я не задавался... И как встроить проигрывание видео именно в сам диалог инсталлятора я не знаю Разве что, попробовать плагин nsWeb, его описание есть в нашем справочнике Справочник по NSIS И вставить в свою HTML страничку на видео типа swf Либо же просто запустить внешнюю программу для проигрывания видео файла |
Цитата:
Учитесь делать всё сами, а не требовать всё готовое, чтобы потом только изменить заголовок инсталлятора и автора "репака" |
Creator000, в учебнике хотите сказать недостаточно информации, чтобы написать полный инсталлятор? :o
|
Цитата:
Таких плейеров размером от десятков килобайт до сотен килобайт - тьма. (Tiny Player, Small Media Player, CS Player и т.д.) Видел где то видеоплейер размером 16К ! Это меньше плагина и уж точно лучше громоздкого кода, как скажем был здесь : http://forums.winamp.com/showthread.php?t=322384 |
K.A.V., давайте разберем строку
Цитата:
что такое $1 что такое 0 что такое +3 |
|
Creator000, Надоело, читать вашу муть, типа что такое strcmp, $1
уже несколько страниц полного флуда! Еще таких пару сообщений - сообщу модератору. Из-за Вас тема превращается в пустую болтовню - в барахолку |
извените, помогите новечку, мне нужно сделать что бы в зависимости от разрядости винды вызывался соответстующий внешний .ехе файл (установить драйвер). подскажите функции и инструкции через которые из будет удобно сделать. зарание спасибо.
|
69KA, я делаю так:
Код:
!include "x64.nsh" |
Цитата:
Код:
${If} ${RunningX64} |
kotkovets, подскажи пожалста, вот например при установки проги я хочу запустить патч запускаю его через команду ExecWait например, соответственно он запускается и пользователю остается нажать на кнопку generate например, возможно ли что бы сам инсталлятор нажимал эту кнопку (тоесть эмулировать нажатие на кнопку самим нсис)...встречал такой инстальник но не на нсис...
И еще по аналогии вопрос..перепаковал я аимп и хочу запихнуть туда DFX Audio Enhancer например возможно ли включить в репак оригинальный файл .exe DFX Audio Enhancer и в тихом режиме его установить что бы не появлялись окна исталлятора DFX Audio Enhancer.. спасибо! |
Вот пытаюсь перепаковать DFX Audio Enhancer 11.0.14 не получается поставить драйвер в папке плага есть файлы
dfx11_0ntamd64.cat dfx11_0ntx86.cat ptdevcon32.exe ptdevcon64.exe dfx11_0.inf dfx11_0x64.inf dfx11_0.sys dfx11_0x64.sys Соответственно под х64 и х86, пробовал так ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\DFX\Universal\Drivers\dfx11_0.inf" Не получается чето... |
Возможно execwait в тихом режиме нужно выполнить
|
Цитата:
|
Цитата:
Касательно конкретно установки Dfx драйвера - эта команда вряд ли его установит... В дистрибутив не даром входят DevCon компоненты (ptdevcon32.exe и ptdevcon64.exe) а также похоже, что и сам установщик DfxSetupDrv.exe. Как всё это действует, знают только разрабы... Можно конечно взять за основу "классический" DevCon http://support.microsoft.com/kb/311272 Или DPInst - http://msdn.microsoft.com/en-us/library/ff544775.aspx. Только сработает ли... Попробуй. Также похоже, что учитывается и архитектура процессоров ( amd64 и x86-64), что требует соответствующего выбора при установке драйверов. Это можно определять кодом : Код:
Section |
Я для Revo Uninstaller под разную архитектуру так делал:
${If} ${RunningX64} ${DisableX64FSRedirection} ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\revoflt.inf" ${EnableX64FSRedirection} ${Else} ExecWait "rundll32.exe SETUPAPI.DLL,InstallHinfSection DefaultInstall 132 $INSTDIR\revoflt.inf" ${EndIf} |
Цитата:
А как на счет эмуляции нажатия на кнопки самим нсис? |
Цитата:
|
Цитата:
Код:
FindWindow $0 '#32770' 'Моя программа 1.0' PS Нужен инклуд библиотеки Код:
!include "winmessages.nsh" |
Однако разобрацо нада :)
|
че такое
![]() в HM NIS Edit. просто объекты в ini файле переставил местами. |
Цитата:
Для того, чтобы нажать на кнопку - нужно сначала узнать её дескриптор Если вы хотите нажать на кнопку внешнего инсталлятора, то сначала вам необходимо найти дескриптор окна инсталлятора, чтобы потом получить дескриптор кнопки Можете добавить проверку наличия окна командой IsWindow Если вам необходимо нажать на кнопку в своём инсталляторе, то можно не использовать вышеупомянутые 2 команды (поиск и проверка наличия окна), а сразу перейти к получения дискриптора кнопки При исполнении команды GetDlgItem, мы помещаем в переменную $1 дескриптор элемента у которого идентификатор 1 (смотрите ID элементов непосредственно через программы просмотров ресурсов, такие как ResHacker и Restorator) Переменная $HWNDPARENT - это дескриптор окна вашего пакета инсталлятора, если вы определяете дескриптор окна внешнего инсталлятора с использованием команды FindWindow, то замените $HWNDPARENT переменной $0 В нашем случае идентификатор под номером 1 в команде GetDlgItem - это кнопка Далее в диалогах NSIS Вот и всё, после того как узнали дескриптор кнопки, эмулируем нажатие посылкой Win сообщения ------- Цитата:
Попробуйте запустить программу от имени администратора, может UAC балуется? :) |
Цитата:
|
Цитата:
В пакет AutoIt входит весьма полезная утилитка - Au3Info.exe Это программка наведением прицела на элемент диалога позволяет узнать все нужные параметры окошка и параметры элементов диалога, остается фактически тока нужные "циферки" вставить в скрипт NSIS |
Где можно узнать больше о nsDialog? мне эта штука больше понравилась чем IO.
чтобы кто-то разжевал поподробней для чего и как работают эти функции. |
Цитата:
http://nsis.sourceforge.net/Docs/nsDialogs/Readme.html http://nsis.sourceforge.net/Include/nsDialogs.nsh http://nsis.sourceforge.net/Category:NsDialogs_Examples |
MKN, а что нибудь по русски есть?
|
Creator000,
Есть Promt, Lingvo, Google Translate. Переведи док. и выложи здесь. :) |
Creator000
Перестаньте использовать форум как чат! |
мне не подходит инструкция. с помощью команды page мы создаем страницу. а мне нужно не страницу, а целый интерфейс пользователя, который я смог бы потом подключать в коде непосредственно самого установщика
|
Я, видимо, самый смелый. Попробую вступить в диалог :biggrin:
Цитата:
Цитата:
Цитата:
Чем не устраивают custom странички ?? |
K.A.V., nsDialogs: Создаем собственные страницы инсталлятора
|
Creator000, если вам "не подходит инструкция" - читайте оригинал на английском
Что вам в ней не нравится? Там описаны основные моменты для работы с nsDialogs, всё остальное - исключительно ваша фантазия Если вы будете задавать вопросы типа "как создать радио кнопку", то ответа я вам не дам, т.к. там это описано Так описано, как получать и обрабатывать состояния элементов, как привязать событие элемента к какой-либо функции Конкретный вопрос задайте...Только просить готовый код, как обычно, не нужно, думаю сами уже поняли, что здесь помогут только в конкретном вопросе, а не в предостовлении готовых кодов |
K.A.V., я не прошу готовый код - от вас не дождешься.
в справочнике: подключаем MUI.nsh (это интерфейс пользователя я правильно понимаю?) потом страницы готовые с помощью !insertmacro и тут мы решили между ними сделать свою страничку. пишем page и функции А мне не нужно создавать отдельные странички. мне нужно написать себе свой интерфейс My_MUI.nsh а потом уже его подключать непосредственно к самому коду конкретного инсталлятора. чтобы я с помощью команд !insertmacro подключал свои уже готовые странички. My_MUI.nsh - код моих страничек Opera.nsh - код самого установщика для оперы. |
Цитата:
Я могу привести готовый код участинку, если вижу, что он что-то сделал для реализации нужного ему функционала. Просто у меня нет желания тратить свою время на помощь ленивым людям, вот и всё В этом вопросе меня поддержит любой участник форума, даже и не сомневаюсь, ленивых нигде не любят, и уж тем более в программировании, где нужно работать мозгами Цитата:
Цитата:
По сути, этот файл содержит настройки внешнего вида интерфейса, но данный файл не способен вам предоставить возможность создания страничек по типу тех стандартных в NSIS, подгружая файл ресурса диалога из EXE файла (как вы хотите сделать, если я правильно понял) Что содержится ещё в данном файле -можете посмотреть всё сами, октрывайте и изучайте Цитата:
Можете скачать к примеру Ultra Modern UI интерфейс, там интерфейс полностью на изображениях сделан красиво... Я же вам сразу сказал, что свой интерфейс вы не напишите, вы можете изменить уже существующий внешний вид и расположение элементов на стандартных странчках, не более Я одного не пойму, чем вас не устраивает создание страничек с помощью команды CustomPage?? Что в них не так? |
Цитата:
Цитата:
!insertmacro MUI_PAGE_WELCOME - вот хочу чтобы там была моя картинка и повествование. мне Все время под !insertmacro MUI_PAGE_WELCOME писать page? или можно ее изменить как мне хочется?(мой фон, мои icon, мое описание) аналогично на других страницах. всякие свистерельки-пердельки прикручивать к страницам (чекбоксы, радио) мне нужно будет пожизненно это приписывать или можно где то это прописать (в MUI я полагаю) ? |
Цитата:
Серьёзно, похоже просто на издевательство... Цитата:
Цитата:
Цитата:
|
Привет народ, :)
Напомните плиз как запустить консольную утиль при инсталляции в скрытом режиме?! |
MaGoth, ExecCmd plug-in
|
K.A.V.,
вопрос про Page custom fnCustomInit fnCustomDestroy fnCustomInit fnCustomDestroy это обязательно? а бывают еще какие нибудь функции у page custom? или для создания страниц этого хватит? Я просто волнуюсь, вдруг есть что нибудь более подходящее мне |
Creator000, я же вроде в справочнике описал, или нет?
fnCustomInit - обязательно, в ней мы вызываем инициализацию диалога и потом функцию показа диалога (можно внести изменения в файл диалога перед показом, например) fnCustomDestroy - в этой функции мы обрабатываем статусы элементов и например, значения того, что пользователь ввёл в текстовые элементы, если таковые имеются Обе функции обязательны |
K.A.V.,
Цитата:
Цитата:
|
Цитата:
В nsDialogs чуть по другому, там можно обойтись без второй функции и назначать на событие для каждого элемента выполнение функции Цитата:
В IO вторая при таком раскладе не обязательна |
K.A.V., я уточню
fnCustomDestroy - чисто проверяет что ввел пользователь и может это показать отдельным окошком вообще она может выводить всякого рода окна в любом месте. это все? тогда она мне не нужна. а например она может вывести окно в случае если пользователь ввел не правильно что -то или не ввел вообще ничего и утановщик должен будет сказать, чтобы пользователь исправил свою ошибку. |
Цитата:
Читайте статус элемента, затем сравнивайте значения командой StrCmp |
K.A.V., nsDialog можно редактировать в HM NIS Edit?
столкнулся с такой ошибкой Usage: SetCompress (off|auto|force) после добавления SetCompress /SOLID lzma (по вашей методичке смотрел). подскажите пожалуйста что не так. |
Цитата:
В nsDialogs вы указываете координаты элемента при его создании, nsDialogs не использует INI файлы А вот IO использует INI файлы в качестве настроек диалога |
K.A.V., можете считать меня глупым. но я не понимаю.
не работает SetCompress /SOLID lzma с таким кодом Цитата:
|
Цитата:
А если поискать, секунд десять, то можно увидеть, что для сжатия используется (как вариант) : Код:
SetCompressor /SOLID LZMA |
MKN,
Цитата:
|
Цитата:
Значит слишком поздно прописываете команду, приведите саму строку с ошибкой (что пишет компилятор) |
откуда у меня взялся в установщике IO?
![]() и как от него избавиться. |
Цитата:
Код:
!include "MUI.nsh" Код:
!include "MUI2.nsh" Эти странички уже описаны в соответствующих библиотеках, указанные в файле MUI(2).nsh (заготовки страниц - интерфейс MUI) --- На Все Ваши вопросы есть ответ в справочнике на РуссКом... ЧитайТе шапку темы... Creator000 Просьба ТуПых вопросов не задавать - получите такой же ответ. Это форум для обсуждения NSIS, а не для общения, общайтесь и флудите в другом месте, но не здесь! Или Вам замечание модератора не указ? |
kotkovets, а есть тема где могут отвечают на простые вопросы nsis?
в личку никто не помогает - для есть форум. а на форуме - не задавай глупых вопросов, не флуди, так где мне задавать вопросы? |
Цитата:
Можете попробовать изменить данный файл и скомпилировать - у вас изменятся данные странички Цитата:
Цитата:
Не ленитесь и будьте внимательны, читайте справочник с первой странички и до конца |
Привет народ,
Нарисовалось тут у меня еще несколько проблем, и с чем они связаны пока не понял, суть такова: Есть 3 файла: test1.nsi - тестовая болванка написана давно и хорошо работает(но только у меня на компе) не зависимо от того каким компиллером собираю ехешник. рабочий кусок кода из этого скрипта: Но, если этот код поместить в два других файла (полные версии) скрипта инсталлятора, то при их компиляции начинаются лаги... test2.nsi - полная версия АНСИ, все компилится и собирается но на финальной странице нет Фокуса, и кнопку завершения нажать нельзя. + при компиляции исчезает один язык из трех используемых. test3.nsi - полная версия ЮТФ, все компилируется, доступны все требуемые языки, но при запуске кода по отработке .dll начинаются лаги... В общем хочу реализовать в инсталлере так, так чтобы при вызове .dll-ки с тем или иным параметром, текстовые поля в окне инсталляции менялись в зависимости от того что она выполняет, а по завершении возвращалось исходное сосояние текстовых полей. nsDialogs не использую, установлен НСИС версии 2,46 (АНСИ - сборка от Виктора_ВГ с бороды.ру и ЮТФ - оф. версия с сайта). Кто что думает по этому поводу?! Хотелось бы обсудить эти вопросы с кем нибудь в Аське/Скайпе/ЛС ... Заранее благодарю. :) |
Цитата:
Пример из справочника, выделение структуры в зависимости от типа компилятора: Код:
Section |
kotkovets, не поможешь адаптировать мой скрипт относительно использования кода из твоего примера?
Глянул справку там без пол литры не обойтись... :/ Зы, По мини проге запускаемой в тихом режиме, проверил ее работу в связке с плагином ExecCmd::exec, инсталлер все собирает ошибок никаких нет, как нет и результирующих файлов, которые должны появится в требуемых каталогах. В случае использования ExecWait все прекрасно работает, окошко отображается и появляются все требуемые файлы в каталогах. Вопрос: как в итоге избавится от окна проги так, чтобы она при этом срабатывала нормально? Кто что думает ?! |
Цитата:
Что за программа, если не секрет? Приведите так же команду ExecCmd на исполнение приложения |
K.A.V.,
Цитата:
Цитата:
Цитата:
Код:
... |
Цитата:
У меня не на столько много времени, чтобы помогать в режиме реального времени Цитата:
Код:
ExecCmd::exec '${MNB} Install\GDR.exe "${MNB3} $INSTDIR\SOdsee.vd .. : : comm.vs"' P.S. Код:
Pop $0 |
K.A.V.,
Цитата:
Будем думать дальше что тут и как... |
Цитата:
Если как вы написали Цитата:
Можете ещё попробовать ExecDos plug-in, он практически такой же...Я его использую для запуска в скрытом режиме компилятора NSIS в своей программе SFX Creator :) |
Цитата:
Цитата:
|
Цитата:
Так вы полный путь, не пробовали прописывать в передаваемом параметре? ;) |
K.A.V.,
Цитата:
ExecDos plug-in - скрывает прогу, но нет файлов. :/ Зы, Такое ощущение что через плагины содержимое файла не читается. |
Цитата:
Запакуйте всё это дело с комментами к вашей проге в архив и скиньте мне в личку ссылку на скачивание либо вложение, попозже посмотрю, может и разгадаю ваш ребус :) |
Добро, после 16:00 как вернусь с работы сделаю.
|
С помощью InstallDir задал каталог установки по умолчанию. Но это просто декорация
SetOutPath задает реальный каталог. и программа устанавливает только туда. у InstallDir у меня была програм файлс у setOutPath был темп. программа ставится только в темп, даже если в странице !insertmacro MUI_PAGE_DIRECTORY выбрать другой каталог. как сделать свободу выбора каталога? |
Цитата:
И прочитайте для чего конкретно SetOutPath $INSTDIR = InstallDir В SetOutPath указывайте $INSTDIR Вам с такими темпами и до временного бана не далеко |
я так понимаю в каждом плагин и библиотека в nsis использует свой язык?
|
Цитата:
Честно сказать, "я понял, что ничего не понял из ваших слов" |
K.A.V., про такие штучки fnCustomInit в справочнике не нашел. (NSIS_Руководство_пользователя)
|
Цитата:
|
а что лучше InstallOptions, InstallOptionsEx или nsDialogs ?
|
Цитата:
"nsDialogs это новый NSIS плагин, появившийся взамен InstallOptions. nsDialogs не использует INI-файлов, что делает процесс создания страниц более быстрым и более гибким." А уж, что кому лучше - дело индивидуальное... Но логика подсказывает, что в данном случае, лучше следовать прогрессу... |
Добрый день! Такой вопрос как выполнить средствами нсис команду в cmd.exe например "ipconfig /flushdns" читал о плагине ExecCmd но чето не пойму че к чему...
|
diakov,
команда : ExecCmd::Exec "ipconfig /flushdns" Ессно необходимо наличие плагина, а именно ExecCmd.dll |
Подскажите пожайлуста
можно ли из NSIS сделать простой запрос(GET) на определенный урл? |
dix75,
Посмотри здесь : http://nsis.sourceforge.net/Category:Internet_Functions А также посмотри на плагины : Inetc plug-in NSISdl plug-in Internet plug-in и подобные |
почти все хорошо в вашей справке только вот мне не понятны не которые функции и команды, а именно когда и в каких ситуациях их нужно применять.
|
Цитата:
Я отвечу так: когда есть необходимость скопировать файл - прописываете команду копирования файла Это очевидно...Как ещё ответить на ваш вопрос, я даже не знаю... Это тоже самое, что: у меня есть автомобиль, мне нужно съездить куда-то Вопрос: когда заводить автомобиль? |
Как работать с манифестом, в готовом инсталляторе, при изменении данных выскакивает ошибка.
|
Цитата:
либо что то не получается в процессе, как тебе кажется, "правильного" применения имеющейся справочной информации. Тогда - скрипт "в студию"с внятной формулировкой вопроса-задачи (а не как у Limonica постом выше ). |
У меня есть команда Page которая создает новую страницу.
Есть функция: Код:
Function fnCustomInit Есть секции com1 id1 и com2 id2 /o. Далее из вашей Справки вычитал функцию выбора: Код:
Function .onSelChange (кстати, не нашел такую функцию в aimp2) Код:
Function .onInit |
Creator000, функция .onSelChange обрабатывается только на стандартной страничке компонентов
Вы же, используете собственную страничку компонентов, поэтому прописывайте в функциях относящихся к вашим радиокнопкам (которые будут выполнятся при нажатии на радиокнопку) команды на снятие/установку статусов Используйте для назначения функций радиокнопкам команды ${NSD_OnClick} |
Цитата:
делается так, специально для флудил, которые б**ть, ни справки не читают и по русски не понимают: --- Цитата:
|
Мда. тут уже матом шлют
и чего читать если в вашей справке это не написано? я так и не смог ничего найти про nsDialogPage. а с английским плохо. fnCustomInit nsDialogPage одно и то же? Спасибо за помощь. |
Цитата:
названия функций произвольно задают латинскими буквами... Цитата:
|
Уважаемые форумчане, знатоки NSIS, хотел задать вопрос по поводу локализации приложений на Windows 7x64. Появилась небольшая проблема с удалением ярлыков из меню "Пуск" в Windows 7x64, простой код удаления ярлыков:
Код:
Delete "$DESKTOP\4 элемента.lnk" Код:
Delete "$DESKTOP\4 элемента.lnk" |
Oleg48, Вот такой маленький примерчик думаю "прояcнит" ситуацию насквозь...
смысл, в том - вставить этот код в любое место скрипта --> следить за значением переменной... Код:
SetShellVarContext all Цитата:
|
kotkovets, спасибо за подсказку, только вот инсталлятор каторый я делаю, полностью тихий т. е. ничего неспрашивает и некаких вопросов пользователю незадает, как в этом случае усмотреть в какую папку ложаться ярлыки?
|
Цитата:
|
kotkovets, может подскажите существует ли решение такой проблемы.
Пробую сделать сборку Daemon Tools Lite. Предусмотрено включение в сборку активированной бесплатной лицензии. Однако после распаковки ее в профиль программа файл лицензии не опознает. В тоже время, если просто скопировать файл через проводник , то все нормально. По хэшам файл не ломается (контрольные суммы совпадают). Если запаковать файл в архив и распаковать уже в профиле после установки, то тоже все нормально. Получается, что повреждаются какие аттрибуты файла через комманду File при компиляции скрипта. Пробовал с File /a все равно тоже самое. |
wolkow70, может быть дата изменения файла меняется? Возможно это тоже влияет на файл лицензии (может быть защита по проверке времени изменения файла)
Creator000, интересно, сколько ещё вас нужно направлять читать файл справки Вы логически думать умеете? У меня такое ощущение, что нет... Без обид, ничего личного, нооо если чуток подумать, то можно применить команду StrCmp и проверять, отмечен ли второй флаг и, если отмечен, обнулять первый...Это ведь элементарная логика Получится что-то на подобии этого... Код:
StrCmp $RadioButton2_State "1" 0 +2 |
Цитата:
Потому, что если делаю коммандой копирования из папки инсталлятора, так: CopyFiles /silent "$EXEDIR\license.dat" "$APPDATA\DAEMON Tools Lite" , то принимается лицензия. А если методом распаковки, так: SetShellVarContext all SetOutPath "$APPDATA\DAEMON Tools Lite" File /a "${pkgdir}\license.dat" , то не принимается. Если запаковать файл в 7z архив, и распаковать в директории назначения, то принимается. Интересует, можно ли средствами NSIS защитить все атрибуты файла при компиляции и при распаковке? |
Цитата:
If the /a switch is used, the attributes of the file(s) added will be preserved. File /a something.exe |
Цитата:
File /a "${pkgdir}\license.dat" Тут видимо, надо сохранить дату изменения файла, так как она прописывается и в самом файле для проверки активации лицензии. |
Цитата:
|
Цитата:
Насчет даты изменения - спорный вопрос. Что-то тут не работает. Может при распаковке дата последних изменения и открытия одновременно меняются ? |
K.A.V., нет, не работает. Состояние флажка 2 считывает, сплывает окно, а вот менять состояние флажка 1 не хочет.
|
kotkovets, попробЫвал эксперементировать с получением переменных, вроде все получилось только, переменная обьявленная как глобальная почему-то ее значение невидится в секции удаления и приходится их дублировать:
Код:
... |
Цитата:
В основном, по моему мнению, сделано для гибкости, иначе деинсталлятор был бы "жестким". Иначе, оборотная сторона гибкости NSIS... |
добрый день
страница MUI_PAGE_INSTFILES на ней неактивен крестик для закрытия инсталера есть возможность сделать его активным? Спасибо |
|
Цитата:
я уточню. Мне нужны операции не с кнопкой "отмена" это я знаю как работает. мне нужно сделать активным именно крестик закрытия окна. В приведенной вами ссылке я не нашел этого. Да и если скомпилировать "Full Example" этот крестик во время выполнения INSTFILES так же остается неактивным.. теоретически Я должен получить доступ к WS_SYSMENU диалога... Но пока еще не разобрался |
Цитата:
|
Будьте добры, подскажите, как вписать в текстовый файл строку в кавычках
FileWrite $0 "OSZone.net $\r$\n", чтобы строка выглядела так: "OSZone.net" |
Salmo, должно сработать: FileWrite $0 '"OSZone.net $\r$\n"'
|
Begin2Fly,
Цитата:
Все понял! Слепота, не заметил одинарные кавычки... |
Salmo, проверил, с двойными кавычками:
Код:
FileOpen $4 "$EXEDIR\SomeText.txt" w |
Begin2Fly, Спасибо, я еще и не успел проверить... На предыдущей странице я написал, что не заметил одинарные кавычки :)
|
Цитата:
или не подходит... А что бы всегда и везде принималась экранировка кавычек, можно делать так: Код:
FileWrite $4 "$\"OSZone.net$\"$\r$\n" |
Как сделать чтоб после распаковки запустилась фотка?
PHP код:
|
Reptiliy, так, например:
ExecShell "open" "$DESKTOP\фото.png" Цитата:
|
Цитата:
|
Добрый вечер!
есть функция Код:
HINTERNET InternetOpen( Код:
System::Call "wininet::InternetOpen( t'w', i 0, t'', t'', i 0) *v.r1" Код:
System::Call "wininet.dll::InternetOpen( t 'w2', i 0, t '', t '', i 0) *v.r1" |
dix75, а что вы хотите сделать через WinAPI?
--- Здесь очень много функций - для рядового "чайника" они то и не нужны... http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx http://www.rsdn.ru/article/inet/inetapi.xml --- Вообще эти функции возвращают идентификаторы на объект... Код:
System::Call "wininet::InternetOpen(t,i,t,t,i)i.r1" |
kotkovets, если не затруднит, подскажите, как можно организовать таймаут, задержку выполнения команд скрипта на N миллисекунд. Честно скажу, что справку пытался читать... :)
|
Цитата:
Код:
Sleep 100 |
Цитата:
|
Цитата:
на С++ это пишется на ура. Перетащить сей код на NSIS, вот где проблема. Цитата:
На самом деле если посмотреть определенние Код:
typedef LPVOID HINTERNET; Да кстати более правильный вариант Код:
System::Call "wininet::InternetOpen(t,i,t,t,i)i.r1" Возможно стоит добавить его в help. В общем спасибо за ответ. |
Цитата:
Цитата:
|
Как можно обвести вокруг контрола рамку?
|
Цитата:
Цитата:
|
Здравствуйте. Я очень недавно приступил к изучению NSIS. Пытаюсь начать делать portable проги. И тут же столкнулся со следующим. Нужно экспортировать из реестра что то типа HKEY_USERS\S-1-5-21-2998198832-1981029454-3828699296-1000\Software..., потом все portable приложение переносится на другую машину с другим SID-ом. И разумеется ничего не играет, импорт получается не туда, куда нужно. Как в этом случае лучше поступить? Отказаться от импорта-экспорта ключей в файл? Или, возможно, есть способ вмешиваться в процесс импорта-экспорта с какими то своими параметрами, "на лету" подменять имя ключа? Поискал в гугле и не нашел, здесь посмотрел, признаюсь не очень внимательно, очень большой объем. Надеюсь удалось внятно объяснить суть, помогите, пожалуйста, советом.
|
andrei60, а зачем сохранять именно с SID пользователя, есть привязка у приложения к учетной записи? Попробуйте использовать не ветку HKEY_USERS, а HKEY_CURRENT_USER
|
Точно! Вот я лошара. Я про HKEY_CURRENT_USER забыл совсем. Я когда снимки реестра делал, у меня эта ветка куда то испарилась отчего то, а я сам и не вспомнил про неё. Спасибо, K.A.V. ))
|
Посмотрел тему http://forums.winamp.com/showthread.php?t=293962 и вроде так и не сказали как сделать заголовок на странице nsdialog
подскажите, научите, пожалуйста. |
у меня проблема. когда просто навожу мышкой на элемент рамка ломается
|
Цитата:
Код:
!include "WinMessages.nsh" Код:
SendMessage $HWNDPARENT ${WM_SETTEXT} 0 "STR:Мой новый заголовок" Цитата:
|
K.A.V., все прекрасно, только я наверно не правильно сказал. Мне нужно изменить
Простите, что задаю такие тупые вопросы, просто ничего не понимаю англоязычной документации с минимум комментариев. Если аналогично заголовку - ткните пальцем. Я пытался, у меня ничего не выходит. |
Creator000, сделайте так
Узнайте ID элементов, откройте с помощью ResHacker ресурс инсталлера (диалог 105) Затем эти ID подставляете в команды... Код:
GetDlgItem $0 $HWNDPARENT 1037 |
Цитата:
те же яйца вид сбоку: http://forum.oszone.net/post-1446111-524.html страничка для просмотра чтения: http://forum.oszone.net/thread-67386-53.html |
K.A.V., спасибо Вам.
|
Добрый день!
Как узнать есть ли в файле искомая строка. делаю так Код:
${LineFind} "prefs.txt" "" "1:-1" "un.Findt" Если строка есть то вылетает "Not Cool" и "Cool" Почему 2 раза, как это исправить Пардон нашел ошибку |
dix75, ну можно так, "обнулять" переменную $R0 в цикле перед каждым использованием:
Код:
StrCpy $R0 -1 |
А кто нибудь может дать пример скрипта в котором использовали nsdialog?
|
Цитата:
Google\ Поиск "nsdialog " = море страниц с примерами Наконец, справка (уже в сотый раз). Начиная с http://nsis.sourceforge.net/Docs/nsDialogs/Readme.html "Примеряй" на здоровье. :) |
MKN, если бы :(
|
Срочно нужна помощь, нужен скрипт проверяющий архитектуру системы и в зависимости от неё выполнял действия, пример:
Цитата:
|
Код:
!include "x64.nsh" |
Спасибо большое, сделала чуть иначе но принцип тот же, спасибо. Ещё вопрос есть ли плагин NSIS для создания нового пользователя?
А так же можете пояснить для чего этот плагин http://nsis.sourceforge.net/UAC_plug-in |
Где можно почитать про авторвыбор разрядности системы?
Интересно, с помощью nsis можно сделать такой установщик? Установщик-командная строка. ![]() |
Цитата:
|
Добрый вечер господа! Вот пример:
Есть бутон и соответственно функция нажатия такая: Код:
Function ClickButton Как сделать что бы если пользователь просто закрыл запущенный автономный деинсталлятор вылазил например меседж Денсталляция прервана или не состоялась! Спасибо! |
Цитата:
На примере запуск блокнота... Код:
ExecWait notepad.exe $0 через диспетчер задач: $0 = 1 бывает приложения ничего не возвращают... если свое приложение, можно заставить приложение нужную циферку возвращать в разных условиях... читайте в справке: » Работа с процессами с помощью NSIS |
Народ, подскажите , направьте . Была раньше статья о реализации дополнительных ключей в NSIS . Сейчас страница недоступна =((
|
kotkovets, все получилось если жму на крестик пишет 1039 а если кнопку выход 0. Все гуд спасибо!
Код:
ExecWait "$PLUGINSDIR\uninstall.exe" $0 Код:
Function ClickButton |
Цитата:
Код:
!include "mui2.nsh" Цитата:
проверяйте, что возвращает $6 - просто сообщением (в различных ситуациях), без логики - а то на вашем примере одинаковые по читаемости сообщения... Если свой деинсталлятор, то можно заставить деинсталлятор записывать... например в реестр... некое значение - при отмене или удачном завершении. ну... а затем прочитать значение из реестра... |
|
1 warning:
Generating version information for language "1049-Russian" without standard key "LegalCopyright" Можно как нибудь использовать русский язык в описании? |
добрый день,
у меня есть несколько вопросов, может кто-то подскажет. 1. Можно ли средствами NSIS переназначить действие стандартных кнопок диалогов (назад,вперед,отмена) мне нужно что бы к примеру первая была отмена две другие - назад и вперед. я знаю что могу просто поменять их местами любым редактором ресурсов. Но может можно как то вешать свои действия на эти кнопки? 2. как вы реализуете подобные предложения? "By clicking on Accept, you are accepting the EULA of domen and bla-bla-bla." сейчас мы используем InstallOptions (те кастомные странички реализуем на ини файлах). Я знаю что это не удобно и устарело но ниже объясню почему делаем именно так. мне приходиться разбивать данное предложение на несколько частей: "By clicking on Accept, you are accepting the" "EULA" "of" "domen" " and bla-bla-bla." и за тем в ини файле для каждой части делать свое поле и подбирать для этого поля координаты, что бы весь текст читался как одно предложение. Теперь собственно почему ини файлы а не nsDialogs. мы делаем инсталер с разными языками. И так как на разных языках мы будем иметь разную длину этих текстов, то приходиться для каждого языка делать отдельный ини файлик со своими координатами этих полей. используя nsDialogs я так понял вместо 10 ини файлов и одной функции мне пришлось бы использовать 10 функций. Что мне кажется не очень удобным. или может быть я что-то упускаю, и есть другие возможности реализации подобных конструкций? с ув. Я |
Почему есть такое предупреждение:
Цитата:
|
yyv,
1. нет и да(гиморно), в любом случае будет выполняться стандартное действие... 2. Зачем 10 функций - http://forum.oszone.net/post-1553443-903.html Langstring - задаете "переменную константу" для каждого из языков... текст поля в nsDialogs легко изменять в зависимости от языка, тоже заданной языковой константой. Код:
LangString height ${LANG_ENGLISH} "20" Цитата:
|
Цитата:
например у меня в предложении две ссылки. все равно ведь придется разбивать предложение на составные блоки и собирать их как пазл? размер для каждого языка/блока придется просчитать экспериментальным путем? ведь мы не имеем никакой возможности сделать "авто размер" блока по содержимому? или я что-то не понимаю? |
Цитата:
я же сказал, что в nsDialogs можно менять размеры контрола на "лету"(в отличии от InstallOptions - правкой ini на лету) --- Есть на крайний случай полезная встроенная переменная - $LANGUAGE Так вот эта переменная меняет значение в зависимости от языка... например: Все просто и лаконично! |
хорошо, просто что бы уточнить и резюмировать.
1 В моем случае разбивать на блоки все равно придется. 2 размер и координаты каждого блока для каждого языка я должен будут вычислить сам экспериментальным путем я все правильно понял? |
kotkovets, поделитесь секретом?
|
Цитата:
значит увеличиваем высоту одного контрола... в зависимости от языка и длины текста... Цитата:
один раз рассчитать размеры для каждого из языков и все! --- Цитата:
|
kotkovets,
ткните мне, пожалуйста, где написано в справке: 1. Как сделать так чтобы отображались русские буквы в LegalCopyrigt 2. Я удалил запись VIAddVersionKey /LANG=${LANG_RUSSIAN} "FileDescription" "${PRODUCT_NAME} ${PRODUCT_VERSION}" Почему программа говорит не понятно что? С удовольствием почитаю, если бы это было. И еще я создал деинсталлятор Код:
WriteUninstaller "$INSTDIR\Uninstall.exe" Заметьте, я читал справку "Статьи от hb860 -> Деисталлятор". Как сделать с большой буквы там нет. |
Цитата:
Код:
VIProductVersion "1.2.3.4" |
kotkovets,
Цитата:
|
Цитата:
|
kotkovets,
Юникод версия ведь не будет работать в старых операционных системах? И про деисталятор подскажите, пожалуйста. Если Вам не трудно. |
Цитата:
|
и еще буду благодарен за помощь
кнопка отмены на странице PAGE_INSTFILES когда на нее нажимаю не выводиться предупреждение о закрытии просто инсталер завершает работу на всех предыдущих страницах это сообщение появляется... подскажите где посмотреть... |
kotkovets, у меня такая проблема случилась:
При установки у меня в Пуск делается папка с ярлыками. При деинстлляции она должна полностью удалиться. Но этого не происходит. С помощью Unlocker я вижу, что папка занята двумя процессами Explorer.EXE. Причем они появляются, когда запускается деинсталлятор. И поэтому не удаляются. А вот руками удаляются в легкою. И вот мне нужно сделать так, чтобы деинсталлятор все же их удалял сам. Просить перезагрузку как минимум глупо из-за ярлыков. Причем, я уже сказал, удалить руками легко. Нет какой-нибудь команды "удалить принудительно"? Ведь другие установщики как то удаляют все сразу. P.S. Извините за деинсталлятор. NSIS глюканул. Щас все норм. |
Цитата:
по ходу когда страничка установки выполняется кнопка отмены недоступна... назад нет возврата на предыдущую страничку... если только сделать прерывание - abort, кнопка подсвечивается... но прерывание уже было, завершена работа и закрытие установщика! Где логика??? прерывать или не прерывать установку во время установки? установка уже прервана! |
Цитата:
или убрать в деинсталляторе SetShellVarContext all по умолчанию current :biggrin: |
Здравствуйте!
Интересуют следующие вопросы: 1. Как, используя Modern UI 2, в зависимости, например, от выбора radiobutton настроить порядок последующего отображения страниц? 2. Можно ли в деинсталляторе использовать страницы инсталлятора и наоборот? И как осуществляется переход от одной страницы к другой? 3. Можно ли с помощью UpdateXML из скачанного xml-файла разом извлекать несколько значений? Если да, то как? Если нет, то как можно считать из xml-файла сразу несколько параметров? Заранее благодарю. |
Цитата:
Цитата:
3. Изучите хотя бы 2 первых вопроса - ибо это будет для вас... очень сложно.. --- модерн в доках почитайте (странички) - file://localhost/C:/Program%20Files/NSIS/Docs/Modern%20UI%202/Readme.html (или в папке NSIS -> Docs\Modern UI 2 ) |
Вопрос №1:
У меня есть чексбокс. Он как то назван. Я хочу чтобы два слова в этом названии были оформлены другим шрифтом. Возможно ли это? Вопрос №2: У меня перед запуском деинсталлятора выполняется функция которая спрашивает удалять или нет. Я хочу изменить заголовок окна. Подскажите, как это сделать? Вопрос №3 Я хочу чтобы у деинсталлятора в заголовке использовалась картинка не ico деинсталлятора, а ico инсталлятора. |
Цитата:
Можно текст рядом с чекбоксом составить из нескольких Label, выполненных разными шрифтами. А ещё проще - рядом с чекбоксом поместить картинку с разношрифтовым текстом. Ессно это всё предполагается делать на кастомной странице. |
Цитата:
В переменную $checkbox плагин со стека возвращает дескриптор(хэндл) чекбокса, которая винда создает при отрисовке чекбокса - уникальный номерок, есть номерок - делаем почти все, что захотим.. создаем шрифт - дескриптор шрифта в переменной $1 и применяем шрифт к чекбоксу... Цитата:
Код:
Function un.onInit |
Цитата:
А надо (как предпролагается в хотелке) - к примеру, первое слово один шрифт, второе слово - другой шрифт, третье слово - другой цвет и т.д. - и всё это в одном предложении описания для одного чекбокса... Вот такакя загогулина... Другой вопрос, нах это вообще нужно ?... :) Ну уж если понадобилось - то как ? |
Цитата:
так что тут, согласен - только label подогнаными к друг другу... принцип тот же... как выше примером с чекбоксами |
Цитата:
Такой ещё вопрос-предложение : как все уже поняли, с помощью WinAPI в NSIS, можно чудеса творить, на все случаи жизни... :) Только не все это умеют... Может коллекцию конкретных примеров полезного использования, в справочник добавить ? Особенно, если это упрощает и уменьшает классический код. System::Call "user32:: сделаем то-то... |
Цитата:
вопрос, что именно.. их дохрена и трошки... (примерно сколько делок в system32 умноженное на 2000) --- кратко-подробно описан плагин system - остальное на сайт майкрософт за нужными функциями. |
MKN, да я уже пытался лабелы подгонять. Криво встают. А насчет картинки попытаюсь. Это чисто эксперимент.
Цитата:
Код:
Function un.onInit Хочу просто название программы в заголовке в этой функции оставить. Цитата:
Хочу поменять иконку. Это можно? *** http://forums.winamp.com/showthread.php?t=282529 http://nsis.sourceforge.net/Shortcut..._Windows_Vista Можете мне объяснить как сделать так как описано в этих статьях? RequestExecutionLevel - я не смог от него добиться желаемого. Единственное что я нашел Код:
Section un.DeleteLabel А ведь я знаю, что есть установщики на NSIS которые создают ярлык на рабочем столе для одного пользователя. И все это удаляют. Как-то геморой. Почему нельзя просто удалить эти ярлыки? Разработчики лишнее на придумали. |
Цитата:
Одно дело освоить NSIS, совсем другое - WinAPI. Потому конкретные примеры для конкретных задач и были бы интересны. |
Цитата:
Я делаю на ини файлах там это проще подгоняю так сказать в прямом эфире.. но геморно это... после того как инсталер запущен, иду в временную папку и открываю мой ини файлик. затем меняю нужное значение кнопками вперед назад листаю и смотрю что получилось и так до идеала довожу.. :) затем копирую конечный результат в фал который будет паковаться.. :) в итоге в одном предложении и жирный текст и ссылки. Все разбито на разные контролы, но выглядит как одно целое предложение... по другому к сожалению ни как... |
kotkovets, собственно, я уже не надеюсь что мне тут кто-нибудь ответит. Но просто скажу unicode-сборка проблему не решает, а только добавляет проблем с использованием русского языка.
|
yyv, у тебя IO?
|
Цитата:
Если так, то да. |
Creator000, хватит блин чушь писать...
|
kotkovets, Добрый день. Вы, как-то, высказались по поводу Ваших планов : " будет время "нарисую" библиотеку заточенную для NSIS для управления чужим приложением(частично),
естественно придется много идей брать у AutoIt..." http://forum.oszone.net/nextnewesttothread-218597.html Что-нибудь получилось из задуманного? С уважением... |
Цитата:
а позже и интерес пропал... как то так.. --- много чего получалось и скриптом - системными вызовами. хотя... смотря, что вам нужно, конкретно.. |
Цитата:
Цитата:
|
kotkovets,
Столкнулся с такой проблемой при использовании хедера RegistryFunc.nsh после выполнения условия ${If} ${KeyExists} здесь выполняются комманды ${EndIf} меняются значения переменных $1 и $2 , в следствии чего идет ошибка дальше по ходу скрипта. Изменение значений наблюдается именно после выхода из условия (в самой логике выполняется правильно). При этом, после выхода из логики $1 имеет значение = наименование проверенного на условие ключа реестра, а $2 почему то = 2 PS: при замене $1 и $2 на другие, начиная с $3 ошибки пропадают. |
пытаюсь менять тексты в стандартных котролах на страничке установки
кнопки и верхний тайтл заменил нормально Код:
GetDlgItem $R2 $HWNDPARENT 1037 и тут ничего не получается ни этот вариант Код:
GetDlgItem $R2 $HWNDPARENT 1006 Код:
FindWindow $R2 "#32770" "" $HWNDPARENT подскажите, есть ли возможность изменить этот текст? |
yyv, Зачем блин вся это возня ?
все стандартно в секциях: Код:
SetDetailsPrint both Код:
!insertmacro MUI_HEADER_TEXT "МОЙ" "ацкий текст" |
ваш вариант также не работает...
Я возможно плохо объяснил... на картинке красным выделил тот текст который хотел бы изменить... Инсталер не показывает деталей показывается процесс скачивания файла и окно прячется вот собственно эту надпись -и хотелось бы изменить про заголовок.. Я как то даже не подумал что в секциях я могу его менять также как на кастомных страничках :) |
Цитата:
и после использования изменить... причем SetDetailsPrint имеет три свойства... |
Как определить разрядность ОС? И в зависимости от разрядности (x32 или x64) записывать тот или иной ключ реестра?
|
Цитата:
Код:
!include "x64.nsh" |
Цитата:
и текст не меняется... Постоянно висит донлоадинг инсталер.рар мне же нужно изменить именно этот текст... те это я так понимаю текст который выводит плагин... |
Почитал справочник по NSIS, нашел там логическую конструкцию определения ключа реестра и необходимую библиотеку для этого (за нее отдельный респект), но как быть если нужно определить существует ли параметр в реестре, а не ключ?
Код:
${If} ${RunningX64} |
Цитата:
и ... используем флаг ошибки... все расписано давно... Цитата:
Код:
clearerrors Цитата:
|
Добрый вечер!
Однажды я видел в одном установщике функцию, при нажатии кнопки Отмены происходила удаление всех записей, ярлыков, файлов которые уже успели скопироваться из установщика. Так вот я хочу реализовать это в nsis. Возможно ли это? http://nsis.sourceforge.net/InstFile...ring_InstFiles http://nsis.sourceforge.net/Uninstal...nstalled_files Вот что я нашел. Но особо ничего не понял. Может быть вы мне поможете? Спасибо. |
CrashTest, в чем собственно то проблема, открываем справочник и читаем:
Интерфейс Modern UI -> Стандартные функции |
kotkovets, как я понимаю, в вашей функции команда Abort будет выполняться везде где только можно. а мне нужно только на странице установки файлов. и удалять только те файлы которые успели копироваться. а так она будет выполняться когда пользователь выходит из установщика, а мне надо когда пользователь прерывал установку. кнопка отмены вообще не активна.
|
CrashTest, и что мне Вам дать готовый код?
я вам показал как! на пальцах.. и разжевал еще... --- религия, что ли не позволяет внимательно справку читать или думать? |
Товарищи! Подскажите, как решить простую вроде бы задачу :
Необходимо, чтобы после запуска скрипта-инсталлятора, фокус был на кнопке, находящейся на кастомной странице. Т.е. запустили инсталлятор, кликнули на клавиатуре ENTER и кнопка сработала. (Но, с приведённым ниже кодом, вместо этого происходит переход на PAGE_INSTFILES ) Код:
!include "MUI2.nsh" |
Что лучше WinVer2.nsh или x64.nsh для автовыбора разрядности системы? Я пользуюсь двумя, но мне кажется можно обойтись только WinVer2.nsh. Что посоветуете?
|
Цитата:
меряться п..ками неуместно..:) |
Код:
InstallDir "$PROGRAMFILES/${PRODUCT_NAME}" Добавляю следующий код: Код:
${If} $Radio2_State == 1 |
Цитата:
Код:
InstallDir $PROGRAMFILES64 Цитата:
условие сработает, если $Radio2_State == 1, если оно не равно - досвидос! :) неужели блин трудно, перед логикой, проверить значение переменной одной командой... для отладки... Код:
MessageBox MB_OK "$$Radio2_State = $Radio2_State" |
Цитата:
Код:
Каталог программных файлов (program files). Обычно это C:\Program Files, но помогите мне еще автоматом закрывать деинсталлятор когда он отработал Код:
Function un.onUninstSuccess |
Цитата:
В 32-разрядной нет папки - program files (86) .. Цитата:
Код:
Section Uninstall Код:
Function un.onUninstSuccess |
Цитата:
Код:
!define VK_TAB 0x9 Код:
${keybd_event} ${VK_TAB} 2 Для других страничек опытным путем вычислияем сколько раз нужно нажать клавишу, что бы попасть на нужный контрол. |
kotkovets,
Этот вариант я помню. Только имитация нажатий - это обходной и громоздкий манёвр... Неужели нельзя более изящно навести фокус на нужную кнопку ? Для чего тогда вообще нужно - ${NSD_SetFocus} ? |
Цитата:
Цитата:
Цитата:
ну не обрабатывает окно nsis посылку WM_SETFOCUS Причем по логике всегда только одно окно в фокусе! --- |
kotkovets,
Вот тут тоже бились с установкой фокуса http://forums.winamp.com/showthread.php?t=187302 Только я смутно понял что получилось... Можно ли извлечь из этого нечто полезное для моего случая ? И что такое - kernel32::CreateMutexA ? |
Цитата:
--- Mutex позволяет проводить синхронизацию не только между потоками(thread), но и процессами(process), то есть между приложениями. --- http://purebasic.ru/manual.php?id=1306&lng=rus пример в справке - » Предотвращение множественности запуска приложени, т.е больше одной копии не запустим. Цитата:
|
Цитата:
|
У меня вопрос про ассоциации. Как я понял ассоциации можно сделать по разному.
А если установщик программы или сама программа может себя ассоциировать то мне нужно сделать так же или можно по своему? Я тут проследил за реестром и нашел какие ключи записывает программа для ассоциации. мне просто заставить свой установщик записывать такие ключи? Однако я распаковал скрипт установщика и там я не нашел записей для реестре для ассоциаций. При установки пишет: Код:
Установка ассоциаций с файлами ВВВВ... А мне так можно научиться делать? И никаких записей в реестре в ручную. программа сама себя зарегистрирует. |
выяснил
если по нормальному Код:
InstallDir "$PROGRAMFILES64\${PRODUCT_NAME}" поставить пробел или другой символ например слеш, то ключи удаляются. Код:
InstallDir "$PROGRAMFILES64\ ${PRODUCT_NAME}" |
kotkovets,
Как правильно детектировать Windows 8 ? В сегодняшнем WinVer.nsh её нет... И есть ли не зависимый от WinVer.nsh, NSIS-OS plug-in, Version_plug-in и пр. , способ детектирования ОС ? |
Уважаемые участники форума существует ли версия InstallOptionsEx работающая с unicod NSIS ?
|
Цитата:
MinorVersion - младшей версией Windows... MinorVersion Win8 = 2, в Win7 = 1 библиотека winver2.nsh из справки... ![]() ---- остальное доработаю по мере обновления справки. |
Цитата:
|
MKN, я же говорил, почти все все работает на апи в NSIS - открой winver или winver2
дабы не писать - System::Call "user32:, которое уже расписано библиотеках в виде макросов для удобства. из winver2: Код:
!macro FUNC_GetVersionEx STRUCT_SIZE --- или подключить winver2.nsh и написать так: Код:
${WinVersionMinor} $0 Код:
${WinVerGetMinor} $0 Цитата:
исход известен... HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion |
вот если 32 и 64 разрядность то в установщике надо прописать ключи реестра для каждой разрядности отдельно. а для секции в реестре Uninstall для меню программы и компоненты надо для каждой разрядности прописывать отдельно или установщик сам разберется??
|
Здравствуйте.
Подскажите, пожалуйста, возможно ли и как сделать участок (функцию, секцию), которая бы выполнялась только при компиляции. Например: У меня есть список файлов (одна строка - один файл), который меняется пару раз на день. На основе этого списка должена формироваться инсталяшка. Я хочу реализовать такой механизм, чтоб при начале компиляции генерился список файлов и потом подключался в соответствующую секцию includ'ом. Возможно ли это, или проще написать exe-шник который это сам делал а потом запускал компиляцию? |
Цитата:
Цитата:
Код:
outfile "test.exe" но парсить какие файлы и создавать список можно попробовать командной строкой (консольными прогами винды) типа dir.exe запущенной во время компиляции с определенными ключами(здесь я не силен, задайте на форуме этот вопрос в соответствущей теме) Запуск файла можно так: Код:
!system "%WINDIR%\notepad.exe" смотрите подробно в справке... --- получается типа динамический скрипт... :) |
Цитата:
Код:
${If} ${RunningX64} Мой Вопрос: Надо ли этот ключ распределять между SetRegView 32 и 64 Код:
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\prog.exe" Зачем это проверять, если вы можете дать точный ответ. И все равно я не смогу увидеть через какой редактор заносились записи. |
Цитата:
1. SetRegView: использование реестра от разрядности ОС 2. Логические конструкции в скриптах NSIS --- На все эти вопросы ответы есть. + посмотреть содержимое файла NSIS\Include\x64.nsh |
kotkovets, тяжело так сказать... но я пишу насчет секций для удаления. их тоже заключать в setregview? не написано это в справке
|
Цитата:
|
kotkovets, еще один вопросик.
а WriteUninstaller "$INSTDIR\Uninstall.exe" тоже надо писать два раза для 32 и 64? деинсталляторы тоже могут отличаться по разрядности? Цитата:
Ключ реестра для «Установк и удаление программ» |
Цитата:
У меня ситуация следующая: - сборка инсталятора производится на сервере (запускается в командной строке через telnet) - выполняется exe шник, который выкачивает файлы, список файлов и настройки этих файлов (ini файл) из svn - далее производится сборка... в конечный инсталятор должны добавится только те файлы которые прописаны в списке с параметрами из ini файла (где лежит файл, куда он должен копироваться и с каким именем) Справку я прочитал и справочник. Просто не нашёл необходимой мне структуры типа Код:
Интересует возможность динамического изменения страницы. То есть есть ли Events у этих контроллов (например при изменении состояния DropList делать одни Label видимые а другие нет) Спасибо! |
Цитата:
указанные действия - конструкция времени компилирования. Цитата:
Эти вопросы к K.A.V |
Цитата:
|
Цитата:
в ${NSD_OnChange} NSD_GetState возвращает всегда 0 , NSD_GetText возвращает строку А мне нужен номер строки |
Цитата:
Цитата:
Цитата:
Цитата:
|
Отрыл скрипт по своей проблеме.
Такой вопрос. Код:
WriteRegStr HKCR ".djv" "" "DjVu.Document" |
Код:
${If} $RadioButton2_State == 1 |
Цитата:
Код:
!include "MUI2.nsh" |
Цитата:
Цитата:
правильно: Код:
WriteRegStr HKCR "Software\Classes\DjVu.Document\shell\open\ddeexec\IfExec" "" "[rem open]" не засоряйте тему! не нарушайте правила форума, которые вы не читали! Иначе сообщу модератору.. |
Прочитал
Код:
Часто возникает необходимость перезагрузки после инсталляции вашего приложения. Данная поддержка включается, Код:
Так же, включается поддержка, если во время инсталяции, нужно удалить файл, Можно ли использовать вместе /r и /REBOOTOK? |
CrashTest, последнее китайское предупреждение!
Оформление->Интерфейс Модерн->» Страница "Завершения" === Прежде, чем писать тысячу раз подумайте, а стоит ли? А вот шапку темы стоит почитать: ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. --- на глупый вопрос - глупый ответ... |
kotkovets, я прочитал в справке много чего. а именно
Код:
Оформление->Интерфейс Модерн->» Страница "Завершения" в самом начале вы с удовольствием отвечали на самые откровенные идиотские вопросы и улыбались. я спрашиваю потому что этого не могу найти. если это написано - просто скажите где. не проще будет? и все будут счастливы. глупый вопрос для вас. |
Цитата:
Цитата:
» IfRebootFlag: определяет флаг перезагрузки --- прошу сюда не писать, а читать - полезнее будет - именно для вас персольно. |
как в НСИС в не юникодной сборке показать список?
В том смысле, что поставить точки, кружочки или галочки какие нить перед каждым элементом (сейчас использую тире, но это немного не устраивает) конкретизирую, как в НСИС использовать Hex escape? и еще... Можно ли в нсис "украшать" MessageBox? вставить картинку, изменить размер, переименовать кнопки? или возможность использовать не стандартные сообщения? Может существуют какие нибудь плагины? |
есть чекбокс который устанавливает дополнительные файлы надо чтобы при удаление срабатывало условие если если это отмечено - удалять дополнительные файлы. если нет - то нет. делал это в секции Uninstall что то не работает.
|
Цитата:
Если нужны зависимости при удалении, то можно добавить MUI_UNPAGE_COMPONENTS или, что ещё проще, запрос-сообщение перед удалением - что удалять, а что нет. И удалять, согласно выбора (сообразно индетификаторов кнопок). |
kotkovets, подскажите...
Код:
${Switch} ${extenstion} Вот как бы полная часть кода Код:
!macro RegisterExtension extenstion |
Получается что скрипт как бы зацикливаться на данном участке кода
Соответственно к чекбоксу привязал так Код:
Section "-VIDEO" |
Цитата:
компилируйте с помощью - makensisw.exe или сразу консолью - makensis.exe |
Помогите написать скрипт, пожалуйста.
Есть такая задача:
|
unatlib.org.ru,
http://nsis.sourceforge.net/Register_Fonts |
kotkovets, почему при реализации такого варианта установки ассоциаций (как я писал выше) и такого варианта тихой установки:
Код:
${GetOptions} "$CMDLINE" "/port" $R0 |
пробуйте так:
Код:
ClearErrors инструкция - ${Else} - сработает в любых случаях, кроме, когда нет флага ошибки.. |
В принципе так и стоит у меня в скрипте, просто я не скопировал...может дело в макросе установки ассоциация...не обрабатывается он в тихом режиме что ли...
|
Цитата:
Код:
!include FontReg.nsh |
|
Чтобы сразу отбросить лишние вопросы:
Пример с 266 страницы глючный слегка. Не хватает команды StrCpy $FONT_DIR $FONTS Но всё равно это не то. Там добавление НОВОГО шрифта С установкой нового шрифта вообще НИКАКИХ проблем. Даже инсталляторы не нужны для этого дела. WinRAR SFX хватает с зашитым вызовом fontinst.exe. Не могу обновить уже установленные шрифты. Вот и полез в NSIS за помощью. Ведь должен он уметь? NSIS вижу впервые в жизни. Готовых примеров не нашел. Из справки и статей не понял как обновлять системные файлы. |
Делал давно инсталлятор и сейчас понадобился такой же скрипт. Писать с нуля очень уж нудно, а старый скрипт уже потерялся, остался только созданный с его помощью инсталлятор.
Наверно очень глупый вопрос задам, не пинайте сильно :) Можно ли как-то вытащить скрипт из скомпилированного файла? |
silione,
Шапка темы\Ещё немного полезной информации: \читать дальше » ● Чем я могу распаковать инсталлятор, созданный в NSIS? Цитата:
|
kotkovets, подскажи хочу сэумулировать нажатие кнопки Активировать активатора:
Код:
Exec "$PLUGINSDIR\keygen.exe" ![]() Как только не пробовал пишет Указанное окно не найдено |
Цитата:
про класс главного окна.. Код:
FindWindow $0 '#32770' 'AMS Software "ФотоШОУ v4.0"' где тут: #32770 ????????? --- p.s бездумный копипаст.. |
Мож и заслепило..мож зациклился хз
Пробовал и класы менять #32768 The class for a menu. #32769 The class for the desktop window. #32770 The class for a dialog box. #32771 The class for the task switch window. #32772 The class for icon titles. И вместо класа ставить FindWindow $0 'Autoit v3 GUI' 'AMS Software "ФотоШОУ v4.0"' не работает все также Указанное окно не найдено! Так в чем же дело? |
Цитата:
не надо ля..ля .. :) Код:
Exec "$EXEDIR\Au3Info.exe" |
Спасибо! Теперь разобрался! Заработало!
|
kotkovets, читал в справке вашу статью Работа с процессами с помощью NSIS, но вот есть такая проблемка, и не нашел как реализовать, нада чтоб инсталлятор (в процесе установки) ждал запуска определенного exe-шника, и как только последний появится в процессах (запуститься) выполнял определенные действия с ним...что то типа ожидание запуска процесса но только не заданное время а до его фактического запуска.
Спасибо! |
Цитата:
Sleep - конечно не устраивает, подбирай время.. а подумать? инструмент есть.. ну в цикл проверку назначить.. ну а сколько, нужно таких циклов, если вдруг (не дай боже) не заведется? обратно, тоже самое блин.. Цитата:
1. инструкцию ${ProcessExists} - закидываем в цикл.. 2. определяем сколько нужно циклов проверки, если исполнитель не заведется.. 50 - 100 раз. можно конечно и бесконечный цикл.. 3. Условие выхода из цикла - найденный процесс.. |
Цитата:
Код:
Exec "$PLUGINSDIR\keygen.exe" То есть Вы имеете ввиду что можно как то так: Код:
${If} ${ProcessExists} "keygen.exe" |
Цитата:
Код:
!include "ProcessFunc.nsh" Цитата:
пока кнопка прорисуется.., что бы не получить нулевой дескриптор кнопки.. |
Спасибо буду пробовать!
|
diakov,
подбирается время в цикле - экпериментально.. и количество раз, если не найден процесс у меня хватило времени в цикле 150 мс, при кодировании видео, проц на 80% загружен... время нахождения процесса в цикле (если не найден процесс) где то 150х30хВремя выполнения команд = 8-9с можно предположить, что сейчас у меня комп 2 раза слабее в попугаях :), конфигурация компа под ником.. |
kotkovets , можете ещё пару примеров написать работы с дополнительными ключами ??? Например создание ярлыка ??
|
Цитата:
Т.е. это то же, если бы пользователь, открыл "свойства" ярлыка, затем "дополнительно" и установил галку на "Запуск от имени администратора". Как реализовать эту цепочку действий для ярлыка, в скрипте ? |
kotkovets, не подскажите существует ли возможность очистить диалог 1018 уже после его показа? вернее удалить все контролы из него?
|
Цитата:
Цитата:
Цитата:
и врядли он существует - внятный способ. |
Цитата:
Вроде бы действия - куда уж проще... Создаёт же как то такой ярлык, программка Elevated Shortcut http://winreview.ru/forum/viewtopic....f8048c39ea4fd5 |
Цитата:
Цитата:
у меня нет исходника Elevated Shortcut, чтобы, хотя бы, пробнуть накатать плаг. |
kotkovets , можно ли изменить название кнопки "установить" на свое ????
|
kotkovets,
А инфа отсюда подойдёт для решения задачи ? : http://nsis.sourceforge.net/IShellLink_Set_RunAs_flag http://blogs.msdn.com/b/oldnewthing/...9/6801084.aspx http://stackoverflow.com/questions/6...-msi-installer http://nsis.sourceforge.net/ShellLink_plug-in Плагин теоретически должен был сработать, но как пишут здесь http://forums.winamp.com/showthread.php?t=278764 почему то и с этим оказалось проблемы... |
Цитата:
Код:
!include "MUI2.nsh" Цитата:
внятный способ.. ладно вечером попробую.. |
Нужно запустить приложение exe без отображения консольного окна, ExecDos и ExecCmd не спасают, есть ещё варианты?
|
|
Цитата:
но не отключают запрос UAC.. кроме ElevatedShortcut от hb860 - http://winreview.ru/forum/viewtopic....f8048c39ea4fd5 http://snepi.ru/soft/sys/print:page,...eniya-uac.html http://www.oszone.net/12653/Schtasks --- если получится, так же, как ElevatedShortcut отпишусь.. :) |
Всем привет, такая проблема, как заставить нсис воспринимать пробел, т.е. выполняется команда и в какомто месте нужно поставить пробел в cmd это "" две кавычки, либо " ", но нсис невкакую нехочит их принять ставит вместо пустого значения эти самые кавычки, как решить то? :drug:
|
Limonica, не совсем понятно что вы хотите получить, неплохо было бы пример этой строки. Но попробуйте
Код:
'ваша команда ' Код:
Name "Test" |
profcom, именно это мне и помогло, спасибо.
|
помоги, пожалуйста, работаю с NSIS только неделю. Создаю свою страничку с двумя полями для указания пути к (двум) файлам. Работаю в HM NIS Edit 2.0.3. При запуске компоненты dirRequest не отображаются. В чём ошибка?
|
snezhinka, хотелось бы по больше информации. А так гадать в чем проблема можно долго. Отображается ли сама кастомная страничка или только контролы не отображаются? Какая версия NSIS unicod или ansi (в unicod работать не будет)? И вообще желательно сам скрипт увидеть что бы найти ошибку.
|
Возможно сделать контрол типа CheckBoxList ? (список с чекбоксами и со скроллом)
Как? |
Ткните, пожалуйста. Не могу найти.
Ситуация: Кастом страница. Пользователь вводит данные, нажимает далее. Инстолятор проверяет данные и, если они не верны, пишет что "что-то там неправильно" и заставляет ещё раз заполнять форму. Вопрос. Код:
Page custom fmPageModuleInstallCreate fmPageModuleInstallDestroy |
Цитата:
Код:
Page custom fmPageModuleInstallCreate fmPageModuleInstallDestroy |
profcom, не только textedit. Есть ещё много контролов, которые надо проверить. Проверять в рантайме каждый контрол на нескольких страницах достаточно накладно.
Спасибо, что откликнулись. |
Цитата:
|
Я пробовал сделать в рантайме. Говорю - накладно. Если не будет варианта другого оставлю.
Второй вариант тоже не плох, но я не знаю какая страница будет следующей... шесть вариантов... и, по-моему, это не очевидно. Следующий разработчик после меня не разберёт, что я имел ввиду. |
Цитата:
если не верно введенные параметры делаем прерывание одной инструкцией: Abort и все.. никаких извращений.. |
kotkovets, когда будите обновлять справочник? Могу написать статейку, где подробно опишу, как делать плагины с помощью Delphi.
|
shut
ИМХО не имеет смысла. В сети куча сорцов. Разбирай не хочу. А написание плагина зависит только от желания программиста |
Krinkels, разные ситуации бывают. Например, моему шефу приспичило окно для ввода пароля сделать достаточно креативным... похожего не нашёл и пришлось написать плагин.
|
Цитата:
|
shut
Бывает и такое. Но как по мне так это лишние сложности. Проще все это сделать на инно, там и инсталятор можно оформить по вкусу, и ввод пароля сделать более креативным. Но NSIS я люблю за отсутствие интерпретатора, и за малый вес конечного продукта |
Цитата:
|
Цитата:
Цитата:
Цитата:
но главное, чтобы было написано грамотно и понятно среднестатическому пользователю. присылайте в личку.. если контент нормальный - будем добавлять. |
Цитата:
|
Цитата:
|
Уважаемый kotkovets, решил воспользоваться вашим плагином WinVer2.nsh для определения разрядности оси, однако при компиляции получаю такую бяку:
не подскажете из-за чего? |
Доброй ночи!
Как реализовать поддержку различных видов файлов лицензии Попробовал так Код:
!insertmacro MUI_PAGE_WELCOME что делать |
Добрый день!
Можно ли в nsis вывести окно с текстом и ссылками на определенные ресурсы? |
Цитата:
Или интересует что то типа окна сообщений? |
Цитата:
Типа у Вас старая версия программы передийте по этой ссылке чтобы скачать новую версию |
Цитата:
Детект установленной версии ПО Обычное сообщение - "у вас такая то версия, не желаете ли обновиться ?" Да Нет Если Да, то используем плагин - типа Inetc plug-in , с помощью которого скачиваем нужное. (обсуждение здесь : http://forums.winamp.com/showthread.php?t=198596) Можно конечно вывести отдельную кастомную страницу с вариациями ссылок и пр. Только надо ли ? |
XCV,
проблема у вас с кодировкой, в юникоде сохраняете хедер для юникодной NSIS. |
MKN, Спасибо
|
Цитата:
Код:
!insertmacro MUI_PAGE_WELCOME |
Добрый вечер!
Как можно выдрать число из этой строки "Extenstion35=bool" ${StrStrAdv} не работает почему-то |
Цитата:
читаем и не задаем вопрос как попугаи --> » StrCpy: очень полезная команда --- другой вариант: Код:
!include "StrFunc.nsh" Код:
!include "WordFunc.nsh" |
Ребят, нужен очень простой скрипт, помогите, смысл такой если есть права админа выполняется один скрипт, если нет другой, как правильно, но максимально просто реализовать, по типу:
Код:
IfFileExists "Проврка прав админа, посредством доступа к файлу, я хз ещё как" 0 ADMIN |
Limonica, а причем здесь IfFileExists - проверка наличие файла..
в справочнике - » UserInfo: Определение типа учетной записи и правами Код:
UserInfo::GetOriginalAccountType |
|
Время: 14:27. |
Время: 14:27.
© OSzone.net 2001-