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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Nelkor
20 / 20 / 4
Регистрация: 05.12.2013
Сообщений: 215
#1

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

04.07.2014, 19:25. Просмотров 812. Ответов 13
Метки нет (Все метки)

Всем привет!
Столкнулся с такой проблемой - вот код на 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" , а это значит, что она открывает ключ, изменяет его значение и закрывает ключ без ошибок. НО! Ничего не происходит, изменений в реестре по указанному ключу нет
Я вообще ничего не понимаю
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2014, 19:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Очередная запись в реестр - изменения не вносятся (C++):

Запись в реестр - C++
Здравствуйте, подскажите как мне сделать что бы программа прописала значение в реестре. Пишу для консоли.

Запись в реестр - C++
Создал CLR приложение...добавил файл Settings.h и засунул туда следующий код void SaveSet() { HKEY hKey=0; ...

Запись в реестр обрезается - C++
Всем привет. Пишу программку, которая записывает в реестр указанные пути к файлам. Код такой. struct vec { ... int length;//длина...

Очередная сортировка структуры - C++
Подобных вопросов были тонны, и тонны еще будут. Есть прога, кривая и написанная собственноручно. Написать ее ума хватило, а вот чтоб...

Очередная сортировка пузырьком - C++
Здравствуйте! :) Нашёл я сортировку пузырьком на Википедии: void bubble_sort(int *a, int length) { for (int i = 0; i &lt;=...

Выравнивание строк так, что между ее отдельными словами дополнительно вносятся пробелы - C++
Выравнивание строки заключается в том, что между ее отдельными словами дополнительно вносятся пробелы так,чтобы длина строки стала равной...

13
nmcf
5353 / 4673 / 1564
Регистрация: 14.04.2014
Сообщений: 18,616
04.07.2014, 19:51 #2
А права на запись туда есть?
0
Nelkor
20 / 20 / 4
Регистрация: 05.12.2013
Сообщений: 215
04.07.2014, 20:01  [ТС] #3
Ну руками я могу туда вписать, это означает, что есть права? В принципе, чем программные средства отличаются от того, что я могу с этой же учетки сделать руками...

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

Добавлено через 48 секунд
Цитата Сообщение от Nelkor Посмотреть сообщение
Ну руками я могу туда вписать, это означает, что есть права?
Не обязательно.
1
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 минут
Как редактировать тот ключ, который я хочу?
0
Убежденный
Системный программист
Эксперт С++
15689 / 7199 / 1137
Регистрация: 02.05.2013
Сообщений: 11,634
Записей в блоге: 1
Завершенные тесты: 1
05.07.2014, 11:12 #6
RegOpenKeyEx + KEY_WOW64_64KEY или KEY_WOW64_32KEY.
0
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
0
Убежденный
Системный программист
Эксперт С++
15689 / 7199 / 1137
Регистрация: 02.05.2013
Сообщений: 11,634
Записей в блоге: 1
Завершенные тесты: 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
0
Nelkor
20 / 20 / 4
Регистрация: 05.12.2013
Сообщений: 215
05.07.2014, 12:09  [ТС] #9
Странные вещи творятся! Использую при сборке стандартные библиотеки Windows, а программа запускается на любом компьютере без всяких DLL.
0
Убежденный
Системный программист
Эксперт С++
15689 / 7199 / 1137
Регистрация: 02.05.2013
Сообщений: 11,634
Записей в блоге: 1
Завершенные тесты: 1
05.07.2014, 12:10 #10
Цитата Сообщение от Nelkor Посмотреть сообщение
Странные вещи творятся! Использую при сборке стандартные библиотеки Windows, а программа запускается на любом компьютере без всяких DLL.
А что здесь странного ?
Разве это не должно работать именно так ?
0
Nelkor
20 / 20 / 4
Регистрация: 05.12.2013
Сообщений: 215
05.07.2014, 12:40  [ТС] #11
Ну я выше писал. У меня при статической сборке вылазят ошибки, ссылающиеся на функции операций с реестром. Поэтому я использую динамические библиотеки, и обычно в таком случае нужны DLL
0
Убежденный
Системный программист
Эксперт С++
15689 / 7199 / 1137
Регистрация: 02.05.2013
Сообщений: 11,634
Записей в блоге: 1
Завершенные тесты: 1
05.07.2014, 12:45 #12
Что значит "статическая сборка" в данном случае ? Вообще, какой компилятор,
среда, какие опции сборки ? И про какие именно DLL Вы говорите ?
0
Nelkor
20 / 20 / 4
Регистрация: 05.12.2013
Сообщений: 215
05.07.2014, 12:51  [ТС] #13
Вижуалка... В общем, обычно, когда в свойствах проекта "Использование MFC" стоит не "Использовать MFC в статической библиотеке", то после создание *.exe он при запуске на других ПК требует установки некоторых *.dll файлов.
0
Убежденный
Системный программист
Эксперт С++
15689 / 7199 / 1137
Регистрация: 02.05.2013
Сообщений: 11,634
Записей в блоге: 1
Завершенные тесты: 1
05.07.2014, 13:10 #14
А каким боком тут вообще MFC ?
У Вас код (первое сообщение темы) не использует и строчки оттуда.
0
05.07.2014, 13:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2014, 13:10
Привет! Вот еще темы с ответами:

После изменения GridView не вносятся изменения в БД - C# ASP.NET
Значит есть GridView подсоединенный к DataSource, который в свою очередь подсоединен к БД. Данные выводятся, удаляются, но не обновляются. ...

Как сделать запись в реестр win7 64. В реестр попадает только последняя запись - C#
Добрый вечер! Не могу сделать запись в реестр win7 64. Microsoft.Win32.RegistryKey hklm = Microsoft.Win32.Registry.LocalMachine; ...

MS Access Не вносятся изменения в базу - Delphi БД
Здравствуйте! Помогите пожалуйста.Пишу курсовик сделала программу в делфи, подключила базу Аксесс. При попытке добавить новую запись в базу...

Не вносятся изменения в проект - C#
Обычно не пользуюсь Visual Studio но тут пришлось делать задание. Вроде бы все работает, но теперь когда я вношу изменения в код и...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru