check OS arch and version in installer (#340)

This commit is contained in:
Cyano Hao 2024-03-29 12:50:45 +08:00 committed by GitHub
parent 54599d7c30
commit acd9030374
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 96 additions and 0 deletions

View File

@ -207,6 +207,7 @@ cd "${PACKAGE_DIR}"
cp "${SOURCE_DIR}/platform/windows/qt.conf" . cp "${SOURCE_DIR}/platform/windows/qt.conf" .
cp "${SOURCE_DIR}/platform/windows/installer-scripts/lang.nsh" . cp "${SOURCE_DIR}/platform/windows/installer-scripts/lang.nsh" .
cp "${SOURCE_DIR}/platform/windows/installer-scripts/utils.nsh" .
cp "${SOURCE_DIR}/platform/windows/installer-scripts/redpanda.nsi" . cp "${SOURCE_DIR}/platform/windows/installer-scripts/redpanda.nsi" .
popd popd
@ -225,6 +226,8 @@ nsis_flags=(
-DFINALNAME="${SETUP_NAME}" -DFINALNAME="${SETUP_NAME}"
-DMINGW32_COMPILER_NAME="${MINGW32_COMPILER_NAME}" -DMINGW32_COMPILER_NAME="${MINGW32_COMPILER_NAME}"
-DMINGW64_COMPILER_NAME="${MINGW64_COMPILER_NAME}" -DMINGW64_COMPILER_NAME="${MINGW64_COMPILER_NAME}"
-DREQUIRED_WINDOWS_BUILD=7600
-DREQUIRED_WINDOWS_NAME="Windows 7"
) )
if [[ ${COMPILER_MINGW32} -eq 1 ]]; then if [[ ${COMPILER_MINGW32} -eq 1 ]]; then
nsis_flags+=(-DHAVE_MINGW32) nsis_flags+=(-DHAVE_MINGW32)

View File

@ -24,6 +24,11 @@ LangString SectionMenuLaunchName 1033 "Create Start Menu shortcuts"
LangString SectionDesktopLaunchName 1033 "Create Desktop shortcut" LangString SectionDesktopLaunchName 1033 "Create Desktop shortcut"
LangString SectionConfigName 1033 "Remove old configuration files" LangString SectionConfigName 1033 "Remove old configuration files"
LangString ErrorArchMismatch 1033 "Architecture mismatch. This package is for ${ARCH}, but the operating system is $osArch."
LangString ErrorWindowsBuildRequired 1033 "Unsupported operating system. ${REQUIRED_WINDOWS_NAME} (${REQUIRED_WINDOWS_BUILD}) or later is required."
LangString WarningArchMismatch 1033 "Note: installing Red Panda C++ for ${ARCH} on $osArch OS. You may want to install native build instead."
/* Simplified Chinese 2052 */ /* Simplified Chinese 2052 */
LangString MessageAppName 2052 "小熊猫C++" LangString MessageAppName 2052 "小熊猫C++"
LangString MessageSectionMain 2052 "小熊猫C++ IDE (集成开发环境)" LangString MessageSectionMain 2052 "小熊猫C++ IDE (集成开发环境)"
@ -49,3 +54,8 @@ LangString SectionShortcutsName 2052 "快捷方式"
LangString SectionMenuLaunchName 2052 "创建开始菜单程序项" LangString SectionMenuLaunchName 2052 "创建开始菜单程序项"
LangString SectionDesktopLaunchName 2052 "创建桌面快捷方式" LangString SectionDesktopLaunchName 2052 "创建桌面快捷方式"
LangString SectionConfigName 2052 "删除原有配置文件" LangString SectionConfigName 2052 "删除原有配置文件"
LangString ErrorArchMismatch 2052 "架构不匹配。此软件包适用于 ${ARCH},但操作系统是 $osArch。"
LangString ErrorWindowsBuildRequired 2052 "不支持的操作系统。需要 ${REQUIRED_WINDOWS_NAME} (${REQUIRED_WINDOWS_BUILD}) 或更高版本。"
LangString WarningArchMismatch 2052 "注意:在 $osArch 操作系统上安装小熊猫 C++ ${ARCH} 版本。你可能想要安装本机版本。"

View File

@ -4,8 +4,13 @@ SetFont "Segoe UI" 11
Unicode True Unicode True
!define DISPLAY_NAME "Red Panda C++ ${APP_VERSION} (${ARCH})" !define DISPLAY_NAME "Red Panda C++ ${APP_VERSION} (${ARCH})"
!include "LogicLib.nsh"
!include "MUI2.nsh" !include "MUI2.nsh"
!include "WinVer.nsh"
!include "x64.nsh"
!include "lang.nsh" !include "lang.nsh"
!include "utils.nsh"
!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit !define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit
@ -288,6 +293,7 @@ SectionEnd
Function .onInit Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY !insertmacro MUI_LANGDLL_DISPLAY
!insertmacro DetectOsArch
IfFileExists "C:\Dev-Cpp\devcpp.exe" 0 +2 IfFileExists "C:\Dev-Cpp\devcpp.exe" 0 +2
SectionSetFlags ${SectionConfig} ${SF_SELECTED} # Remove old Dev-Cpp config files SectionSetFlags ${SectionConfig} ${SF_SELECTED} # Remove old Dev-Cpp config files
@ -303,7 +309,13 @@ Function .onInit
!endif !endif
FunctionEnd FunctionEnd
Function .onSelChange
!insertmacro SectionAction_CheckMingw64
FunctionEnd
Function myGuiInit Function myGuiInit
!insertmacro CheckOsArch
!insertmacro CheckOsBuild
; uninstall existing ; uninstall existing
SetRegView 32 SetRegView 32
@ -316,6 +328,8 @@ Function myGuiInit
!else !else
SetRegView 64 SetRegView 64
!endif !endif
!insertmacro SectionAction_CheckMingw64
FunctionEnd FunctionEnd
;backup file association ;backup file association

View File

@ -0,0 +1,69 @@
Var /GLOBAL osArch
Var /GLOBAL sectionDepFlag
Var /GLOBAL sectionDepTemp
!macro DetectOsArch
${If} ${IsNativeIA32}
StrCpy $osArch "x86"
${ElseIf} ${IsNativeAMD64}
StrCpy $osArch "x64"
${ElseIf} ${IsNativeARM64}
StrCpy $osArch "arm64"
${Else}
StrCpy $osArch "unknown"
${EndIf}
!macroend
!macro CheckOsArch
; x64 cannot be installed on arm64 prior to Windows 11
!if "${ARCH}" == "x64"
${If} $osArch == "arm64"
${AndIfNot} ${AtLeastBuild} 22000
${OrIf} $osArch == "x86"
MessageBox MB_OK|MB_ICONSTOP "$(ErrorArchMismatch)"
Abort
${EndIf}
!endif
!if "${ARCH}" == "arm64"
${If} $osArch != "arm64"
MessageBox MB_OK|MB_ICONSTOP "$(ErrorArchMismatch)"
Abort
${EndIf}
!endif
; warning if not matching
${If} $osArch != "${ARCH}"
MessageBox MB_OK|MB_ICONEXCLAMATION "$(WarningArchMismatch)"
${EndIf}
!macroend
!macro CheckOsBuild
${IfNot} ${AtLeastBuild} ${REQUIRED_WINDOWS_BUILD}
MessageBox MB_OK|MB_ICONSTOP "$(ErrorWindowsBuildRequired)"
Abort
${EndIf}
!macroend
!macro DisableSection section
SectionGetFlags ${section} $sectionDepFlag
; unset SF_SELECTED
IntOp $sectionDepTemp ${SF_SELECTED} ~
IntOp $sectionDepFlag $sectionDepFlag & $sectionDepTemp
; set SF_RO
IntOp $sectionDepFlag $sectionDepFlag | ${SF_RO}
SectionSetFlags ${section} $sectionDepFlag
!macroend
!macro SectionAction_CheckMingw64
!ifdef HAVE_MINGW64
${If} $osArch == "arm64"
${AndIfNot} ${AtLeastBuild} 22000
${OrIf} $osArch == "x86"
!insertmacro DisableSection ${SectionMingw64}
${EndIf}
!endif
!macroend