Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Старожил


Сообщения: 352
Благодарности: 192

Профиль | Отправить PM | Цитировать


diakov,
Стоило упомянуть, что используется не чистый nsis, ибо в сборках-модификациях поведение может отличаться от стандартного.
Как и в этом случае.
Сборка по умолчанию создаёт unicode-установщик, который, соответственно, передаёт не-unicode плагину unicode-строки, а не ansi. Как результат - плагин получает абракадабру вместо текстовых строк.

Решение 1:
Добавить в скрипт атрибут Unicode false

Решение 2:
Передавать в unicode-установщике ansi-плагину строки конвертированные в ansi.
Как это можно сделать
Добавляем в скрипт макрос для перекодировки (вариант не идеальный, но для большинства случаев достаточный):
Код: Выделить весь код
!define Unicode2Ansi "!insertmacro Unicode2Ansi"

!macro Unicode2Ansi String OutVar
	System::Call /NOUNLOAD 'kernel32::WideCharToMultiByte(i 0, i 0, w "${String}", i -1, t .s, i ${NSIS_MAX_STRLEN}, i 0, i 0) i '
	Pop "${OutVar}"
!macroend
Перекодируем макросом строку, предназначенную плагину, в переменную
Код: Выделить весь код
${Unicode2Ansi} "строка" $переменная
которую потом передаём плагину
Код: Выделить весь код
Plugin::Command $переменная

Таким образом строка
Код: Выделить весь код
ebanner::show /NOUNLOAD /HALIGN=LEFT /FIT=HEIGHT "$EXEDIR\wizard.jpg"
Превращается в последовательность команд
Код: Выделить весь код
${Unicode2Ansi} "/HALIGN=LEFT" $R1
${Unicode2Ansi} "/FIT=HEIGHT" $R2
${Unicode2Ansi} "$EXEDIR\wizard.jpg" $R3
ebanner::show /NOUNLOAD $R1 $R2 "$R3"

Сокращённый вариант Example.nsi из архива плагина
Код: Выделить весь код
;--------------------------------
; General Attributes

Name "EmbeddedBanner plug-in test"
OutFile "EBannerU.exe"


;--------------------------------
;Interface Settings

!include "MUI.nsh"
; To reduce package size, 70 bytes 2x2 placeholder
!define MUI_WELCOMEFINISHPAGE_BITMAP plholder.bmp
!define MUI_PAGE_CUSTOMFUNCTION_PRE pre
!define MUI_PAGE_CUSTOMFUNCTION_SHOW show
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE leave
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

RequestExecutionLevel user

!define Unicode2Ansi "!insertmacro Unicode2Ansi"

!macro Unicode2Ansi String OutVar
	System::Call /NOUNLOAD 'kernel32::WideCharToMultiByte(i 0, i 0, w "${String}", i -1, t .s, i ${NSIS_MAX_STRLEN}, i 0, i 0) i '
	Pop "${OutVar}"
!macroend


Function pre
!insertmacro MUI_INSTALLOPTIONS_WRITE "ioSpecial.ini" "Field 1" "Text" ""
Functionend

Function show
  ${Unicode2Ansi} "/HALIGN=LEFT" $R1
  ${Unicode2Ansi} "/FIT=HEIGHT" $R2
  ${Unicode2Ansi} "$EXEDIR\wizard.jpg" $R3
  ebanner::show /NOUNLOAD $R1 $R2 "$R3"
FunctionEnd

Function leave
  ebanner::stop
FunctionEnd

Section

SectionEnd
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:39, 05-11-2019 | #2380