Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
Lou Paloma
11-09-2022, 01:50
iglezz, Это то что нужно.А может ли он распаковать архивы (7zip) напрямую в место назначения минуя %temp%?
Lou Paloma,
Первый архив, включённый в установщик, можно распаковать непосредственно из файла установщика -- 7-zip (и построенный на его основе плагин nsis7z) это умеет делать изначально. Для этого достаточно, чтобы заголовок архива был найден в первых 8Mb файла.
Если архивов несколько, то простых решений нет.
Всем привет. Есть ли возможность "дополнять" готовый установщик? Мне нужно, каким-то образом добавлять определенную строку в установщик, чтобы после установки программы и запуске, программа могла прочитать данную строку. Так как строка постоянно разная, то просто зашить ее не получится.
kiff86,
Помести эту строку в, скажем, INI файл, рядом с установщиком, откуда будет считываться изменяемая информация.
Всем привет.
Я заиспользовал NSIS версии 3.x совместно с CMake/CPack для генерации простого инсталлятора. Я оставил в конфигурации только поддержку русского языка.
Но при запуске установщика я вижу, что перенос слов в заголовке и содержимом (в общем - везде) некорректный. Оно переносит не по `словам` - а по `любым` местам.
https://media.discordapp.net/attachments/799410689462501399/1036556995517501450/unknown.png?width=399&height=310
Есть ли какой-либо вариант это поправить, чтобы перенос был именно по словам?
Примеры непосредственно из каталога NSIS компилируются нормально?
Вобще в стандартном виндовом Static control, который здесь используется, текст так не переносится.
> Примеры непосредственно из каталога NSIS компилируются нормально?
Не пробовал, да и зачем.
> текст так не переносится.
Если использовать !insertmacro MUI_LANGUAGE "English" вместо !insertmacro MUI_LANGUAGE "Russian" то переносится нормально.
Но мне то нужен именно русский язык.
Что то тема заглохла...
Из последнего, достойного внимания :
NSIS версия 3.08
_https://sourceforge.net/projects/nsis/files/NSIS 3/3.08/
SysInfo Plugin
https://pawelporwisz.pl/nsis/plugins/SysInfo/SysInfo.php
Также интересно, кто и как "минимальным кодом" детектит Windows 11 (до последней циферки build_а ! :) )
и открепляет ярлыки из тулбара (UnPin application shortcuts to taskbar). Может есть какой приличный плагин для этого ?
(Жаль kotkovets нас бросил, а то бы помог, наколдовал бы давно... :) )
Также интересно, кто и как "минимальным кодом" детектит Windows 11 (до последней циферки build_а ! ) »
Достаточно проверить номер сборки, у Win11 он равен или выше c 22000
GetWinVer $0 Build
...
Комплектный WinVer.nsh содержит логику для LogicLib.nsh. (Более свежий WinVer.nsh нужно брать с гитхаба или sf.net)
${If} ${AtLeastBuild} 22000
MessageBox MB_OK "Win11"
${Else}
MessageBox MB_OK "Win10"
${EndIf}
открепляет ярлыки из тулбара (UnPin application shortcuts to taskbar). Может есть какой приличный плагин для этого ? »
Есть в комплекте
!include "Integration.nsh"
...
${UnpinShortcut} "путь к ярлыку"
Достаточно проверить номер сборки, у Win11 он равен или выше c 22000 »
Этого маловато будет... Хотелось бы знать полный build...
Вторую часть билда можно выдернуть из:
реестра:
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "UBR"
а лучше так:
!define GetWinVerBuild2 '!insertmacro GetWinVerBuild2'
!macro GetWinVerBuild2 out
ReadRegDWORD ${out} HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "UBR"
!macroend
cmd-команды ver :)
nsExec::ExecToStack `"$SYSDIR\cmd.exe" /c for /f "tokens=4 delims=.]" %B in ('ver') do @echo %B`
Pop $0
AlekseyPopovv
03-12-2022, 11:55
Жаль kotkovets нас бросил, а то бы помог, наколдовал бы давно... »
А что случилось?
А что случилось? »
С ним, надеюсь, ничего. А вот NSIS ему давно не интересен... Соответственно и тема...
Добрый день.
Кто, как говорится, "съел собаку в NSIS" и может объяснить, дать совет по возникшей проблеме с ExecWait?
Поскольку описание проблемы занимает много места, отправлю в PM.
Заранее благодарен.
Столкнулся с загадочным явлением:
В Windows 7x64 решил посмотреть даныые о сервис-паке и пр. Это значения, которые находятся в:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion]
"CSDVersion"="Service Pack 1"
и т.д.
Значения "и т.д." извлекаются без проблем, к примеру:
ReadRegStr $0 "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "ProductName"
а вот для "CSDVersion" извлекается пустое значение...
ReadRegStr $1 "SOFTWARE\Microsoft\Windows NT\CurrentVersion" "CSDVersion"
В то же время
Reg Query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion" /V CSDVersion
извлекает, что положено, т.е. "Service Pack 1"
Как это понимать ? (пробовал на двух разных машинах и с разными версиями NSIS)
ps. к слову, вышеприведённый в теме, код просмотра verbuild в Windows 11 - у меня не работает...
MKN,
Не ли тут опечатки или разницы в поведении из-за разной разрядности (nsis x86, win x64) ?
Для мини-проверки:
!define REGROOT HKLM
!define REGKEY "SOFTWARE\Microsoft\Windows NT\CurrentVersion"
!define REGVALUE "CSDVersion"
ReadRegStr $0 ${REGROOT} "${REGKEY}" "${REGVALUE}"
nsExec::ExecToStack `"$SYSDIR\reg.exe" query "${REGROOT}\${REGKEY}" /v "${REGVALUE}"`
Pop $1
Pop $1
MessageBox MB_OK "ReadReg: $0$\nReg Query: $1"
iglezz,
кракозябры в результате(первый Pop $0 наверное ? если нет, то ReadReg - без значения...) :
https://live.staticflickr.com/65535/52706197176_43e2476b63_o.jpg
Что за кодировка не понял... Пытался преобразовать через OemToChar - вообще ничего...
Кстати, подобные кракозябры в результате и при использовании wmic в Windows 11. Причём в первом слове (Microsoft вроде...)
При использовании OemToChar - выводится только слово Microsoft, остальное куда то пропадает...
В W7 всё ок.
MKN,
nsExec::ExecToStack /OEM `"$SYSDIR\reg.exe" query "${REGROOT}\${REGKEY}" /v "${REGVALUE}"`
Похоже там сообщение об ошибке.
Хз как ведёт себя Win7x64
Стои попробовать установить SetRegView 64 перед ReadRegStr ...
и
nsExec::ExecToStack /OEM `"$WINDIR\Sysnative\reg.exe" query "${REGROOT}\${REGKEY}" /v "${REGVALUE}"`
ЗЫ
Содержимое меседжбоксов (вместо снятия скриншота) можно копировать как текст (Ctrl+C), это очень старая и полезная штука
Стои попробовать установить SetRegView 64 перед ReadRegStr ... »
Ура ! Только почему это касается только CSDVersion ?
очень старая и полезная штука
(привык к скриншотам, как к подтверждению увиденного... :) )
Ошибка: Не удается найти указанный раздел или параметр в реестре.
Кодировка там была OEM866. /OEM помог(а как быть для ExecDos::exec ? ). И почему не сработал OemToChar ?
Только почему это касается только CSDVersion ? »
Не факт что и мелкомягкие программисты это могут объяснить.
Это очередное подтверждение, что 32-бит программе в 64-бит системе для доступа к ресурсам (реестру, файлам) стоит использовать соответствующие мехнизмы, а не надеятся, что сработает и так.
И почему не сработал OemToChar »
Навскидку потому что OemToChar преобразует OEM в ANSI строку с завершающим нулём, а скрипт юникодный и каждый второй байт у нас нулевой. ответ ниже
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC