问题标签 [registry-virtualization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
718 浏览

.net - 以编程方式抑制注册表虚拟化

在通用的基于.NET 的组件的上下文中,它可以托管在各种场景中 - 即,无论是否为 64 位,交互过程与否,我需要在受 UAC 虚拟化影响的区域中写入注册表。但是,我想防止此类访问被虚拟化,以便每次执行都不受当前上下文的变幻莫测(即,不希望从 HKLM 读取一个读数,因为它有一个清单,另一个来自 HKCU。 .VirtualStore 因为它没有)。

换句话说,我正在寻找类似于 KEY_WOW64_64KEY的东西,或者reg.exe REG_KEY_DONT_VIRTUALIZE表明我在任何情况下都不想被虚拟化。或者是否有某种形式的规范化相关语法我可以用你指定 >260 字符文件名的方式强制它?

如果执行用户对相关注册表项没有适当的权限,我对代码失败感到满意。

这个问题与这个关于检测注册表虚拟化的问题密切相关,但在这种情况下检测肯定是不够的。

0 投票
3 回答
627 浏览

.net - 如何构建 x64、Windows 7 兼容的应用程序?

我们有一个访问注册表的遗留应用程序。因为它是一个 32 位应用程序,它在引用 HKEY_LOCAL_MACHINE\Software 时通过注册表虚拟化访问 Windows 7 中的注册表。 我的问题是我们需要修改 Visual Studio 中的哪些设置来编译我们的应用程序,在这些应用程序中他们“正常”访问注册表而不通过注册表虚拟化?

0 投票
4 回答
175 浏览

c++ - XML 作为虚拟注册表使应用程序运行缓慢

我正在构建一个“应用程序虚拟化”产品。我使用 XML 文件作为虚拟注册表。从我的软件生成的虚拟应用程序访问虚拟注册表 Xml。它运行,但运行速度非常慢。

我在每个注册表 API 调用上加载和卸载 XML,因为从父线程线程化的多个进程访问同一个注册表文件。这可能会导致应用程序运行缓慢。

任何人都可以让我知道 XML 的替代方案...

0 投票
2 回答
1561 浏览

python - Windows 阻止对 HKLM 的 reg 查询;改为返回 HKCU

我正在使用 ActivePython 2.5 来读取注册表中 pGina 所做的条目。具体来说,有关计算机上允许哪些 GID 的条目。通过 pGina 编辑的每台计算机的此信息可以定期更改,因此我希望我的 Python 脚本每次都能够检查这些值。

很容易。以下 Windows 命令将为我获取该信息:

...除了我用 Python 运行它时,我得到这个:

因此,当我通过 Python 运行 'reg query HKLM\Software' 时,它会在 HK CU \Software 而不是 HKLM下吐出键和值的列表。

我以管理员身份运行 Python(通过使用 getpass.getuser() 确认),当我从批处理脚本运行相同的命令时,我在 HKLM 下得到了正确的列表。但是,当我从 Python 调用批处理脚本时,回到原来的 HKCU 结果。

所以,我有点卡住了。有没有人有任何见解?

编辑:正如稍后详述,我正在运行 Windows 7 64 位,并且我尝试了 _winreg 方法,包括 OpenKey 中可选的第四个“sam”参数。

0 投票
1 回答
344 浏览

.net - 无法绕过注册表虚拟化

我在注册表中创建了一个子项,HKEY_LOCAL_MACHINE\SOFTWARE\MyApp\APIConnector. 当我使用 Visual Studio 的即时窗口加载此子项而没有运行已启动的应用程序时,我可以读取该子项。

但是,当我的应用程序查找 时HKEY_LOCAL_MACHINE\SOFTWARE\MyApp\APIConnector,它找不到它。它甚至找不到HKEY_LOCAL_MACHINE\SOFTWARE\MyApp。好像有不一样的

但是,当我在调试模式下运行应用程序并暂停时,找不到完全相同的代码,HKEY_LOCAL_MACHINE\SOFTWARE\MyApp更不用说HKEY_LOCAL_MACHINE\SOFTWARE\MyApp\APIConnector.

经过一番挖掘,看起来我已经成为注册表虚拟化的受害者。所以我添加了一个清单,使应用程序需要管理员权限(UAC 对话框),但注册表虚拟化仍在发生。微软关于此事的文档声称情况不应该如此。帮助!

0 投票
2 回答
16503 浏览

c++ - 从 32 位应用程序访问 64 位注册表

我需要"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{26A24AE4-039D-4CA4-87B4-2F86416024FF}"在 C++ 中打开一个注册表项。它包含 java 64 位应用程序。该注册表项的完整路径是"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{26A24AE4-039D-4CA4-87B4-2F86416024FF}".

我们可以通过regedit查看这条路径。我用

打开注册表;但它返回错误值 (2)。

返回成功结果。我能做些什么?

0 投票
1 回答
1430 浏览

c# - 从虚拟化注册表读取 Windows 服务

如果我对此有误,请纠正我,因为我确定我在某处读过它:Windows 服务已禁用注册表虚拟化。此外,对 x64 二进制文件禁用了虚拟化。

我有一个用 C# 编写的 Windows 服务,它需要从 HKEY_LOCAL_MACHINE\SOFTWARE 加载一个值。当我将服务编译为 x86 并启动它时,它无法读取该值。当我编译与 x64 相同的代码并启动它时,它读取的值就好了。除了 x64 机器之外,我希望我的服务能够在 x86 机器上运行,但它还需要能够读取此值。如何让我的 Windows 服务读取非虚拟化的值?

0 投票
2 回答
9973 浏览

c# - 为什么注册表写在与预期不同的位置?

我尝试将注册表子项及其对应的值写入注册表,如下所示:

现在的问题是,当我手动(通过 regedit)查看该位置时,我看不到SOFTWARE\Apple\Banana.HKLM

但是当我再次运行上面的代码并调试时,我可以看到两者Registry.LocalMachine.OpenSubKey(subKey)rk.GetValue(regKey)产生之前保存的值。但是我没有通过 regedit 看到给定位置的值。所以在搜索注册表时,我可以在以下位置看到上述键和值:

  1. HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana

  2. HKEY_USERS\S-1-5-21-44266131-1313801407-2392705078-1000\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Apple\Banana

在这两种情况下,值都与我保存的完全相同。所以我意识到这是我的应用程序读取值的地方,尽管在我的代码中我从HKLM\SOFTWARE\Apple\Banana\..

  1. 为什么会这样?它与访问权限问题有关吗?

  2. 这是预期的行为吗?从某种意义上说,这个值对我来说非常重要,所以我只是知道自动重定位是否存在一些风险!

  3. 是否有正确的写入注册表的方法,以便它保留在其确切位置..

我的帐户是管理员一号,我使用的是 32 位 windows 7。

编辑:据我所知,注册表项存储在当前用户位置而不是 HKLM。当我从其他帐户查询 reg 值时,我没有得到该值。简而言之,首先将其保存到 HKLM 是没有意义的 :(

0 投票
2 回答
18991 浏览

windows - KEY_WOW64_32KEY 和 KEY_WOW64_64KEY

除了MSDN 参考,我想知道这些键有什么作用?KEY_WOW64_32KEY是否意味着 x64 操作系统上的 32 位应用程序将访问WOW64 注册表树?KEY_WOW64_64KEY是否意味着 x64 操作系统上的 32 位应用程序将访问正常的注册表树而不是WOW64 注册表树?如果我必须访问一些我不知道是位于 WOW64 还是普通注册表树中的键怎么办?

0 投票
1 回答
1191 浏览

c# - 我可以从非虚拟化应用程序访问 Windows 虚拟商店中的文件和注册表项吗?

我有一个“旧版”XP 应用程序,它在 [ProgramFiles]\[Application] 文件夹中写入文件,并在 HKLM\Software\[Application] 路径中写入注册表项。在 Windows Vista 或 Windows 7 中运行应用程序时,文件和注册表项将写入虚拟存储中。没关系; 它还没有破坏任何东西。

现在,我们已经在 .NET 中重新编写了应用程序。它只在“安全的”用户范围的位置读取和写入文件,我们使用requestedExecutionLevel指定的应用程序清单来禁用注册表虚拟化。

当用户升级到最新版本时,我们希望通过从以前的虚拟化文件和注册表设置中导入设置来保持与旧应用程序的兼容性。

所以,问题是:有没有办法从requestedExecutionLevel清单中指定的应用程序访问虚拟存储中的文件和注册表项?