How can I customize an MSI in the Visual Studio setup/deployment project?

Aaron Stebner's WebLog -


I am using the Visual Studio setup/deployment project to create an MSI to install my application.  I would like to add some functionality to this MSI that does not appear to be supported in the Visual Studio IDE (such as modifying the default install path based on a registry value on the system).  I know how to do this by directly editing the MSI, but I don't want to have to manually edit the MSI each time I build.  Are there any other options I can use in this scenario?


There is a limited set of customizations you can make to an MSI in the Visual Studio IDE UI for a setup/deployment project.  By limited, I mean that there are a lot of features that are natively supported in Windows Installer MSI format that are not exposed for customization in the Visual Studio IDE.  Examples include changing the default install path based on a registry value, advanced setup UI features such as updated banner text or a "launch my product" checkbox on the final screen, creating custom actions that reference external executable files, or setting various custom action attributes (among other things).

If you would like to automate the ability to customize an MSI that is built by the Visual Studio setup/deployment project in a way that is not currently supported by the UI in the Visual Studio IDE, you can write a script that accesses the Windows Installer object model to perform these customizations.  Then you can create a post-build step in your Visual Studio setup/deployment project to run your script after the MSI has been built so that the final result each time you build will be an MSI package with your additional customizations made to it.

As an example, you can use the sample script at this location to add a checkbox to your MSI's setup UI that will let the user choose whether or not to launch your product after setup finishes.

If you would like to include this script as a post-build step in a Visual Studio setup/deployment project, you can use the following steps:

  1. Download the sample script and extract the contents to the directory that contains the Visual Studio project you are working on
  2. Open the project in Visual Studio
  3. Press F4 to display the Properties window
  4. Click on the name of your setup/deployment project in the Solution Explorer
  5. Click on the PostBuildEvent item in the Properties window to cause a button labeled "..." to appear
  6. Click on the "..." button to display the Post-build Event Command Line dialog
  7. Add the following command line in the Post-build event command line text box:
    cscript.exe "$(ProjectDir)EnableLaunchApplication.js" "$(BuiltOutputPath)"
  8. Build your project in Visual Studio

Note that the quotation marks in the command line in step 5 are very important because the script will not work correctly without them.  Make sure to double-check that you have put quotes in the proper places.

You can find another example script that will update the MSI setup UI banner text in this MSDN forum post.

Updated the steps needed to configure post-build commands in the Visual Studio UI because they are different for setup projects than for other Visual Studio project types




  • You are a legend, I finally found this after looking for what felt like an age!!

  • Worth noting the macro name is actually: 'BuiltOuputPath'. Also don't forget to rename the .js file.

  • Could you please post this js file somewhere that people can reach? The link above is broken. The enable launch application information is great, but without that script pretty useless. How about posting the script? It shouldn't be that big right?

  • am getting teh following error after doing the things u said

    'PostBuildEvent' failed with error code 1 "unspecified error"

    I want to alunch my app with a checkbox after installation is completed

  • thanks, was too hard to find this!!

  • This didn't do anything. There was no screen with Launch checkbox after compiling my new install.

  • The post-build command doesn't work. When I bring up the post-build script editor and click Macros, I notice that Visual Studio has mispelled it. The macro name is $(BuiltOuputPath) - IT IS MISSING THE LETTER T. This is on Vista with Visual Studio 2008. I'm not sure if this problem affects other versions of VS or Windows.

    You say "Note that the quotation marks in the command line in step 5..." I think you mean step 7. Anyway it isn't working for me.

  • My application requires elevated privileges on Vista and displays the UAC prompt. The script above doesn't seem to work in this case. It does not launch the application. The installer was already running elevated, so I don't know what the problem is.

    How do I get this to work with an application that requires elevated privileges on Vista?

  • This doesn't work on Vista with an application that requires elevated privileges. If there is no way to make this work on Vista in this case, how can I make one MSI where the check box appears on XP but the check box does not appear on Vista. Otherwise my installer will look broken to the customer because they've chosen to "Launch myapp.exe" but it doesn't launch.

  • I'm not able to open sample script at this location and sample script to download

  • Could you please publish EnableLaunchApplication.js file for downloading? The current link is N/A when clicking on Sample Scripts. I would like to try cscript.exe "$(ProjectDir)EnableLaunchApplication.js" "$(BuiltOutputPath)" since I'm not able to launch the app from shortcut when using Setup / Deployment project to create MSI package from VS 2008.



  • Hello

    I want to add 2 option for check in finish page. Do you have an exemple for this?

  • How can i insert a checkbox and textbox on a single dialog box say Finished dialog box in the Visual Studio setup/deployment project?

Comments have been disabled for this content.