我在从托管引导程序 (.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(使用前将#替换为@)