[архив].: NSIS - все вопросы :.
-
MKN
Re: [архив].: NSIS - все вопросы :.
Доброго времени суток!
При создании аддона с помощью NSIS возникла необходимость читать значения ключа из реестра по "плавающему" пути.
Значение ключа KEY лежит в HKEY_LOCAL_MACHINE\Software\Alter\ВЕРСИЯ\Prog . где "ВЕРСИЯ" - версия программы, которая
может быть любой и постоянно меняется... Как в этом случае можно считать значение ключа KEY?
Заранее спасибо.
При создании аддона с помощью NSIS возникла необходимость читать значения ключа из реестра по "плавающему" пути.
Значение ключа KEY лежит в HKEY_LOCAL_MACHINE\Software\Alter\ВЕРСИЯ\Prog . где "ВЕРСИЯ" - версия программы, которая
может быть любой и постоянно меняется... Как в этом случае можно считать значение ключа KEY?
Заранее спасибо.
-
MKN
Re: [архив].: NSIS - все вопросы :.
Ещё раз про значок в полосе шапки окна ( рядом с "Установка и т.д." ) - как его вообще убрать ?
Предположил, что с помощью WindowIcon on|off ( 4.8.1.45 Sets whether or not the installer's icon is being displayed. ) для этого.
Но нет не помогло...
И относительно ShowInstDetails nevershow - кнопка то скрывается, а устанавливаемый контент над "индикатором прогресса" установки, мельтешит всё равно. Как это ликвидировать ?
Допустимо ли с скрипте совпадение SetOutPath для файла-папки и точно такого же местоположения в File ? Т.е. компилировать файлы оттуда, куда и устанавливать...
Как реализовать такую конструкцию (для администратора с оч. "шаловливыми пользователями" ?
Перед установкой программы поверх уже установленной предыдущей версии, надо сделать бэкап её настроек(ini файлика), который останется в папке вновь установленной программы), но :
Этот бэкап поместить в запароленный архив, и назначить файлу или"максимальные" права доступа или соответствующий атрибут (чтобы этот архив хотя бы с ходу нельзя было удалить).
Предположил, что с помощью 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
Примеры ВЕРСИЯ: 10.0, 10.4, 11.8, 12.3, 13.0, 14.7 и т.д. Из общего тут, вроде только точка в третьем разряде. Версий уже слишком много вышло, да и выйдет еще множество, поэтому просто завязываться на конкретное поле - не самый лучший вариант. Все ведь не перечислишь. И для будущих версий тоже должно работать... Вот и ломаю голову.
Примеры ВЕРСИЯ: 10.0, 10.4, 11.8, 12.3, 13.0, 14.7 и т.д. Из общего тут, вроде только точка в третьем разряде. Версий уже слишком много вышло, да и выйдет еще множество, поэтому просто завязываться на конкретное поле - не самый лучший вариант. Все ведь не перечислишь. И для будущих версий тоже должно работать... Вот и ломаю голову.
-
kotkovets
Re: [архив].: NSIS - все вопросы :.
Цитата martinello:
Все ведь не перечислишь
Может быть, но кое-что все же, можно сделать.
По сути значения "версия" состоит из 3 цифр и четырех символов.
1. Натравливаем в цикле с перечислением, фильтр, который отсекает все значения, кроме числовых.
2. Проверяем длину строк на 4 символа, все остальное отсекаем.
3. У нас уже есть путь к ветке реестра, можем уже считывать ключи реестра
Недостаток в том, если есть еще ветки удовлетворяющим условиям, то будут ложные данные считаны
И довольно все это сложно перемудрено не туда...
Код:
Все ведь не перечислишь
[архив].: 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:
И довольно все это сложно перемудрено не туда...
Это верно...
Решил проблему с помощью плагина Registry для NSIS
В итоге открываю ветку для поиска HKEY_LOCAL_MACHINE\Software\Alter и ищу в ней тот самый KEY.
Спасибо за код, он пригодится как пример для похожих подзадач
И довольно все это сложно перемудрено не туда...
[архив].: NSIS - все вопросы :.
Это верно...
Решил проблему с помощью плагина Registry для NSIS
http://nsis.sourceforge.net/Registry_plug-in
В итоге открываю ветку для поиска HKEY_LOCAL_MACHINE\Software\Alter и ищу в ней тот самый KEY.
Спасибо за код, он пригодится как пример для похожих подзадач

-
kotkovets
Re: [архив].: NSIS - все вопросы :.
Доброго времени суток!
Кто-нибудь знает, есть ли возможность изменения текста на начальной странице удаления MUI_UNPAGE_WELCOME
и на конечной странице удаления MUI_UNPAGE_FINISH ?
В справке об этом молчок... Упоминается почему-то только страница подтверждения MUI_UNPAGE_CONFIRM.
Правда, есть еще UninstallText, но его включение никаким образом не влияет ни на одну надпись (или я не так им пользуюсь).
Заранее спасибо.
Кто-нибудь знает, есть ли возможность изменения текста на начальной странице удаления MUI_UNPAGE_WELCOME
и на конечной странице удаления MUI_UNPAGE_FINISH ?
В справке об этом молчок... Упоминается почему-то только страница подтверждения MUI_UNPAGE_CONFIRM.
Правда, есть еще UninstallText, но его включение никаким образом не влияет ни на одну надпись (или я не так им пользуюсь).
Заранее спасибо.
-
MKN
Re: [архив].: NSIS - все вопросы :.
Цитата martinello:
Кто-нибудь знает, есть ли возможность изменения текста на начальной странице удаления MUI_UNPAGE_WELCOME
Достаточно соответствующие хедеры посмотреть. Для 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
Кто-нибудь знает, есть ли возможность изменения текста на начальной странице удаления 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 - все вопросы :.
Цитата kotkovets:
Достаточно соответствующие хедеры посмотреть. Для MUI2 [Welcome.nsh] - одинаково и для MUI [System.nsh] :
Спасибо огромное за помощь!
Про хедеры совсем из головы вылетело...
Столкнулся с другой проблемой. Нужно в текстовом файле искать строки, добавлять, удалять.
Если с поиском и вставкой проблем нет, то вот полностью удалить строку не получается - после
удаления в файле на этом месте образуется пустой абзац (строка без символов).
Делал через ${LineFind} и ${WordReplace}.
Как можно полностью удалить найденную строчку?..
Достаточно соответствующие хедеры посмотреть. Для MUI2 [Welcome.nsh] - одинаково и для MUI [System.nsh] :
[архив].: NSIS - все вопросы :.
Спасибо огромное за помощь!
Про хедеры совсем из головы вылетело...Столкнулся с другой проблемой. Нужно в текстовом файле искать строки, добавлять, удалять.
Если с поиском и вставкой проблем нет, то вот полностью удалить строку не получается - после
удаления в файле на этом месте образуется пустой абзац (строка без символов).
Делал через ${LineFind} и ${WordReplace}.
Как можно полностью удалить найденную строчку?..
-
kotkovets
Re: [архив].: NSIS - все вопросы :.
martinello
В NSIS пустая строка означает: $\r$\n
$\n - создание новой строки
$\r - перевод каретки на начало строки
$\t - знак табуляции
Те самые невидимые символы строки. Через макрос ${LineFind} вот так будет это выглядеть:
Код:
Так как идет построчное чтение файла, то пустые строки удалятся, кроме последней (особо то и не нужно)
Макрос ${WordReplace} вложен в логику, для того, чтобы текст не превратился в одну строчку
В 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 - все вопросы :.
спасибо. но про эти команды я знаю. меня интерисует раскрасить конкретную запись лога.
точнее я это уже сделал.. но скрипт пока сыроват для его публикации
... опубликую на днях.
точнее я это уже сделал.. но скрипт пока сыроват для его публикации
... опубликую на днях.