KB5042349 pour Windows Server 2022 : télécharger et installer manuellement la cumulative .NET (corriger le préfixe windows10.0‑kb)

Vous devez récupérer manuellement la mise à jour cumulative KB5042349 (.NET 3.5/4.8/4.8.1) pour Windows Server 2022 ? Ce guide explique pourquoi le fichier s’appelle « windows10.0‑kb… » et détaille une méthode sûre, vérifiable et automatisable pour le télécharger et l’installer.

Sommaire

Contexte et objectif

Un administrateur souhaite installer hors ligne la mise à jour 2024‑08 Cumulative Update for .NET Framework 3.5, 4.8 et 4.8.1 (KB5042349) sur un serveur Windows Server 2022 (version 21H2, x64). En ouvrant le Microsoft Update Catalog, le bouton Download renvoie pourtant vers un fichier dont le nom commence par windows10.0‑kb…. À première vue, cela peut faire croire qu’il s’agit d’un package réservé à Windows 10. Ce n’est pas le cas : le comportement est attendu. Ce guide clarifie le pourquoi, puis propose un pas‑à‑pas complet (avec vérifications, automatisation et dépannage) pour un déploiement fiable en production.

Pourquoi le préfixe « windows10.0‑kb… » apparaît pour Windows Server 2022

Windows Server 2022 est une édition LTSC bâtie sur la même base technique que la famille Windows 10 (noyau 10.0). Microsoft regroupe de longue date le packaging des correctifs serveur et client quand ils partagent la même branche de développement. Le préfixe windows10.0‑kb désigne donc la version du noyau (10.0) et non l’édition Windows 10 « client » au sens marketing. En d’autres termes : un nom de fichier qui commence par windows10.0‑kb peut parfaitement cibler Windows Server 2022.

ÉlémentExplication
Nomenclature du fichierLe préfixe windows10.0‑kb reflète la version du noyau (10.0) partagée par Windows 10 et Windows Server 2022.
Branche de développementServer 2022 et Windows 10 21H2 sont issus d’une co‑release ; Microsoft réutilise donc des identifiants de packaging communs.
Conséquence pratiqueUn binaire nommé windows10.0‑kbXXXXX‑x64‑…msu peut être parfaitement valable pour Windows Server 2022.

Ce qu’il faut retenir en une minute

  • Comportement attendu : voir windows10.0‑kb… pour Server 2022 est normal, car l’OS s’appuie sur le noyau 10.0.
  • Lien de téléchargement correct : utilisez celui affiché dans le Microsoft Update Catalog pour KB5042349 ; il s’installe bien sur Windows Server 2022.
  • Étapes express : téléchargez le(s) .msu proposés (par ex. windows10.0‑kb5041948‑x64‑ndp48…msu ou windows10.0‑kb5041964‑x64‑ndp481…msu), copiez‑les sur le serveur, puis exécutez wusa.exe <fichier.msu> /quiet /norestart et redémarrez si nécessaire.

Identifier le bon package pour votre serveur

La cumulative KB5042349 sert d’« enveloppe » : elle regroupe plusieurs payloads spécifiques aux versions de .NET Framework présentes sur le système. En pratique, le Catalog propose généralement un binaire .msu pour .NET 4.8 et un autre pour .NET 4.8.1 (sans oublier le support de .NET 3.5 si le rôle/feature est installé).

Composant cibleKB du payloadNom de fichier typiqueQuand l’utiliser
.NET Framework 4.8KB5041948 (contenu de KB5042349)windows10.0‑kb5041948‑x64‑ndp48…msuSi votre serveur est resté en 4.8 (cas le plus courant sur Server 2022).
.NET Framework 4.8.1KB5041964 (contenu de KB5042349)windows10.0‑kb5041964‑x64‑ndp481…msuSi vous avez ajouté/standardisé .NET 4.8.1 sur vos serveurs.
.NET Framework 3.5Inclus dans la cumulative si la feature est installéeGéré via le même .msuSi la Feature .NET 3.5 est activée (serveurs applicatifs legacy).

Astuce pour choisir automatiquement le bon fichier : détectez la version .NET avant installation.

$release = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -ErrorAction Stop).Release
$target = if ($release -ge 533320) { 'ndp481' } else { 'ndp48' }
"Version détectée : $((if ($target -eq 'ndp481') {'.NET 4.8.1'} else {'.NET 4.8'})) — utilisez le package correspondant."

Télécharger proprement depuis le Microsoft Update Catalog

  1. Recherchez KB5042349 dans le Microsoft Update Catalog.
  2. Dans la liste, identifiez l’entrée Windows Server 2022, x64‑based Systems et cliquez sur Download.
  3. Téléchargez le(s) fichier(s) proposé(s) : selon votre parc, il s’agit typiquement de windows10.0‑kb5041948‑x64‑ndp48…msu et/ou windows10.0‑kb5041964‑x64‑ndp481…msu.
  4. Copiez le(s) fichier(s) sur le serveur cible (share SMB sécurisé, par ex. \\filesrv\updates\KB5042349).

Vérifier l’intégrité et la signature avant déploiement

Deux contrôles simples évitent les mauvaises surprises :

  1. Empreinte SHA‑256 : comparez le hash calculé localement avec celui affiché dans le Catalog.
Get-FileHash .\windows10.0-kb5041964-x64-ndp481.msu -Algorithm SHA256
  1. Signature Authenticode : vérifiez qu’elle est valide et signée par « Microsoft Corporation ».
$sig = Get-AuthenticodeSignature .\windows10.0-kb5041964-x64-ndp481.msu
$sig | Format-List Status,SignerCertificate

Installer silencieusement avec WUSA

Pour un poste unique ou un petit volume, wusa.exe reste le moyen le plus simple. L’option /quiet évite l’UI ; /norestart laisse au plan de maintenance le soin du redémarrage.

wusa.exe .\windows10.0-kb5041948-x64-ndp48.msu /quiet /norestart

Si plusieurs fichiers sont fournis (ex. 4.8 et 4.8.1), installez uniquement celui qui correspond à votre version .NET. Dans un script, déterminez d’abord la cible (ndp48 vs ndp481), puis lancez wusa.exe sur le bon .msu.

Alternative avancée avec DISM (en cas de contrainte particulière)

DISM travaille nativement avec des .cab. Vous pouvez extraire le .cab depuis le .msu puis l’injecter, utile pour des scénarios d’image hors ligne ou des environnements très verrouillés.

New-Item -ItemType Directory -Path .\KB5042349 -Force | Out-Null
expand -F:* .\windows10.0-kb5041964-x64-ndp481.msu .\KB5042349
dism /online /add-package /packagepath:".\KB5042349\*.cab" /quiet /norestart

Comprendre et gérer les codes de sortie

CodeSignificationAction recommandée
0Installation réussieProgrammer un redémarrage si demandé par la politique de change.
3010Succès, redémarrage requisPlanifier/forcer un redémarrage dans la fenêtre de maintenance.
2359302Déjà installé / Non applicableVérifier la version .NET et l’historique des mises à jour.
0x800f0818 / 0x80240017Package non applicable / erreur génériqueConfirmer la cible (.NET 4.8 vs 4.8.1), vérifier prérequis et SSU.

Vérifications post‑installation

Après l’installation, effectuez ces contrôles :

  • Présence de l’update via la pile CBS/Packages :
Get-WindowsPackage -Online |
  Where-Object { $_.PackageName -match 'KB504(1948|1964|2349)' } |
  Select-Object PackageName, State, InstallTime
  • QFE/Hotfix (utile mais pas toujours exhaustif pour .NET) :
Get-HotFix | Where-Object { $_.HotFixID -match 'KB5042349|KB5041948|KB5041964' }
  • Registre .NET pour connaître la lignée (4.8 vs 4.8.1) :
$r = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full').Release
if ($r -ge 533320) { 'Le serveur est en .NET Framework 4.8.1' } else { 'Le serveur est en .NET Framework 4.8' }

Note : l’installation d’un Quality Update .NET ne change pas la valeur « Release » (qui identifie la branche 4.8 vs 4.8.1), mais vous y gagnez les correctifs de sécurité et qualité du mois.

Pré‑requis et bonnes pratiques

  • Servicing Stack Update (SSU) : sur Server 2022, la SSU est généralement fusionnée à la LCU mensuelle, mais vérifiez que le serveur a reçu les dernières mises à jour de maintenance avant d’appliquer une cumulative .NET, faute de quoi l’installation peut échouer silencieusement.
  • Espace disque : prévoyez une marge (typiquement > 2 Go libres sur %SystemDrive%) pour l’extraction et le cache de la pile CBS.
  • Redémarrage coordonné : planifiez le reboot pour éviter des incohérences d’applications dépendantes de .NET.
  • Fenêtre de maintenance : verrouillez une plage et désactivez les jobs batch sensibles pendant l’installation.

Déploiement sur plusieurs serveurs

Le bloc suivant illustre un déploiement silencieux et idempotent à partir d’un dossier réseau contenant les deux variantes ndp48 et ndp481. Il détecte la version .NET, choisit le bon .msu, installe, logue le résultat et propose le redémarrage différé.

param(
  [Parameter(Mandatory)]
  [string]$SharePath, # ex: \\filesrv\updates\KB5042349
  [string[]]$Servers = @($env:COMPUTERNAME),
  [switch]$AutoReboot
)

function Get-DotNetBranch {
try {
$r = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -ErrorAction Stop).Release
return $(if ($r -ge 533320) { 'ndp481' } else { 'ndp48' })
} catch { return 'ndp48' }
}

function Install-KB {
param([string]$MsuPath)
Write-Host "Installation de $MsuPath..."
& wusa.exe $MsuPath /quiet /norestart
$code = $LASTEXITCODE
switch ($code) {
0       { 'Succès' }
3010    { 'Succès avec redémarrage requis' }
2359302 { 'Déjà installé / Non applicable' }
default { "Code de sortie inattendu: $code" }
}
}

$results = @()
$script = {
param($SharePath,$AutoReboot)
$branch = Get-DotNetBranch
$file = Get-ChildItem -Path $SharePath -Filter "*$branch*.msu" | Sort-Object LastWriteTime -Descending | Select-Object -First 1
if (-not $file) { return [pscustomobject]@{ Computer=$env:COMPUTERNAME; Result='Aucun .msu correspondant'; RebootNeeded=$false } }
$res = Install-KB -MsuPath $file.FullName
$reboot = $res -like '*redémarrage requis*'
if ($reboot -and $AutoReboot) { Restart-Computer -Force }
[pscustomobject]@{ Computer=$env:COMPUTERNAME; File=$file.Name; Result=$res; RebootNeeded=$reboot }
}

foreach ($s in $Servers) {
try {
if ($s -eq $env:COMPUTERNAME) { $results += & $script $SharePath $AutoReboot }
else {
$results += Invoke-Command -ComputerName $s -ScriptBlock $script -ArgumentList $SharePath,$AutoReboot -ErrorAction Stop
}
} catch {
$results += [pscustomobject]@{ Computer=$s; Result="Erreur: $($_.Exception.Message)"; RebootNeeded=$false }
}
}

$results | Format-Table -AutoSize 

Validation de conformité et audit

Pour prouver l’application de l’update sur l’ensemble du parc, générez un rapport de conformité à partir d’Inventaire/CMDB ou directement via PowerShell :

$servers = Get-Content .\serveurs.txt
$report = foreach ($s in $servers) {
  try {
    Invoke-Command -ComputerName $s -ScriptBlock {
      $pkgs = (Get-WindowsPackage -Online | ? {$_.PackageName -match 'KB504(1948|1964)'}).PackageName -join ';'
      [pscustomobject]@{
        Computer=$env:COMPUTERNAME
        InstalledKBs=$pkgs
        DotNetBranch=(Get-DotNetBranch)
      }
    }
  } catch {
    [pscustomobject]@{ Computer=$s; InstalledKBs='ERROR'; DotNetBranch='UNKNOWN' }
  }
}
$report | Export-Csv .\KB5042349_Conformite.csv -NoTypeInformation -Encoding UTF8

Dépannage : problèmes courants et solutions

SymptômeCause probableCorrectif
Message « Le package n’est pas applicable à ce système » (0x800f0818)Vous tentez d’installer le binaire ndp481 alors que le serveur est en 4.8, ou inversement.Détectez la branche .NET (script fourni) et appliquez le .msu correspondant (KB5041948 pour 4.8, KB5041964 pour 4.8.1).
Blocage ou durée anormaleAutre session Windows Update en cours / pile CBS occupée (0x800f0902)Attendez la fin, ou redémarrez le serveur puis relancez le .msu en silencieux.
Échec silencieux en /quietPrérequis manquants, stockage saturé, antivirus interférantRelancez sans /quiet pour voir l’UI, vérifiez l’espace disque et la signature, neutralisez temporairement l’AV si politique autorisée.
Applications .NET instables après installationRedémarrage non effectué / verrous de fichiersPlanifiez un reboot. Si besoin, désinstallez le package concerné : wusa /uninstall /kb:5041948 /quiet /norestart (si désinstallation autorisée).

Bonnes pratiques de production

  • Validation hors production : testez KB5042349 sur un environnement de pré‑prod représentatif (mêmes runtimes, même GPO, même antivirus).
  • Fenêtre de maintenance : communiquez en amont, définissez un point de retour (snapshot/backup) et un plan de redémarrage contrôlé.
  • Supervision : surveillez les journaux applicatifs et Windows Logs > Setup (Event Viewer) dans les 24‑48 h suivant le patch.
  • Vérification post‑déploiement : industrialisez les checks (scripts, tableau de bord) et consignez les résultats dans votre outil d’ITSM.

FAQ

Le fichier commence par « windows10.0‑kb ». Est‑ce réellement pour Server 2022 ?
Oui. La chaîne « windows10.0 » désigne la version du noyau. Server 2022 utilise le noyau 10.0 ; le binaire est donc applicable.

Dois‑je installer les deux packages 4.8 et 4.8.1 ?
Non. Installez un seul package correspondant à la branche .NET présente sur le serveur. Installez ndp48 ou ndp481, pas les deux.

Comment savoir si un redémarrage est requis ?
Le code de sortie 3010 indique un reboot requis. Vous pouvez aussi détecter un redémarrage en attente via le registre (RebootPending) ou la présence de fichiers en attente (PendingFileRenameOperations).

Que faire si l’installation échoue sans message en mode silencieux ?
Relancez sans /quiet pour afficher l’UI, examinez %windir%\Logs\CBS\CBS.log, confirmez l’espace disque et la signature, puis validez la correspondance du package (.NET 4.8 vs 4.8.1).

Procédure pas‑à‑pas récapitulative

  1. Identifier la branche .NET : 4.8 ou 4.8.1 (script de détection fourni).
  2. Télécharger depuis le Microsoft Update Catalog la cumulative KB5042349 et le binaire .msu correspondant (ndp48 ou ndp481).
  3. Vérifier la signature et l’empreinte SHA‑256.
  4. Installer avec wusa.exe <fichier.msu> /quiet /norestart.
  5. Redémarrer pendant la fenêtre de maintenance si 3010 ou si vos politiques l’exigent.
  6. Contrôler la présence du KB via Get-WindowsPackage/Get-HotFix et journaliser le résultat.

Exemples de commandes prêtes à l’emploi

Installation silencieuse immédiate

# Choisir le bon fichier selon votre parc
wusa.exe .\windows10.0-kb5041948-x64-ndp48.msu /quiet /norestart
# ou
wusa.exe .\windows10.0-kb5041964-x64-ndp481.msu /quiet /norestart

Extraction en .cab puis intégration DISM

expand -F:* .\windows10.0-kb5041948-x64-ndp48.msu .\KB5042349
dism /online /add-package /packagepath:".\KB5042349\*.cab" /quiet /norestart

Vérification de l’installation

Get-WindowsPackage -Online |
  ? PackageName -match 'KB504(1948|1964)' |
  Select PackageName, State, InstallTime

Note sur la compatibilité et la sécurité

KB5042349 est un Quality and Security Rollup pour .NET Framework : il regroupe des correctifs de sécurité et de fiabilité récents. Même si l’intitulé du fichier peut prêter à confusion, le contenu a été validé pour Windows Server 2022. Dans les environnements à forte contrainte (banque, santé, industrie), l’application de ces mises à jour par voie manuelle est souvent requise ; assurez‑vous de respecter vos procédures de changement, d’archiver les binaire signés (avec leurs hashes) et de journaliser les codes de sortie d’installation.

Conclusion

Le préfixe windows10.0‑kb… ne doit pas vous inquiéter : il est lié à la version du noyau et n’empêche en rien la compatibilité avec Windows Server 2022. En suivant les étapes ci‑dessus — choix du bon package, vérification de l’intégrité, installation silencieuse, validations post‑déploiement et automatisation — vous installez KB5042349 dans les règles de l’art, avec un niveau de traçabilité et de fiabilité adapté aux environnements de production.


Fiche mémo ultra‑courte

  • Fichier attendu : windows10.0‑kb5041948‑x64‑ndp48…msu ou windows10.0‑kb5041964‑x64‑ndp481…msu.
  • Commande : wusa.exe .\nom_du_fichier.msu /quiet /norestart.
  • Vérification : Get-WindowsPackage -Online | ? PackageName -match 'KB504(1948|1964)'.
  • SSU : gardez la pile de maintenance à jour avant d’appliquer la cumulative .NET.

En résumé, l’intitulé « windows10.0‑kb… » est normal ; le lien du Catalog pour KB5042349 est le bon et le correctif s’installe bien sur Windows Server 2022.

Sommaire