我正在使用Visual Studio 2017中的“Visual Studio Installer”项目类型为我的应用程序创建安装程序 .
我希望我的安装程序使用我的应用程序安装visual c redistributable 2015 . 我已经下载了 vc_redist.x86.exe
文件,将其包含在我的项目中,我正在尝试将安装作为"install"上的自定义操作 . 我正在使用参数 /install /passive /norestart
启动 .
当我执行我的安装程序时,当它执行自定义操作时,我收到此错误:
此Windows Installer程序包存在问题 . 作为设置的一部分运行的程序没有按预期完成 . 请联系您的支持人员或包装供应商 .
我可以在命令提示符下运行 vc_redist.x86.exe /install /passive /norestart
,没有任何问题或错误 .
在我的安装过程中包含Visual C可再发行组件的任何建议或替代方法?
2 回答
Logging & Mutex :日志文件说什么?从技术角度来看,通常的问题是由于技术运行时限制,您无法在自己运行的MSI设置中安装另一个MSI软件包 . 设置互斥锁以防止一次发生多个MSI安装事务 . 检查日志 . 这个可再发行组件基于MSI,我相信 - 所以当你从自定义操作中运行EXE时,你会看到这个问题 .
Deployment Tools :Visual Studio安装程序项目非常有限,似乎大多数人会随着时间的推移从他们迁移到另一个部署工具 . Maybe have a look here - 和here is a list of tools . WiX的Burn功能(bootstrapper / downloader / sequencer)可以满足您的需求 . Also read PhilDW's answer here .
Prerequisites :Visual Studio Installer项目确实有a prerequisites view(单击
Prerequisites...
按钮),其中可以通过 setup.exe bootstrapper定义有限数量的先决条件(不是从MSI本身开始,而是从其bootstrapper setup.exe启动 - 这意味着你不是从你自己的MSI开始安装,而是在开始安装之前 - 因此它可以正常工作) . 我不确定“Visual Studio 14
”的条目是否适用于您需要的运行时版本 . 我想你可以尝试一下 .Merge Modules :有一些合并模块可以安装Visual Studio Runtime(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...
您无法将该可再发行组件作为自定义操作运行,因为它是基于MSI的安装,并且您无法运行递归MSI安装(您可以调用VC redist) .
在Visual Studio安装项目中,您应该使用先决条件功能 . 在Solution Explorer中右键单击安装项目,选择Properties,然后选择Prerequisites . 这将构建一个setup.exe来安装先前条件,然后是MSI文件 . 据我所知,Microsoft Visual C 14是Visual Studio 2015运行时 .