Step 5: Remove Core Services
Remove old Nodinite v6 Core Services web applications, custom SSL/TLS websites, and conflicting hostname bindings from IIS.
Warning
Skipping this step is the leading cause of failures in Step 11: Configure TLS. Custom SSL websites from v6 and any hostname bindings on other sites must be fully removed now, or TLS configuration will fail with binding conflicts.
Prerequisites
- Step 4 completed β PowerShell script finished successfully
- v7 Core Services running and accessible
Steps
1. Remove Old v6 Web Applications
π‘In this step, remove old Web Applications and folders.

Example of old Nodinite v6 web applications that should be removed from IIS Manager.
Open IIS Manager on the Nodinite Application Server
Expand server node β Sites
Locate the site hosting old Nodinite applications (typically Default Web Site)
Remove old applications:
- Right-click
/Nodinite/ENV/WebClientβ Remove - Right-click
/Nodinite/ENV/WebAPIβ Remove - Right-click
/Nodinite/ENV/LogAPIβ Remove - Right-click
/NodiniteUpdate/UpdateClientβ Remove
- Right-click
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:
- In IIS Manager, expand Sites
- 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)
- Expand the site node and remove any web applications inside it first:
- Right-click each application under the site β Remove
- Right-click the site itself β 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:
- In IIS Manager, click Default Web Site (and any other site present)
- In the Actions panel on the right, click Bindings...
- Look for any binding that uses the Nodinite hostname (e.g.,
nodinite.yourdomain.com) or its certificate thumbprint - Select the conflicting binding β Remove β Close
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
1even though the physical path is gone. See Stale App Pools β Cannot Remove Because Application Count > 0 below if this has already happened.

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:
In IIS Manager, click Application Pools
Look for pools with no applications (the Applications column shows
0)Look for pools with v6-era names such as
Nodinite - Update Client,Nodinite DEV LogAPI,Nodinite DEV WebAPI,Nodinite DEV WebClientRight-click each old pool β Remove
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:
Open PowerShell 7 as Administrator
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% WebClient) APP "Default Web Site/Nodinite/%ENVIRONMENTNAME%/WebAPI" (applicationPool:Nodinite %ENVIRONMENTNAME% WebAPI) APP "Default Web Site/Nodinite/%ENVIRONMENTNAME%/LogAPI" (applicationPool:Nodinite %ENVIRONMENTNAME% LogAPI) APP "Default Web Site/NodiniteUpdate/UpdateClient" (applicationPool:Nodinite - Update Client)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 appreturned in step 2.Confirm each pool now has 0 applications, then delete the pools:
& "$env:windir\system32\inetsrv\appcmd.exe" delete apppool "Nodinite %ENVIRONMENTNAME% WebClient" & "$env:windir\system32\inetsrv\appcmd.exe" delete apppool "Nodinite %ENVIRONMENTNAME% WebAPI" & "$env:windir\system32\inetsrv\appcmd.exe" delete apppool "Nodinite %ENVIRONMENTNAME% LogAPI" & "$env:windir\system32\inetsrv\appcmd.exe" delete apppool "Nodinite - Update Client"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.