I have built a similar program. Mine is also a shell replacement, but I did things a little differently. I use it primarily for kiosk PCs using VMs from a linked clone pool (like public computers and public labs). Basically, the user never sees the View Client. I have my own splash screen with some custom graphics, a "restart" button, and a title and some subtext. The title and subtext read the exit codes from the client and display relevant information to the user, including our contact information if there is a problem. It is also programmed to email me if it fails to make a connection to a VM a certain number of times with the IP address and hostname of the thin client, as well as the problem it is having. It also listens for a certain key combination that will display a login dialog and - if the credentials are entered correctly - will exit the program and start explorer.exe. On that same login prompt there is a checkbox for "Configuration mode" that allows the user to configure/enable/disable the shell key, including specifying the username/password/vm name to connect with. It also gives several options to enable/disable all of the various Ctrl+Alt+Del screen options (such as disable task manager, disable switch user, etc...) using various registry keys. Lastly, it gives an option to reverse the Delete and End keys. That last one may need a little explaining: Since the CAD screen can't actually be disabled, I have remapped the Delete and End keys on the thin client as well as on the VMs. When the user presses Ctrl+Alt+Del, the thin client interprets it as Ctrl+Alt+End, which it then sends forward to the VM where it is reinterpreted as Ctrl+Alt+Del, and the user is none the wiser.
I also recently implemented an auto-update feature - the program checks a local FTP server on startup and every four hours to see if there is an updated version of the program, and if so it downloads it, changes the shell key to the new file name, sends me an email to let me know it has updated, and waits for an exit code from the View Client so that it can restart and reboot into the new program.
If anyone is interested in my program I don't mind throwing up a link to the code. I did it in C#.NET on .NET 4.5 in VS2012.