We have a large multi-tiered application with several hundred thousand lines of code as well using .NET (just about feature), COM, and even a little Java. The big difference is it's written almost entirely by Jr. programmers. Save me, my right-hand man, and the R&D director (I'm the technology director), everyone's pretty new at it. The app works, but it's bloated. Ick. Wise is a good choice for writing MSI packages (and the proprietary scripting language is entirely optional; both Wise and InstallShield allow you to use their proprietary scripting languages for custom actions), but what you need to evaluate is whether Windows Installer is right for you. Windows Installer is a complete package management system. It'd be really hard to describe all that Windows Installer does, so I'll direct you to an overview: http://msdn.microsoft.com/library/en-us/msi/setup/windows_installer_start_page.asp[^]. Basically, when you design installation packages you group things into features and components (a subset of features). Upgrades and patches are easy to make as well, and these can migrate feature states. When you install a package, information about it's features, components, directories, and upgrade codes are saved in the registry as well. This information can be queried using WMI even. It also features a transacted installation process. If an error occurs during installation, everything is rolled back. The uninstall is also clean, unless you change its behavior.
Microsoft MVP, Visual C# My Articles