Показать полную графическую версию : [архив].: NSIS - все вопросы :.
Проверку по реестру я делать умею.
Я ищу способ автоматического нахождения пути когда записей в реестре вообще нет (например если винда была переустановлена, а игра осталась).
Пример:
Есть 10 человек. трое установили игру с одного репака (запись в реестре по Uninstall одна), 7 с другого (запись по Uninstall другая), при этом двое из них переустановили винду (записи в реестре нет вообще). Каждый устанавливал игру в разные папки. Нужен такой патч, который находил бы правильный путь установки во всех случаях не напрягая пользователя вводом пути вручную.
Я вижу только один способ, поиск по всем локальным дискам исполняемого файла игры, при нахождении - считывание пути к нему и указание этого пути в качестве пути для установки, в случае отсутсвия пути - выбор пути вручную. Но я нигде не нахожу способов поиска пути к произвольному файлу методами NSIS :(
И еще, не понимаю как работает CRCCheck, можете объяснить?
kotkovets
20-08-2011, 16:04
И еще, не понимаю как работает CRCCheck, можете объяснить? »
CRCCheck on|off|force
Команда записывается вне секции и функции.
если CRCCheck on - будет проверятся целостность инсталлера, т.е уже никто не может изменить инсталлер,
например, вы поменяли иконку инсталлера с помощью редактора ресурсов,
то при запуске инсталлера вы получите крах инсталлера и критическое сообщение.
По умолчанию проверка на целостность инсталлера включена.
если CRCCheck off - целостность инсталлера не будет проверяться.
kotkovets
20-08-2011, 18:21
Я вижу только один способ, поиск по всем локальным дискам исполняемого файла игры, при нахождении - считывание пути к нему и указание этого пути в качестве пути для установки, в случае отсутсвия пути - выбор пути вручную. Но я нигде не нахожу способов поиска пути к произвольному файлу методами NSIS »
В оригинальной справке введите поиск по указателю: Locate
Задействуйте макрос Lосаte из хидера FileFunc.nsh, не забудьте включить хидер в тело скрипта
!include "FileFunc.nsh"
Поиск по всем локальным дискам займет наверно много времени... :o
И вам для начала нужно перечислить все локальные диски на компьютере.
С помощью NSIS это решаемо.
OutFile Locate.exe
!include "FileFunc.nsh"
Section
${GetDrives} "HDD" "GetDrives" ;перечисляем все HDD диски
MessageBox MB_OK "$R0" IDOK
SectionEnd
Function GetDrives
${Locate} "$9" "/L=F /M=*.exe" "Locate" ;в переменной $9 буква диска, поиск по маске *.exe
StrCmp `$R1` "файл.exe" 0 +2
Push "StopGetDrives"
Push $0
FunctionEnd
Function Locate
StrCmp `$R7` "файл.exe" 0 +4 ;если $R7 равно "файл.exe", то...
StrCpy `$R0` `$R9` ;в переменной $R0 - путь к исполняемому файлу игры
StrCpy `$R1` `$R7`
Push "StopLocate" ;останавливаем поиск
Push $0
FunctionEnd
Поиск по всем локальным дискам займет наверно много времени... »
Нда, действительно много времени занимает, потестил.
Тогда можно попробовать решить проблему так: исключим из задачи людей с отсутствующими записями в реестре.
Можно ли тогда задать $INSTDIR просто указав несколько путей InstallDirRegKey? или тогда как задать поиск нужного ключа по реестру?
kotkovets
20-08-2011, 19:05
тогда как задать поиск нужного ключа по реестру »
EnumRegKey - по индексу(указателю) в оригинальной справке, перечисление ключей.
А вообще, по всем делам с поиском в реестре ключей будет скоро в новой версии справочника, пока все секреты не буду говорить..:)
Вы потестите скрипт по локали (поиск по маске *.exe - значительно ускоряет поиск), у меня 5 дисков - поиск нужного файла у меня заняло около минуты - засунул тестовый файл поглубже.
В оригинальной справке введите поиск по указателю: Locate »
И вам для начала нужно перечислить все локальные диски на компьютере. »
Я уже было хотел выложить переведённые команды из новой версии справочника :drug:
Но т.к. вариант не подошел, не буду :tongue:
скоро в новой версии справочника, пока все секреты не буду говорить.. »
И мне пора заканчивать ;)
Ну а по вопросу:
Можно ли тогда задать $INSTDIR просто указав несколько путей InstallDirRegKey? или тогда как задать поиск нужного ключа по реестру? »
Registry plug-in (http://nsis.sourceforge.net/Registry_plug-in)
Вы потестите скрипт по локали (поиск по маске *.exe »
Как правило имя EXE файла у игр не меняют, можно впринципе и полное имя указать, "пойдёт" ещё быстрее ;)
Я указывал полное имя, у меня поиск занял минуту, но надо помнить, что у кого-то может быть ноут с одним диском С и установлеными прогами типа фотошопа и т.п., да еще и не очень мощный, тогда поиск может и на 10 минут затянуться. так что не вариант. буду пока с реестром эксперементировать, а те у кого в реестре пусто - не облезут, ручками путь укажут :)
kotkovets
20-08-2011, 19:30
Я уже было хотел выложить переведённые команды из новой версии справочника »
K.A.V у меня будет библиотека полностью на API - стандартные команды не блещут универсальностью...
Получилось почти аналог Registry
Могу скинуть либу в PM c описанием...
стандартные команды не блещут универсальностью... »
Ну это не повод их хронить, забывать про их существование и не переводить справку ;)
Одна API библиотека это хорошо, но, например мне проще использовать уже знакомые команды, к тому же, мне их вполне хватает даже для написание софта, не говоряю уже про инсталляторы :biggrin:
Ну а некоторые специфические функции, конечно, стоит уже писать на API как специальные плагины, но для инсталляторов это дело редкое...
kotkovets
20-08-2011, 19:46
Ну это не повод их хронить, забывать про их существование »
Я имел в виду, что в макросах не эффективно использовать, директивы работы с реестром, дело в том что, эти директивы не принимают корневую ветку, как значение переменной, а как константу - а это сильно усложняет написание библиотеки и скорость работы.
хватает даже для написание софта »
я бы не отважился писать серьезный софт на NSIS......уж слишком медленно он работает с переменными,
а стек - самое слабое место, его очень легко повредить.
Я имел в виду, что в макросах не эффективно использовать, директивы работы с реестром »
А я подумал про стандартные команды NSIS :lol:
Ну тогда Да, с этим я соглашусь ;)
я бы не отважился писать серьезный софт на NSIS »
А я отважился :biggrin:
Да не в рекламу будет написано, но функциональность, согласитесь, приличная, если узнать все возможности программ...
Настройка Windows XP (http://soft.oszone.net/program/3356/Nastroika_Windows_XP/)
SFX Creator (http://forum.oszone.net/thread-151756.html)
T-12 Installer (http://forum.oszone.net/thread-150151.html)
KillProc (http://winxpregp.narod.ru/killproc/index.html)
kotkovets
20-08-2011, 20:18
функциональность, согласитесь, приличная »
Я не спорю :) функциональности, более чем достаточно, я просто подумал чем больше функции добавляешь в софт написанный на NSIS, тем страшнее наверно становится разработчику софта... :)
тем страшнее наверно становится разработчику софта... »
ну это зависит от разработчика, у меня в коде порядок и никаких проблем ;)
Исходник программы "Настройка Windows XP" содержит в себе 79961 строк NSIS кода (только главный файл)...И ниче так, порядок :biggrin:
P.S.
Оффтопим
kotkovets
20-08-2011, 20:54
Исходник программы "Настройка Windows XP" содержит в себе 79961 строк »
Боже упаси!!!!! :o
Исходник программы "Настройка Windows XP" содержит в себе 79961 строк NSIS кода (только главный файл)...И ниче так, порядок »
Вы наверно где то в середине 79961 забыли поставить запятую. :closed-to
--
Вы наверно где то в середине 79961 забыли поставить запятую. »
Знаете, я никому ничего доказывать не собираюсь, я уже давно привык к тому, что мне не верят в том, что именно я это делаю и это на самом деле...что говорить о вас, когда даже мои друзья не верят :lol:
Типа не забыл поставить запятую (http://img810.imageshack.us/img810/7930/41931124.png)
Если вы скачаете программу, прочитаете справку к ней и полностью ознакомитесь со всеми её возможностями, то я думаю вас не удивит данное количество строк в коде
Знаете, я никому ничего доказывать не собираюсь, я уже давно привык к тому, что мне не верят в том, что именно я это делаю »
Я просто немного пошутил, мне трудно даже было представить, сколько же весит этот скрипт в м-байтах.
Если вы такой ранимый человек, значит вы творческий человек, а это в наше время уже становится редкостью.
Программы ваши я уже давно скачал, мне только не понятна особенность SFX Creator.
Практически каждый приличный архиватор имеет функцию SFX и сжимают многие из них получше NSIS.
сколько же весит этот скрипт в м-байтах »
3,53 МБ
Если вы такой ранимый человек, значит вы творческий человек »
Творческий, но не ранимый ;)
мне только не понятна особенность SFX Creator »
Практически каждый приличный архиватор имеет функцию SFX и сжимают многие из них получше NSIS »
Дело вовсе не в степени сжатия файлов, а что можно сделать из SFX архива, если вы сравните возможности создания SFX архива с помощью WinRAR, 7-ZIP и т.д. с SFX Creator, вы увидите что "те" очень многого не умеют ;)
вы увидите что "те" очень многого не умеют »
Так вкратце опишите, если не трудно!
Цитата K.A.V.:вы увидите что "те" очень многого не умеют »
sawe, - Так вкратце опишите, если не трудно!
Это же совершенно разные программы - WinRAR, 7-ZIP и т.д. и SFX Creator
SFX Creator создан для "облегчения труда" NSIS пользователям. А вышеназванные архиваторы, они и в Африке архиваторы, никакого отношения к созданию инсталляторов не имеющие (а то, что с их помощью кое что примитивное установочное можно сделать, всерьёз принимать нельзя.)
PS
K.A.V., всё же название программы - SFX Creator, сбивает с толку и не отражает действительной её сути и оригинального назначения...
Может стОит "окрестить" её как то по другому ? NSIS Wizard, NSIS Helper, Easy NSIS Setup Builder и т.п. ?
Без "SFX". Ведь самораспаковкой созданного сценария дистрибутива, дело не ограничится, а "вырастет" в создание полноценного инсталлятора ?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC