c++不能在注册表中创建新键

C++ cannot create new key in registry

本文关键字:创建 新键 注册表 不能 c++      更新时间:2023-10-16

我真的需要你的帮助。我什么都试过了,但结果总是一样,什么都没有。请建议。

这是我的代码
#include <windows.h>
#include <iostream>
#include <windef.h>
using namespace std;
int main (void)
{
    HKEY hKey;
    LONG regOpenResult;
    const char PATH[] = "C:\Users\les\Documents\visual studio 2010\Projects\registryTester\Debug\registryTester.exe";
    RegCreateKeyExW(HKEY_LOCAL_MACHINE,
            L"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
            0,
            NULL,REG_OPTION_VOLATILE,
            KEY_SET_VALUE,
            NULL,
            &hKey,
            NULL
    );
    RegSetValueExW(hKey, L"regTest", 0, REG_SZ, (BYTE*)PATH, strlen(PATH));
    RegCloseKey(hKey);
}

您正在使用unicode版本的RegSetValueEx,但传递它一个char*字符串。您应该将PATH的声明更改为:

const wchar_t PATH[] = L"C:\Users\les\Documents\visual studio 2010\Projects\registryTester\Debug\registryTester.exe";

和使用wcslen代替strlen,因为它是一个wchar_t字符串。因为它是以字节(而不是字符)为单位测量的,并且需要包含空终止符,所以size参数应该是wcslen(PATH)*2+2

检查每个API调用的返回状态!!!!对于每次失败使用GetLastError()。

知道错误应该引导你解决问题。

否则,你就完全瞎了…

是的,如果你调用16位Unicode API, PATH不应该是8位字符串。但这并不是唯一的问题。

是的,如果你使用的是Vista、Windows 7或更高版本,"权限"绝对是一个问题。