PDA

Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 [133] 134 135 136 137 138 139 140 141 142 143 144 145 146

Lou Paloma
11-09-2022, 01:50
iglezz, Это то что нужно.А может ли он распаковать архивы (7zip) напрямую в место назначения минуя %temp%?

iglezz
11-09-2022, 12:25
Lou Paloma,
Первый архив, включённый в установщик, можно распаковать непосредственно из файла установщика -- 7-zip (и построенный на его основе плагин nsis7z) это умеет делать изначально. Для этого достаточно, чтобы заголовок архива был найден в первых 8Mb файла.
Если архивов несколько, то простых решений нет.

kiff86
07-10-2022, 18:23
Всем привет. Есть ли возможность "дополнять" готовый установщик? Мне нужно, каким-то образом добавлять определенную строку в установщик, чтобы после установки программы и запуске, программа могла прочитать данную строку. Так как строка постоянно разная, то просто зашить ее не получится.

MKN
12-10-2022, 19:29
kiff86,
Помести эту строку в, скажем, INI файл, рядом с установщиком, откуда будет считываться изменяемая информация.

kuzulis
02-11-2022, 13:55
Всем привет.

Я заиспользовал NSIS версии 3.x совместно с CMake/CPack для генерации простого инсталлятора. Я оставил в конфигурации только поддержку русского языка.

Но при запуске установщика я вижу, что перенос слов в заголовке и содержимом (в общем - везде) некорректный. Оно переносит не по `словам` - а по `любым` местам.

https://media.discordapp.net/attachments/799410689462501399/1036556995517501450/unknown.png?width=399&height=310

Есть ли какой-либо вариант это поправить, чтобы перенос был именно по словам?

iglezz
02-11-2022, 18:12
Примеры непосредственно из каталога NSIS компилируются нормально?
Вобще в стандартном виндовом Static control, который здесь используется, текст так не переносится.

kuzulis
03-11-2022, 10:23
> Примеры непосредственно из каталога NSIS компилируются нормально?

Не пробовал, да и зачем.

> текст так не переносится.

Если использовать !insertmacro MUI_LANGUAGE "English" вместо !insertmacro MUI_LANGUAGE "Russian" то переносится нормально.

Но мне то нужен именно русский язык.

MKN
02-12-2022, 11:17
Что то тема заглохла...
Из последнего, достойного внимания :
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 нас бросил, а то бы помог, наколдовал бы давно... :) )

iglezz
03-12-2022, 01:51
Также интересно, кто и как "минимальным кодом" детектит 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} "путь к ярлыку"

MKN
03-12-2022, 09:17
Достаточно проверить номер сборки, у Win11 он равен или выше c 22000 »
Этого маловато будет... Хотелось бы знать полный build...

iglezz
03-12-2022, 11:36
Вторую часть билда можно выдернуть из:
реестра:
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 нас бросил, а то бы помог, наколдовал бы давно... »
А что случилось?

MKN
03-12-2022, 13:01
А что случилось? »
С ним, надеюсь, ничего. А вот NSIS ему давно не интересен... Соответственно и тема...

VSS
07-02-2023, 12:18
Добрый день.

Кто, как говорится, "съел собаку в NSIS" и может объяснить, дать совет по возникшей проблеме с ExecWait?
Поскольку описание проблемы занимает много места, отправлю в PM.
Заранее благодарен.

MKN
23-02-2023, 12:31
Столкнулся с загадочным явлением:
В 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 - у меня не работает...

iglezz
23-02-2023, 15:03
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"

MKN
23-02-2023, 16:16
iglezz,
кракозябры в результате(первый Pop $0 наверное ? если нет, то ReadReg - без значения...) :
https://live.staticflickr.com/65535/52706197176_43e2476b63_o.jpg
Что за кодировка не понял... Пытался преобразовать через OemToChar - вообще ничего...

Кстати, подобные кракозябры в результате и при использовании wmic в Windows 11. Причём в первом слове (Microsoft вроде...)
При использовании OemToChar - выводится только слово Microsoft, остальное куда то пропадает...
В W7 всё ок.

iglezz
23-02-2023, 16:54
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), это очень старая и полезная штука

MKN
23-02-2023, 17:03
Стои попробовать установить SetRegView 64 перед ReadRegStr ... »
Ура ! Только почему это касается только CSDVersion ?

очень старая и полезная штука
(привык к скриншотам, как к подтверждению увиденного... :) )
Ошибка: Не удается найти указанный раздел или параметр в реестре.
Кодировка там была OEM866. /OEM помог(а как быть для ExecDos::exec ? ). И почему не сработал OemToChar ?

iglezz
23-02-2023, 18:29
Только почему это касается только CSDVersion ? »
Не факт что и мелкомягкие программисты это могут объяснить.
Это очередное подтверждение, что 32-бит программе в 64-бит системе для доступа к ресурсам (реестру, файлам) стоит использовать соответствующие мехнизмы, а не надеятся, что сработает и так.

И почему не сработал OemToChar »
Навскидку потому что OemToChar преобразует OEM в ANSI строку с завершающим нулём, а скрипт юникодный и каждый второй байт у нас нулевой. ответ ниже




© OSzone.net 2001-2012