Running MSIEXEC in a NSIS script with installer switches

I'm trying to build an NSIS installer and package it with necessary drivers (MSI files from the vendor). Eventually, I'd like to install these drivers silently in the backgroud. However, I cannot seem to get it working properly.

In my NSIS script, I have the following:

ExecWait 'msiexec /i "$INSTDIR\Flash.msi INSTALLDIR="$INSTDIR\Drivers\Flash""'

It seems to execute; if I remove the INSTALLDIR switch from the above snippet, it'll run the driver installation as expected. But when I leave it in, I'm instead greeted by the following window

enter image description here

However, running the following directly in Powershell does exactly what I want, sets the install directory appropriately, as expected:

.\Flash.msi INSTALLDIR=".\Drivers\Flash\"

I'm guessing it's a silly quotation-mark mismatch somewhere, but I've tried so many already and I get the same results.

2 answers

  • answered 2018-07-20 17:29 KennZAney1

    Have you tried the following:

    ExecWait 'msiexec /i "$INSTDIR\Flash.msi INSTALLDIR=$\"$INSTDIR\Drivers\Flash$\""'


    ExecWait 'msiexec /i "$INSTDIR\Flash.msi INSTALLDIR=$\"$\"$INSTDIR\Drivers\Flash$\"$\""'

    Reference: and take a look at the Strings section under 4.1 Script File Format.

    Updated with extra escaped quotes.

  • answered 2018-07-21 00:31 Anders

    Your doublequote for the .msi path is closed too late.


    ExecWait 'msiexec /i "$INSTDIR\Flash.msi" INSTALLDIR="$INSTDIR\Drivers\Flash"'