Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2014, 20:56   #1
Nelkor
Пользователь
 
Регистрация: 04.07.2014
Сообщений: 10
Восклицание Запись в реестр, код есть

Всем привет!
Столкнулся с такой проблемой - вот код на C++:

Код:
#include <Windows.h>
 
int WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    char* keyPath = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon";
    char* szString = "test string";
 
    HKEY hKey;
 
    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, keyPath, 0, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS) return 1;
    if (RegSetValueEx(hKey, "Shell", 0, REG_SZ, (BYTE*)szString, sizeof(szString)) != ERROR_SUCCESS) return 2;
    if (RegCloseKey(hKey) != ERROR_SUCCESS) return 3;
    
    return 0;
}
И он не работает! А что самое интересное - программа завершается с кодом "0" , а это значит, что она открывает ключ, изменяет его значение и закрывает ключ без ошибок. НО! Ничего не происходит, изменений в реестре по указанному ключу нет
Я вообще ничего не понимаю

Прав должно хватать, ибо руками со своей учетки я могу там менять значения. Да и если бы не хватало прав, программа бы не завершалась с кодом "0".
Nelkor вне форума Ответить с цитированием
Старый 04.07.2014, 21:11   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
sizeof(szString)
Даст 4. У тебя ж указатель. Тут наверное уместнее strlen() использовать
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.07.2014, 22:01   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

а еще лучше - strlen() + 1, чтоб записался и нолик в конце.
waleri вне форума Ответить с цитированием
Старый 05.07.2014, 09:36   #4
Nelkor
Пользователь
 
Регистрация: 04.07.2014
Сообщений: 10
По умолчанию

Огромное спасибо, хоть это и не решает мою проблему) Но хотя бы эту ошибку я исправил)
Nelkor вне форума Ответить с цитированием
Старый 05.07.2014, 10:24   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Два вопроса:
1. ОС какая? разрядность?
2. Вы пытаетесь писать в HKEY_LOCAL_MACHINE без поднятия прав?
p51x вне форума Ответить с цитированием
Старый 05.07.2014, 11:04   #6
Nelkor
Пользователь
 
Регистрация: 04.07.2014
Сообщений: 10
По умолчанию

1. 64-разрядная
2. Да) а как их поднимать?

UPDATE!

У меня всё работает, НО только с динамическими библиотеками. При статической сборке:
Цитата:
Ошибка 2 error LNK2001: неразрешенный внешний символ "__imp_RegSetValueExA" D:\Cpp Projects\adder1\main.obj
Ошибка 3 error LNK2001: неразрешенный внешний символ "__imp_RegOpenKeyExA" D:\Cpp Projects\adder1\main.obj
Ошибка 4 error LNK2001: неразрешенный внешний символ "__imp_RegCloseKey" D:\Cpp Projects\adder1\main.obj
Почему это происходит и как это исправить?

P.S. Скомпоновал программу, как х64

Странные вещи творятся! Использую при сборке стандартные библиотеки Windows, а программа запускается на любом компьютере без всяких DLL.

Последний раз редактировалось Stilet; 05.07.2014 в 12:23.
Nelkor вне форума Ответить с цитированием
Старый 05.07.2014, 12:24   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Использую при сборке стандартные библиотеки Windows, а программа запускается на любом компьютере без всяких DLL.
А что тут странного?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.07.2014, 15:15   #8
AbakBarama
Пользователь
 
Регистрация: 12.05.2011
Сообщений: 57
По умолчанию

Цитата:
Сообщение от Nelkor Посмотреть сообщение
64-разрядная
Думаю, эта статья будет полезна.
AbakBarama на форуме Ответить с цитированием
Старый 05.07.2014, 17:07   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от Nelkor Посмотреть сообщение
Использую при сборке стандартные библиотеки Windows, а программа запускается на любом компьютере без всяких DLL.
Стандартные библиотеки Windows есть на каждой Windows. Не путайте их с С/С++ библиотеками, которые надо ставить и которыми вы (в данном примере) не пользуетесь.

Насчет привилегий - запускайте программу как администратор (run as administrator в меню) либо добавьте манифест, в котором будет указано, что программе нужны административные привилегии.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись в реестр AlexDn Общие вопросы Delphi 3 13.02.2014 23:10
Запись в реестр Stayders Win Api 1 26.03.2012 11:08
Запись в реестр dmitriegorovih Общие вопросы Delphi 6 26.02.2011 14:39
Запись в реестр zotox Win Api 7 31.10.2010 21:36
Запись в реестр arxidevill Общие вопросы Delphi 4 13.05.2010 00:29