【问题标题】:Wix bootsrapper multiple instance in Add/Remove Programs添加/删除程序中的 Wix 引导程序多个实例
【发布时间】:2021-05-05 07:18:24
【问题描述】:

我花了几天时间解决了添加/删除程序中许多版本的 boostrapper 的问题。

我尝试了多种方式,使用 DisableRemove、DisableModify、UpgradeCode、ParentName 和 Version for Bundle 属性的不同组合。我正在附加到事件 PlanRelatedBundle 和 DetectRelatedBundle 但我无法在那里设置任何东西。

从 2012 年开始发现这个,但不幸的是,对于引导程序,这个问题没有这样的明确解决方案。 http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Bootstrapper-Upgrade-Detection-td7580471i20.html

在日志中我可以看到它找到了相关的捆绑包

第一个版本 1.0.108.0:

[4364:38F8][2021-05-05T07:58:53]i370:会话开始,注册密钥:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{a0118d1b-5688-4e44-a1a9-61c7b7b4d9f0},选项: 0x7,禁用恢复:否 [4364:38F8][2021-05-05T07:58:54]i000:缓存包来自:'C:\Users\M4360~1\AppData\Local\Temp{82501D9E-759F-4960-9F6B-D34CB27DBC5B}.be \ETest.exe' 到:'C:\ProgramData\Package Cache{a0118d1b-5688-4e44-a1a9-61c7b7b4d9f0}\ETest.exe' [4364:38F8][2021-05-05T07:58:54]i320:注册捆绑依赖提供者:{a0118d1b-5688-4e44-a1a9-61c7b7b4d9f0},版本:1.0.108.0 [4364:38F8][2021-05-05T07:58:54]i371:更新会话,注册密钥:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{a0118d1b-5688-4e44-a1a9-61c7b7b4d9f0},恢复:活动,重新启动已启动:否,禁用恢复:否

第二个版本 1.0.109.0:

[0FC0:2F94][2021-05-05T08:16:19]i000: *********** 事件:PlanRelatedBundle,参数名称:PlanRelatedBundleEventArgs - BundleId,值:{a0118d1b-5688- 4e44-a1a9-61c7b7b4d9f0}。状态,值:不存在。结果,值:无。 , 发件人:: BootstrapperStartup

[0FC0:2F94][2021-05-05T08:16:19]i207:计划的相关捆绑包:{a0118d1b-5688-4e44-a1a9-61c7b7b4d9f0},类型:升级,默认请求:缺席,ba 请求:缺席,执行:卸载,回滚:安装,依赖:无

[2278:35D8][2021-05-05T08:16:22]i370:会话开始,注册密钥:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{e0e0d315-c8fc-4f19-acb0-01791a533e15},选项: 0x7,禁用恢复:否 [2278:35D8][2021-05-05T08:16:23]i000:缓存包来自:'C:\Users\M4360~1\AppData\Local\Temp{B525729B-76AE-4428-9F13-9DA529F2E455}.be \ETest.exe' 到:'C:\ProgramData\Package Cache{e0e0d315-c8fc-4f19-acb0-01791a533e15}\ETest.exe' [2278:35D8][2021-05-05T08:16:23]i320:注册捆绑依赖提供程序:{e0e0d315-c8fc-4f19-acb0-01791a533e15},版本:1.0.109.0 [2278:35D8][2021-05-05T08:16:23]i371:更新会话,注册密钥:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{e0e0d315-c8fc-4f19-acb0-01791a533e15},恢复:活动,重新启动已启动:否,禁用恢复:否

第三版 1.0.110.0:

[1C30:06C8][2021-05-05T08:26:14]i000: *********** 事件:PlanRelatedBundle,参数名称:PlanRelatedBundleEventArgs - BundleId,值:{a0118d1b-5688- 4e44-a1a9-61c7b7b4d9f0}。状态,值:不存在。结果,值:无。 , 发件人:: BootstrapperStartup
[1C30:06C8][2021-05-05T08:26:14]i000: *********** 事件:PlanRelatedBundle,参数名称:PlanRelatedBundleEventArgs - BundleId,值:{e0e0d315-c8fc-4f19-acb0 -01791a533e15}。状态,值:不存在。结果,值:无。 , 发件人:: BootstrapperStartup

[1C30:06C8][2021-05-05T08:26:14]i207:计划的相关捆绑包:{a0118d1b-5688-4e44-a1a9-61c7b7b4d9f0},类型:升级,默认请求:缺席,ba 请求:缺席,执行:卸载,回滚:安装,依赖:无 [1C30:06C8][2021-05-05T08:26:14]i207:计划的相关捆绑包:{e0e0d315-c8fc-4f19-acb0-01791a533e15},类型:升级,默认请求:缺席,ba 请求:缺席,执行:卸载,回滚:安装,依赖:无

GUID 是正确的,但我在日志中看不到任何关于以前版本的更多信息,也看不到它们正在被卸载。

我尝试将 ParentName 添加到 Bundle,但它导致没有新版本显示在添加/删除程序中并且不删除旧版本。

最后我的安装程序安装了 5 个东西,其中 4 个是需要为我的 .msi 安装的程序,我不知道这些其他版本是否最终被卸载并且只保留注册表?为什么它们在添加/删除程序中?因为在安装下一个版本的 boostrapper 时,它占用的磁盘空间并不像它从 1.3gb 的整个大小大约需要 200 / 300mb 而我的 .msi 有 170mb + 日志那样多。

也许删除 PlanRelatedBundle 中的注册表就够了?

编辑

我尝试在事件 OnPlanRelatedBundle 中删除注册表,我得出结论,引导程序在升级期间没有删除注册表的权限会引发 RegistryKey key = key32.OpenSubKey (registryKey, true) 错误;。如果我在卸载 bootstrapper 时附加到该进程,则权限更高并成功删除旧版本的 boostrapper 的寄存器。但安装程序增加了“启动提升的引擎进程”。 exe,以管理员身份运行也不会使旧版本卸载。

【问题讨论】:

    标签: wix bootstrapper


    【解决方案1】:

    我通过挂钩 OnPlanRelatedBundle 事件并删除旧版本应用程序的注册表解决了这个问题。

    但是,这需要以管理权限运行引导程序。

        private void OnPlanRelatedBundle(object sender, PlanRelatedBundleEventArgs e)
        {
            try
            {
                string registryKey = @"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall";
                RegistryKey key32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
                RegistryKey key = key32.OpenSubKey(registryKey, true);
                if (key != null)
                {
                    key.DeleteSubKeyTree(e.BundleId, false);
                    key.Close();
                }
            }
            catch (Exception ex)
            {
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多