C ++ не может создать новый ключ в реестре - PullRequest
1 голос
/ 26 сентября 2011

Мне действительно нужна твоя помощь.Я перепробовал все, но результат всегда один и тот же, ничего.Пожалуйста, сообщите.

А это мой код

#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);
}

Ответы [ 2 ]

4 голосов
/ 26 сентября 2011

Вы используете 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. Поскольку он измеряется в байтах (не символах) и должен содержать нулевой терминатор, параметр размера должен быть wcslen(PATH)*2+2.

2 голосов
/ 26 сентября 2011

Проверьте статус возврата каждого вызова API !!!!Используйте GetLastError () для каждой ошибки.

Знание ошибки должно привести к решению проблемы.

В противном случае вы будете полностью слепым ...

ДаPATH не должен быть 8-битной символьной строкой, если вы вызываете 16-битный Unicode API.Но это не обязательно единственная проблема.

И да, «разрешения» вполне могут быть проблемой, если вы используете Vista, Windows 7 или выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...