c++ - 带有 RRF_RT_REG_SZ 的 RegSetValueEx 在注册表中生成 REG_EXPAND_SZ?

标签 c++ winapi types registry

标题几乎说明了一切,当我尝试使用 RegSetValueEx 制作一个 REG_SZ 大小的条目时,我得到一个 REG_EXPAND_SZ 当我看看注册表。

这是我正在使用的代码

const char REG_KEY_PATH[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
const char REG_VALUE_NAME[] = "Scroff";

// Get where the app lives
char appLoc[MAX_PATH];
GetModuleFileNameA(NULL, appLoc, MAX_PATH);

// Create the key value
HKEY regKey = 0;
RegCreateKeyExA(HKEY_LOCAL_MACHINE, REG_KEY_PATH, 0, NULL, 
                REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE | KEY_WOW64_64KEY, 
                NULL, &regKey, NULL);

RegSetValueExA(regKey, REG_VALUE_NAME, 0, RRF_RT_REG_SZ, (unsigned char*)appLoc, strlen(appLoc));

代码有效,但注册表类型不是 REG_SZ,而是 REG_EXPAND_SZ。为什么会这样,我该如何解决?

我在 Windows 10 上运行,使用 VS 2015 Enterprise。

谢谢。

最佳答案

您需要将 REG_SZ 标志作为 RegSetValueEx() 的第四个参数传递,以创建一个 REG_SZ 值。 RRF_RT_XXX 标志仅对 RegGetValue() 有效。

您的代码正在创建一个 REG_EXPAND_SZ 值,因为 RRF_RT_REG_SZ 标志的值为 2,恰好与 REG_EXPAND_SZ 的值相同旗帜。

关于c++ - 带有 RRF_RT_REG_SZ 的 RegSetValueEx 在注册表中生成 REG_EXPAND_SZ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38046152/

相关文章:

Delphi TPath.GetTempPath 结果被裁剪

windows - 访问非常长的文件名的 ntfs 流失败

objective-c - 返回不可变对象(immutable对象)的首选方式

variables - 检查Flask中Jinja2内部的变量类型

C++/QT - 通过 QByteArray 将数据转换为不同的格式不同于读入结构

c# - 如何以编程方式查找 Windows 上的事件安全提供程序?

c++ - 获取二进制指令的内存地址

mysql - 如何修改现有列的数据类型?

c++ - 如何按特定单元格对二维数组进行快速排序?

c++ - 为什么在以下代码中调用析构函数?