MSI未读取.ism文件中更新的ProductCode、ProductName等信息
我来帮你排查这个Install Shield生成MSI后仍显示旧ProductCode、Name和Version的问题,这类情况我碰到过不少,通常是以下几个环节出了问题,你可以逐一排查:
检查Release配置的覆盖设置:有时候你在主项目里修改了字段,但特定的Release配置(比如SingleImage、Web Deploy等)可能单独设置了这些值,覆盖了主项目的修改。右键你的目标Release →
Properties,切换到Product Information标签,确认这里的ProductCode、ProductName和ProductVersion是不是已经更新为新值:- 新ProductCode:
{A083A8CF-A89C-42B1-9D08-7B76D780C3FA} - 新ProductName:
ANDCPATCH - 对应更新ProductVersion
- 新ProductCode:
清理构建缓存与临时文件:Install Shield的缓存很容易残留旧的构建信息,导致新修改不生效:
- 先关闭Install Shield,删除项目目录下的
Media文件夹(这里是生成的MSI及相关临时文件) - 清除Install Shield的全局缓存,一般路径是
C:\Program Files (x86)\InstallShield\<你的版本>\Support\Cache,或者用户目录下的%LOCALAPPDATA%\InstallShield\Cache - 重新打开项目,选择Rebuild All(不要用增量Build)重新生成
- 先关闭Install Shield,删除项目目录下的
验证.ism文件的实际修改:有时候GUI操作可能没把修改真正保存到.ism文件里,你可以用文本编辑器(比如Notepad++)打开.ism文件,搜索旧的ProductCode
{A6CA6D00-21B0-4E0F-BAFF-9C3C8E945C23},确认它已经被替换成新值,同时检查ProductName和ProductVersion的字段是否确实更新了。如果还有旧值残留,手动替换后保存再重新构建。排查合并模块的影响:如果你的项目引用了Merge Modules,有些合并模块可能自带Product相关属性,会覆盖你设置的值。进入项目的Merge Modules视图,逐个查看合并模块的属性,确认它们没有强制设置ProductCode、ProductName或ProductVersion。
用Orca验证MSI属性:生成MSI后,用Orca工具(Windows SDK自带)打开MSI文件,查看
Property表,直接确认ProductCode、ProductName、ProductVersion这几个属性的值。如果Orca里显示的是新值,那可能是你查看MSI信息的工具(比如右键文件属性)读取的是系统缓存;如果Orca里还是旧值,那问题肯定出在Install Shield的构建环节,回到前面的步骤重新排查。
内容的提问来源于stack exchange,提问作者Sadhu

