mirror of
https://github.com/bin456789/reinstall.git
synced 2026-03-22 12:34:17 +08:00
windows: 只从注册表获取系统版本号
This commit is contained in:
59
trans.sh
59
trans.sh
@ -779,16 +779,52 @@ is_windows_support_rdnss() {
|
|||||||
get_windows_version_from_windows_drive() {
|
get_windows_version_from_windows_drive() {
|
||||||
local os_dir=$1
|
local os_dir=$1
|
||||||
|
|
||||||
apk add hivex pev
|
# https://wiki.tcl-lang.org/page/Windows+OS+name
|
||||||
ntoskrnl_exe=$(find_file_ignore_case $os_dir/Windows/System32/ntoskrnl.exe)
|
# https://nsis.sourceforge.io/Get_Windows_version
|
||||||
|
|
||||||
|
# win10+ 才有 CurrentMajorVersionNumber 和 CurrentMinorVersionNumber
|
||||||
|
# CurrentVersion 6.3
|
||||||
|
# CurrentMajorVersionNumber 10
|
||||||
|
# CurrentMinorVersionNumber 0
|
||||||
|
|
||||||
|
apk add hivex
|
||||||
hive=$(find_file_ignore_case $os_dir/Windows/System32/config/SOFTWARE)
|
hive=$(find_file_ignore_case $os_dir/Windows/System32/config/SOFTWARE)
|
||||||
IFS=. read -r nt_ver_major nt_ver_minor _ rev_ver _ \
|
|
||||||
< <(peres -v "$ntoskrnl_exe" | grep 'Product Version:' | awk '{print $NF}')
|
get_current_version_key() {
|
||||||
|
hivexget "$hive" "Microsoft\Windows NT\CurrentVersion" "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# nt_ver
|
||||||
|
if { nt_ver_major=$(get_current_version_key CurrentMajorVersionNumber) &&
|
||||||
|
nt_ver_minor=$(get_current_version_key CurrentMinorVersionNumber); } 2>/dev/null; then
|
||||||
nt_ver="$nt_ver_major.$nt_ver_minor"
|
nt_ver="$nt_ver_major.$nt_ver_minor"
|
||||||
|
else
|
||||||
|
# en_windows_vista_sp2_x64_dvd_342267.iso
|
||||||
|
# 安装前 CurrentVersion 是 6.0
|
||||||
|
# 安装后 CurrentVersion 是 6.0
|
||||||
|
|
||||||
|
# en_windows_vista_sp2_with_update_6003.23713_aio_7in1_x64_v26.01.13_by_adguard.iso
|
||||||
|
# 安装前 CurrentVersion 是 6.0.6002.18005
|
||||||
|
# 安装后 CurrentVersion 是 6.0
|
||||||
|
|
||||||
|
# 添加 cut 用于兼容这两种情况
|
||||||
|
nt_ver=$(get_current_version_key CurrentVersion | cut -d. -f1-2)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# build_ver
|
||||||
# win10 22h2 19045 的 exe/dll 版本还是 19041 的,因此要从注册表获取
|
# win10 22h2 19045 的 exe/dll 版本还是 19041 的,因此要从注册表获取
|
||||||
build_ver=$(hivexget $hive 'Microsoft\Windows NT\CurrentVersion' CurrentBuildNumber)
|
# vista sp2 iso 安装 KB4474419 后, CurrentBuild 是 6002, CurrentBuildNumber 是 6003
|
||||||
echo "Version: $nt_ver_major.$nt_ver_minor.$build_ver.$rev_ver" >&2
|
build_ver=$(get_current_version_key CurrentBuildNumber)
|
||||||
apk del hivex pev
|
|
||||||
|
# rev_ver
|
||||||
|
# 实测 win10 winver 是从 UBR 读取 revision 版本
|
||||||
|
# vista sp2 iso 没有 UBR,后期有月度汇总更新包时才有 UBR
|
||||||
|
if ! rev_ver=$(get_current_version_key UBR 2>/dev/null); then
|
||||||
|
rev_ver=$(get_current_version_key BuildLabEx | cut -d. -f2)
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Version: $nt_ver.$build_ver.$rev_ver" >&2
|
||||||
|
apk del hivex
|
||||||
}
|
}
|
||||||
|
|
||||||
is_elts() {
|
is_elts() {
|
||||||
@ -5676,8 +5712,8 @@ get_windows_type_from_windows_drive() {
|
|||||||
apk add hivex
|
apk add hivex
|
||||||
software_hive=$(find_file_ignore_case $os_dir/Windows/System32/config/SOFTWARE)
|
software_hive=$(find_file_ignore_case $os_dir/Windows/System32/config/SOFTWARE)
|
||||||
system_hive=$(find_file_ignore_case $os_dir/Windows/System32/config/SYSTEM)
|
system_hive=$(find_file_ignore_case $os_dir/Windows/System32/config/SYSTEM)
|
||||||
installation_type=$(hivexget $software_hive '\Microsoft\Windows NT\CurrentVersion' InstallationType || true)
|
installation_type=$(hivexget $software_hive '\Microsoft\Windows NT\CurrentVersion' InstallationType 2>/dev/null || true)
|
||||||
product_type=$(hivexget $system_hive '\ControlSet001\Control\ProductOptions' ProductType || true)
|
product_type=$(hivexget $system_hive '\ControlSet001\Control\ProductOptions' ProductType 2>/dev/null || true)
|
||||||
apk del hivex
|
apk del hivex
|
||||||
|
|
||||||
# 根据 win11 multi-session 的情况
|
# 根据 win11 multi-session 的情况
|
||||||
@ -5869,7 +5905,10 @@ install_windows() {
|
|||||||
wimmount "$iso_install_wim" "$image_index" /wim/ \
|
wimmount "$iso_install_wim" "$image_index" /wim/ \
|
||||||
$($is_swm && echo --ref=$(dirname "$iso_install_wim")/$swm_ref)
|
$($is_swm && echo --ref=$(dirname "$iso_install_wim")/$swm_ref)
|
||||||
|
|
||||||
|
# 获取版本号
|
||||||
get_windows_version_from_windows_drive /wim
|
get_windows_version_from_windows_drive /wim
|
||||||
|
|
||||||
|
# 检测 client/server,并转换成标准版 windows 名称
|
||||||
windows_type=$(get_windows_type_from_windows_drive /wim)
|
windows_type=$(get_windows_type_from_windows_drive /wim)
|
||||||
{
|
{
|
||||||
find_file_ignore_case /wim/Windows/System32/sacsess.exe && has_sac=true || has_sac=false
|
find_file_ignore_case /wim/Windows/System32/sacsess.exe && has_sac=true || has_sac=false
|
||||||
@ -5902,10 +5941,12 @@ install_windows() {
|
|||||||
echo "Windows Type: $windows_type"
|
echo "Windows Type: $windows_type"
|
||||||
echo "NT Version: $nt_ver"
|
echo "NT Version: $nt_ver"
|
||||||
echo "Build Version: $build_ver"
|
echo "Build Version: $build_ver"
|
||||||
|
echo "Revision Version: $rev_ver"
|
||||||
echo "-------------------------"
|
echo "-------------------------"
|
||||||
echo "Has SAC: $has_sac"
|
echo "Has SAC: $has_sac"
|
||||||
echo "Has StorNVMe: $has_stornvme"
|
echo "Has StorNVMe: $has_stornvme"
|
||||||
echo "Support SHA256: $support_sha256"
|
echo "Support SHA256: $support_sha256"
|
||||||
|
echo "-------------------------"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# 复制 boot.wim 到 /os,用于临时编辑
|
# 复制 boot.wim 到 /os,用于临时编辑
|
||||||
|
|||||||
Reference in New Issue
Block a user