使用Qt 5.6.1 C++ 一般情况下,我需要先检查后更改某个参数的现有值。但首先我决定尝试创建一个带值的参数。经过对 Qt 类的长期研究,我编写了以下代码:
QSettings checkinst("HKEY_LOCAL_MACHINE\\SOFTWARE\\MYPROGRAMM", QSettings::NativeFormat);
checkinst.setValue("JustUpdated", 20);
程序编译没有错误。第一行写的路径存在,启动程序前没有这个参数。然后我运行程序,执行给定的代码。但是,此参数不会出现在注册表中。为什么?我究竟做错了什么?
更新。我读取参数并显示它,显示我设置的值,但我在注册表中没有看到它。地址好像有问题,我不知道是什么...
更新2。我想对我创建的参数进行注册表搜索。他被发现了!但以一种完全模糊的方式:
HKEY_CLASSES_ROOT\VirtualStore\Machine\Software\Wow6432Node\Myprogram
这条路是什么,从哪里来的?我毕竟指定了其他方式。
https://990x.top/virtualstore-chto-eto-za-papka-i-mozhno-li-ee-udalit.html
这是对这条路径的来源的一个相当有趣的描述。在这种情况下,如果程序以管理员身份运行,则路径将是代码中指定的路径。为了没有区别,最好立即在代码中指定此部分的路径。
更新。从网站中提取。
一些程序希望将其数据存储在诸如 Program Files、Windows 之类的文件夹中。他们可能还希望将数据写入系统注册表项。Windows 坦率地说不喜欢这样,它开始使用虚拟化技术(这似乎意味着 UAC,但我可能错了)。
一切如何运作?看,程序要写入数据,例如,到这个文件夹:
C:\Windows
但是 Windows 会悄悄地把写请求重定向到这里:
C:\Users\用户名\AppData\Local\VirtualStore\Windows
你明白吗?程序会认为一切都是一堆,它将数据写入Windows文件夹,虽然它是这样的,但Windows文件夹本身位于VirtualStore文件夹中..
这同样适用于注册表,例如,如果程序想要在此处写入数据:
HKLM\软件
然后 Windows 会悄悄地把整个事情重定向到这里:
HKLM\软件\类\虚拟商店