Имя пользователя:
Пароль:
 

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

Аватара для Flix

Пользователь


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

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


Dodakaedr, NSIS не умеет работать с INI-файлами в кодировках отличной от ANSI. А ваш файл INI имеет кодировку UTF-8. По этой причине и получается ошибка. Воспользуйтесь плагином Unicode для преобразования кодировок. Примерный код сценария будет следующий:

Пример сценария
Код: Выделить весь код
# Обработка INI-файлов кодировке UTF-8 
# Используемые плагины:
#  - Unicode v1.1 (http://nsis.sourceforge.net/Unicode_plug-in)
#  - EnumINI (http://nsis.sourceforge.net/EnumINI_plug-in)

outfile "TestINI.exe"

Section main
  ; Выполняем конвертацию исходного файла INI из кодировки UTF-8 в ANSI
  ; во временный файл с именем _Config.ini
  unicode::FileUnicode2Ansi "$EXEDIR\Config.ini" "$EXEDIR\_Config.ini" AUTO
  ; Извлекаем из стека результат обращения к функции
  Pop $1
  ; Проверяем наличие в INI-файле секции с именем "General"
  EnumINI::SectionExist "$EXEDIR\_Config.ini" "General"
  ; Извлекаем из стека результат обращения к функции
  Pop $1
  ; Выполняем сравнение значения переменной $1 с "1"
  StrCmp $1 "1" 0 +6
    ; Если результат сравнения положительный (секция существует), то...
    ; Показываем уведомление пользователю
    MessageBox MB_OK|MB_ICONINFORMATION "Указанная секция существует."
    ; Записываем во временный новый INI-файл значение для заданного ключа
    WriteINIStr "$EXEDIR\_Config.ini" "General" "RutaBaseExtraccion" "$EXEDIR\"
    ; Выполняем конвертацию временного файла INI из кодировки ANSI в UTF-8
    ; и перезаписываем исходный файл INI
    unicode::FileAnsi2Unicode "$EXEDIR\_Config.ini" "$EXEDIR\Config.ini" UTF-8
    ; Извлекаем из стека результат обращения к функции
    Pop $1
  ; Переходим на команду удаления временного файла INI (_Config.ini)
  Goto +2
  ; Если результат сравнения отрицательный (секция НЕ существует), то...
  ; Показываем уведомление пользователю
  MessageBox MB_OK|MB_ICONSTOP "Указанная секция не существует!!!"
  ; Удаляем временный файл INI, он больше не нужен.
  Delete "$EXEDIR\_Config.ini"
SectionEnd

Рекомендую ввести дополнительные проверки как, например, наличие самого файла INI и результатов конвертирования.
К сожалению, оба используемых плагина сделаны в редакции ANSI, поэтому пользоатели NSIS Unicode оказываются в пролёте.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:21, 21-02-2016 | #1993