We have a Windows2008R2 RemoteAPP .NET 4.5 application NGEN-ed on the RDS server, with approx. 300 concurrent users for the 3-host NLB cluster.
The application is under active development and the RemoteAPP deployed assemblies need to be updated (i.e. replaced with new ones) quite often.
How we currently do this is as follows:
- Rename files to be changed on the RemoteAPP server, with users connected to it (OS will not allow files to be overwritten if they are loaded),
- Write new files instead of old ones,
- NGEN install new assemblies (without first uninstalling old ones!),
- Notify users (via app itself) that the app version has changed and it needs to be restarted,
- Gradually allow users to restart the app at their pace (simmultaneous app restart would result in increased disk and CPU load, hurting the server performance). And so for all hosts in the cluster.
After this, the server would occasionally Blue-Screen-Crash with the Microsoft-Windows-Kernel-Power EventID 41 critical error - and I highly blame our update practice to be responsible for it.
Hence the question: what is the recommended way of updating a RemoteAPP application and NGEN-ing new assemblies without having to terminate processes accessing old assemblies (i.e. allow users to continue and restart when they feel like).
Thank you.