给MSI文件名添加版本号后Setup.exe无法找到该文件的解决方法
解决Setup.exe找不到重命名后MSI文件的问题
核心原因
Setup.exe的引导配置(通常是setup.ini或项目内置的引导参数)硬编码了原始MSI文件名,Post Build脚本重命名MSI后,引导程序仍按旧名称查找,导致匹配失败。
具体修复步骤
1. 同步Setup.exe的引导配置
- 找到与Setup.exe同目录的
setup.ini文件,打开后定位到[Setup]区块的SourceFile项,将其值修改为你重命名后的MSI文件名PP-1.0.0.msi。 - 若使用Visual Studio的安装项目(WiX/InstallShield),更推荐直接在项目设置里定义带版本号的输出文件名,避免后续手动重命名:
- WiX项目:在
.wixproj文件中设置<OutputName>PP-$(Version)</OutputName>,编译时直接生成带版本号的MSI。 - InstallShield项目:在Release设置中,将MSI输出文件名模板改为包含版本变量的格式(例如
PP-[ProductVersion].msi)。
- WiX项目:在
2. 调整Post Build脚本逻辑
如果必须保留手动重命名脚本,需同时更新Setup.exe的依赖配置。以Windows批处理为例,在脚本末尾添加更新setup.ini的命令:
@echo off :: 重命名MSI文件 ren "PP.msi" "PP-1.0.0.msi" :: 更新setup.ini中的SourceFile配置 powershell -Command "(Get-Content 'setup.ini') -replace 'SourceFile=PP.msi', 'SourceFile=PP-1.0.0.msi' | Set-Content 'setup.ini'"
注意:若Setup.exe是内嵌MSI的打包模式,仅重命名外部文件无效,需重新生成Setup.exe以关联新的MSI。
3. 基础验证
- 确认Post Build脚本执行后,
PP-1.0.0.msi确实存在于Setup.exe所在目录,且文件名完全匹配(注意特殊字符或大小写差异)。 - 尝试以管理员身份运行Setup.exe,排除权限或杀毒软件拦截导致的文件访问失败。
内容的提问来源于stack exchange,提问作者Saad Bin Shafi
相关产品推荐
相关产品推荐

