WIX run vcredist_x64.exe on install

后端 未结 3 519
悲&欢浪女
悲&欢浪女 2020-12-20 14:42

I have an application compiled in VS 2015 and requires the VC++ Redistributable package in order to run properly. Prior to this latest build, we were using an older version

相关标签:
3条回答
  • 2020-12-20 15:17

    I think the correct approach to take when having prerequisites that have their own installers is to create a WiX bootstrapper bundle, which runs through each installer in turn. This handles things like rollbacks on install failures, etc, which running custom actions from within an installer does not.

    A barebones sample can be seen here, you add <MsiPackage> and <ExePackage> in the Chain element in the order you need them to install.

    0 讨论(0)
  • 2020-12-20 15:23

    I was facing a similar problem (fully described in this closed question, which actually redirected me here). I was able to solved it inspired by this entry about running the application after setup.

    The key part is basically to add a final step to the UI that launches the vcredist installer:

    <UI Id="UI_Main">
      <!-- ...... -->
      <Publish Dialog="ExitDialog"
               Control="Finish"
               Event="DoAction"
               Value="InstallVCRedistributable">1</Publish>
    </UI>
    

    Regarding the custom action:

    <CustomAction Id="InstallVCRedistributable"
                  FileKey="VCREDISEXE"
                  ExeCommand="/install /passive /norestart"
                  Impersonate="yes"
                  Return="asyncNoWait" />
    
    0 讨论(0)
  • 2020-12-20 15:29

    I found this question and tried it myself, being in the same situation. I found the installer error you're running into was/is Error 1618: "Another installation is already in progress." It seems that running the vc_redist installer inside your own installer simply won't work.

    Your other options seem to be creating a bootstrapper as Patrick Allwood suggests above, or simply asking users to install the vc_redist package on their own before running your own installer. You can detect if the Universal C Runtime is already present by checking for ucrtbase.dll in C:\Windows\System32:

    <Property Id="UCRTINSTALLED">
      <DirectorySearch Id="UCRTSystemSearch" Path="[WindowsFolder]System32" Depth="0">
        <FileSearch Id="UCRTFileSearch" Name="ucrtbase.dll" MinVersion="10.0.10240.16389" />
      </DirectorySearch>
    </Property>
    

    If you only have a 32-bit installer, you can also use the [SystemFolder] property directly.

    EDIT: As Kevin Smyth mentioned, the version of ucrtbase.dll is giving weird issues - reporting version 2.X to some tools, and version 10.Y to other tools. You can remove the MinVersion property if you just want to check for the existence of ucrtbase.dll.

    0 讨论(0)
提交回复
热议问题