- 8 minutes to read

Step 5: Remove Core Services

Remove old Nodinite v6 Core Services from IIS. The recommended approach uses the remove-legacy CLI command available in the agents package downloaded in Step 8. The manual IIS cleanup steps remain as a fallback.

Warning

Skipping this step is the leading cause of failures in Step 11: Configure TLS. Old v6 IIS applications and hostname bindings must be removed before TLS configuration, or IIS binding conflicts will occur.


Prerequisites


Note

The remove-legacy command is available in the agents package (<EnvironmentName>-upgrade-agents-environment.zip) downloaded in Step 8. Complete steps 6, 7, and 8 first, then run this command from the agents bundle.

After downloading the agents package in Step 8, open PowerShell 7 as Administrator, navigate to the extracted agents bundle, and run:

.\Nodinite.Installer.Cli.exe remove-legacy --config 'C:\Temp\DEV-upgrade-agents-environment\nodinite01\config.cli.json'

(Replace DEV and nodinite01 with your environment name and server folder name.)

Add --delete-files to also remove the legacy v6 files from disk. Preview the operation first with --dry-run:

.\Nodinite.Installer.Cli.exe remove-legacy --config '...\config.cli.json' --dry-run
.\Nodinite.Installer.Cli.exe remove-legacy --config '...\config.cli.json' --delete-files

CLI remove-legacy success
Example of a successful remove-legacy run removing v6 IIS applications, Windows services, and optionally legacy files.

Important

The old Nodinite install and update tool (NodiniteUpdate) must also be removed. Uninstall it using Programs and Features in Windows.


Manual: Remove via IIS Manager

If the CLI approach is not available, follow these steps manually.

1. Remove Old v6 Web Applications

Nodinite v6 Web Applications in IIS Manager
Example of old Nodinite v6 web applications that should be removed from IIS Manager.

  1. Open IIS Manager on the Nodinite Application Server

  2. Expand server node → Sites

  3. Locate the site hosting old Nodinite applications (typically Default Web Site)

  4. Remove old applications:

    • Right-click /Nodinite/ENV/WebClientRemove
    • Right-click /Nodinite/ENV/WebAPIRemove
    • Right-click /Nodinite/ENV/LogAPIRemove
    • Right-click /NodiniteUpdate/UpdateClientRemove

Caution

Do not delete any files or folders from disk at this stage. Removing files from disk before the migration is complete can break subsequent steps that still rely on those paths. File system cleanup is performed at the very end of the migration in Step 14: Final Cleanup.

2. Remove Custom SSL/TLS Website

In Nodinite v6, a dedicated custom website in IIS was commonly created to terminate TLS (HTTPS) for the Nodinite services. This website is no longer needed in v7 — TLS is now configured differently in Step 11: Configure TLS.

Important

Before removing the custom website, note down:

  • The Host Name (e.g., nodinite.yourdomain.com) — you will need this in Step 11
  • The Certificate Thumbprint bound to the site — you will need this in Step 11

To remove the custom website:

  1. In IIS Manager, expand Sites
  2. Identify any site that was created specifically for Nodinite v6 TLS (e.g., named "Nodinite", "Nodinite SSL", or similar — it is not the Default Web Site)
  3. Expand the site node and remove any web applications inside it first:
    • Right-click each application under the site → Remove
  4. Right-click the site itself → Remove
  5. Now, remove all virtual directories, go from bottom to top (NodiniteUpdate, %EnvrionmentName%, Nodinite):
    • Right-click each virtual directory → Remove

3. Remove Conflicting Hostname Bindings

Even if you did not have a dedicated custom website, the hostname used for Nodinite (e.g., nodinite.yourdomain.com) may already be registered as a binding on Default Web Site or another existing site. If this hostname binding is not removed, Step 11 (Configure TLS) will fail because IIS cannot bind the same hostname to two different sites.

To check and remove conflicting bindings:

  1. In IIS Manager, click Default Web Site (and any other site present)
  2. In the Actions panel on the right, click Bindings...
  3. Look for any binding that uses the Nodinite hostname (e.g., nodinite.yourdomain.com) or its certificate thumbprint
  4. Select the conflicting binding → RemoveClose

4. Remove Old Application Pools

Remove application pools that were created for v6 and are no longer associated with any application.

Important

Always remove Web Applications before deleting virtual directories or folders. If you delete a virtual directory or folder directly in IIS Manager (or from the file system) without first removing the Web Application, the app pool association is orphaned. IIS Manager may still show applications count as 1 even though the physical path is gone. See Stale App Pools — Cannot Remove Because Application Count > 0 below if this has already happened.

IIS Application Pools showing v6-era pools to remove
Example of the IIS Application Pools list showing old Nodinite v6 pools that should be removed after the web applications have been deleted.

To identify and remove old pools:

  1. In IIS Manager, click Application Pools

  2. Look for pools with no applications (the Applications column shows 0)

  3. Look for pools with v6-era names such as Nodinite - %ENVIRONMENTNAME% - Log API, Nodinite - %ENVIRONMENTNAME% - Web API, Nodinite - %ENVIRONMENTNAME% - Web Client, Nodinite - Update Client

  4. Right-click each old pool → Remove. The order is not important.

  5. Go to Portal and proceed to the next step


Completion Checklist

  • Old v6 web applications removed from IIS
  • Custom SSL/TLS website removed (if present)
    • Host Name documented for use in Step 11
    • Certificate Thumbprint documented for use in Step 11
  • Hostname bindings removed from Default Web Site and any other sites
  • Old v6 application pools removed

Troubleshooting

Cannot Remove Application – "In Use"

Problem: IIS shows "file in use" error.

Solution:

  • Stop the application pool first
  • Close any open browser tabs pointing to old URLs
  • Stop the IIS site temporarily
  • Try again

Step 11 Fails with Binding Conflict

Problem: TLS configuration in Step 11 fails because the hostname is already bound to another site.

Solution:

  • Return to this step and check all sites in IIS Manager for bindings using the Nodinite hostname
  • Remove every matching binding before retrying Step 11

Troubleshooting: Stale App Pools — Cannot Remove Because Application Count > 0

Problem: IIS Manager shows an app pool with 1 or more applications but the physical folder no longer exists (it was deleted from disk or from IIS Manager as a virtual directory, without first removing the Web Application). IIS blocks pool deletion because it still holds a reference to the application in applicationHost.config.

Root Cause: IIS stores Web Application definitions independently of the physical files. Deleting a folder or virtual directory does not remove the application registration. The pool retains the ghost reference and cannot be deleted until that registration is explicitly removed.

Solution — remove ghost application entries using appcmd.exe:

  1. Open PowerShell 7 as Administrator Open Start Menu → Search "PowerShell 7" → Right-click → Run as administrator

  2. Find all ghost application entries for v6 Nodinite pools. This lists every application still registered in IIS across all Nodinite-named pools:

    & "$env:windir\system32\inetsrv\appcmd.exe" list app /apppool.name:"Nodinite*"
    

    Each line of output is a ghost application entry that must be removed before the pool can be deleted. If no output is returned for a pool, it already has 0 applications.

    Example output:

    APP "Default Web Site/Nodinite/%ENVIRONMENTNAME%/WebClient"     (applicationPool:Nodinite - %ENVIRONMENTNAME% - Web Client)
    APP "Default Web Site/Nodinite/%ENVIRONMENTNAME%/WebAPI"         (applicationPool:Nodinite - %ENVIRONMENTNAME% - Web API)
    APP "Default Web Site/Nodinite/%ENVIRONMENTNAME%/LogAPI"         (applicationPool:Nodinite - %ENVIRONMENTNAME% - Log API)
    APP "Default Web Site/NodiniteUpdate/UpdateClient"               (applicationPool:Nodinite - Update Client)
    
  3. Delete each ghost application entry using the path shown in the output (the quoted value after APP):

    & "$env:windir\system32\inetsrv\appcmd.exe" delete app "Default Web Site/Nodinite/%ENVIRONMENTNAME%/WebClient"
    & "$env:windir\system32\inetsrv\appcmd.exe" delete app "Default Web Site/Nodinite/%ENVIRONMENTNAME%/WebAPI"
    & "$env:windir\system32\inetsrv\appcmd.exe" delete app "Default Web Site/Nodinite/%ENVIRONMENTNAME%/LogAPI"
    & "$env:windir\system32\inetsrv\appcmd.exe" delete app "Default Web Site/NodiniteUpdate/UpdateClient"
    

    Note

    Adjust the paths to match your environment name and site structure. The values to use are exactly what appcmd list app returned in step 2.

  4. Confirm each pool now has 0 applications, then delete the pools:

    & "$env:windir\system32\inetsrv\appcmd.exe" delete apppool "Nodinite - %ENVIRONMENTNAME% - Web Client"
    & "$env:windir\system32\inetsrv\appcmd.exe" delete apppool "Nodinite - %ENVIRONMENTNAME% - Web API"
    & "$env:windir\system32\inetsrv\appcmd.exe" delete apppool "Nodinite - %ENVIRONMENTNAME% - Log API"
    & "$env:windir\system32\inetsrv\appcmd.exe" delete apppool "Nodinite - Update Client"
    
  5. Verify no Nodinite v6 pools remain:

    & "$env:windir\system32\inetsrv\appcmd.exe" list apppool | Where-Object { $_ -match "Nodinite - " }
    

    No output means all v6 pools have been removed. v7 pools use a different naming convention (Nodinite- without spaces) and will not appear in this result.


Next Step