Правильно ли написаны примеры подобные нижеприведенному в Справочнике по NSIS:
Код:

Section "Тестирование" TEST_SEC
SectionEnd
Section
; Не должно ли здесь и в конце вместо Section быть Function ?
SectionGetText ${TEST_SEC} $0
StrCpy $0 "$0 - $WINDIR"
SectionSetText ${TEST_SEC} $0
SectionEnd
В таком виде, все что написано между Section, не работает,
а если вставить (без Section) в функцию, напр. (.OnInit) - то работает.
А спросить хотел вот о чем.
Предполагается, что нижеприведенный скрипт будет выполнять пропатчивание. Закоментированный код из секции "Обновление" будет позже добавлен в существующие секции с соответствующим изменением имен файлов.
Можно ли, используя WinVer2, скрывать секции PROGRUS и PROGUKR, если установка выполняется на 64 разрядной системе и, наоборот, скрывать PROGRUS64 и PROGUKR64 при установке на 32 разрядной системе? Если можно, укажите поточнее, где или что об этом написано в справке или справочнике. А если поделитесь кодом - буду очень благодарен.
Еще интересует, почему файл деинсталлятора все равно создается, если из программы установки я выхожу, напр. из диалога выбора компонентов?
Код:

!include "WinVer2.nsh"
!include "MUI2.nsh"
!include "VPatchLib.nsh"
;!include "Logiclib.nsh"
SetCompressor /SOLID lzma
; Имя приложения
!define PRODUCT_NAME "UITest"
; Версия приложения
!define PRODUCT_VERSION "1.0"
; Папка, где будут храниться исходные файлы, подлежащие сжатию.
!define pkgdir "d:\package"
; Запоминаем язык установки InstallerLanguage
!define MUI_LANGDLL_REGISTRY_ROOT "HKLM"
!define MUI_LANGDLL_REGISTRY_KEY "Software\UITest\Option"
!define MUI_LANGDLL_REGISTRY_VALUENAME "InstallerLanguage"
!insertmacro MUI_RESERVEFILE_LANGDLL ; ЧТО ЭТО и НУЖНО ЛИ ОНО????
!define MUI_ABORTWARNING
; Константой MUI_ICON определяем значок инсталятора. Без константы исп. modern-install.ico:
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install-colorful.ico"
; Константой MUI_UNICON определяем значок деинсталятора. Без констант исп. modern-uninstall.ico:
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall-colorful.ico"
!define MUI_COMPONENTSPAGE_SMALLDESC
; Станицы установки:
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "$(License)"
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
;!insertmacro MUI_PAGE_FINISH
; Страницы удаления:
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_COMPONENTS
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
; Указываем доступные языки инсталяции:
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_LANGUAGE "Ukrainian"
Function .OnInit
; Отображаем диалог выбора языка
!insertmacro MUI_LANGDLL_DISPLAY
; Определяем разрядность системы
${WinPlatformArchitecture} $R1
MessageBox MB_ICONINFORMATION|MB_OK "WinPlatformArchitecture = $R1"
FunctionEnd
;--------------------------------------------------------------------
;Указываем деинсталятору использовать язык инсталлятора
Function un.onInit
!insertmacro MUI_UNGETLANGUAGE
FunctionEnd
;--------------------------------------------------------------------
; Текст внизу окон (вместо nullsoft bla-bla
BrandingText "TEST"
; Назначаем инсталлятору заголовок
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
;--------------------------------------------------------------------
; Задаем папку установки по умолчанию.
InstallDir "$PROGRAMFILES64\${PRODUCT_NAME}"
; Задаем имя файла нашего инсталлятора
OutFile "${PRODUCT_NAME}.${PRODUCT_VERSION}.exe"
; Получится: UITest.1.0.exe
; Для новых ОС (Vista, Windows 7/8) можно запросить права пользователя ???
RequestExecutionLevel user
; Указываем режим отображения хода выполнения инсталляции (протокола), если нужно.
;ShowInstDetails show
;--------------------------------
;Section "Обновление"
;SetOutPath $INSTDIR
; Update the file - it will be replaced with the new version
;DetailPrint "Prepare to updating oldfile.txt using patch..."
;!insertmacro VPatchFile "patch.pat" "$INSTDIR\oldfile.txt" "$INSTDIR\temporaryfile.txt"
;SectionEnd
Section /o "$(PROGRUS)" SecRUS
SetOutPath $INSTDIR
File "1.txt"
SectionEnd
Section /o "$(PROGUKR)" SecUKR
SetOutPath $INSTDIR
File "2.txt"
SectionEnd
Section /o "$(PROGRUS64)" SecRUS64
SetOutPath $INSTDIR
File "1.64.txt"
SectionEnd
Section /o "$(PROGUKR64)" SecUKR64
SetOutPath $INSTDIR
File "2.64.txt"
SectionEnd
;--------------------------------
;Installer Functions
Function .onSelChange
; Выбор между компонентам 1 и 4
!insertmacro StartRadioButtons $1
!insertmacro RadioButton ${SecRUS}
!insertmacro RadioButton ${SecUKR}
!insertmacro RadioButton ${SecRUS64}
!insertmacro RadioButton ${SecUKR64}
!insertmacro EndRadioButtons
;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
FunctionEnd
;--------------------------------
;Uninstaller Section
Section "Un.$(locUN)" SecUN
delete "$INSTDIR\1.64.txt"
delete "$INSTDIR\2.64.txt"
delete "$INSTDIR\1.txt"
delete "$INSTDIR\2.txt"
delete "$INSTDIR\Uninstall.exe"
DeleteRegKey /ifempty HKLM "Software\UITest\Option"
;RMDir "$INSTDIR"
SectionEnd
;----------------------------------------------------------------
; Файлы с текстом Лицензионного соглашения
LicenseLangString License ${LANG_RUSSIAN} "lic_rus.txt"
LicenseLangString License ${LANG_UKRAINIAN} "lic_ukr.txt"
; Текст описания секции
LangString DESC_PROGRUS ${LANG_RUSSIAN} "Русская версия программы"
LangString DESC_PROGRUS ${LANG_UKRAINIAN} "Російська версія програми"
LangString DESC_PROGUKR ${LANG_RUSSIAN} "Украинская версия программы"
LangString DESC_PROGUKR ${LANG_UKRAINIAN} "Українська версія програми"
LangString DESC_PROGRUS64 ${LANG_RUSSIAN} "Русская версия программы(x64)"
LangString DESC_PROGRUS64 ${LANG_UKRAINIAN} "Російська версія програми(x64)"
LangString DESC_PROGUKR64 ${LANG_RUSSIAN} "Украинская версия программы(x64)"
LangString DESC_PROGUKR64 ${LANG_UKRAINIAN} "Українська версія програми(x64)"
; Текст названия секции
LangString PROGRUS ${LANG_RUSSIAN} "Русская версия (x86)"
LangString PROGRUS ${LANG_UKRAINIAN} "Російська версія (x86)"
LangString PROGUKR ${LANG_RUSSIAN} "Украинская версия (x86)"
LangString PROGUKR ${LANG_UKRAINIAN} "Українська версія (x86)"
LangString PROGRUS64 ${LANG_RUSSIAN} "Русская версия (x64)"
LangString PROGRUS64 ${LANG_UKRAINIAN} "Російська версія (x64)"
LangString PROGUKR64 ${LANG_RUSSIAN} "Украинская версия (x64)"
LangString PROGUKR64 ${LANG_UKRAINIAN} "Українська версія (x64)"
; Текст описания секции деинсталяции
LangString DESC_UNIN ${LANG_RUSSIAN} "Удалить локализованную версию и восстановить английский язык программы"
LangString DESC_UNIN ${LANG_UKRAINIAN} "Видалити локалізовану версію та відновити англійську мову програми"
; Текст названия секции деинсталяции
LangString locUN ${LANG_RUSSIAN} "Удалить локализованный файл"
LangString locUN ${LANG_UKRAINIAN} "Видалити локалізований файл"
; Макрос, который показывает текст описания компонентов для Install
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecRUS} $(DESC_PROGRUS)
!insertmacro MUI_DESCRIPTION_TEXT ${SecUKR} $(DESC_PROGUKR)
!insertmacro MUI_DESCRIPTION_TEXT ${SecRUS64} $(DESC_PROGRUS64)
!insertmacro MUI_DESCRIPTION_TEXT ${SecUKR64} $(DESC_PROGUKR64)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
; Макрос, который показывает текст описания компонентов для Uninstall
!insertmacro MUI_UnFUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecUN} $(DESC_UNIN)
!insertmacro MUI_UnFUNCTION_DESCRIPTION_END