Csharp/C#教程:从同一应用程序读取和写入x86和x64注册表项分享


从同一应用程序读取和写入x86和x64注册表项

我正在运行编译为x86的应用程序,它运行在64位Windows上。

为了解决ClickOnce文件关联的问题,我想从注册表的x86视图中读取一些CLSID值,然后将它们写入x64视图。

要清楚,这意味着从x86应用程序我想同时从x86注册表视图读取,然后写入x64注册表视图。 我想在HKEY_CURRENT_USERSoftwareClassesCLSID{my clsid}下找到我找到的值,并将它们写入HKEY_CURRENT_USERSoftwareClassesWow6432NodeCLSID{my clsid}

我该怎么做? 使用RegistryView会产生意外结果。 例如,此OpenSubKey调用返回null:

 keyPath = @"SoftwareClassesCLSID" + clsid; var regularx86View = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry32); var regularClassKey = regularx86View.OpenSubKey(keyPath, RegistryKeyPermissionCheck.ReadSubTree); 

如果我使用RegistryView.RegistryDefaultRegistryView.Registry64而不是它返回密钥 – 但我希望它在使用Registry64时返回null,因为该密钥在x64视图中不存在,并且不应该发生重定向。

使用RegistryView正在做的事情,还是我应该直接使用WinAPI?

我可能会误解你的问题,但如果你在32位进程中运行,那么你的所有密钥都将在Wow6432Nodexxxxx节点中。 因此,如果您尝试将它们从HKEY_CURRENT_USERSoftwareClassesCLSID{my clsid} (并未手动指定64位视图)复制到HKEY_CURRENT_USERSoftwareClassesWow6432NodeCLSID{my clsid}那么您将是复制相同的值。 这段代码应该有效:

上述就是C#学习教程:从同一应用程序读取和写入x86和x64注册表项分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 keyPath = @"SoftwareClassesCLSID" + clsid; var regularx86View = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry32); // Note this calls HKEY_CURRENT_USERSoftwareClassesWow6432NodeCLSID{my clsid}: var regularClassKey = regularx86View.OpenSubKey(keyPath, RegistryKeyPermissionCheck.ReadSubTree); var regularx64View = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64); // Note this calls HKEY_CURRENT_USERSoftwareClassesCLSID{my clsid}: var regularClassKey = regularx64View.OpenSubKey(keyPath, RegistryKeyPermissionCheck.ReadSubTree); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1020954.html

(0)
上一篇 2022年1月5日
下一篇 2022年1月5日

精彩推荐