[архив].: NSIS - все вопросы :.

Ответить
 • Просмотры: 55
Аватара пользователя
MKN

Re: [архив].: NSIS - все вопросы :.

Сообщение MKN »

Доброго времени суток!



При создании аддона с помощью NSIS возникла необходимость читать значения ключа из реестра по "плавающему" пути.

Значение ключа KEY лежит в HKEY_LOCAL_MACHINE\Software\Alter\ВЕРСИЯ\Prog . где "ВЕРСИЯ" - версия программы, которая

может быть любой и постоянно меняется... Как в этом случае можно считать значение ключа KEY?



Заранее спасибо.
Аватара пользователя
MKN

Re: [архив].: NSIS - все вопросы :.

Сообщение MKN »

Ещё раз про значок в полосе шапки окна ( рядом с "Установка и т.д." ) - как его вообще убрать ?

Предположил, что с помощью WindowIcon on|off ( 4.8.1.45 Sets whether or not the installer's icon is being displayed. ) для этого.

Но нет не помогло...



И относительно ShowInstDetails nevershow - кнопка то скрывается, а устанавливаемый контент над "индикатором прогресса" установки, мельтешит всё равно. Как это ликвидировать ?



Допустимо ли с скрипте совпадение SetOutPath для файла-папки и точно такого же местоположения в File ? Т.е. компилировать файлы оттуда, куда и устанавливать...



Как реализовать такую конструкцию (для администратора с оч. "шаловливыми пользователями" ?

Перед установкой программы поверх уже установленной предыдущей версии, надо сделать бэкап её настроек(ini файлика), который останется в папке вновь установленной программы), но :

Этот бэкап поместить в запароленный архив, и назначить файлу или"максимальные" права доступа или соответствующий атрибут (чтобы этот архив хотя бы с ходу нельзя было удалить).
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

kotkovets

Примеры ВЕРСИЯ: 10.0, 10.4, 11.8, 12.3, 13.0, 14.7 и т.д. Из общего тут, вроде только точка в третьем разряде. Версий уже слишком много вышло, да и выйдет еще множество, поэтому просто завязываться на конкретное поле - не самый лучший вариант. Все ведь не перечислишь. И для будущих версий тоже должно работать... Вот и ломаю голову.
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Цитата martinello:



Все ведь не перечислишь
[архив].: NSIS - все вопросы :.




Может быть, но кое-что все же, можно сделать.

По сути значения "версия" состоит из 3 цифр и четырех символов.

1. Натравливаем в цикле с перечислением, фильтр, который отсекает все значения, кроме числовых.

2. Проверяем длину строк на 4 символа, все остальное отсекаем.

3. У нас уже есть путь к ветке реестра, можем уже считывать ключи реестра

Недостаток в том, если есть еще ветки удовлетворяющим условиям, то будут ложные данные считаны

И довольно все это сложно перемудрено не туда...



Код:

Код: Выделить всё

!include "MUI2.nsh"
!include "WordFunc.nsh"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
OutFile "StrDo.exe"
ShowInstDetails show
Section
 ${Do}
    ;перечисляем разделы в ветке After (разделы в $1)
    EnumRegKey $1 HKLM "SOFTWARE\After" $0
    IntOp $0 $0 + 1
    ${StrFilter} "$1" "1" "." "" "$2" ;фильтр: только цифры и точка в $2
    StrLen $3 $2 ;вычисляем длину строки в $3
    ${IfNot} $2 == "" ; оператор If с условием, если $2 не равно пустому значению
    ${AndIf} $3 = 4  ; логика И (если $2 не равно пустому значению И длина строки $3 = 4) 
          DetailPrint "найденный раздел: $1"
          ReadRegStr $4 HKLM "SOFTWARE\After\$1\Prog" "Key" ;теперь можно считывать значения ключеей (к примеру: Key)
          DetailPrint `Значение ключа [ Key ] - "$4"` 
         ${Break} ;выход из цикла
   ${EndIf} 
 ${LoopUntil} $1 == ""
SectionEnd
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Цитата kotkovets:



И довольно все это сложно перемудрено не туда...
[архив].: NSIS - все вопросы :.




Это верно...

Решил проблему с помощью плагина Registry для NSIS
http://nsis.sourceforge.net/Registry_plug-in


В итоге открываю ветку для поиска HKEY_LOCAL_MACHINE\Software\Alter и ищу в ней тот самый KEY.

Спасибо за код, он пригодится как пример для похожих подзадач Изображение
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

Доброго времени суток!



Кто-нибудь знает, есть ли возможность изменения текста на начальной странице удаления MUI_UNPAGE_WELCOME

и на конечной странице удаления MUI_UNPAGE_FINISH ?

В справке об этом молчок... Упоминается почему-то только страница подтверждения MUI_UNPAGE_CONFIRM.

Правда, есть еще UninstallText, но его включение никаким образом не влияет ни на одну надпись (или я не так им пользуюсь).



Заранее спасибо.
Аватара пользователя
MKN

Re: [архив].: NSIS - все вопросы :.

Сообщение MKN »

Цитата martinello:



Кто-нибудь знает, есть ли возможность изменения текста на начальной странице удаления MUI_UNPAGE_WELCOME
[архив].: NSIS - все вопросы :.




Достаточно соответствующие хедеры посмотреть. Для MUI2 [Welcome.nsh] - одинаково и для MUI [System.nsh] :

!define MUI_UNTEXT_WELCOME_INFO_TITLE "Всем привет!"

!define MUI_UNTEXT_WELCOME_INFO_TEXT "Это моя супер прога!"

UninstallText text [subtext] - применяется при классическом фейсе, на страничке confirm page, на модерне напрямую эта команда игнорируется, потому что "заменена" константами !define

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

В NSIS нет стандартных страничек приветствия и завершения. Эти странички "самодельные" и прорисовываются через nsDialogs - для MUI2, и через InstallOptions - для MUI, при классике выбрать можно любой из этих стандартных плагинов в комлекте NSIS
Аватара пользователя
mshak

Re: [архив].: NSIS - все вопросы :.

Сообщение mshak »

Цитата kotkovets:



Достаточно соответствующие хедеры посмотреть. Для MUI2 [Welcome.nsh] - одинаково и для MUI [System.nsh] :
[архив].: NSIS - все вопросы :.




Спасибо огромное за помощь! Изображение Про хедеры совсем из головы вылетело...



Столкнулся с другой проблемой. Нужно в текстовом файле искать строки, добавлять, удалять.

Если с поиском и вставкой проблем нет, то вот полностью удалить строку не получается - после

удаления в файле на этом месте образуется пустой абзац (строка без символов).

Делал через ${LineFind} и ${WordReplace}.

Как можно полностью удалить найденную строчку?..
Аватара пользователя
kotkovets

Re: [архив].: NSIS - все вопросы :.

Сообщение kotkovets »

martinello

В NSIS пустая строка означает: $\r$\n

$\n - создание новой строки

$\r - перевод каретки на начало строки

$\t - знак табуляции

Те самые невидимые символы строки. Через макрос ${LineFind} вот так будет это выглядеть:



Код:

Код: Выделить всё

 
${WordReplace} '$R9' 'Строка' '' "+" '$R9'
${Select} "$R9"
  ${Case3} "$\r$\n" "$\r" "$\n"
       ${WordReplace} '$R9' '$R9' '' "+" '$R9'
  ${CaseElse}
${EndSelect}

Так как идет построчное чтение файла, то пустые строки удалятся, кроме последней (особо то и не нужно)

Макрос ${WordReplace} вложен в логику, для того, чтобы текст не превратился в одну строчку Изображение
Аватара пользователя
mshak

Re: [архив].: NSIS - все вопросы :.

Сообщение mshak »

спасибо. но про эти команды я знаю. меня интерисует раскрасить конкретную запись лога.

точнее я это уже сделал.. но скрипт пока сыроват для его публикации Изображение... опубликую на днях.
Ответить

Вернуться в «Автоматическая установка приложений»