I would think that this would be an easy thing to find information on, but MS gets more like IBM everyday...
So, I've created an installer (derived from System.Configuration.Install) which, using the Windows/Microsoft.net/Framework/V2XXXXX/InstallUtil.exe program, copies some DLLs and OCXs delivered in an assembly to the Windows\System32 directory. They're my DLLs or ones provided by a hardware manufacturor. Seems pretty straight forward...
But wait! Previous versions of the DLLs have been installed and are running! You can't just copy over them, you fool! I get an exception and the installation fracks and is rolled back-- you can't overwrite programs and DLLs that are currently in use (this only makes sense). So, I need to either swat them out of RAM or sneak my DLLs into the system32 directory BEFORE the DLLs are used (which I'm pretty sure happens when the programs in the "All Users/Start Menu/Programs/Startup" directory that need the DLLs and OCXs are fired up (whenever anybody logs in). How do I force the old DLLs to get stomped over with the new ones
Well, what I'd really like to do is have some way to tell the framework:
"See this installation assembly Good. Please take it and make sure it is executed with the InstallUtil.exe after the next reboot only (toss it after that) and please display a nice dialog box right now telling the user that they need to reboot to use my wonderful software."
I may be vastly confused, but I'd have thought that such a capability would have been available since, say, Windows 3.1 seeing how executing DLLs have always (rightly) been protected from replacement.
Now I can write all the code to do this stuff myself if I have to, but what would be nice is if this was part of the FRAMEWORK. It's not like I'm the first person who's needed this and will have to reinvent a wheel. I'd figure that this should come right up on a search or should be a capability found somewhere in System.Configuration.Install, but every time I do searches on install and restart (or system.configuration.install and restart) I get the 1001 woes of those who can't install SQLServer, Office, .Net or some other application.
<PayAttentionMS>I'm kind of getting scared that there is also no good way to get a decent contextual search on MS.com and why I use the IBM comparison. Try doing a search for very detailed things on IBM.com and notice the THOUSANDS of pages you get back (I think that they look for every page that has ANY of the letters you typed on them in any order). They win. I don't go there anymore. Even MSDN searches don't narrow very well, when you'd think that using the namespace in the search might be a BIG clue. (Yes, I've tried the advanced options).</PayAttentionMS>
If you could please, let me know your responses here and by sending me an email at Jeff.Osborn@patronsystems.com, as I am working there under a short term contract and don't have my geekware.com mail forwarded there.
Thanks.

System.Configuration.Install and Restart.
TOM PHAM
I'm not exactly what led you down that particular path, but installing Dlls and OCX files etc doesn't need installutil or custom code at all. MSI files just do all this stuff for free, and a Visual Setup project is one way to build one, although there are about 20 tools that generate MSI files and most them have more features than VS setup projects. The reason that there is nothing in the .NET framework about this is that it is absolutely nothing to do with the .NET framework or InstallUtil.
Specifically, if MSI has to replace an in-use file that can be associated with the Window of a running app, the user will be prompted to shut down that app. If it can't, then it will automatically ask the user to do a reboot. The rest is just pretty boring - you drag the files to an appropriate folder in the setup projects IDE, mark them for COM registration if required, create shortcuts to installed exes and put them in the Start menu or the desktop - all the usual stuff that setups do.