微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在MSI中执行时,VC可再发行组件无法安装

如何解决在MSI中执行时,VC可再发行组件无法安装

我有一个使用WiX制作的安装程序,其中包含并执行VC 2019可重新分发的安装程序。由于有多个第三方二进制文件,我的应用程序依赖于VC 2015,VC 2017和VC 2019。

我正在使用/install /passive /norestart参数安装可再发行文件,复制其余文件后即可完成。

我的问题是该应用程序(已安装的一个)无法启动,因为找不到msvcr140.dll(以及其他2015的运行时文件)丢失了。

如果我随后使用完全相同的参数手动启动VC可再发行组件(从命令行),则应用程序将正确启动。

我正在提升安装程序的启动速度,我可以看到vcredist在MSI完成复制文件后启动。我错过了什么吗?

注意:我还没有尝试过Merge模块,但是我很好奇为什么vcredist安装程序不能正常工作。

我的WXI文件的简化版本是:

<Property Id="WIXUI_INSTALLDIR" Value="DIR_APPLICATION" />

<!-- Directory structure -->
<Directory Id="TARGETDIR" Name="SourceDir">
  <!-- Main installation -->
  <Directory Id="ProgramFilesFolder">
    <Directory Id="DIR_COMPANY" Name="CompanyName">
      <Directory Id="DIR_APPLICATION" Name="TheProduct">
        <Directory Id="DIR_INSTALLATION" Name="vcredists">
          <Component Id="VCREdisTRIBUTABLE_142" Guid="*">
            <File Id="FILE_VCREdisTRIBUTABLE_142_EXE" Name="vcredist_142_x86.exe" Source="..\VC_redistributables\v142\vcredist_x86.exe" />
          </Component>
        </Directory>
      </Directory>
    </Directory>
  </Directory>
</Directory>

<Feature Id="FEATURE_PRODUCT" Title="PRODUCT" Level="1">
  <ComponentGroupRef Id="PRODUCT_FILES" />
  <ComponentRef Id="VCREdisTRIBUTABLE_142" />
</Feature>

<CustomAction Id="INSTALL_VCREdisTRIBUTABLE_142" Directory="DIR_INSTALLATION" ExeCommand='"[DIR_INSTALLATION]vcredist_142_x86.exe" /install /passive /norestart' Execute="deferred" Impersonate="no" Return="ignore" />

<InstallExecuteSequence>
  <Custom Action="INSTALL_VCREdisTRIBUTABLE_142" After="InstallFiles"><![CDATA[NOT Installed]]></Custom>
</InstallExecuteSequence>

<UI Id="UI_Main">
  <Progresstext Action="INSTALL_VCREdisTRIBUTABLE_142">Installing Visual C++ redistributables</Progresstext>

  <UIRef Id="WixUI_InstallDir" />
  <Publish Dialog="WelcomeDlg"
           Control="Next"
           Event="NewDialog"
           Value="InstallDirDlg"
           Order="2">1</Publish>
  <Publish Dialog="InstallDirDlg"
           Control="Back"
           Event="NewDialog"
           Value="WelcomeDlg"
           Order="2">1</Publish>
  <UIRef Id="WixUI_ErrorProgresstext" />
</UI>

更新:我在上面的文件中提到的vcredist_142_x86.exehttps://aka.ms/vs/16/release/vc_redist.x86.exe的副本

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?