RegSetValueEx与RRF_RT_REG_SZ在注册表中生成REG_EXPAND_SZ?

Dav*_*vid 1 c++ registry winapi types

标题几乎说明了一切,当我尝试使用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));
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢.

Kap*_*ade 5

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

您的代码正在创建REG_EXPAND_SZ值,因为该RRF_RT_REG_SZ标志的值为2,这恰好与该REG_EXPAND_SZ标志的值相同.