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.
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
oMsxml2.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
Passo | Soluzione | Dettagli |
---|---|---|
Verificare prima di scaricare | Controlla 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 problemi | Esegui 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ù vecchi | Su 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 diretto | I 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
- Controllo integrità con SFC
sfc /scannow
Se segnala file non riparabili, passa al punto 2. - Riparazione dello store componenti con DISM
DISM /Online /Cleanup-Image /RestoreHealth
Al termine, ripetisfc /scannow
per finalizzare la riparazione dei file. - 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 6.0 viene aggiornato come parte dei pacchetti cumulativi del sistema operativo.</li>
<li><strong>Numerazione tipica:</strong> su Windows Server 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 6.0 su Server 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 6.0 SP2 (<code>msxml6.msi</code>)</strong> esiste per:</p>
<ul>
<li>installazioni su <strong>Windows Server 2003/Windows XP</strong> e ambienti equivalenti non più supportati;</li>
<li>inclusione nei <em>setup</em> di applicazioni che devono portarsi dietro MSXML 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 Server 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 6.0</h2>
<p>Molti collegamenti storici al “Download Center” sono stati ritirati. Oggi il canale di distribuzione supportato per le piattaforme moderne è Windows 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 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 "<root/>"
WScript.Echo "MSXML6 OK - elemento radice: " & 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("<root/>")
$dom.documentElement.Name
</code></pre>
<h3>32 bit vs 64 bit</h3>
<ul>
<li>Processi a 64 bit caricano <code>System32\msxml6.dll</code>; processi a 32 bit caricano <code>SysWOW64\msxml6.dll</code>.</li>
<li>Se la tua app è compilata x86, testala da host a 32 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 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 bit:</strong> processo x86 che cerca la classe a 64 bit (o viceversa). Prova da PowerShell a 32 bit e verifica <code>SysWOW64\msxml6.dll</code>.</li>
<li><strong>Registrazione corrotta:</strong> esegui SFC/DISM come da sezione “Riparare MSXML 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 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 = & $ps32 -NoProfile -Command $code 2>$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.