WiX RemoveRegistryKey 元素的行为不符合广告

2024-03-31

卸载时我似乎无法删除注册表项。请注意,这不是重复this https://stackoverflow.com/questions/3317281/wix-doesnt-remove-registrykey-on-uninstall问题,因为我不认为我有同样的问题。或者,如果我这样做,我想澄清一下原因。当我在新的虚拟机上安装时会发生此问题,因此这不像我是在同一 GUID 上安装的。

我正在做的是将用户的值(从 UI)放入某些属性中,然后通过自定义动作,然后我对这些值进行加密并将它们放入注册表项中。

我不使用 WiX 将值放入注册表项,而是通过 C# 代码进行操作。原因是我似乎无法将属性导入到 C# 自定义操作中,然后将同一代码中的值导出回 WiX(我可以单独执行每个操作,没有问题)。但这是另一个问题...

无论如何,我获取这些值,对它们进行加密,然后将它们放入注册表项中就可以了。我只是卸载时似乎无法删除注册表项。奇怪的是,它does删除键中除一个值之外的所有值,但不会删除整个键。

下面是应该删除该键(但没有)的 XML:

        <Component Id="Component_CleanRegistryOnUninstall"
               Directory="TARGETDIR"
               Guid="{86D04E28-2EF8-4A6C-BB9B-577EA1597BB5}" 
               KeyPath="yes">
        <RemoveRegistryKey Id="CleanupRegistry"
                           Root="HKLM"
                           Key="Software\...\...\InstallCfg"
                           Action="removeOnUninstall"/>
        </Component>

以下是创建 C# 自定义操作的 XML:

    <Fragment>      
  <Property Id="VAL1" Hidden="yes"/>
  <Property Id="VAL2" Hidden="yes"/>
  <Property Id="VAL3" Hidden="yes"/>
  <Property Id="VAL4" Hidden="yes"/>

  <SetProperty Id="CustomAction_PassProperty"
               Value="VAL1=[VAL1];VAL2=[VAL2];VAL3=[VAL3];VAL4=[VAL4]"
               Sequence="execute"
               Before="CustomAction_PassProperty"/>

  <Binary Id="Binary_PassProps"
          SourceFile="$(var.CreateRegistryKey.TargetDir)CreateRegistryKey.CA.dll"/>

  <!-- Note that 'Impersonate="no"' elevates the privilege of the C# code, needed to create keys -->
  <CustomAction Id="CustomAction_PassProperty"
                BinaryKey="Binary_PassProps"
                DllEntry="CreateKeys"
                Execute="deferred"
                Impersonate="no"
                Return="check" 
                HideTarget="yes"/>

  <InstallExecuteSequence>
      <Custom Action="CustomAction_PassProperty"
              After="InstallInitialize"/>
  </InstallExecuteSequence>
</Fragment>

这是 C# 本身:

        [CustomAction]
    public static ActionResult CreateKeys(Session session)
    {
        // encrypt and set set the registry keys
        Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\...\\...\\InstallCfg", "Val1", Encrypt(session.CustomActionData["VAL1"]));
        Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\...\\...\\InstallCfg", "Val2", Encrypt(session.CustomActionData["VAL2"]));
        Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\...\\...\\InstallCfg", "Val3", Encrypt(session.CustomActionData["VAL3"]));
        Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\...\\...\\InstallCfg", "Val4", Encrypt(session.CustomActionData["VAL4"]));

        // also, set the "SettingsProcessed" key to false
        Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\...\\...\\InstallCfg", "SettingsProcessed", "false");

        return ActionResult.Success;
    }

设置的最终值(刚刚作为“false”而不是加密值传入的值)是一个标志,并且可能是问题的关键。

这是奇怪的行为:当我卸载时,密钥不会被删除,但它does删除所有值except未传递到 C# 函数中的一个值,即标志。它不会被删除。但是,即使我创建了一个属性,也将该属性赋予值“false”,并将其传递到 C# 中,如下所示:

Registry.SetValue("HKEY_LOCAL_MACHINE\\SOFTWARE\\...\\...\\InstallCfg", "SettingsProcessed", session.CustomActionData["SETTINGSPROCESSED"]);

同样的事情也会发生:除了它之外的所有其他值都被删除。我承认这可能是一个组件问题,答案可能在于this https://stackoverflow.com/questions/3317281/wix-doesnt-remove-registrykey-on-uninstall答案,但我无法弄清楚。

总结一下:注册表项已创建,但<RemoveRegistryKey>卸载时不会删除它。

EDIT::

鲍勃从未得到过他的<RemoveRegistryKey>元素来工作。他辞去了 IT 工作,搬到了奥马哈,在那里经营一家黎巴嫩/荷兰披萨店并练习班卓琴。

不,真的,我从来没有让它发挥作用。我最终创建了another删除密钥的自定义操作。这太令人沮丧了,让我想搬到奥马哈。


需要设置一个条件不运行CustomAction_PassProperty在卸载过程中。 像这样:

  <InstallExecuteSequence>
      <Custom Action="CustomAction_PassProperty"
              After="InstallInitialize>NOT REMOVE="ALL"</Custom>
  </InstallExecuteSequence>

除了硬编码的值之外,它“删除所有值”可能是您重写值的结果VAL1, VAL2...在卸载期间,这些属性可能为空(它们仅在 ui 序列中的安装过程中设置,对吧?)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WiX RemoveRegistryKey 元素的行为不符合广告 的相关文章

随机推荐

  • 将变量从 Symfony2 传递到 Angular 范围的最佳方法

    作为许多其他开发人员面临的常见场景 我们有一个基于 Symfony2 TWIG 的成熟应用程序 并且一些 html twig 模板因 jQuery 代码过多而难以维护 抛弃 jQuery 并使用 Angular 怎么样 假设我有一些关于 A
  • 如何覆盖 net core web api 中的 OnAuthorization?

    早些时候我在 asp net 中实现了类似的东西 public class Authentication AuthorizationFilterAttribute public override void OnAuthorization H
  • 需要使用 d3 geoPath.projection(null) 缩放已经投影的数据

    基于 d3 1 4 版 文档https github com d3 d3 geo blob master README md geoProjection https github com d3 d3 geo blob master READ
  • 如何在不使用 zip() 的情况下将不同类型的 Future 组合成一个 Future

    我想创造一个类型的未来Future Class1 Class2 Class3 从下面的代码 然而 我发现做到这一点的唯一方法是使用 zip 我发现这个解决方案很丑陋而且不是最佳的 谁能启发我 val v for a lt val f0 Fu
  • 如何把照片贴在墙上?

    有人成功地将图片发布到当前用户的墙上吗 这是行不通的 如果图片参数是现有的图片 url 则不会显示 我正在使用最新的 FB C SDK 5 0 8 Beta var args new Dictionary
  • 如何重新加载 vue 组件?

    我知道解决方案是像这样更新道具数据 this selectedContinent 但我想使用另一种解决方案 在我阅读了一些参考资料后 解决方案是 this forceUpdate 我尝试了一下 但不起作用 演示和完整代码如下 https j
  • 向 Google 仪表添加 % 符号

    我正在使用 Google 仪表 并且想在仪表中的值后面添加一个 符号 我的值显示良好 没有百分比符号 整数 0 100 但是当我开始尝试添加百分比符号时 事情变得不稳定 这是我尝试过的 Format the data to include
  • iPhone CoreText:查找子字符串的像素坐标

    这是 Twitter 应用程序的屏幕截图供参考 http screencast com t YmFmYmI4M http screencast com t YmFmYmI4M 我想要做的是将浮动弹出窗口放置在可以跨越多行的 NSAttrib
  • 如何在 Puppeteer 中选择 iframe 元素内的元素

    由于 ESPN 不提供 API 因此我尝试使用 Puppeteer 来抓取有关我的 Fantasy Football League 的数据 但是 由于登录表单嵌套在 iframe 元素中 我很难尝试使用 puppeteer 登录 我已经去了
  • Next12 中带有 Prisma 适配器的 NextAuth 凭证提供程序不执行任何操作

    我已经设置了我的Nextjs Next12 with NextAuth 凭证提供者并使用棱镜适配器将用户会话保留在数据库中 我跟着这个文档 https next auth js org adapters prisma来自 NextAuth
  • 求解混合互补模型时出错

    直接使用 PATH 求解器 我无法解决下面提出的问题 最初的问题来源于https prod sandia gov techlib noauth access control cgi 2015 155584 pdf https prod sa
  • 以良好的质量和内存效率缩小资源中的位图

    我想缩小 500x500px 资源以始终适合由屏幕宽度确定的特定尺寸 目前我使用 Android 开发者网站 高效加载大位图 http developer android com training displaying bitmaps lo
  • on_message() 和 @bot.command 问题

    当我有on message 在我的代码中 它会停止所有其他的 bot command来自工作的命令 我尝试过await bot process commands message 但这也行不通 这是我的代码 bot event command
  • SQL Server - PIVOT - 两列转换为行

    我在一个专栏中看到了很多关于 PIVOT 的问题 每个问题都比其他问题更复杂 但是 我找不到我需要的任何内容 老实说 我什至不知道pivot在这种情况下是否能帮助我 假设我的源表中有这些数据 SELECT 1 as RowId Random
  • 混淆 .fmt 行为与嵌套列表

    The docs https docs raku org routine fmt比如说fmt 返回一个字符串 其中列表中的每个元素都已根据以下格式进行格式化 format 第一个参数 并且每个元素由 separator 第二个论点 根据该描
  • EmguCV (OpenCV) ORBDetector 仅发现不良匹配

    Problem 所以总的来说 我对计算机视觉还很陌生 我目前正在尝试通过分析 2 个图像来计算单应性 我想使用单应性来校正 1 个图像的视角以匹配另一个图像 但我得到的比赛却很糟糕而且错误 所以我所做的单应性扭曲完全关闭了 当前状态 我正在
  • 在“data.table”中使用动态列名

    我想计算 data table 中每一列的平均值 并按另一列分组 我的问题与另外两个问题类似 one https stackoverflow com questions 12391950 variably selecting assigni
  • 创建 IEnumerable.Find()

    我想写 IEnumerable
  • Hibernate Envers:检索具有集合属性的实体的正确修订

    我有两个经过审计的实体 A 和 B 实体 A 拥有实体 B 的集合 注释为一对多关系 将 A 的新实例插入数据库时 A 和 B 的所有行都处于同一修订版 假设为修订版 1 然后 A 上有一个更新 仅影响实体 B 的实例 因此 更新后 实体
  • WiX RemoveRegistryKey 元素的行为不符合广告

    卸载时我似乎无法删除注册表项 请注意 这不是重复this https stackoverflow com questions 3317281 wix doesnt remove registrykey on uninstall问题 因为我不