Цитата Kopejkin:
Подскажите, пожалуйста, почему могут плохо переключаться компоненты? »
|
Потому что, изначально неопределенное состояние секций изначально, нужно определять в "первой" функции инсталлятора...
потому что макросу радиобутон изначально от чего то нужно переключать секции, а когда с нечего начать...
1. а именно делаем секцию отмеченную в зависимости от выбранного языка (это сильно упрощает код)
2 много лишних действий с определением разрядность оси, она уже определена в макросе ${WinPlatformArchitecture} т.е в переменной $5
значит нужно изымать лишниие функции...
ну примерно так:
читать дальше »
Код:

!include "MUI2.nsh"
;!include "VPatchLib.nsh"
!include "Logiclib.nsh"
!include "WinVer2.nsh"
!include "ProcessFunc.nsh"
SetCompressor /SOLID lzma
;!define MUI_LANGDLL_REGISTRY_ROOT "HKLM"
;!define MUI_LANGDLL_REGISTRY_KEY "Software\Example\Option"
;!define MUI_LANGDLL_REGISTRY_VALUENAME "InstallerLanguage"
!define MUI_ABORTWARNING
!define MUI_CUSTOMFUNCTION_GUIINIT MUIGUIInit
!define SWP_SHOWWINDOW 0x00000040
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE ComponentsLeave
!define MUI_COMPONENTSPAGE_SMALLDESC
!insertmacro MUI_PAGE_COMPONENTS
Page custom CustomInfo
!insertmacro MUI_PAGE_INSTFILES
;-----------------------------------------------------
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_LANGUAGE "Ukrainian"
;--------------------------------------------------------------------
Function un.onInit
!insertmacro MUI_UNGETLANGUAGE
FunctionEnd
;--------------------------------------------------------------------
Caption "Example"
OutFile "example.exe"
RequestExecutionLevel admin
;-------------------------------------------------------
!insertmacro MUI_RESERVEFILE_LANGDLL
;--------------------------------
Section /o "$(PROGRUS)" SecRUS
SetOutPath $INSTDIR
CreateDirectory "$INSTDIR\Backup"
;!insertmacro VPatchFile
SectionEnd
Section /o "$(PROGUKR)" SecUKR
SetOutPath $INSTDIR
CreateDirectory "$INSTDIR\Backup"
;!insertmacro VPatchFile
SectionEnd
Section /o "$(PROGRUS64)" SecRUS64
SetOutPath $INSTDIR
CreateDirectory "$INSTDIR\Backup"
;!insertmacro VPatchFile
SectionEnd
Section /o "$(PROGUKR64)" SecUKR64
SetOutPath $INSTDIR
CreateDirectory "$INSTDIR\Backup"
;!insertmacro VPatchFile
SectionEnd
Section "-Post"
WriteUninstaller "$INSTDIR\Uninstall.exe"
SetAutoClose false
SectionEnd
;--------------------------------
Function .OnInit
!insertmacro MUI_LANGDLL_DISPLAY
; Для "красоты": версия, разрядность ОС
${WinName} $1
${WinType} $2
${WinServerName} $3
${WinServicePack} $4
${WinPlatformArchitecture} $5
Var /Global text5
StrCpy $text5 "$1 $2 $3 $4 (x$5)" ; что получилось - на инфо страницу
${If} $5 == 64
;Скрываем секции, если процесс 64 битный
SectionSetText ${SecRUS} ""
SectionSetText ${SecUKR} ""
${If} $LANGUAGE == ${LANG_RUSSIAN}
StrCpy $R9 ${SecRUS64}
SectionSetFlags ${SecRUS64} ${SF_SELECTED}
${ElseIf} $LANGUAGE == ${LANG_UKRAINIAN}
StrCpy $R9 ${SecUKR64}
SectionSetFlags ${SecUKR64} ${SF_SELECTED}
${EndIf}
${ElseIf} $5 == 32
; Скрываем секции, если процесс 32 битный
SectionSetText ${SecRUS64} ""
SectionSetText ${SecUKR64} ""
${If} $LANGUAGE == ${LANG_RUSSIAN}
StrCpy $R9 ${SecRUS}
SectionSetFlags ${SecRUS} ${SF_SELECTED}
${ElseIf} $LANGUAGE == ${LANG_UKRAINIAN}
StrCpy $R9 ${SecUKR}
SectionSetFlags ${SecUKR} ${SF_SELECTED}
${EndIf}
${EndIf}
FunctionEnd
;---------------------------------------------------------
Function MUIGUIInit
; Получаем CRC exe-файла в папке установленной программы
CRCCheck::GenCRC "$INSTDIR\WinSnap64.exe"
Pop $R1
CRCCheck::GenCRC "$INSTDIR\WinSnap.exe"
Pop $R2
StrCpy $1 $R1
StrCpy $2 $R2
; Определяем, что установлено: оригинал или локализация.
## скрипт определения
FunctionEnd
;-----------------------------------------------------------------
Function .onSelChange
; Выбор только одного компонента из 4
!insertmacro StartRadioButtons $R9
!insertmacro RadioButton ${SecRUS}
!insertmacro RadioButton ${SecUKR}
!insertmacro RadioButton ${SecRUS64}
!insertmacro RadioButton ${SecUKR64}
!insertmacro EndRadioButtons
FunctionEnd
;-----------------------------------------------------------------------
Function ComponentsLeave
SectionGetFlags ${SecRUS} $0
SectionGetFlags ${SecUKR} $1
SectionGetFlags ${SecRUS64} $2
SectionGetFlags ${SecUKR64} $3
Var /Global text_lang
StrCmp $0 "1" +2 0
StrCmp $2 "1" 0 +3
StrCpy $4 "$(lang_rus)"
StrCpy $text_lang "$4"
StrCmp $1 "1" +2 0
StrCmp $3 "1" 0 +3
StrCpy $4 "$(lang_ukr)"
StrCpy $text_lang "$4"
FunctionEnd
Function CustomInfo
!insertmacro MUI_HEADER_TEXT $(confirm_select) $(confirm_select_subtitle)
InitPluginsDir
File /oname=$PLUGINSDIR\msg.ini "msg.ini"
WriteINIStr $PLUGINSDIR\msg.ini "Field 1" "Text" "$(text1)"
WriteINIStr $PLUGINSDIR\msg.ini "Field 2" "Text" "$(text2)"
WriteINIStr $PLUGINSDIR\msg.ini "Field 4" "Text" "$(text4)"
WriteINIStr $PLUGINSDIR\msg.ini "Field 5" "Text" "$text5"
WriteINIStr $PLUGINSDIR\msg.ini "Field 6" "Text" "$(text6)"
WriteINIStr $PLUGINSDIR\msg.ini "Field 7" "Text" "$INSTDIR"
WriteINIStr $PLUGINSDIR\msg.ini "Field 8" "Text" "$(text8)"
WriteINIStr $PLUGINSDIR\msg.ini "Field 9" "Text" "$(text9)"
WriteINIStr $PLUGINSDIR\msg.ini "Field 10" "Text" "$text_lang"
InstallOptions::initDialog /NOUNLOAD "$PLUGINSDIR\msg.ini"
InstallOptions::show
FunctionEnd
;-----------------------------------------
; Раздел (секция) деинсталлятора
Section "un.install" ;SecUN
delete "$INSTDIR\WinSnap64.exe"
delete "$INSTDIR\WinSnap.exe"
Rename $INSTDIR\Backup\WinSnap64.exe.bak $INSTDIR\WinSnap64.exe
Rename $INSTDIR\Backup\WinSnap.exe.bak $INSTDIR\WinSnap.exe
delete "$INSTDIR\Uninstall.exe"
DeleteRegKey HKLM "Software\Alexander Avdonin\WinSnap\Option"
RMDir /r "$INSTDIR\Backup"
SetAutoClose false
SectionEnd
;----------------------------------------------------------------
LangString text2 ${LANG_RUSSIAN} "Установка будет выполнена со следующими параметрами:"
LangString text2 ${LANG_UKRAINIAN} "Встановлення буде виконано з наступними параметрами:"
LangString text9 ${LANG_RUSSIAN} "Выбранный язык WinSnap:"
LangString text9 ${LANG_UKRAINIAN} "Обрана мова WinSnap:"
LangString lang_rus ${LANG_RUSSIAN} "Русский язык"
LangString lang_rus ${LANG_UKRAINIAN} "Російська мова"
LangString lang_ukr ${LANG_RUSSIAN} "Украинский язык"
LangString lang_ukr ${LANG_UKRAINIAN} "Українська мова"
LangString text4 ${LANG_RUSSIAN} "Операционная система:"
LangString text4 ${LANG_UKRAINIAN} "Операційна система:"
LangString text6 ${LANG_RUSSIAN} "Папка установки файлов:"
LangString text6 ${LANG_UKRAINIAN} "Папка призначення:"
LangString confirm_select ${LANG_RUSSIAN} "Подготовка завершена!"
LangString confirm_select ${LANG_UKRAINIAN} "Підготовку завершено!"
LangString confirm_select_subtitle ${LANG_RUSSIAN} "Все готово к локализации программы"
LangString confirm_select_subtitle ${LANG_UKRAINIAN} "Усе підготовлено до локалізації програми"
; Текст сообщения, когда устанавливаемый компонент не выбран
LangString not_component ${LANG_RUSSIAN} "Для продолжения выберите желаемую версию перевода !"
LangString not_component ${LANG_UKRAINIAN} "Щоб продовжити, оберіть бажану версію перекладу !"
; Текст названия компонента (раздела, секции)
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)"
Цитата MaGoth:
Зы, Есть что ни будь по моему вопросу выше, о непонятках с размером устанавливаемых файлов ?! »
|
мистика...

зы..