Microsoft Technologies based on the .NET software framework. Miscellaneous topics that do not fit into specific categories.
The closest primary Microsoft contract for both .NET 10 SDK installers is the current “.NET installer” → “Command-line options” section: /norestart “suppresses any attempts to restart,” while the same section permits exit code 3010 to report that a restart is required.^1^
Applicability to 10.0.114 and 10.0.403
The page is product-line documentation rather than an installer-build specification:
- Its supported-version table explicitly includes .NET 10.
- Its .NET installer section covers Windows installer executables for SDKs and runtimes and instructs readers to select a version such as 10.0.
- Under Command-line options, it defines:
-
/install— installs .NET. -
/quiet— prevents UI and prompts. -
/norestart— “Suppresses any attempts to restart.”
-
- It separately states:
-
0means success. -
3010means a restart is required.^1^
-
Microsoft’s .NET release record identifies 10.0.114 and 10.0.403 as .NET 10 SDKs in the October 2026 update.^2^
Consequently, the Learn page is the closest current primary documentation applicable at the .NET 10 installer product-line level. It does not explicitly enumerate 10.0.114 or 10.0.403 beside /norestart, so it should not be represented as a build-specific guarantee.
An immutable snapshot of the underlying windows.md documentation containing both the /norestart example and the 0/3010 text is available at commit 951c3a5bdf253157f9b403e1f490bc42f5171fbc:
That snapshot preserves the documentation wording; it does not convert the product-line guidance into an installer-build-specific contract.
Restart and exit-code semantics
The documented interpretation is:
-
/norestartsuppresses restart attempts initiated by the .NET installer. - It does not mean that no restart can remain necessary.
- If installation succeeds but requires a later restart, the installer can return
3010.^1^
Therefore, these results are compatible:
/norestart + exit 0 = success; no restart reported as required
/norestart + exit 3010 = success; restart required but not initiated
Windows Installer independently uses the same distinction: /norestart is the “Never restart” option and maps to REBOOT=ReallySuppress.^3^ Windows Installer defines 3010 as successful installation with a restart required and distinguishes it from 1641, where the installer initiated the restart.^4^
Those MSI references corroborate the semantics only. They do not prove that either specific .NET SDK EXE implements every path through MSI or propagates REBOOT=ReallySuppress identically.
Chained-package scope
The public .NET wording—“suppresses any attempts to restart”—supports suppression at the top-level .NET installer boundary. However, the available primary documentation does not explicitly specify, for SDK 10.0.114 or 10.0.403:
- which packages are chained by each EXE;
- how
/norestartis propagated to every possible chained package; - whether every child-installer restart path is intercepted; or
- a build-specific guarantee covering chain behavior.
Accordingly, the supported public conclusion is that the .NET installer should not initiate a restart when invoked with /norestart, and it may still return 3010. A stronger statement guaranteeing suppression by every chained package in those exact builds is not established by the public documentation identified here.
For authoritative confirmation of that unresolved build-specific chain behavior, open a product issue with the Microsoft-maintained dotnet/installer project, including the two exact SDK versions and architecture, or request a binding determination through Microsoft Support. Only the product team or Support can confirm contractual behavior for those exact binaries beyond the published product-line documentation.
If later executing a system-wide installation, run the installer from an elevated process and preserve the full exit code:
$process = Start-Process `
-FilePath '.\dotnet-sdk-10.0.403-win-x64.exe' `
-ArgumentList '/install', '/quiet', '/norestart' `
-Wait -PassThru
if ($process.ExitCode -eq 3010) {
'Installation succeeded; schedule a restart.'
} elseif ($process.ExitCode -ne 0) {
throw "Installation failed with exit code $($process.ExitCode)."
}
References