chocolatey/choco · critical · ApplicationException
Reboot required before continuing. Reboot and run the same c
Error message
Reboot required before continuing. Reboot and run the same command again.
What it means
Thrown as an ApplicationException during HandlePackageResult (install/upgrade flow) when the package installer returns an exit code in _rebootExitCodes (1641 or 3010) AND config.Features.ExitOnRebootDetected is enabled. The environment exit code is first set to ApplicationParameters.ExitCodes.ErrorInstallSuspend (ERROR_INSTALL_SUSPEND), a warning is logged, then this exception halts all further package processing.
Source
Thrown at src/chocolatey/infrastructure.app/services/ChocolateyPackageService.cs:584
pkgInfo.DeploymentLocation = Environment.GetEnvironmentVariable(EnvironmentVariables.Package.ChocolateyPackageInstallLocation);
pkgInfo.SourceInstalledFrom = packageResult.SourceInstalledFrom;
UpdatePackageInformation(pkgInfo);
EnsureBadPackagesPathIsClean(packageResult);
EventManager.Publish(new HandlePackageResultCompletedMessage(packageResult, config, commandName));
UnmarkPackagePending(packageResult, config);
if (_rebootExitCodes.Contains(packageResult.ExitCode))
{
if (config.Features.ExitOnRebootDetected)
{
Environment.ExitCode = ApplicationParameters.ExitCodes.ErrorInstallSuspend;
this.Log().Warn(ChocolateyLoggers.Important, @"Chocolatey has detected a pending reboot after installing/upgrading
package '{0}' - stopping further execution".FormatWith(packageResult.Name));
throw new ApplicationException("Reboot required before continuing. Reboot and run the same command again.");
}
}
if (!packageResult.Success)
{
this.Log().Error(ChocolateyLoggers.Important, "The {0} of {1} was NOT successful.".FormatWith(commandName.ToStringSafe(), packageResult.Name));
HandleFailedOperation(config, packageResult, movePackageToFailureLocation: true, attemptRollback: true);
if (config.Features.StopOnFirstPackageFailure)
{
throw new ApplicationException("Stopping further execution as {0} has failed {1}.".FormatWith(packageResult.Name, commandName.ToStringSafe()));
}
return;
}
RemoveBackupIfExists(packageResult);
View on GitHub (pinned to 0d5abdd10c)
Solutions
- Reboot the machine, then re-run the same choco command — Chocolatey resumes from where it stopped.
- If unattended and reboots are handled externally, disable the feature: 'choco feature disable --name=exitOnRebootDetected' so Chocolatey continues past reboot exit codes.
- Ensure packages that report reboot exit codes are ordered last in batch installs, or split them into a separate install run.
- Capture and handle the ErrorInstallSuspend exit code in your automation script to trigger a reboot cycle.
Example fix
// before: feature enabled, halts on reboot exit codes choco feature enable --name=exitOnRebootDetected choco upgrade all -y // after: disable feature for unattended scenarios, or reboot and re-run dism /online /Reboot /Quiet # or shutdown /r /t 0 choco upgrade all -y
Defensive patterns
Strategy: validation
Validate before calling
// Check reboot exit codes and feature flag before expecting install to complete
var rebootExitCodes = new[] { 1641, 3010 };
if (config.Features.ExitOnRebootDetected)
{
// Warn automation that a reboot may halt execution
logger.Info("exitOnRebootDetected is enabled — installs may halt if a reboot is required.");
}
// After install, check if exit code indicates reboot needed
if (rebootExitCodes.Contains(Environment.ExitCode))
{
// Schedule reboot and re-run
logger.Warn("Reboot required. Schedule restart and re-run the command.");
} Try / catch
try
{
_packageService.Install(config);
}
catch (ApplicationException ex) when (ex.Message.Contains("Reboot required"))
{
// ExitCode is already set to ErrorInstallSuspend
// Trigger reboot in automation, then re-run the same command
ScheduleRebootAndRerun();
} Prevention
- In automation scripts, check for exit code 1641 or 3010 after choco commands and handle reboot cycles.
- For unattended scenarios where reboots are handled externally, disable exitOnRebootDetected.
- Order packages that may require reboots last in batch installs.
- Document which packages are known to trigger reboot exit codes.
When it happens
Trigger: An installer embedded in a Chocolatey package exits with code 1641 (ERROR_SUCCESS_REBOOT_INITIATED) or 3010 (ERROR_SUCCESS_REBOOT_REQUIRED) while config.Features.ExitOnRebootDetected is true. This occurs inside HandlePackageResult after the package has been processed and UnmarkPackagePending has been called.
Common situations: Installing or upgrading a package (e.g., a driver, .NET runtime, or system update MSI) that requires a reboot. The 'exitOnRebootDetected' feature flag is enabled, causing Chocolatey to stop mid-batch instead of continuing to the next package.
Related errors
- Stopping further execution as {0} has failed {1}.
- The '{0}' source does not support installing packages
- {0} {1} not successful.
- Alternative sources do not allow the use of the 'all' packag
- Stopping further execution as {0} has failed install.
AI-assisted analysis of chocolatey/choco@0d5abdd10c (2026-08-13).
Data as JSON: /api/errors/1ac4dc09434a8ad5.
Report an issue: GitHub.