我有一个刻录标准引导程序,它链接一个特定的msi,如下所示
<Chain>
...
<MsiPackage Id="activex32" Cache="yes" SourceFile="$(var.MyPath)\activex32.msi" />
...
</Chain>
这个msi遵循MajorUpgrade策略:每个构建更改PackageCode和ProductCode,但通过构建保持UpgradeCode不变。
问题是,有些人实际上将这个msi安装为一个独立的软件包。其中一些人还想安装我的bootstrapper,它使用旧版本的activex32.msi(较低版本号)编译。发生这种情况时,引导程序会降级activex32.msi。
我想知道如何防止这种降级。是的,我可以使用最新的activex32.msi更新我的引导程序,但这并不能防止问题再次发生。
更新: 在我看来,日志并没有太多说明
[120C:14C8] [2017-10-20T16:49:05] i103:检测到相关包:{1CFD803C-D610-4414-B308-28FDD8326542},范围:PerMachine,版本:8.11.0.19409,语言:0操作:MajorUpgrade
[120C:14C8] [2017-10-20T16:49:05] i101:检测到的包:activex32,state:Absent,cached:None
[120C:14C8] [2017-10-20T16:49:07] i201:计划包:activex32,状态:缺席,请求默认:存在,请求:存在,执行:安装,回滚:卸载,缓存:是的,非缓存:不,依赖:注册
[0CD8:0C04] [2017-10-20T16:49:10] i305:已验证获取的有效负载:路径为activex32:C:\ ProgramData \ Package Cache.unverified \ activex32,移至:C:\ ProgramData \ Package缓存{21C87035-C870-4C06-8978-290D4FD71D33} v8.11.0.18409 \ activex32.msi。
[0CD8:0C04] [2017-10-20T16:49:10] i305:已验证获取的有效负载:路径为activex32:C:\ ProgramData \ Package Cache.unverified \ activex32,移至:C:\ ProgramData \ Package缓存{21C87035-C870-4C06-8978-290D4FD71D33} v8.11.0.18409 \ activex32.msi。
[0CD8:12F8] [2017-10-20T16:49:41] i323:注册包依赖提供者:{21C87035-C870-4C06-8978-290D4FD71D33},版本:8.11.0.18409,包:activex32 [0CD8:12F8] [2017-10-20T16:49:41] i301:应用执行包:activex32,action:Install,path:C:\ ProgramData \ Package Cache {21C87035-C870-4C06-8978-290D4FD71D33} v8。 11.0.18409 \ activex32.msi,参数:'ARPSYSTEMCOMPONENT =“1”MSIFASTINSTALL =“7”' [120C:14C8] [2017-10-20T16:49:43] i319:应用执行包:activex32,结果:0x0,重启:无 [0CD8:12F8] [2017-10-20T16:49:43] i325:在包提供商上注册依赖关系:{eb25107d-62c4-49d9-a7c8-0957943ccbdb}:{21C87035-C870-4C06-8978-290D4FD71D33},包: activex32
答案 0 :(得分:0)
我做了一些调查并得出结论,如果有任何事情(?),烧伤并没有太大作用,允许或不允许降级。它似乎将这个决定留给了msi包本身。
在我的情况下,activex32.msi允许降级。当我使用Orca更改它,修改升级表以禁止降级,并使用此修改后的包编译新的引导程序,然后一切正常并且刻录没有降级现有的activex32.msi。
有点令人失望,因为我无法控制第三方软件包的构建方式。