Upgrading Halo¶
This runbook covers upgrading the Halo application version on the Application Server of a self-hosted GRC-ITSM deployment. GRC-ITSM runs on a Halo core, so this is how you move your instance to a newer Halo release. The upgrade replaces the files in the WebApp folder and runs a database upgrader; it does not touch the host OS.
Overview
Pick a version, back up, verify SQL compatibility, stop the Halo IIS site, preserve any custom web.config headers, drag the new files into the WebApp folder, run any version-gated installers, run upgrader.exe, restart IIS, and verify the new version in the About window. This procedure reuses the shutdown choreography from Upgrading the Host OS.
Applies to
The Halo Application Server (IIS-hosted WebApp + DB Integrator). See the topology overview. The WebApp folder referenced throughout is «CONFIRM: WebApp path -- e.g. C:\Halo\Production or C:\Halo\WebApp».
1. Version selection¶
Halo offers up to three version channels on the Halo Self Service Portal (https://support.haloservicedesk.com/). Choose based on your stability/feature trade-off (per On-Prem Upgrade, s2).
| Channel | Characteristics | Recommended for |
|---|---|---|
| Stable | Longest in use, most stable features, none of the brand-new features | Production -- use this for your live instance |
| Release Candidate | Between Stable and Beta in maturity | Pre-production validation |
| Beta | Newest features, potentially less stable | Test environments only |
Use Stable for production
Because your GRC-ITSM instance serves as a system of record (and often holds compliance evidence), upgrade production to the Stable channel. Validate Beta/RC only in a non-production environment.
2. Prerequisites¶
Take a backup¶
Take a current database backup (and ideally a VM snapshot of the Application Server) before proceeding. If the upgrade fails, this is your rollback point. «CONFIRM: backup / snapshot location + owner»
Verify SQL compatibility level¶
Halo requires JSON support (OPENJSON, Transact-SQL), so SQL Server 2016+ with compatibility level >= 130 is mandatory. When upgrading to Halo v2.220 or later, raise the level to >= 140 (per s1 and s2).
Check the current level:
Raise it if it is below the required level:
Ensure the new (NHServerless) services are enabled if crossing the deprecation threshold¶
If you are upgrading to a version that requires the new event services (NHServerless, which replaced NHServer), they must be set up and enabled first. These are application toggles under Configuration > Advanced Settings > Backend Services -- not services.msc entries. If you skip this and the target version no longer supports NHServer, upgrader.exe will fail (see Troubleshooting).
Version-gated installer steps¶
Depending on the version you are upgrading from (and to), one or more additional installers are required before running upgrader.exe (per s2). Present these to whoever runs the upgrade:
| Condition | Required step |
|---|---|
| Upgrading from a version before 2.88 | Download vc_redist.x64.exe (https://aka.ms/vs/17/release/vc_redist.x64.exe), add it to the InstallFiles folder, and run it |
| Upgrading from a version before 2.50 | Run UpgraderOld.exe (in addition to the pre-2.88 step above) |
| Upgrading from before 2.130 to after 2.130 | Install the .NET hosting bundle dotnet-hosting-6.0.21-win.exe, or Halo will not work |
Identify the current version first
These steps are gated on the version you are coming from. Confirm the current Halo version (via the About window) before the upgrade so you know which of the above apply.
3. Pre-flight checklist¶
- Target version and channel chosen (Stable for production)
- Current Halo version recorded (to determine version-gated steps)
- Database backup taken; VM snapshot taken
- SQL compatibility level verified (>= 130, or >= 140 for v2.220+)
- New (NHServerless) Backend Services enabled if the target version requires them
-
nhdwebzip downloaded from the Self Service Portal onto the Application Server - WebApp folder path confirmed:
«CONFIRM: WebApp path» - IIS site / app pool names confirmed:
«CONFIRM: IIS site + app pool names» - Integrator scheduled task name(s) confirmed (in case of file-lock during drag-drop):
«CONFIRM: integrator Scheduled Task name(s)» - Custom
web.configheaders (HSTS, Referrer, permissions policies) located and copied for the root, api, auth, and portal folders - Change request approved and inside the maintenance window:
«CONFIRM: maintenance window + change-approval owner»
4. Procedure¶
Step 1 -- Download and extract on the Application Server¶
Download the chosen version's nhdweb zip from the Self Service Portal (https://support.haloservicedesk.com/haloversions) onto the Application Server, then extract it there. The files must be extracted before you can drag and drop them.
Step 2 -- Stop the Halo IIS site¶
Stop the Halo IIS site (and app pool). This is the same shutdown step documented in Upgrading the Host OS, step 2 -- there is no Halo Windows service.
Import-Module WebAdministration
Stop-Website -Name 'CONFIRM-HaloSiteName'
Stop-WebAppPool -Name 'CONFIRM-HaloAppPool'
Avoid an integrator file-lock during drag-drop
The drag-drop in step 4 can hit a permissions error on the Integrator file if a scheduled integrator task is running and has locked it. To prevent this, end (and optionally disable) the integrator scheduled task(s) before copying -- the same step as Upgrading the Host OS, step 3. If you hit the lock anyway, end the running task in Task Scheduler and retry.
Step 3 -- Preserve custom web.config headers¶
web.config overwrite
Dragging the upgrade files into the WebApp folder overwrites the web.config files in the root, api, auth, and portal folders. Any custom headers there -- HSTS, Referrer-Policy, and permissions policies -- will be lost (per s2).
Before the drag-drop, do one of the following:
- Copy the customised headers from the existing
web.configfiles (root, api, auth, portal) so you can re-apply them afterwards, or - Remove the
web.configfiles from the extracted upgrade files so the drag-drop leaves your existing ones in place.
Step 4 -- Drag the upgrade files into the WebApp folder¶
In the extracted folder, select all files (Ctrl+A), then drag and drop them directly into the WebApp folder.
Drop into the WebApp folder itself -- not a subfolder
DO NOT drag and drop the files into another (sub)folder. They must land directly in the WebApp folder («CONFIRM: WebApp path -- e.g. C:\Halo\Production or C:\Halo\WebApp»). Dropping them into a nested folder breaks the upgrade (per s2). This is also the step that overwrites web.config -- confirm you completed step 3 first.
Step 5 -- Run version-gated installers¶
Run any installers identified in Prerequisites > Version-gated installer steps, in this order, before running upgrader.exe:
- If from a version before 2.88: run
vc_redist.x64.exe(placed in InstallFiles). - If from a version before 2.50: run
UpgraderOld.exe. - If from before 2.130 to after 2.130: install
dotnet-hosting-6.0.21-win.exe.
Step 6 -- Run upgrader.exe¶
Run upgrader.exe from within the Halo (WebApp) files and follow the steps in the console. When it finishes, the application should close. If you are unsure whether it completed, re-run upgrader.exe -- it should report that you are up to date.
Step 7 -- Restart the IIS site¶
Restart the Halo site on IIS, then re-enable the integrator task(s) if you disabled them in step 2:
Import-Module WebAdministration
Start-WebAppPool -Name 'CONFIRM-HaloAppPool'
Start-Website -Name 'CONFIRM-HaloSiteName'
# Re-enable the integrator scheduled task(s) if they were disabled before the drag-drop.
# «CONFIRM»: adjust the -like pattern if the exe name differs in this deployment.
$integratorTasks = Get-ScheduledTask | Where-Object {
$_.Actions.Execute -like '*Integrator*'
}
foreach ($task in $integratorTasks) {
Enable-ScheduledTask -TaskName $task.TaskName -TaskPath $task.TaskPath
}
$integratorTasks | Select-Object TaskName, TaskPath, State
Don't leave the integrator disabled
If you disabled the integrator task(s) to avoid the file-lock in step 2, re-enabling them here is mandatory -- a left-disabled integrator silently stops all scheduled imports and mail processing after the upgrade. See Upgrading the Host OS, step 6 for the same re-enable step in the reboot context.
5. Verification¶
- Check the version in the About window. Navigate to the Halo instance and open the About window (the bottom option of the
?menu, top right). Confirm it shows the new version. - Clear the cache. If the version has not changed or you see irregularities, press Ctrl+F5. Ctrl+F5 also clears the server-side cache, so prefer it (per On-Prem Upgrade -- Troubleshooting, s3). The upgrade guide (s2) also mentions Shift+F5 and logging out and back in, but Ctrl+F5 is preferred because it clears the server-side cache.
- Confirm the agent portal loads on login. If it does not, check the API info: append
/api/instanceinfoto the base URL. - Confirm the integrator runs without errors and is on the same version as the DB and WebApp (the integrator is bundled with the upgrader files; if it was relocated it is not auto-updated -- per s5).
Verification checklist
- About window shows the new version
- Ctrl+F5 performed (server-side cache cleared)
- Agent portal loads on login
-
/api/instanceinforeturns instance details - Integrator runs and matches the DB/WebApp version
6. Troubleshooting¶
Derived from On-Prem Upgrade -- Troubleshooting (s3) and DB Integrator -- Troubleshooting (s4).
Version not changing / irregularities in the new version
Clear the cache with Ctrl+F5 (clears the server-side cache, unlike a normal browser refresh). You can also force a cache clear via the URL parameter:
If the version still does not change, continue with the items below.
Web App does not work -- missing .json MIME type
The WebApp may be missing a .json MIME type at the IIS server level. In IIS Manager, navigate to Server level > MIME Types. If .json is missing, click Add... and add it.
IronSoftware login loop (e.g. upgrade 2.126 -> 2.132)
A login loop after upgrade indicates a permissions gap. Manually create the folder below and grant the IIS web-app user permission to modify it:
Grant IIS_IUSRS Full control on that folder (the IIS_IUSRS user may already be listed). You can also set this on the api folder within the Halo folder via right-click > Properties > Security.
Permission error on the Integrator file during drag-drop
Task Scheduler is running a scheduled integrator task and has locked the file to prevent it being ended mid-run. Either wait for the task to finish, or end the running task in Task Scheduler, then retry the drag-drop. (Disabling the integrator task before the drag-drop -- step 2 -- avoids this.)
Upgrader error: 'Incorrect Syntax near INDEX...'
The SQL Server version is pre-2016 and no longer supported by Halo. All on-prem deployments must be SQL Server 2016 or above. To recover: revert to the previous Halo version (see Rollback), upgrade SQL Server to 2016+, then re-attempt the Halo upgrade.
Upgrader error: 'Upgrading to the net version requires the X service to be active'
The target version no longer supports NHServer and requires the new (NHServerless) services. The named service refers to a Backend Services toggle under Configuration > Advanced Settings > Backend Services -- not services.msc:
| Error names | Enable this toggle |
|---|---|
| "...requires the Event service to be active" | Event Service |
| "...requires the Incoming service to be active" | Incoming Service |
| "...requires the Outgoing service to be active" | Outgoing Service |
| "...requires the Scheduling service to be active" | Scheduling Service |
The easiest path is to upgrade to Security patch 2.174.111 first, then move to the new services and set them up before continuing the upgrade.
7. Rollback¶
If the upgrade fails and cannot be resolved within the window:
- Restore the database backup taken in the prerequisites.
- Revert the Halo version by restoring the previous WebApp files (or revert the VM snapshot of the Application Server). Re-apply your preserved custom
web.configheaders if you restored individual files. - Restart the IIS site and re-enable the integrator task(s).
- Run the Verification section against the restored version to confirm it is healthy.
SQL-version-driven rollback
If the rollback is because of the "Incorrect Syntax near INDEX" error, revert to the previous Halo version and upgrade SQL Server to 2016+ before attempting the Halo upgrade again -- the upgrade cannot succeed on pre-2016 SQL.
8. Escalation¶
Escalate to role/queue owners rather than improvising fixes inside the outage:
| Situation | Escalate to |
|---|---|
upgrader.exe fails and the cause is unclear |
«CONFIRM: Halo application owner / platform queue» |
| "Incorrect Syntax near INDEX" (unsupported SQL version) | «CONFIRM: database administration queue» |
| NHServerless / Backend Services migration required mid-upgrade | «CONFIRM: Halo application owner» |
| Integrator version mismatch or "Decryption check failed" after upgrade | «CONFIRM: Halo application owner» |
| Upgrade must be rolled back | «CONFIRM: change-approval owner» |
upgrader.exe defect, or a bug in the new version |
Halo support — support.haloservicedesk.com |
Halo vendor support
The same portal you download versions from -- support.haloservicedesk.com -- is where you raise tickets for the Halo application itself: a failing upgrader.exe, a regression in the new version, or behaviour the troubleshooting steps above don't resolve. Escalate there in parallel with your internal owners.
Related runbooks¶
- Upgrading the Host OS -- canonical reference for the shared IIS-stop and integrator-disable steps, and for OS patching/reboots.
- On-Prem Maintenance overview -- topology and the full list of
«CONFIRM»environment values.