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

Iska
15-12-2018, 15:13
Интересно, как долго висит процесс SFX модуля ? Если процесс ещё существует во время запуска NSIS инсталлятора, »
Только если задан флаг:
Программа установки / Ждать и устанавливать код возврата

Если включён этот параметр, SFX ждёт завершения работы каждой программы установки, указанной для запуска после извлечения данных, и устанавливает код возврата исполняемого SFX-файла равным коду возврата программы установки. Если из-за какой-либо ошибки SFX не может запустить программу установки, то он возвращает свои собственные коды ошибки, такие же, как коды возврата WinRAR. Коды возврата можно изменить на указанную величину, введя её в поле "Коррекция кода возврата"

Flix
16-12-2018, 03:44
Встречайте NSIS v3.04 (релиз от 15 декабря 2018): страница загрузки (https://sourceforge.net/projects/nsis/files/NSIS%203/3.04/)

F.1 3.04

F.1.1 Changelog
F.1.1.1 Major Changes

Added IsNativeMachineArchitecture helper macros to x64.nsh
Added experimental WinVer "Windows as a Service" detection macros
Added MakeNSISW window info "spy" tool

F.1.1.2 Minor Changes

Added MUI_TEXTCOLOR setting
nsDialogs::OnNotify can now return values back to Windows
Added LIBRARY_INSTALL_EQUAL_VERSION InstallLib option
Added NTMARTA to preload list to fix rare Windows 7 security issue (bug #1204)
AddBrandingImage now supports dialog units
Fixed !macroundef of last defined macro bug
Fixed MultiUser caption string bug (bug #1012)
!undef issues warnings instead of errors
MakeNSIS prints -CMDHELP to stdout (bug #1203)
Removed LibraryLocal utility

F.1.1.3 Translations

Added Hindī (patch #289)
Updated Belarusian, German (bug #1023), Mongolian and Spanish (bug #1205)

Serg866
11-01-2019, 16:39
Привет, друзья!

Насчёт проверки запуска из архива - пример от Flix'a работает чётко.
Спасибо!
--------------------

Появилась ещё одна, а точнее две задачки по NSIS:

Можно ли определить тип видеокарты пользователя? (ATI или Nvidia).
И в зависимости от типа видюхи устанавливать файлы.

Также мне нужно определить, установлена ли у юзера Windows10.
В справке посмотрел, есть раздел "Определение ОС с помощью NSIS", но там только до Windows 8.

Я использую NSIS 3 c параметром Unicode true, правда не последнюю версию, а 3.0b2.

MKN
11-01-2019, 17:59
Можно ли определить тип видеокарты пользователя? »
самое простое, так :

;WMI.nsh - https://nsis.sourceforge.io/WMI_header
OutFile "GetVideoController.exe"
!include WMI.nsh

Section
${WMIGetInfo} root\CIMV2 Win32_VideoController AdapterCompatibility callback_Function
SectionEnd

Function callback_Function
System::Call "user32::OemToChar(t R2, t. r2)" ; нужно, если вдруг символы будут "кракозябрами"
MessageBox MB_OK "$2"
FunctionEnd

Serg866
12-01-2019, 12:14
MKN, благодарю!
Пример показал инфу, что у меня видеокарта от AMD (правильно).
Кстати, в папке скрипта зачем-то создался пустой bat-файл "TempWmicBatchFile.bat"
-
Подскажите, пожалуйста, по какому параметру работать дальше?
Т.е если драйверы от AMD, то чтобы устанавливались определённые файлы.
-
Работать с текстовой строкой "Advanced Micro Devices, Inc." ?
Типа, если $2 = Advanced Micro Devices, Inc., то устанавливаем файлы.

Или как-то иначе?

Serg866
22-01-2019, 23:28
Вопрос выше актуален. Друзья-коллеги, помогите разобраться.

MKN
23-01-2019, 10:08
Serg866,
Так всё очевидно... Сам же уже и ответил :
если $2 = Advanced Micro Devices, Inc., то устанавливаем файлы. »
Если в переменной "то", то делаем "это". Простая логика.

динозавра
14-02-2019, 17:57
Всем привет. Как сделать чтобы окно сообщений запускалось на другом языке, если язык виндовс не русский?
К примеру имеем вот такое сообщение

!define NAME "0"
VIProductVersion "0.0.0.0"
VIAddVersionKey "0" "0"
VIAddVersionKey "FileVersion" "${PRODUCT_VERSION}"
VIAddVersionKey "FileDescription" "0"
Var RunParamVar
Name "${NAME}"
OutFile "0.exe"
Icon "0\0.ico"
SilentInstall silent
!include "x64.nsh"
!include "FileFunc.nsh"
Section main
MessageBox MB_YESNO|MB_TOPMOST|MB_USERICON "Мама, вы жареной рыбы хотите ?" IDYES go
Abort
go:
MessageBox MB_OK|MB_TOPMOST|MB_USERICON "Тогда нажарьте и не морочьте мне голову!"
SectionEnd
Function CheckRunParam
${GetParameters} $RunParamVar
ClearErrors
${GetOptions} $RunParamVar "" $1
${IfNot} ${Errors}
Quit
${EndIf}
FunctionEnd

Как сделать, чтобы, если виндовс не русская сообщение всплывало на другом языке, к примеру немецком? Фразы я, естественно заменю.
Или как соединить два сообщения с разными языками?

MKN
15-02-2019, 10:37
динозавра,
посмотри здесь :
https://nsis-dev.github.io/NSIS-Forums/html/t-278793.html

динозавра
15-02-2019, 12:42
За ссылку спасибо, но ничего не понял, как это можно прикрутить к моему конкретному окошку? Как я понял там обсуждается, как с какого то установщика должно всплывать окошко на нужном языке, в зависимости от регионального языка системы. А я совсем другое спрашивал.

MKN
15-02-2019, 13:25
динозавра,
тогда так :

OutFile "Select LANG_ID.exe"
!include "LogicLib.nsh"

Function .onInit
System::Call 'kernel32::GetSystemDefaultLangID() i .r0'
IntOp $0 $0 & 0xFFFF
IntFmt $0 "%04X" $0
MessageBox MB_OK "$0"
FunctionEnd

Section
${If} $0 != 0419
MessageBox MB_OK "Nachricht auf Deutsch"
${EndIf}

${If} $0 = 0419
MessageBox MB_OK "Сообщение на русском"
${EndIf}
SectionEnd

динозавра
15-02-2019, 15:12
Огромное спасибо за помощь.
Но у меня это не работает, вернее криво и при смене регионального языка ничего не меняется.
Пробовал в коде менять MessageBox MB_OK "$0" на MessageBox MB_YESNO "$0" еще хуже,
а с двумя этими строками вдвойне хуже.
Вот можно посмотреть https://streamable.com/lxmyx

MKN
15-02-2019, 15:30
динозавра,
Так ты не меняешь язык системы, потому и ID остаётся тот же. Вроде как задача была для не русской Windows ? На ней и будет работать...
А при смене языка, как делаешь ты, вероятно надо использовать - GetUserDefaultUILanguage, которая возвращает language identifier, выбранный пользователем.
Т.е. System::Call `kernel32::GetUserDefaultUILanguage() i.r0`
И вроде как, именно эту функцию использует и сам NSIS, потому и следовало бы обратить внимание на первую ссылку, что я давал...

динозавра
15-02-2019, 15:51
Я не правильно поставил вопрос. Но с видео видно, что я хотел и что этот код не работает.
А по ссылке я вообще ничего не понял. Но , все равно большое спасибо.

Kopejkin
20-02-2019, 14:30
Приветствую.
Понадобилось мне удалять из реестра ключи, сгенерированные случайным образом в различных корневых ветках, но всегда содержащие несколько одинаковых имен параметров. Пытался приспособить для этого пример из статьи Справочника по NSIS "Registry: Работа с реестром".

!include "MUI2.nsh"
!include "Registry.nsh"
!include "logicLib.nsh"

Caption registry
Name registry
OutFile registry.exe
ShowInstDetails show

!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

Section
${registry::Open} "HKEY_CURRENT_USER\Software\" "/N='efUeeuskh'" $0
StrCmp $0 0 0 loop
MessageBox MB_OK "Error" IDOK close
loop:
${registry::Find} "$0" $1 $2 $3 $4
StrCmp $4 "" close
DetailPrint "Ключ: $1"
DetailPrint "Имя параметра: $2"
DetailPrint "Значение параметра: $3"
DetailPrint "Тип ключа: $4"
DetailPrint "--------"

StrCpy $9 $1
; MessageBox MB_OK "$9" IDOK
${registry::DeleteKey} "HKCU\$9" $R0
; MessageBox MB_OK "HKCU\$9" IDOK
Goto loop
close:
${registry::Close} "$0"
${registry::Unload}
SectionEnd
В общем - работает, кажется. Но тогда получается, нужно такой код писать для каждой корневой ветки реестра? А я и так в переменных чуть не запутался. :lamer:
Может как-то умнее можно это оформить?

MKN
20-02-2019, 16:49
тогда получается, нужно такой код писать для каждой корневой ветки реестра? »
Для каждой. Но меньше писанины будет, если использовать RegistryFunc.nsh от kotkovets
${RegFind} "Key" "Options" Function
Попробуй, может подойдёт для твоего случая...

AlekseyPopovv
09-03-2019, 12:33
После установки приложения запускаю файл "start.cmd" командой Exec "$EXEDIR\${APP}\start.cmd"
Файл запускается как и надо не скрыто, но почему то
:info
echo.
if exist "%programfiles%/Notepad++/notepad++.exe" goto note64i
if exist "%programfiles(x86)%/Notepad++/notepad++.exe" goto note86i
notepad bin/info.txt
pause
goto home
:note64i
"%programfiles%/Notepad++/notepad++.exe" bin/info.txt
pause
goto home
:note86i
"%programfiles(x86)%/Notepad++/notepad++.exe" bin/info.txt
pause
goto home
в файле "start.cmd" не срабатывают. Т.е. Notepad++ не запускается, а сразу стандартный блокнот.
Если закрыть файл "start.cmd" и заново запустить, то всё работает как надо. В чём причина может быть?

Salmo
17-03-2019, 14:20
Уважаемые, есть живые? :) После большого перерыва все забыл.....ну почти все... Подскажите, пожалуйста, как отловить нажатие клавиши на клаве (Ctrl) после закрытия MessageBox кнопкой "Отмена"? То есть нажимаю Ctrl, удерживаю и одновременно нажимаю Отмену в сообщении. Хочу "раздвоить" отмену...

MKN
19-03-2019, 12:05
как отловить нажатие клавиши на клаве (Ctrl) »
Можно с помощью функции GetAsyncKeyState
Пример отслеживания нажатия Shift http://nsis-dev.github.io/NSIS-Forums/html/t-237087.html
Тебе нужен VK_CONTROL 0x11

Salmo
20-03-2019, 03:05
MKN, отлично, все получилось! Спасибо за отзывчивость :yes:




© OSzone.net 2001-2012