I'm working on an MSI-based install that installs a suite of applications. One of the applications requires SQL Server 2005 Express to be installed or already on the machine, but if the user doesn't want that app installed, I don't want to have to bother with the SQL Server issue; however, if that app is to be installed and SQL Server is not already installed, I want to be able to have it installed automatically during our install in order to make it easier for our end users. The obvious answer to this is to launch the SQL Server Express install as a nested MSI install at the appropriate point in our install. Since the SQL Server install is so complex, I was wondering if this would work if I were to launch the SQL Server install's setup.exe; or do I have to launch one of its dozen MSI files? If it's the latter, which one should my install launch? (Or is the SQL Server Express install simply too complex to be included in my install in this way? My plan is to have the SQL Server install sitting somewhere on our install CD - we've already obtained a redistribution licence - and have our install access it from there.) And will SQL Server Express appear as a separate entry in the Add/Remove Programs applet if it's installed this way? (I'd like to be able to leave SQL Server in place when uninstalling our application suite - or even just the one app that needs it - and allow SQL Server to be uninstalled separately if the user wishes.)Moving to the SQL Express forum, this is not a SSIS issue.|||
Hi Rob,
Yes, you can install SQL Express as part of your applications installation, but you can not nest it inside your existing MSI. Windows Installer does not allow nesting of MSIs, so you have to create a wrapper that will handle running both the SQL Express installation and your own application MSI.
If you are building your application using Visual Studio 2005, the VS Bootstrapper is already designed to do this for you. Just add SQL Express from the list of Pre-requisites and VS will build your setup to automatically install SQL Express along side your application. If you're trying to roll you own, there are a number of different resources available to help you do this.
Check out the FAQ that I've just posted at the top of this forum, you will find links to information about installing SQL Express in quite mode and detecting if SQL Express is already on the computer.|||It would appear, then, that I'm in a catch 22 situation. As I mentioned in my original posting, my install is MSI-based, and it installs a vertical market suite of applications, only one of which needs SQL Server Express to be installed. As I also mentioned, I don't want to have to deal with the SQL Server issue if the user doesn't want to install that particular application. This suggests that SQL Server be installed after the application suite is installed. However, if the application in question is installed, the install has to start it once it's installed, meaning that SQL Server must be installed first. These two conflicting needs point to the need for SQL Server to be installed at an appropriate point during my suite install.
I'm using Wise for Windows Installer to develop my installer, and because I want only one entry for the entire application suite in the ARP applet, I don't think separating the install for each application in the suite into a separate MSI would be the way to go. Also, if each application were installed by a separate MSI, wouldn't each MSI have its own GUI. I'd like to have one GUI for the entire suite, preferably without having to roll my own dialogues from scratch. Hence, the install was constructed as a single MSI.
Is there no way to launch the SQL Server Express install as a nested install using one of the MSIs that come in the package, or are those MSIs inextricably tied into the setup.exe wrapper?|||
Hi Rob,
No, you can not nest MSI installation. This is a limitation of the Windows Installer technology.
I'm not sure you understood all of my post; it is totally possible to install SQL Server in quite mode, so that it doesn't show any UI at all. Read the quite mode install FAQ and the embedding paper to learn more about how to deploy SQL Express with your own application.
SQL Express will always install as a separate item in the ARP list. We have to do this for the purpose of discovery and patching. There is a bunch of technical mumbo jumbo, but the short version is that if you could install SQL Express so that it didn't show up in ARP, then we couldn't detect it from Microsoft Update, and there would be no facility for patching it. In the event that there is a security issue that needs to be patched, we must be able to detect SQL Express to patch it. If you hid SQL Express, you would be putting your customers at risk, which I'm sure you don't want to do.
Thousands of developers accomplish exactly what you are trying to do using a wrapper program to chain together multiple MSI based installations. You will need to write a wrapper program that contains the logic to determine which components need to be installed. In your case, you would simple have a wrapper that would allow customers to pick which parts of your application you want to install, if they pick the part that requires SQL Express, then your wrapper checks for SQL Express, and if it is not there, installs it. The wrapper acts as a unifying UI driver. (This is exactly what SQL Server does, we have a wrapper, Setup.exe, that combines multiple MSIs into a single experience.)
It's possible that Wise might even provide the ability to create wrapper programs, I'm sure there are a number of Wise support forums out there where you could find others who are facing this exact same issue. Start with the Wise web site and I'll be there is already a solution.
Regards,
Mike