我正在使用Visual Studio 2017中的“ Visual Studio Installer”项目类型为我的应用程序创建安装程序。
我希望安装程序通过我的应用程序安装Visual C ++ Redistributable 2015。我已经下载了output = "all"
文件,并将其包含在我的项目中,并且我试图作为“安装”上的自定义操作来进行安装。我正在使用参数vc_redist.x86.exe
启动。
当我执行安装程序时,如果执行自定义操作,则会出现此错误:
此Windows Installer软件包有问题。作为安装程序一部分运行的程序未按预期完成。请与您的支持人员或包装供应商联系。
我可以在命令提示符下运行/install /passive /norestart
,没有任何问题或错误。
在安装过程中是否包含将Visual C ++可再分发的任何建议或替代方法?
答案 0 :(得分:0)
推荐 :迁移到WiX Burn(引导程序/下载器/音序器)以提供更多的灵活性和控制力(下面的WiX链接)。
或者首先尝试下面的先决条件部分(选择“
Visual Studio 14
”条目进行安装)或尝试使用合并模块(下面的部分)。请注意合并模块的免责声明。
日志记录和互斥对象 :日志文件说什么?从技术角度来看,通常的问题是由于技术运行时间的限制,您无法在自己运行的MSI安装程序中安装另一个MSI软件包。设置了互斥锁可防止同时发生多个MSI安装事务。检查日志。我相信这种可重新分发的基于MSI的消息-因此,当像您一样通过自定义操作运行EXE时,您会看到此问题。
部署工具 :Visual Studio Installer项目非常有限,随着时间的推移,似乎大多数人都将其从迁移到另一个部署工具。 Maybe have a look here-和here is a list of tools。 WiX的刻录功能(引导程序/下载器/音序器)可以实现您所需要的。 Also read PhilDW's answer here。
先决条件 :Visual Studio Installer项目确实具有a prerequisites view(单击Prerequisites...
按钮),可以在其中定义有限数量的先决条件通过 setup.exe
引导程序进行安装(不是从您的MSI内部启动,而是从其bootstrap setup.exe启动-这意味着您不会从自己的MSI内部开始安装,但在开始安装之前-它可以正常工作)。我不确定“ Visual Studio 14
”的条目是否适合您所需的运行时版本。我想你可以试试看。
合并模块 :有一些合并模块可用于安装Visual Studio运行时(see here, section "Visual C++ Runtime"-在页面下端很长),但是这些模块似乎不足天for reasons explained here(非常重要)。从2015年开始,Visual Studio Runtime从本质上讲更加复杂-首选EXE安装程序。必须阅读链接-请。为了找到相关的合并模块,请在 %ProgramFiles(x86)%
下搜索* .msm文件-如果已安装Visual Studio(和/或Windows SDK)。 Merge modules can be installed embedded in your own package without the need for a setup.exe launcher
。在Visual Studio中,右键单击您的安装程序项目,依次单击Add
和Merge Module...
答案 1 :(得分:0)
您不能将可再发行组件作为自定义操作运行,因为它是基于MSI的安装,并且您无法运行递归MSI安装(您将其称为VC redist)。
在Visual Studio安装项目中,您应该使用先决条件功能。在解决方案资源管理器中右键单击安装项目,选择“属性”,然后选择“先决条件”。这将生成setup.exe以安装必备组件,然后安装MSI文件。据我所知,Microsoft Visual C ++ 14是Visual Studio 2015运行时。