Installazione offline di .NET Framework 3.5 su Windows Server 2019: guida completa e fix errore 0x8004015

Guida pratica per abilitare offline .NET Framework 3.5 su Windows Server 2019 quando Add Roles and Features fallisce con errore 0x8004015. Include cause, checklist, comandi DISM e PowerShell, policy GPO, script automatizzato e verifiche post installazione.

Indice

Contesto e sintomi

In ambienti isolati o con accesso a Internet negato, l’abilitazione della funzionalità .NET Framework 3.5 (feature NetFx3) su Windows Server 2019 può interrompersi se la sorgente non è valida o se il sistema ha componenti in stato incoerente. Un caso tipico è l’avvio da Add Roles and Features con percorso alternativo (ad esempio D:\sources\sxs) che termina con:

The request to add or remove features on the specified server failed.
A DISM session could not be opened. Error: 0x8004015

L’errore indica che DISM non riesce ad aprire la sessione COM/RPC. Le cause più comuni sono:

  • origine non valida, non accessibile o non corrispondente alla build del server;
  • riavvii o aggiornamenti in sospeso;
  • archivio componenti (WinSxS) o librerie DISM danneggiati;
  • privilegi insufficienti o policy che bloccano l’uso di sorgenti locali.

Obiettivo e strategia

Installare NetFx3 solo da una sorgente locale affidabile, forzando DISM a non contattare Windows Update e ripristinando l’integrità dei componenti prima dell’installazione. Il percorso consigliato è la cartella \sources\sxs dell’ISO di Windows Server 2019 che deve combaciare con edizione e livello di patch del sistema.

Prerequisiti e buone pratiche

  • ISO corretta: usare un supporto con livello di aggiornamento uguale o superiore a quello del server. Se possibile, privilegiare media destinati a installazioni senza Internet.
  • Permessi: aprire Prompt dei comandi o PowerShell come Administrator.
  • Manutenzione: pianificare un riavvio; evitare attività concorrenti come backup, antivirus aggressivi o snapshot in scrittura intensiva.
  • Storage: il supporto contenente \sources\sxs non deve risiedere su unità lente, rimovibili instabili o share soggette a timeout.
  • Backup: su macchine di produzione effettuare snapshot o backup prima di intervenire sull’archivio componenti.

Tabella delle azioni consigliate

FaseDettagli operativi
Verifica dell’origineMontare l’ISO corrispondente alla stessa build del server. Supponendo l’unità D:, la cartella corretta è D:\sources\sxs. Verificare in Esplora file che i file Microsoft-Windows-NetFx3-*.cab siano presenti.
Eliminazione di blocchiRiavviare il server e assicurarsi che non vi siano aggiornamenti in sospeso in Settings > Windows Update.
Integrità componentiEseguire scansioni e riparazioni con DISM e SFC come da sezione dedicata. Correggere eventuali errori prima di proseguire.
Installazione da riga di comandoUsare DISM con opzione /LimitAccess e sorgente esplicita: vedi sezione “Procedura rapida con DISM”.
Alternativa PowerShellUsare Install-WindowsFeature specificando -Source e includendo le sottoparti: vedi sezione relativa.
Policy di gruppoConfigurare l’impostazione “Specify settings for optional component installation and component repair” per consentire sorgenti locali o share definite dall’amministratore.
Permessi e ambienteEseguire come amministratore locale o con privilegi elevati di dominio. Evitare share che richiedono credenziali scadenti o drive mapping volatili.

Procedura rapida con dism

  1. Montare l’ISO di Windows Server 2019 e annotare la lettera assegnata (nell’esempio, D:).
  2. Aprire Prompt dei comandi come Administrator.
  3. Eseguire la riparazione dell’archivio componenti (vedi subito sotto) se il sistema ha subito interruzioni o aggiornamenti recenti.
  4. Lanciare l’abilitazione della feature con questa sintassi: dism /online /enable-feature /featurename:NetFx3 /All /Source:D:\sources\sxs /LimitAccessNote:
    • /All installa anche le dipendenze di NetFx3.
    • /LimitAccess impedisce qualsiasi tentativo verso Windows Update.
    • Se la lettera del supporto non è D:, sostituirla di conseguenza.

Verifica e riparazione dell’archivio componenti

Eseguire i comandi seguenti in un Prompt dei comandi elevato. Se il server è completamente isolato, preferire la variante con WIM come sorgente.

dism /online /cleanup-image /scanhealth
dism /online /cleanup-image /restorehealth
sfc /scannow

Se /restorehealth non può contattare WSUS o Internet, usare il file install.wim del supporto:

dism /Get-WimInfo /WimFile:D:\sources\install.wim
dism /online /cleanup-image /restorehealth /Source:wim:D:\sources\install.wim:2 /LimitAccess

Suggerimento: scegliere l’indice del WIM che corrisponde all’edizione installata (ad esempio Standard o Datacenter). Selezionare l’indice corretto in base all’output di /Get-WimInfo.

Procedura alternativa con powershell

Aprire Windows PowerShell come Administrator ed eseguire:

Install-WindowsFeature -Name NET-Framework-Features -Source D:\sources\sxs -IncludeAllSubFeature

Per evitare tentativi verso Windows Update in ambienti isolati, prima impostare la policy (vedi sezione policy) o assicurarsi che il parametro -Source sia accessibile e affidabile.

Uso di una immagine wim come sorgente

Quando non è disponibile la cartella \sources\sxs ma si dispone di install.wim valida, DISM può usare direttamente l’immagine:

dism /online /enable-feature /featurename:NetFx3 /All /Source:wim:D:\sources\install.wim:2 /LimitAccess

Stabilire l’indice corretto con /Get-WimInfo. Il vantaggio è l’allineamento perfetto dei componenti; lo svantaggio è la dipendenza dal WIM giusto per edizione e lingua.

Impostazioni di policy di gruppo

In contesti con GPO restrittive, configurare Computer Configuration > Administrative Templates > System > Specify settings for optional component installation and component repair:

  • abilitare l’impostazione;
  • disabilitare l’opzione “Contact Windows Update directly” se si desidera solo l’origine locale;
  • facoltativamente specificare un percorso di rete affidabile (ad esempio \\server\share\sxs).

Applicare la GPO e forzare l’aggiornamento con gpupdate /force prima dell’installazione.

Analisi causale mirata

  • Origine non valida: cartelle SxS di build o lingua diverse generano mismatch di hash. Soluzione: usare la cartella SxS della stessa build del sistema o un WIM allineato.
  • Pending reboot: installazioni parziali o aggiornamenti in attesa bloccano la sessione DISM. Soluzione: riavvio e nuova esecuzione.
  • Archivio danneggiato: interruzioni di alimentazione, snapshot aggressivi o antivirus possono corrompere CSI manifest. Soluzione: DISM /RestoreHealth con sorgente locale + SFC.
  • Permessi o GPO: esecuzione senza privilegi o policy che impongono WSUS. Soluzione: eseguire come amministratore e regolare la GPO.

Errori ricorrenti e rimedi

  • 0x8004015 durante l’avvio della sessione: verificare che DISM non sia bloccato da pending reboot, che l’eseguibile non sia sostituito e che la sorgente sia accessibile. Eseguire riparazione componenti e riprovare con /LimitAccess.
  • 0x800F081F sorgente mancante: il percorso SxS non contiene i CAB corretti oppure build non corrispondente. Soluzione: SxS del medesimo livello o WIM con indice idoneo.
  • 0x800F0954 policy WSUS: il sistema tenta WSUS ma la rete è chiusa. Soluzione: GPO “Specify settings…” abilitata con sorgente locale o rimozione temporanea del vincolo WSUS per l’operazione.

Log e diagnostica

  • Event ViewerApplications and Services Logs > Microsoft > Windows > DISM: errori dettagliati di orchestrazione.
  • %windir%\Logs\CBS\CBS.log: storico delle operazioni sui componenti.
  • %windir%\Logs\DISM\dism.log: parametri effettivi, sorgenti utilizzate, codici di errore intermedi.

Quando i log indicano “mancata corrispondenza di hash” o “payload non trovato”, la soluzione è quasi sempre riallineare la sorgente.

Consigli per media e sorgenti

  • Preferire supporti ufficiali corrispondenti all’edizione installata. In presenza di cumulativi recenti, montare media aggiornati.
  • Se si usa una share di rete, copiare \sources\sxs in una cartella dedicata e usare percorsi UNC stabili.
  • Verificare anticipo che antivirus o EDR non blocchino l’accesso ai CAB; se necessario, inserire il percorso tra le esclusioni temporanee.

Script di automazione con powershell

Lo script seguente automatizza rilevamento del percorso SxS, verifica integrità, applicazione della policy e installazione della feature. Eseguire in PowerShell come Administrator.

$ErrorActionPreference = 'Stop'
Start-Transcript -Path "$env:SystemRoot\Temp\NetFx3offlineinstall.log" -Append

Trova una cartella SxS valida tra unità locali e rimovibili

function Find-SxsPath {
$candidates = Get-PSDrive -PSProvider FileSystem | ForEach-Object {
Join-Path $_.Root 'sources\sxs'
}
foreach ($p in $candidates) {
if (Test-Path $p -PathType Container -ErrorAction SilentlyContinue) {
if (Get-ChildItem $p -Filter 'Microsoft-Windows-NetFx3-*.cab' -ErrorAction SilentlyContinue) { return $p }
}
}
return $null
}

$sxs = Find-SxsPath
if (-not $sxs) { throw "Percorso SxS non trovato. Montare l'ISO e riprovare." }

Write-Host "Sorgente SxS: $sxs"

Facoltativo: imposta policy per consentire sorgente locale

$polKey = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Servicing'
New-Item -Path $polKey -Force | Out-Null
New-ItemProperty -Path $polKey -Name RepairContentServerSource -Value 2 -PropertyType DWord -Force | Out-Null

2 = preferisci sorgente locale (no WU diretto)

Riparazione componenti

Write-Host "Avvio DISM ScanHealth..."
Start-Process -FilePath dism.exe -ArgumentList "/online /cleanup-image /scanhealth" -Wait -NoNewWindow
Write-Host "Avvio DISM RestoreHealth con sorgente locale..."
Start-Process -FilePath dism.exe -ArgumentList "/online /cleanup-image /restorehealth /Source:$sxs /LimitAccess" -Wait -NoNewWindow

Installazione NetFx3

Write-Host "Installazione di NET-Framework-Features..."
Install-WindowsFeature -Name NET-Framework-Features -Source $sxs -IncludeAllSubFeature -Verbose

Verifica

$feature = Get-WindowsFeature -Name NET-Framework-Features
if ($feature.InstallState -eq 'Installed') {
Write-Host "Installazione completata con successo." -ForegroundColor Green
} else {
throw "Installazione non riuscita. Controllare i log."
}

Stop-Transcript 

Lo script registra un log in %windir%\Temp\NetFx3offlineinstall.log e fallisce in modo esplicito se la cartella SxS non viene trovata.

Verifica della riuscita

  • Gestione server: in Features la voce .NET Framework 3.5 appare come Installed.
  • PowerShell: Get-WindowsFeature net-framework | Where-Object {$_.Name -eq 'NET-Framework-Features'}
  • Cartelle runtime: presenza di C:\Windows\Microsoft.NET\Framework\v2.0.50727 e Framework64\v2.0.50727.

Varianti operative offline

In domini senza media fisico su ogni host è pratica comune pubblicare una share di sola lettura con la cartella \sources\sxs. Per garantire performance e integrità:

  • usare una share ad alta disponibilità;
  • limitare l’accesso in lettura ai soli server che devono installare;
  • versionare le cartelle SxS per build e lingua (esempio: \\filesrv\payloads\WS2019\en-US\2024-12\sources\sxs).

Domande frequenti

Serve corrispondenza perfetta tra supporto e server? Sì: edizione, lingua e livello di patch devono essere compatibili; media troppo vecchi possono non contenere i manifest richiesti da un server aggiornato.

Posso rimuovere la funzionalità dopo averla installata? Sì, con dism /online /disable-feature /featurename:NetFx3. In ambienti con compliance rigida, mantenere la sorgente a portata per reinstallazioni future.

È necessario riavviare? Talvolta il sistema lo richiede; pianificare una finestra di manutenzione per sicurezza.

Check rapido post intervento

  • nessun aggiornamento in sospeso;
  • log DISM e CBS senza errori;
  • feature NetFx3 segnata come installata;
  • applicazioni legacy che richiedono .NET 3.5 avviano senza errori;
  • snapshot rimosso o consolidato dopo verifica.

Consigli finali

  • se l’errore persiste, provare l’approccio con WIM e indice corretto;
  • validare sempre l’accesso al percorso con un semplice dir o apertura in Esplora file prima di lanciare DISM;
  • documentare edizione e build del server per scegliere rapidamente il payload giusto nelle future installazioni;
  • centralizzare i payload SxS in un repository interno e mantenerli aggiornati insieme ai cumulativi distribuiti.

Conclusione

La combinazione di sorgente corretta e comandi DISM/PowerShell con parametri espliciti (/Source e /LimitAccess) elimina alla radice le cause dell’errore 0x8004015 in ambienti senza Internet. Con una breve verifica dell’integrità dei componenti e una GPO adeguata, l’installazione offline di .NET Framework 3.5 su Windows Server 2019 risulta affidabile e ripetibile.


Riepilogo operativo essenziale

  1. Montare l’ISO che combacia con il server.
  2. Riavviare ed eliminare pending reboot.
  3. Riparare componenti con DISM e SFC se necessario.
  4. Eseguire: dism /online /enable-feature /featurename:NetFx3 /All /Source:D:\sources\sxs /LimitAccess.
  5. In alternativa, PowerShell con Install-WindowsFeature.
  6. Verificare la riuscita e consultare i log in caso di errori.

Appendice di riferimento rapido

AttivitàComando
Scansione integritàdism /online /cleanup-image /scanhealth
Ripristino integritàdism /online /cleanup-image /restorehealth
Ripristino con sorgente localedism /online /cleanup-image /restorehealth /Source:D:\sources\sxs /LimitAccess
Installazione NetFx3dism /online /enable-feature /featurename:NetFx3 /All /Source:D:\sources\sxs /LimitAccess
Alternativa con WIMdism /online /enable-feature /featurename:NetFx3 /All /Source:wim:D:\sources\install.wim:2 /LimitAccess
Verifica featureGet-WindowsFeature net-framework

Raccomandazioni di sicurezza

  • Eseguire i comandi solo da account amministrativi autorizzati.
  • Conservare i payload SxS in repository con ACL restrittive e auditing attivo.
  • Evitare l’uso di supporti rimovibili non verificati; controllare sempre hash e provenienza.

Seguendo queste pratiche, l’installazione offline è ripetibile, auditabile e allineata alle policy enterprise.

Indice