如何从 Wix 托管引导程序或自定义操作读取某些注册表项?

2023-11-29

我在从托管引导程序 (.NET 4.5.2) 和自定义操作(尝试过 .NET 2.0 和 4.0)读取此密钥时遇到问题。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages

我尝试使用 cmd 作为管理员运行引导程序和 msi。我的测试环境是Windows 7 64位。我正在使用 Wix 3.11

我制作了一个测试命令行应用程序,它能够访问此密钥。

我在引导程序和自定义操作中使用的测试代码:

static RegistryKey GetHKLMKey(string registryPath) {
    var hklm64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
    var registryKey64 = hklm64.OpenSubKey(registryPath);
    if ((registryKey64?.GetValueNames().Any()).GetValueOrDefault()) {
        return registryKey64;
    }

    var hklm32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
        return hklm32.OpenSubKey(registryPath);
    }
}
...
var path = @"SOFTWARE";

foreach (var segment in @"Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages".Split('\\')) {
    path += "\\"+segment;

    var j = GetHKLMKey(path);
    Log(path + ": " + j);

    var k = Registry.LocalMachine.OpenSubKey(path);
    Log(path + ": " + k);
    if (k == null) return true;
}

测试输出

SOFTWARE\Microsoft: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
SOFTWARE\Microsoft: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
SOFTWARE\Microsoft\Windows: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
SOFTWARE\Microsoft\Windows: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
SOFTWARE\Microsoft\Windows\CurrentVersion: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
SOFTWARE\Microsoft\Windows\CurrentVersion: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing
SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing
SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages: 
SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages: 

调试托管代码自定义操作: 不太清楚问题出在哪里?读取不能作为自定义操作进行?尝试从自定义操作中显示消息框,然后将调试器附加到rundll32.exe运行托管代码的进程。然后,您可以使用 Visual Studio 以正常的“调试方式”单步执行代码。这是来自的一个不错的视频高级安装程序向您展示如何执行此操作:调试 C# 自定义操作.

注册表读取:一旦您具有可调试性,就应该可以找出您所看到的任何问题的原因。

  • 抑制异常: 也许有一个例外发生某种情况,并且您已将自定义操作的错误检查设置为“ignore exit code"?
  • Bitness: 最常见的问题似乎是“位数”(32 位与 64 位)- 换句话说,您读取了错误的注册表位置,但我认为这不是您遇到的问题。
  • 访问违规?:也可能是您正在运行一些需要 GUI 序列中的管理员权限的程序,然后才能将安装程序提升为管理员权限。这可能会触发访问权限异常。

只是我脑子里的一些想法。请让我们知道那是什么。

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

如何从 Wix 托管引导程序或自定义操作读取某些注册表项? 的相关文章

随机推荐

  • Android 翻转图像动画

    我想通过翻译动画在android中翻转图像 例如 假设我有一张卡 当翻译动画开始时 它会将卡片显示到新位置 现在这里的卡应该翻转吗 从背面到正面 我怎样才能做到这一点 APIdemos 中的示例名称是 旋转3d动画 java 也只需检查下面
  • 宏的逆柯里化?

    假设我们有一个 define FOO x y something 我想构建这样的宏 define BAR that BAR x y 会打电话FOO x y 如果可能的话 我该怎么做 我尝试了以下操作 define BAR x FOO x B
  • Highcharts 删除 x 轴上的空间

    我正在尝试使用 Highcharts 库构建面积图 突然我发现在我的实际数据开始之前 x 轴上有一些间距 我想用适当的数据从 0 0 轴开始绘制图表
  • BeancreationException+NosuchBeandefinition异常

    我正在使用 Spring Boot 开发 Spring 4 应用程序 在 com test tm 包中 应用类 SpringBootApplication EnableJpaRepositories repositoryFactoryBea
  • flash AS3 如何删除舞台事件侦听器

    我正在 flash 和 as3 中构建动画 我有一个添加舞台的功能 eventListener stage addEventListener Event ENTER FRAME setScrollPercent false 0 true 由
  • Swift Array contains 函数使构建时间变长

    我不确定这是否属于 Stack Overflow 如果不属于 请告诉我 我有这段代码将联系人添加到数组中 如果数组中已存在具有该电话 姓名组合的联系人 则不会再次添加它 意味着没有重复项 它按预期工作 但它大大增加了构建时间 我正在寻找更好
  • SGEN、InternalsVisibleTo 和程序集签名

    我正在尝试做一些不寻常的事情 我有这个类 Foo public class Foo public Foo string name this Name name internal Foo public string Name get inte
  • CSS - 如何创建这样的圆形饼图画布?

    非常喜欢这个元素 但如何创建它呢 我不确定该元素的正确名称是什么 非常感谢 这种效果可以通过分层几层来实现arc s bright blue full circle d beginPath d arc 50 50 50 0 2 Math P
  • 使用 Java 解析 Postfix 中的收件箱

    我使用 Postfix 作为邮件服务器 并将其配置为将电子邮件接收到某个目的地 我想编写一个 Java 代码来解析传入的电子邮件并执行一些操作 知道从哪里开始或使用什么吗 我看到两种方法 例如使用 jcup 或 jflex 解析邮箱 或邮件
  • C# 从流中压缩和压缩 csv

    我有一个 MemoryStream 从 DataTable 中提取数据 目前 这会输入 MailMessage 附件并邮寄出附加到邮件的 csv 我需要做的就是对其进行压缩和压缩 所以现在我正在迭代 DataTable 的每一行 添加适当的
  • 在用户定义类的实例上启用列表(实例)或元组(实例)

    有没有一种方法可以使用标准类型构造函数 例如 int set dict list tuple 等 以用户定义的方式将用户定义类的实例强制为这些类型之一 例如 class Example def init self self a 1 self
  • 无法从气流 Pod 中提取 xcom - Kubernetes Pod Operator

    在运行使用 docker 镜像运行 jar 的 DAG 时 xcom push 真给出了它在单个 pod 中创建另一个容器以及 docker 镜像 DAG jar task KubernetesPodOperator namespace t
  • MySQL - 使用 SET 语句更新查询取决于前一个 SET 语句的结果

    这是我希望通过 UPDATE 语句实现的目标的表格表示 ID A B C D Calc A Calc B Calc C 1 6 5 2 10 A B Calc A D B Calc B 2 8 5 2 10 A B Calc A D B
  • 具有有序条形图并使用构面

    I am trying to make a graph with ordered bars according to frequency and also using a variable two separate two variable
  • 从 DataGridView 中删除行

    为了初始化我的 VouchersDGV 数据网格视图 我正在使用以下内容 DGV AllowUserToDeleteRows True For i 1 To DGV RowCount 1 DGV Rows Remove DGV Rows i
  • 防止 C# 中 HtmlButton 的回发

    我正在 cs 文件中动态创建 HtmlButton 使用将其添加到面板 HtmlButton b1 new HtmlButton b1 Attribute Add onclick javascript validateNclick this
  • Firebase 中的 OR 查询

    我正在尝试建立一个消息系统 我计划收集消息 然后根据发送者和接收者查询消息 为此 我需要查询例如 由鲍勃发送并由托尼接收的所有消息以及由托尼发送并由鲍勃接收的所有消息 我很不清楚如何执行这个 或 语句 截至目前我有 MessageRef o
  • 如何以编程方式在 jqGrid 中分页到下一页/上一页

    是否有一个 jqGrid 方法可以跳到下一页 上一页行 我试图用 jQuery 以编程方式单击按钮本身 但尚未成功 转到第 123 页 grid grid grid setGridParam page 123 grid trigger re
  • 为从 CSV 文件导入的每一行添加 UUID

    我们想要将 csv 文件中的 10 万行导入到 Cassandra 表中 每行没有唯一的值 因此我们想要向每个导入的行添加 UUID 在从 CSV 文件导入数据时如何自动执行此操作 CSV 文件中的示例行 第一行是列名称 DateTime
  • 如何从 Wix 托管引导程序或自定义操作读取某些注册表项?

    我在从托管引导程序 NET 4 5 2 和自定义操作 尝试过 NET 2 0 和 4 0 读取此密钥时遇到问题 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows CurrentVersion Com