Deployment Project/MSI/installer problems
-
I'm working with VS.NET 2003 and .NET 1.1 (not SP1) on Windows XP SP1. My application is using the Windows Installer Bootstrap. (I may have also installed a module which detects requirements (.NET 1.1 -> MsiNetAssembly Support.) I have a few issues and questions regarding the MSI and its properties. * This may be my biggest annoyance at the moment. When the installer creates the target directory, it's setting them as read-only. When the application is uninstalled, the target directory is not deleted, although it's empty. I presume this is because the target directory is read-only and the installer doesn't try to force the removal, but I'm not positive. Why is this happening, anyway, and how can I correct it. I'm not certain if this has always been a problem for me with this project, but it's also not a recently new problem. * When the user opts to install for "Everyone," I need to modify the registry for all users. I'm not sure there's a reasonable way to do this within VS.NET's IDE (or otherwise?). The User/Machine Hive is an alias for HKLM when "Everyone" is selected, so that's no help. HKEY_USERS only seems useful (ever) for setting within the .DEFAULT tree, but that doesn't handle current users. I've seen a reference to HKEY_PER_USER, which seems like what I'd want, but I don't know how to access it, and there's almost zero documentation online, so maybe it's vaporware. I suppose I could handle this programmatically, in a custom action, but it seems like a common enough need, and I'd rather have the installer handle as much as possible, anyhow! Plus, how can the custom action know that it's supposed to set keys for all users? Can the custom actions access the MSI's runtime properties? * For that matter, I'm not sure there's a good way for users' configurations to be retained during an upgrade, and possibly my real problem here is that I have RemovePreviousVersions set to True. But if an installer is supposed to remove its files and registry keys it created, and if the installer is supposed to first uninstall previous versions (which makes sense in my case), then how are previous configurations supposed to migrate forward? * There doesn't seem to be a good way for defining deployment projects in terms of solution configurations. For instance, I can configure the project within a certain solution configuration (e.g. Debug) to add some conditional compilation constants (e.g. TRACE, DEBUG), and I can use those constants in my code within #if blocks. How can I do something similar within