# Windows Server 2025 zh-CN Language Pack 离线包

本文档用于说明如何在 **Windows Server 2025 英文系统** 中离线安装完整简体中文语言包，并将系统 UI、区域、输入法、时区、欢迎屏幕、新用户默认配置设置为中文。

本离线包主要用于 AWS EC2、云服务器、英文 Windows Server 2025 节点初始化中文环境。

---

## 1. 适用范围

| 项目    | 要求                              |
| ----- | ------------------------------- |
| 系统版本  | Windows Server 2025             |
| 系统架构  | x64                             |
| 系统版本号 | 10.0.26100 系列                   |
| 目标语言  | zh-CN / 简体中文 / 中国               |
| 推荐用途  | 英文 Windows Server 2025 转完整中文 UI |

**注意：**

不要把本离线包用于 Windows Server 2022、Windows Server 2019、Windows 10、Windows 11 或其他不匹配版本。

语言包、FOD 包、系统版本不匹配，可能导致 DISM、CBS、Windows Update 后续异常。

---

## 2. 离线包目录结构

标准目录结构如下：

```text
WinSrv2025-zhCN-LanguagePack
├── repo
│   ├── Microsoft-Windows-Server-Language-Pack_x64_zh-cn.cab
│   ├── Microsoft-Windows-*-zh-CN-*.cab
│   └── Microsoft-Windows-*-und-HANS-*.cab
├── Install-zhCN-Language.ps1
├── README.md
└── README.html
```

| 路径                          | 说明                            |
| --------------------------- | ----------------------------- |
| `repo\`                     | 存放 zh-CN / und-HANS 相关 CAB 文件 |
| `Install-zhCN-Language.ps1` | 离线安装中文语言包并配置全局中文              |
| `README.md`                 | Markdown 版本说明文档               |
| `README.html`               | HTML 版本说明文档                   |

---

## 3. 核心语言包

本包中最关键的文件是：

```text
repo\Microsoft-Windows-Server-Language-Pack_x64_zh-cn.cab
```

这个文件是 Windows Server 2025 的完整简体中文 Language Pack。

没有这个文件，只安装 LXP 或 Language Features，会出现下面这种状态：

```text
zh-CN    LXP

默认的系统用户界面语言 : en-US

安装的语言: zh-CN
  类型: 部分本地化的语言，MUI 类型。
  回退语言 en-US
```

这种情况下，系统会出现部分中文、部分英文的问题，例如：

```text
文件 / 操作 / 查看 / 帮助 可能是中文
Windows Defender Firewall with Advanced Security 可能仍然是英文
services.msc / eventvwr.msc / wf.msc 等 MMC 管理工具可能仍然是英文
```

完整安装 `Microsoft-Windows-Server-Language-Pack_x64_zh-cn.cab` 后，目标状态应接近：

```text
zh-CN    LpCab

默认的系统用户界面语言 : zh-CN

安装的语言: zh-CN
  类型: 完全本地化的语言。
```

---

## 4. 解压要求

本离线包不要求固定解压路径。

可以解压到任意目录，例如：

```text
C:\ISO\WinSrv2025-zhCN-LanguagePack
D:\Tools\WinSrv2025-zhCN-LanguagePack
C:\Users\Administrator\Desktop\WinSrv2025-zhCN-LanguagePack
```

唯一要求是：**解压后的顶层目录名保持为：**

```text
WinSrv2025-zhCN-LanguagePack
```

并且目录内部必须包含：

```text
repo
Install-zhCN-Language.ps1
README.md
README.html
```

安装脚本通过 `$PSScriptRoot` 自动定位自身所在目录，因此不依赖 `C:\ISO`、`D:\Tools` 或其他固定路径。

---

## 5. 推荐 ZIP 打包方式

打包 ZIP 时，建议把顶层目录一起打进去。

标准 ZIP 结构应为：

```text
WinSrv2025-zhCN-LanguagePack.zip
└── WinSrv2025-zhCN-LanguagePack
    ├── repo
    ├── Install-zhCN-Language.ps1
    ├── README.md
    └── README.html
```

推荐打包命令：

```powershell
$PackageDir = "C:\ISO\WinSrv2025-zhCN-LanguagePack"
$ZipPath    = "C:\ISO\WinSrv2025-zhCN-LanguagePack.zip"

if (Test-Path $ZipPath) {
    Remove-Item $ZipPath -Force
}

Compress-Archive `
    -Path $PackageDir `
    -DestinationPath $ZipPath `
    -Force

Get-Item $ZipPath | Select-Object FullName, Length
```

不要使用下面这种方式打包：

```powershell
Compress-Archive -Path "C:\ISO\WinSrv2025-zhCN-LanguagePack\*" ...
```

这种方式会导致 ZIP 解压后没有顶层目录，容易破坏标准目录结构。

---

## 6. 安装方法

### 6.1 假设 ZIP 在当前目录

以管理员身份打开 PowerShell，进入 ZIP 所在目录，然后执行：

```powershell
$PackageName = "WinSrv2025-zhCN-LanguagePack"
$ZipPath     = ".\$PackageName.zip"
$DeployRoot  = (Get-Location).Path
$PackageDir  = Join-Path $DeployRoot $PackageName

Expand-Archive `
    -Path $ZipPath `
    -DestinationPath $DeployRoot `
    -Force

Set-Location $PackageDir

Set-ExecutionPolicy Bypass -Scope Process -Force

.\Install-zhCN-Language.ps1
```

默认执行完成后会自动重启系统。

---

### 6.2 不自动重启

```powershell
.\Install-zhCN-Language.ps1 -NoReboot
```

然后手动重启：

```powershell
Restart-Computer -Force
```

---

### 6.3 ZIP 在指定路径

例如 ZIP 位于：

```text
D:\Tools\WinSrv2025-zhCN-LanguagePack.zip
```

可以这样执行：

```powershell
$PackageName = "WinSrv2025-zhCN-LanguagePack"
$ZipPath     = "D:\Tools\$PackageName.zip"
$DeployRoot  = Split-Path $ZipPath -Parent
$PackageDir  = Join-Path $DeployRoot $PackageName

Expand-Archive `
    -Path $ZipPath `
    -DestinationPath $DeployRoot `
    -Force

Set-Location $PackageDir

Set-ExecutionPolicy Bypass -Scope Process -Force

.\Install-zhCN-Language.ps1
```

---

## 7. Install-zhCN-Language.ps1 应该做什么

安装脚本应完成以下动作：

| 步骤          | 说明                                                                |
| ----------- | ----------------------------------------------------------------- |
| 安装完整语言包     | 通过 DISM 安装 `Microsoft-Windows-Server-Language-Pack_x64_zh-cn.cab` |
| 安装语言能力包     | 安装 Basic、Handwriting、OCR、Speech、TextToSpeech、Hans Fonts           |
| 设置用户语言      | 设置当前用户语言列表为 zh-CN                                                 |
| 设置 UI 语言    | 设置当前用户和系统首选 UI 语言为 zh-CN                                          |
| 设置区域        | 设置 Culture、System Locale、Home Location 为中国                        |
| 设置时区        | 设置为 China Standard Time                                           |
| 设置 DISM 国际化 | 执行 `dism /Online /Set-AllIntl:zh-CN`                              |
| 复制到系统账户     | 复制当前用户国际化配置到欢迎屏幕、系统账户、新用户默认配置                                     |
| 重启系统        | 默认自动重启，可通过 `-NoReboot` 跳过                                         |

---

## 8. 推荐安装脚本内容

`Install-zhCN-Language.ps1` 推荐使用下面的逻辑：

```powershell
param(
    [switch]$NoReboot
)

$ErrorActionPreference = "Stop"

$Lang  = "zh-CN"
$GeoId = 45
$Repo  = Join-Path $PSScriptRoot "repo"

if (-not (Test-Path $Repo)) {
    throw "找不到 repo 目录: $Repo"
}

Write-Host "使用语言包源目录: $Repo" -ForegroundColor Cyan

$LpCab = Get-ChildItem $Repo -Filter "Microsoft-Windows-Server-Language-Pack_x64_zh-cn.cab" |
    Select-Object -First 1

if (-not $LpCab) {
    throw "找不到 Microsoft-Windows-Server-Language-Pack_x64_zh-cn.cab"
}

Write-Host "安装完整中文语言包: $($LpCab.FullName)" -ForegroundColor Cyan
dism /Online /Add-Package /PackagePath:"$($LpCab.FullName)"

$Caps = @(
    "Language.Basic~~~zh-CN~0.0.1.0",
    "Language.Handwriting~~~zh-CN~0.0.1.0",
    "Language.OCR~~~zh-CN~0.0.1.0",
    "Language.Speech~~~zh-CN~0.0.1.0",
    "Language.TextToSpeech~~~zh-CN~0.0.1.0",
    "Language.Fonts.Hans~~~und-HANS~0.0.1.0"
)

foreach ($Cap in $Caps) {
    $State = (Get-WindowsCapability -Online -Name $Cap).State

    if ($State -ne "Installed") {
        Write-Host "安装 Capability: $Cap" -ForegroundColor Yellow
        dism /Online /Add-Capability /CapabilityName:$Cap /Source:"$Repo" /LimitAccess
    } else {
        Write-Host "已安装: $Cap" -ForegroundColor Green
    }
}

$LanguageList = New-WinUserLanguageList -Language $Lang
Set-WinUserLanguageList -LanguageList $LanguageList -Force

Set-WinUILanguageOverride -Language $Lang
Set-Culture -CultureInfo $Lang
Set-WinSystemLocale -SystemLocale $Lang
Set-WinHomeLocation -GeoId $GeoId
Set-TimeZone -Id "China Standard Time"

if (Get-Command Set-SystemPreferredUILanguage -ErrorAction SilentlyContinue) {
    Set-SystemPreferredUILanguage -Language $Lang
}

dism /Online /Set-AllIntl:zh-CN
dism /Online /Set-TimeZone:"China Standard Time"

Copy-UserInternationalSettingsToSystem -WelcomeScreen $true -NewUser $true

Write-Host ""
Write-Host "安装和中文全局配置完成。" -ForegroundColor Green
Write-Host "当前语言状态:" -ForegroundColor Cyan

Get-InstalledLanguage
dism /online /Get-Intl

if (-not $NoReboot) {
    Write-Host "10 秒后自动重启..." -ForegroundColor Yellow
    Start-Sleep -Seconds 10
    Restart-Computer -Force
} else {
    Write-Host "已跳过自动重启，请手动重启系统。" -ForegroundColor Yellow
}
```

---

## 9. 安装后验证

重启后执行：

```powershell
Get-InstalledLanguage
dism /online /Get-Intl
```

目标结果应类似：

```text
Language Language Packs  Language Features
-------- --------------  -----------------
zh-CN    LpCab           BasicTyping, Handwriting, Speech, TextToSpeech, OCR
```

以及：

```text
默认的系统用户界面语言 : zh-CN
系统区域设置 : zh-CN

安装的语言: zh-CN
  类型: 完全本地化的语言。
```

---

## 10. 错误状态示例

如果看到：

```text
zh-CN    LXP
```

或者：

```text
默认的系统用户界面语言 : en-US

安装的语言: zh-CN
  类型: 部分本地化的语言，MUI 类型。
  回退语言 en-US
```

说明完整中文 Language Pack CAB 没有安装成功。

这种情况下，不要继续反复执行 `Set-WinUILanguageOverride`、`Set-Culture`、`Copy-UserInternationalSettingsToSystem`。

需要先确认主语言包是否存在并安装成功：

```powershell
Get-ChildItem .\repo -Filter "Microsoft-Windows-Server-Language-Pack_x64_zh-cn.cab"
dism /Online /Add-Package /PackagePath:".\repo\Microsoft-Windows-Server-Language-Pack_x64_zh-cn.cab"
```

---

## 11. 常用检查命令

### 11.1 查看已安装语言

```powershell
Get-InstalledLanguage
```

### 11.2 查看系统国际化配置

```powershell
dism /online /Get-Intl
```

### 11.3 查看语言能力包状态

```powershell
Get-WindowsCapability -Online |
    Where-Object { $_.Name -match "zh-CN|HANS" } |
    Select-Object Name, State
```

### 11.4 查看当前用户语言设置

```powershell
Get-WinUILanguageOverride
Get-WinUserLanguageList
Get-Culture
Get-WinSystemLocale

if (Get-Command Get-SystemPreferredUILanguage -ErrorAction SilentlyContinue) {
    Get-SystemPreferredUILanguage
}
```

### 11.5 查看中文相关 Package

```powershell
Get-WindowsPackage -Online |
    Where-Object {
        $_.PackageName -match "zh-cn" -and
        $_.PackageName -match "Language"
    } |
    Select-Object PackageName, PackageState
```

---

## 12. 故障处理

### 12.1 仍然显示英文

先检查：

```powershell
Get-InstalledLanguage
dism /online /Get-Intl
```

重点看是否为：

```text
zh-CN    LpCab
默认的系统用户界面语言 : zh-CN
```

如果仍然是：

```text
zh-CN    LXP
默认的系统用户界面语言 : en-US
```

说明完整语言包没有装成功。

---

### 12.2 DISM 报源文件找不到

检查目录结构：

```powershell
Get-ChildItem .\repo
```

必须存在：

```text
Microsoft-Windows-Server-Language-Pack_x64_zh-cn.cab
```

并且脚本应在 `WinSrv2025-zhCN-LanguagePack` 目录内执行：

```powershell
Get-Location
```

---

### 12.3 Add-Capability 失败

确认 repo 目录里包含 zh-CN / und-HANS 相关 CAB：

```powershell
Get-ChildItem .\repo -Filter "*.cab" |
    Where-Object {
        $_.Name -match "zh-cn|zh-CN|und-HANS"
    } |
    Select-Object Name, Length
```

---

### 12.4 组件安装卡住

查看 Windows 组件安装进程：

```powershell
Get-Process TiWorker,TrustedInstaller -ErrorAction SilentlyContinue |
    Select-Object ProcessName,Id,CPU,StartTime
```

查看 DISM / CBS 日志：

```powershell
Get-Content C:\Windows\Logs\DISM\dism.log -Tail 80
Get-Content C:\Windows\Logs\CBS\CBS.log -Tail 80
```

如果 `TiWorker` CPU 仍在增长，说明系统组件安装仍在执行，等待即可。

---

### 12.5 检查是否需要重启

```powershell
$Paths = @(
    "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending",
    "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"
)

foreach ($Path in $Paths) {
    if (Test-Path $Path) {
        Write-Host "需要重启: $Path" -ForegroundColor Yellow
    }
}

$PendingRename = Get-ItemProperty `
    "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager" `
    -Name PendingFileRenameOperations `
    -ErrorAction SilentlyContinue

if ($PendingRename.PendingFileRenameOperations) {
    Write-Host "存在 PendingFileRenameOperations，需要重启。" -ForegroundColor Yellow
}
```

---

## 13. 推荐部署方式

建议将本离线包保存到内部文件服务器、对象存储或运维工具目录，例如：

```text
\\fileserver\software\Windows\Server2025\LanguagePack\WinSrv2025-zhCN-LanguagePack.zip
```

或：

```text
https://internal-download.example.com/Windows/Server2025/WinSrv2025-zhCN-LanguagePack.zip
```

以后新 Windows Server 2025 节点部署完成后，下载、解压、执行：

```powershell
$PackageName = "WinSrv2025-zhCN-LanguagePack"
$ZipPath     = ".\$PackageName.zip"
$DeployRoot  = (Get-Location).Path
$PackageDir  = Join-Path $DeployRoot $PackageName

Expand-Archive -Path $ZipPath -DestinationPath $DeployRoot -Force

Set-Location $PackageDir

Set-ExecutionPolicy Bypass -Scope Process -Force

.\Install-zhCN-Language.ps1
```

---

## 14. 版本记录

| 版本   | 说明                                                       |
| ---- | -------------------------------------------------------- |
| v1.0 | 初始版本，支持 Windows Server 2025 x64 zh-CN 离线语言包安装与全局中文配置     |
| v1.1 | 调整安装说明，不依赖固定路径，只要求解压后目录名为 `WinSrv2025-zhCN-LanguagePack` |

---

## 15. 最终目标

执行完成并重启后，系统应满足：

```text
当前用户 UI 语言：zh-CN
系统首选 UI 语言：zh-CN
系统区域设置：zh-CN
用户区域格式：zh-CN
非 Unicode 程序语言：zh-CN
国家或地区：中国
时区：China Standard Time
欢迎屏幕：中文
新用户默认配置：中文
传统 MMC 管理工具尽可能中文化
```
