Форум программистов, компьютерный форум CyberForum.ru

Очередная запись в реестр - изменения не вносятся - C++

Восстановить пароль Регистрация
 
Nelkor
20 / 20 / 4
Регистрация: 05.12.2013
Сообщений: 215
04.07.2014, 19:25     Очередная запись в реестр - изменения не вносятся #1
Всем привет!
Столкнулся с такой проблемой - вот код на C++:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <Windows.h>
 
int WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    char* keyPath = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon";
    char* szString = "test string"; //C:\Windows\system32\userinit.exe, C:\Windows\Setup\State\Block.exe
 
    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" , а это значит, что она открывает ключ, изменяет его значение и закрывает ключ без ошибок. НО! Ничего не происходит, изменений в реестре по указанному ключу нет
Я вообще ничего не понимаю
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4260 / 3691 / 1243
Регистрация: 14.04.2014
Сообщений: 14,458
04.07.2014, 19:51     Очередная запись в реестр - изменения не вносятся #2
А права на запись туда есть?
Nelkor
20 / 20 / 4
Регистрация: 05.12.2013
Сообщений: 215
04.07.2014, 20:01  [ТС]     Очередная запись в реестр - изменения не вносятся #3
Ну руками я могу туда вписать, это означает, что есть права? В принципе, чем программные средства отличаются от того, что я могу с этой же учетки сделать руками...

Да и если бы не было прав, разве программа завершалась бы с кодом "0"?
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 981
Регистрация: 02.05.2013
Сообщений: 10,297
Завершенные тесты: 1
04.07.2014, 23:02     Очередная запись в реестр - изменения не вносятся #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Nelkor Посмотреть сообщение
программа завершается с кодом "0" , а это значит, что она открывает ключ, изменяет его значение и закрывает ключ без ошибок. НО! Ничего не происходит, изменений в реестре по указанному ключу нет
Навскидку: Винда 64-битная, а программа 32-битная, значит, все пишется не в
HKLM\SOFTWARE\Microsoft\..., а в HKLM\SOFTWARE\Wow6432Node\Microsoft\...

Добавлено через 48 секунд
Цитата Сообщение от Nelkor Посмотреть сообщение
Ну руками я могу туда вписать, это означает, что есть права?
Не обязательно.
Nelkor
20 / 20 / 4
Регистрация: 05.12.2013
Сообщений: 215
05.07.2014, 10:02  [ТС]     Очередная запись в реестр - изменения не вносятся #5
Цитата Сообщение от Убежденный Посмотреть сообщение
Навскидку: Винда 64-битная, а программа 32-битная, значит, все пишется не в
HKLM\SOFTWARE\Microsoft\..., а в HKLM\SOFTWARE\Wow6432Node\Microsoft\...
Так и есть!

Добавлено через 4 минуты
Однако, несмотря на то, что я экспериментировал с такими ключами, как Userinit и Shell, и оставил их в непотребном виде (ведь я не знал, по какому адресу они располагаются) компьютер после перезагрузки себя вёл нормально. То есть загружаемые файлы всё-таки берутся не из этой Wow6432Node, а из того пути, который без него...

Так что же с этим делать?

Добавлено через 28 минут
Как редактировать тот ключ, который я хочу?
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 981
Регистрация: 02.05.2013
Сообщений: 10,297
Завершенные тесты: 1
05.07.2014, 11:12     Очередная запись в реестр - изменения не вносятся #6
RegOpenKeyEx + KEY_WOW64_64KEY или KEY_WOW64_32KEY.
Nelkor
20 / 20 / 4
Регистрация: 05.12.2013
Сообщений: 215
05.07.2014, 11:26  [ТС]     Очередная запись в реестр - изменения не вносятся #7
Спасибо, но не очень понятно. KEY_WOW64_64KEY где должен быть?

Добавлено через 10 минут
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
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 981
Регистрация: 02.05.2013
Сообщений: 10,297
Завершенные тесты: 1
05.07.2014, 11:29     Очередная запись в реестр - изменения не вносятся #8
Цитата Сообщение от Nelkor Посмотреть сообщение
KEY_WOW64_64KEY где должен быть?
Такие вопросы разрешаются чтением соответствующей страницы MSDN (и проходом по ссылкам):

RegOpenKeyEx function
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Nelkor
20 / 20 / 4
Регистрация: 05.12.2013
Сообщений: 215
05.07.2014, 12:09  [ТС]     Очередная запись в реестр - изменения не вносятся #9
Странные вещи творятся! Использую при сборке стандартные библиотеки Windows, а программа запускается на любом компьютере без всяких DLL.
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 981
Регистрация: 02.05.2013
Сообщений: 10,297
Завершенные тесты: 1
05.07.2014, 12:10     Очередная запись в реестр - изменения не вносятся #10
Цитата Сообщение от Nelkor Посмотреть сообщение
Странные вещи творятся! Использую при сборке стандартные библиотеки Windows, а программа запускается на любом компьютере без всяких DLL.
А что здесь странного ?
Разве это не должно работать именно так ?
Nelkor
20 / 20 / 4
Регистрация: 05.12.2013
Сообщений: 215
05.07.2014, 12:40  [ТС]     Очередная запись в реестр - изменения не вносятся #11
Ну я выше писал. У меня при статической сборке вылазят ошибки, ссылающиеся на функции операций с реестром. Поэтому я использую динамические библиотеки, и обычно в таком случае нужны DLL
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 981
Регистрация: 02.05.2013
Сообщений: 10,297
Завершенные тесты: 1
05.07.2014, 12:45     Очередная запись в реестр - изменения не вносятся #12
Что значит "статическая сборка" в данном случае ? Вообще, какой компилятор,
среда, какие опции сборки ? И про какие именно DLL Вы говорите ?
Nelkor
20 / 20 / 4
Регистрация: 05.12.2013
Сообщений: 215
05.07.2014, 12:51  [ТС]     Очередная запись в реестр - изменения не вносятся #13
Вижуалка... В общем, обычно, когда в свойствах проекта "Использование MFC" стоит не "Использовать MFC в статической библиотеке", то после создание *.exe он при запуске на других ПК требует установки некоторых *.dll файлов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2014, 13:10     Очередная запись в реестр - изменения не вносятся
Еще ссылки по теме:

C++ Запись в реестр обрезается
C++ Очередная формация давно решённой задачи
Выравнивание строк так, что между ее отдельными словами дополнительно вносятся пробелы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Убежденный
Системный программист
 Аватар для Убежденный
14175 / 6190 / 981
Регистрация: 02.05.2013
Сообщений: 10,297
Завершенные тесты: 1
05.07.2014, 13:10     Очередная запись в реестр - изменения не вносятся #14
А каким боком тут вообще MFC ?
У Вас код (первое сообщение темы) не использует и строчки оттуда.
Yandex
Объявления
05.07.2014, 13:10     Очередная запись в реестр - изменения не вносятся
Ответ Создать тему
Опции темы

Текущее время: 20:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru