Scaricare e installare MSXML 6.0 su Windows Server 2019: guida completa, verifica e ripristino

Se amministri Windows Server 2019 e ti serve “installare MSXML 6.0”, la risposta breve è: non devi scaricarlo. MSXML 6.0 è già incluso di default e si aggiorna tramite Windows Update. In questa guida trovi verifiche, ripristino e consigli per scenari legacy.

Indice

Che cos’è MSXML 6.0 e perché ti serve

MSXML (Microsoft XML Core Services) è il componente COM di Windows che fornisce parser XML, XPath, XSD Schema e XSLT per applicazioni native e script. La versione MSXML 6.0 è quella attuale e supportata per i sistemi moderni; le versioni precedenti (ad es. MSXML 4.0) sono deprecate e vanno disinstallate per ragioni di sicurezza.

  • Ambito d’uso tipico: applicazioni custom che usano ProgID COM come Msxml2.DOMDocument.6.0 o Msxml2.FreeThreadedDOMDocument.6.0, script amministrativi, alcuni prodotti server Microsoft.
  • Cosa include: libreria msxml6.dll sia a 64 bit che a 32 bit (per processi WOW64), registrazione COM e supporto agli aggiornamenti cumulativi di Windows.

È già in Windows Server 2019: quando serve davvero “installarlo”

Da Windows Vista in poi (quindi anche su Windows Server 2019) MSXML 6.0 è parte del sistema operativo. Non esiste un installer separato da scaricare per questa piattaforma: la componente è presente out‑of‑the‑box e viene mantenuta aggiornata dai cumulative updates mensili.

Tipicamente troverai versioni file del tipo 6.30.x o successive (sia in System32 che in SysWOW64). Se un’applicazione “non trova MSXML 6.0”, quasi sempre il problema è di rilevamento (ProgID sbagliato, processo a 32/64 bit non coerente) o di file corrotti riparabili con SFC/DISM.

Schema di decisione rapido

PassoSoluzioneDettagli
Verificare prima di scaricareControlla che msxml6.dll esista in C:\Windows\System32 (64 bit) e C:\Windows\SysWOW64 (32 bit) e che i ProgID COM siano registrati.Vedi comandi sotto per file, registro e creazione oggetto COM.
Ripristino in caso di problemiEsegui sfc /scannow e DISM /Online /Cleanup-Image /RestoreHealth. Applica gli aggiornamenti cumulativi di Windows.Se SFC non ripara, usa prima DISM e ripeti SFC; in ambienti senza Internet, usa una source WIM coerente con la build.
Redistribuzione su sistemi più vecchiSu Windows Server 2003/XP o per pacchetti legacy, usa il pacchetto msxml6.msi (Service Pack 2) come ridistribuibile.Integra l’MSI nel tuo setup (es.: msiexec /i msxml6.msi /qn). Non applicabile a Server 2019.
Perché non trovi più un link direttoI vecchi link di download pubblici sono stati ritirati; per Server 2019 non è previsto un installer esterno.MSXML 6.0 arriva con Windows o tramite Catalogo/Windows Update in forma di aggiornamenti cumulativi.

Come verificare la presenza di MSXML 6.0 su Windows Server 2019

Controllo file

dir C:\Windows\System32\msxml6.dll
dir C:\Windows\SysWOW64\msxml6.dll

Su un sistema sano dovresti vedere entrambe le copie (64 bit e 32 bit). Per leggere la versione file con PowerShell:

Get-Item 'C:\Windows\System32\msxml6.dll' | 
  Select-Object @{Name='File';Expression={$_.Name}},
                @{Name='Percorso';Expression={$_.FullName}},
                @{Name='Versione';Expression={$_.VersionInfo.FileVersion}}

Get-Item 'C:\Windows\SysWOW64\msxml6.dll' |
Select-Object Name, FullName, @{Name='Versione';Expression={$_.VersionInfo.FileVersion}} 

Controllo registro

Le chiavi più utili sono:

  • HKLM\SOFTWARE\Microsoft\MSXML60 (componenti a 64 bit)
  • HKLM\SOFTWARE\WOW6432Node\Microsoft\MSXML60 (componenti a 32 bit)
reg query "HKLM\SOFTWARE\Microsoft\MSXML60" /s
reg query "HKLM\SOFTWARE\WOW6432Node\Microsoft\MSXML60" /s

Con PowerShell:

Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\MSXML60' -ErrorAction SilentlyContinue
Get-ItemProperty -Path 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\MSXML60' -ErrorAction SilentlyContinue

Controllo ProgID COM

Verifica la creazione dell’oggetto COM, sia in contesto 64 bit che 32 bit:

# PowerShell (64 bit)
[void](New-Object -ComObject 'Msxml2.DOMDocument.6.0')
[void](New-Object -ComObject 'Msxml2.FreeThreadedDOMDocument.6.0')

Per il contesto 32 bit, avvia powershell.exe da C:\Windows\SysWOW64\WindowsPowerShell\v1.0\ e ripeti i comandi. Se ottieni 0x80040154 (Class not registered), probabilmente manca la vista a 32 bit o stai usando il ProgID sbagliato.

Riparare MSXML 6.0 se mancante o corrotto

MSXML 6.0 è una componente “a protezione di risorsa” (Windows Resource Protection): non copiarla manualmente da un altro server e non affidarti a regsvr32 se non espressamente richiesto da una guida ufficiale. Usa invece gli strumenti supportati:

Sequenza consigliata in modalità online

  1. Controllo integrità con SFC sfc /scannow Se segnala file non riparabili, passa al punto 2.
  2. Riparazione dello store componenti con DISM DISM /Online /Cleanup-Image /RestoreHealth Al termine, ripeti sfc /scannow per finalizzare la riparazione dei file.
  3. Applica gli aggiornamenti cumulativi Installa l’ultimo cumulative update di sicurezza/qualità: oltre a patchare lo stack, riallinea le versioni dei binari come msxml6.dll.

Riparazione con sorgente locale (ambienti isolati)

Se il server non ha accesso a Internet, prepara un supporto ISO della stessa build/edizione/lingua di Windows Server 2019 e usa una source coerente:

# Monta l'ISO con install.wim
Dism /Online /Cleanup-Image /RestoreHealth /Source:wim:D:\sources\install.wim:1 /LimitAccess

In alternativa, con install.esd specificare l'indice corretto

Dism /Online /Cleanup-Image /RestoreHealth /Source:esd:D:\sources\install.esd:1 /LimitAccess </code></pre>

<p>Conclusa la riparazione, esegui <code>sfc /scannow</code> e riavvia se richiesto.</p>

<h3>Verifica post‑riparazione</h3>
<pre><code># Versione file
(Get-Item 'C:\Windows\System32\msxml6.dll').VersionInfo.FileVersion

Creazione oggetto COM

[void](New-Object -ComObject 'Msxml2.DOMDocument.6.0') </code></pre>

<h2>Aggiornamenti e versioni: cosa aspettarsi</h2>
<ul>
  <li><strong>Origine degli aggiornamenti:</strong> MSXML&nbsp;6.0 viene aggiornato come parte dei pacchetti cumulativi del sistema operativo.</li>
  <li><strong>Numerazione tipica:</strong> su Windows&nbsp;Server&nbsp;2019 vedrai un <em>major</em> <code>6.30</code> con build allineate agli aggiornamenti rilasciati (ad es. <code>6.30.17763.x</code> e successivi).</li>
  <li><strong>Controllo degli hotfix installati:</strong>
    <pre><code>Get-HotFix | Sort-Object -Property InstalledOn -Descending | Select-Object -First 10 Source, HotFixID, InstalledOn</code></pre>
  </li>
</ul>
<p><em>Nota:</em> non è previsto un “Service Pack” separato per MSXML&nbsp;6.0 su Server&nbsp;2019; le patch sono veicolate dai canali standard di Windows.</p>

<h2>Scenari legacy: quando serve il pacchetto <code>msxml6.msi</code></h2>
<p>Il ridistribuibile <strong>MSXML&nbsp;6.0 SP2 (<code>msxml6.msi</code>)</strong> esiste per:</p>
<ul>
  <li>installazioni su <strong>Windows&nbsp;Server&nbsp;2003/Windows&nbsp;XP</strong> e ambienti equivalenti non più supportati;</li>
  <li>inclusione nei <em>setup</em> di applicazioni che devono portarsi dietro MSXML&nbsp;6.0 su piattaforme legacy;</li>
  <li>laboratori isolati o immagini gold storiche dove è richiesta esplicitamente la presenza dell’MSI.</li>
</ul>
<p>Se devi integrarlo in un setup, usa comandi standard MSI:</p>
<pre><code>msiexec /i msxml6.msi /qn /norestart /l*v %TEMP%\msxml6-install.log
</code></pre>
<p>Su Windows&nbsp;Server&nbsp;2019 <strong>non usare l’MSI</strong>: il sistema operativo contiene già la componente corretta e gestita.</p>

<h2>Perché non trovi più un link pubblico “affidabile” per MSXML&nbsp;6.0</h2>
<p>Molti collegamenti storici al “Download Center” sono stati ritirati. Oggi il canale di distribuzione supportato per le piattaforme moderne è Windows&nbsp;Update/Servicing Stack. Per esigenze d’archivio o build datate, affidati a fonti Microsoft ufficiali (Catalogo degli aggiornamenti o pacchetti ridistribuibili legittimi inclusi in prodotti Microsoft) e <strong>evita siti terzi</strong>: potrebbero ospitare binari non firmati o manomessi.</p>

<h2>Buone pratiche per sviluppatori e IT</h2>
<h3>Usa ProgID espliciti di MSXML&nbsp;6.0</h3>
<p>Evita ProgID “generici” (es. <code>MSXML2.DOMDocument</code>) che possono risolvere a versioni obsolete. Usa sempre la forma <strong>versionata</strong>:</p>
<ul>
  <li><code>MSXML2.DOMDocument.6.0</code> (DOM sincrono, apartment-threaded)</li>
  <li><code>MSXML2.FreeThreadedDOMDocument.6.0</code> (DOM multi‑thread)</li>
  <li><code>MSXML2.XSLTemplate.6.0</code> (XSLT)</li>
</ul>

<h3>Esempio di verifica lato script</h3>
<p><strong>VBScript</strong> (utile per test rapidi):</p>
<pre><code>Dim dom: Set dom = CreateObject("Msxml2.DOMDocument.6.0")
dom.async = False
dom.loadXML "&lt;root/&gt;"
WScript.Echo "MSXML6 OK - elemento radice: " &amp; dom.documentElement.nodeName
</code></pre>

<p><strong>PowerShell</strong> (creazione e validazione rapida):</p>
<pre><code>$dom = New-Object -ComObject "Msxml2.DOMDocument.6.0"
$dom.async = $false
[void]$dom.loadXML("&lt;root/&gt;")
$dom.documentElement.Name
</code></pre>

<h3>32&nbsp;bit vs 64&nbsp;bit</h3>
<ul>
  <li>Processi a 64&nbsp;bit caricano <code>System32\msxml6.dll</code>; processi a 32&nbsp;bit caricano <code>SysWOW64\msxml6.dll</code>.</li>
  <li>Se la tua app è compilata x86, testala da host a 32&nbsp;bit (ad es. <code>cscript.exe</code> da <code>SysWOW64</code> o un eseguibile x86) per evitare errori di <em>class not registered</em>.</li>
</ul>

<h3>Rimozione di versioni obsolete</h3>
<p>Se uno scanner di sicurezza segnala <strong>MSXML&nbsp;4.x</strong> o precedenti, rimuovile. Puoi farlo da “Programmi e funzionalità” oppure via script, verificando prima la loro presenza:</p>
<pre><code># Rilevare MSXML 4.x (x86/x64) via registro
Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall' ,
              'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall' |
  Where-Object { $_.GetValue('DisplayName') -like 'MSXML 4.0*' } |
  Select-Object PSChildName, @{N='DisplayName';E={$.GetValue('DisplayName')}}, @{N='Version';E={$.GetValue('DisplayVersion')}}
</code></pre>
<p><em>Suggerimento:</em> dopo la rimozione, testa il tuo software con i ProgID <code>.6.0</code> come indicato sopra.</p>

<h2>Diagnostica degli errori più comuni</h2>
<h3>“Class not registered (0x80040154)”</h3>
<ul>
  <li><strong>ProgID errato:</strong> controlla di usare <code>Msxml2.DOMDocument.6.0</code>.</li>
  <li><strong>Mancata corrispondenza 32/64&nbsp;bit:</strong> processo x86 che cerca la classe a 64&nbsp;bit (o viceversa). Prova da PowerShell a 32&nbsp;bit e verifica <code>SysWOW64\msxml6.dll</code>.</li>
  <li><strong>Registrazione corrotta:</strong> esegui SFC/DISM come da sezione “Riparare MSXML&nbsp;6.0”.</li>
</ul>

<h3>“Impossibile caricare msxml6.dll” o file mancante</h3>
<ol>
  <li>Controlla la presenza fisica del file in <code>System32</code> e <code>SysWOW64</code>.</li>
  <li>Esegui <code>DISM /Online /Cleanup-Image /RestoreHealth</code> seguito da <code>sfc /scannow</code>.</li>
  <li>Installa gli ultimi aggiornamenti di qualità/sicurezza.</li>
</ol>

<h3>“Versione non supportata rilevata dallo scanner”</h3>
<ul>
  <li>Gli scanner spesso segnalano <strong>MSXML&nbsp;4.x</strong>. Rimuovila e assicurati che le applicazioni usino <code>.6.0</code>.</li>
  <li>Conferma la versione della <code>msxml6.dll</code> (scheda <em>Dettagli</em> nelle Proprietà del file) o via PowerShell come mostrato prima.</li>
</ul>

<h2>Checklist operativa (copiabile in runbook)</h2>
<ol>
  <li>Verifica file e versioni
    <pre><code>dir C:\Windows\System32\msxml6.dll
dir C:\Windows\SysWOW64\msxml6.dll
</code></pre>
  </li>
  <li>Verifica ProgID COM
    <pre><code>[void](New-Object -ComObject 'Msxml2.DOMDocument.6.0')</code></pre>
  </li>
  <li>Ripara se necessario
    <pre><code>DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow

Aggiorna il sistema (cumulative update più recente).
Rimuovi eventuale MSXML 4.x e aggiorna i ProgID nelle app a .6.0.

Appendice: script PowerShell per audit MSXML 6.0 su più server

Usa questo script per un controllo rapido (richiede PSRemoting abilitato e permessi amministrativi):

$servers = @('SRV-APP01','SRV-DB01','SRV-WEB01')  # <-- modifica l'elenco

$script = {
$result = [ordered]@{
ComputerName = $env:COMPUTERNAME
Sys32Exists  = Test-Path 'C:\Windows\System32\msxml6.dll'
Wow64Exists  = Test-Path 'C:\Windows\SysWOW64\msxml6.dll'
Sys32Version = $null
Wow64Version = $null
COMOK64    = $false
COMOK32    = $null
}
```
if ($result.Sys32Exists) {
    $result.Sys32Version = (Get-Item 'C:\Windows\System32\msxml6.dll').VersionInfo.FileVersion
}
if ($result.Wow64Exists) {
    $result.Wow64Version = (Get-Item 'C:\Windows\SysWOW64\msxml6.dll').VersionInfo.FileVersion
}

try { [void](New-Object -ComObject 'Msxml2.DOMDocument.6.0'); $result.COM_OK_64 = $true } catch { }

# Test COM 32-bit (solo se presente SysWOW64): avvia powershell x86 e prova
if ($result.Wow64Exists) {
    $ps32 = "$env:WINDIR\SysWOW64\WindowsPowerShell\v1.0\powershell.exe"
    $code = "[void](New-Object -ComObject 'Msxml2.DOMDocument.6.0');'OK'"
    $out = &amp; $ps32 -NoProfile -Command $code 2&gt;$null
    $result.COM_OK_32 = ($out -eq 'OK')
}

[pscustomobject]$result
```
}

$report = Invoke-Command -ComputerName $servers -ScriptBlock $script -ErrorAction Continue
$report | Format-Table -AutoSize 

Esporta in CSV per archivio:

$report | Export-Csv -NoTypeInformation -Path ".\Audit-MSXML6-$((Get-Date).ToString('yyyyMMdd-HHmm')).csv"

Domande frequenti

Posso “reinstallare” MSXML 6.0 con un installer separato su Server 2019?
No. Su Windows Server 2019 la componente è integrata e governata dal sistema. Se c’è un problema, ripara con SFC/DISM e aggiorna Windows.

È sicuro usare regsvr32 msxml6.dll?
Non è necessario in scenari normali e non è il metodo consigliato per riparare la registrazione. Affidati a SFC/DISM e agli aggiornamenti cumulativi.

Come verifico la versione installata?
Apri le Proprietà di msxml6.dll (scheda Dettagli) oppure usa i comandi PowerShell mostrati. Su Server 2019 vedrai versioni 6.30.x o successive.

Ho un’applicazione che richiede “MSXML 6 SP2”. Cosa significa su Server 2019?
È un requisito storico del pacchetto MSI. Su Server 2019 la componente è equivalente o più recente: di norma non serve alcuna azione aggiuntiva.

La mia app usa MSXML2.DOMDocument senza versione e smette di funzionare.
Aggiorna il codice per usare MSXML2.DOMDocument.6.0. I ProgID generici possono puntare a parser obsoleti.

Su Server Core vale lo stesso?
Sì. Anche le installazioni “Core” includono MSXML 6.0; i file e i ProgID sono presenti come in Server con Desktop Experience.

Riepilogo

Su Windows Server 2019 non serve né è previsto scaricare un installer a parte per MSXML 6.0. La libreria è già inclusa nel sistema, in entrambe le varianti 64/32 bit, e si mantiene automaticamente mediante Windows Update. Se incontri errori, esegui le verifiche proposte (file, registro, ProgID), ripara con DISM e SFC e mantieni il server aggiornato. Solo per ambienti legacy (Server 2003/XP, immagini storiche) ha senso incorporare il msxml6.msi come ridistribuibile.


Suggerimenti pratici finali

  • Evita download da terze parti: potresti introdurre binari non firmati o compromessi.
  • Allinea i ProgID: usa sempre .6.0 per DOM/XSLT; rimuovi riferimenti a 3.0/4.0 nelle app.
  • Controlla sia 64 che 32 bit: molte app x86 su Server 2019 richiedono la copia in SysWOW64.
  • Documenta nel runbook: inserisci la checklist e lo script di audit per interventi ripetibili.
Indice