当我使用 msi 修复时,会正确地重新创建注册表项。当使用 Burn 生成的 exe 时,不会重新创建该条目,除非与该 reg 条目关联的 exe 也需要比较。
我想知道,当burn调用msi时,它是否会覆盖msiexec的默认/fm行为。 该开关意味着“修复所有必需的特定于计算机的注册表项”
有什么方法可以确认、否认或修改该行为吗?
最佳答案
在 Burn 中规划“修复”操作时,REINSTALLMODE
为“cmuse”。对于“修改”操作,REINSTALLMODE
为“cmuso”。所以“m”在两种情况下都存在。
刻录日志文件应该显示“计划操作:操作”,这将告诉您它正在做什么。如果您正在执行修复操作,并且计算机上没有比您的 MSI 预期更新的可执行文件版本,则 Burn 的 REINSTALLMODE
应该可以工作。如果您正在进行“修复”,请在生成的 MSI 日志文件中查找相同的刻录执行,并查看未修复组件的组件状态。这应该可以帮助您回溯以查看组件未修复的原因。
来自提供的日志文件:
Command Line: ARPSYSTEMCOMPONENT=1 MSIFASTINSTALL=7 REINSTALLMODE=cmuse
REBOOT=ReallySuppress IGNOREDEPENDENCIES=ALL CURRENTDIRECTORY=C:\temp
CLIENTUILEVEL=3 MSICLIENTUSESEXTERNALUI=1
缺少REINSTALL=ALL
表明EnableFeatureSelection='yes'
。删除该属性(或将其更改为默认的“否”),或者您的 BA 需要处理 OnPlanMsiFeature()
回调
关于wix 将选项传递给 MSI 进行修复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15394382/