powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Запись в реестр
25 сообщений из 140, страница 1 из 6
Запись в реестр
    #40031305
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Храню в регистре некоторые данные.
Пытался хранить в ветке HKCU HKEY_LOCAL_MACHINE; - но там совсем плохо с возможностью записи
на некоторых машинах даёт писать в HKEY_CURRENT_USER; а на других - нет
как решить проблему доступа к записи в реестр?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TRegistry *reg = new TRegistry(KEY_ALL_ACCESS); //Создали обьект класса TRegistry
reg->RootKey = HKEY_CURRENT_USER;	//присваивание объекту 'reg' пути HKCU HKEY_LOCAL_MACHINE;   //
reg->OpenKey("Software\\йцукr", true);
if (reg)
{	
	reg->WriteBool("Connect", true);
	reg->WriteString("pwd", Edit3->Text);
	reg->WriteString("plz", Edit2->Text);
	reg->WriteString("srv", Edit1->Text);
}
if (reg) delete reg;
...
Рейтинг: 0 / 0
Запись в реестр
    #40031307
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы уверены, что вам обязательно нужна возможность намусорить в реестр? Может лучше обойтись файлами ini, xml или json?
...
Рейтинг: 0 / 0
Запись в реестр
    #40031308
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73как решить проблему доступа к записи в реестр?

Путём отладки найти ошибку и исправить. Подсказка: OpenKey это функция, возвращающая
значение.
http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Registry_TRegistry_OpenKey.html

HKEY_CURRENT_USER по определению доступен для записи текущему пользователю.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись в реестр
    #40031310
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73,

И да, лучше завязать с Борландом. Возьмите православный Qt.
...
Рейтинг: 0 / 0
Запись в реестр
    #40031347
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73
а на других - нет
не верю
...
Рейтинг: 0 / 0
Запись в реестр
    #40031541
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Mizer73
а на других - нет
не верю

тем не менее - это из практики.
не поднял бы эту тему, если бы не столкнулся с этим.
Сейчас переделываю все по правилам букварей. Работает.
...
Рейтинг: 0 / 0
Запись в реестр
    #40031552
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Вы уверены, что вам обязательно нужна возможность намусорить в реестр? Может лучше обойтись файлами ini, xml или json?

Что значит намусорить? Это штатная возможность Windows архитектур. И ей надо пользоваться.
...
Рейтинг: 0 / 0
Запись в реестр
    #40031579
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЭто штатная возможность Windows архитектур. И ей надо пользоваться.

При её создании не учли пару моментов, включая производительность. Более свежие
рекомендации по дизайну приложений обратно рекомендуют файловую систему для хранения
информации приложений.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись в реестр
    #40031597
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

maytonЭто штатная возможность Windows архитектур. И ей надо пользоваться.

При её создании не учли пару моментов, включая производительность. Более свежие
рекомендации по дизайну приложений обратно рекомендуют файловую систему для хранения
информации приложений.

Значит SQLite надо юзать.
...
Рейтинг: 0 / 0
Запись в реестр
    #40031608
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

maytonЭто штатная возможность Windows архитектур. И ей надо пользоваться.

При её создании не учли пару моментов, включая производительность. Более свежие
рекомендации по дизайну приложений обратно рекомендуют файловую систему для хранения
информации приложений.

Ну реестр не предназначен для хранения баз данных. Свойства разве что.
Вопрос с файлами нужно рассмотреть с позиции например администрирования
Windows домена с массой пользователей и настройками.

И сравнить варианты развертывания на файлах и на реестре.
...
Рейтинг: 0 / 0
Запись в реестр
    #40031612
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИ сравнить варианты развертывания на файлах и на реестре.

Вариант с файлами победит, поскольку их-то можно разогнать на local profile и roaming
profile, а вот с реестром это не прокатит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись в реестр
    #40031613
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

столкнулся с проблемой. Этот код проходит нормально

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TRegistry* reg2 = new TRegistry(KEY_ALL_ACCESS);
		reg2->RootKey = HKEY_LOCAL_MACHINE;
		reg2->Access = KEY_WRITE;
		if (!reg2->KeyExists("Software\\Extra\\"))
		{
			reg2->CreateKey("Software\\Extra\\");
			reg2->WriteBool("Connect", false);
			reg2->WriteString("pwd", "");
			reg2->WriteString("plz", "");
			reg2->WriteString("srv", "");
		}


а в этом коде создаётся только заголовок SOFTWARE\\nsoftware\\RT\\IPBBA2\\, а дальше
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
они идут друг за другом
try
		{
			if (!reg2->KeyExists("SOFTWARE\\nsoftware\\RT\\IPBBA2\\"))
			{
				reg2->CreateKey("SOFTWARE\\nsoftware\\RT\\IPBBA2\\"); - отрабатывает, 

				reg2->WriteString("RTK", "31500000000000000000000485958303956504A000056465336524A500");
				//reg2->WriteString("", "IP");
				reg2->WriteString("*", "JZ");

			}
...
Рейтинг: 0 / 0
Запись в реестр
    #40031614
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mizer73
Dimitry Sibiryakov,

столкнулся с проблемой. Этот код проходит нормально

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TRegistry* reg2 = new TRegistry(KEY_ALL_ACCESS);
		reg2->RootKey = HKEY_LOCAL_MACHINE;
		reg2->Access = KEY_WRITE;
		if (!reg2->KeyExists("Software\\Extra\\"))
		{
			reg2->CreateKey("Software\\Extra\\");
			reg2->WriteBool("Connect", false);
			reg2->WriteString("pwd", "");
			reg2->WriteString("plz", "");
			reg2->WriteString("srv", "");
		}


а в этом коде создаётся только заголовок SOFTWARE\\nsoftware\\RT\\IPBBA2\\, а дальше
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
они идут друг за другом
try
		{
			if (!reg2->KeyExists("SOFTWARE\\nsoftware\\RT\\IPBBA2\\"))
			{
				reg2->CreateKey("SOFTWARE\\nsoftware\\RT\\IPBBA2\\"); - отрабатывает, 

				reg2->WriteString("RTK", "31500000000000000000000485958303956504A000056465336524A500");
				//reg2->WriteString("", "IP");
				reg2->WriteString("*", "JZ");

			}


на самом деле и это не отрабатывает

Код: plaintext
1.
2.
3.
4.
reg2->WriteBool("Connect", false);
reg2->WriteString("pwd", "");
reg2->WriteString("plz", "");
reg2->WriteString("srv", "");
...
Рейтинг: 0 / 0
Запись в реестр
    #40031620
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И это логично, поскольку ты так и не прислушался к советам выше. Какой смысл в продолжении?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись в реестр
    #40031633
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
попробуй объяснить
...
Рейтинг: 0 / 0
Запись в реестр
    #40031636
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73, билдер это дельфи. То что Паскаль заменили на С++ оно не стало С++, болячки компоненты какие были, те и остались. Спрашивай в форуме по Дельфи, оно им понятней.
...
Рейтинг: 0 / 0
Запись в реестр
    #40031639
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TСпрашивай в форуме по Дельфи, оно им понятней.

Думаешь, там до него лучше дойдёт, что значения, возвращаемые функциями, надо проверять, а
ошибки - протоколировать?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись в реестр
    #40031646
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

maytonИ сравнить варианты развертывания на файлах и на реестре.

Вариант с файлами победит, поскольку их-то можно разогнать на local profile и roaming
profile, а вот с реестром это не прокатит.

IMHO и AFAIK.

Хм... может быть. Еще приведу один довод в пользу реестра. Его API - прост. И действия атомарны.
С конфигурациями типа .properties, .ini e.t.c. У вас появляется новый контракт. Нужно проверять валидность
файла и иметь третье состояние - файл невалиден (был отредактирован вручную неверно) и принмать
какое-то решение. И вообще редко какой разработчик заморачивается с правильным текстовым парсером
вследствие чего конфиги могут быть долгое время сломаны но никто об этом не знает т.к. нет механизма проверки
их валидности. Тоесть пока вы не упали в явном виде - неизвестно валиден-ли конфиг.

Еще довод. На реестре проще следовать принципу Conversion Over Configuration для много-пользовательских систем.
Для текстовых конфигов у вас придется дробить крупный файл на россыпь мелких по принципу 1 ключ == 1 текстовый
файл что само по себе создает некие неудобства при ведении файлового хозяйства. Дробление может возникать от
кастомизации настроек. Чем больше юзер кастомизировал - тем больше дробления. Кроме того значения в реестре - типизированы.
Есть булевые значения. Есть числа и так далее. Это все - дополнительные уровни строгости конфигураций.

Еще довод. Реестр проще бэкапить и реплицировать. Как с БД у админа будет сфокусировано внимание на одной сущности. А не на тысяче
директорий и еще бох его знает надо их бэкапить или нет т.к. в файловой системе обычно создается некий флуд скрытых
фолдеров-конфигов которые могут быть не нужны (не релевантны) к ведению админской деятельности.
...
Рейтинг: 0 / 0
Запись в реестр
    #40031648
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonКак с БД у админа будет сфокусировано внимание на одной сущности.

Ну, админы, конечно, бывают разные, но лично у меня одним махом бэкапилось всё дерево
роуминговых профилей, а там и данные приложения и документы пользователя и всё остальное
(включая реестр ЕМНИП).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запись в реестр
    #40031667
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
пургу несешь в эфире.
...
Рейтинг: 0 / 0
Запись в реестр
    #40031689
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Офф. То регистр это плохо, это миф с 2000х годов.
Mizer73,
>на самом деле и это не отрабатывает
Удалите лишний код.
Сделайте минимальный пример с комментарием на строчке ошибки и скрином ошибки.
...
Рейтинг: 0 / 0
Запись в реестр
    #40031690
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Еще довод. Реестр проще бэкапить и реплицировать. Как с БД у админа будет сфокусировано внимание на одной сущности. А не на тысяче
директорий и еще бох его знает надо их бэкапить или нет т.к. в файловой системе обычно создается некий флуд скрытых
фолдеров-конфигов которые могут быть не нужны (не релевантны) к ведению админской деятельности.

Спорный довод. Вся прога вместе в конфигами может жить в одной папке, тогда ее очень легко бэкапить или переносить.

С другой стороны есть вирусы-шифровальщики, которые реестр не трогают.
Буквально на днях разбирались: админ пишет что наша прога тупит сильно, по логам выясняем что постоянно выполняются тяжелые служебные операции, которые должны раз в сутки ночью отработать. Оказывается админ защитился от шифровальщиков, убрал права на запись в инишник , а прога пытается писать туда дату последнего запуска.
...
Рейтинг: 0 / 0
Запись в реестр
    #40031694
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реестр, это всего лишь следующий этап автоматизации после ini.
Например, автоматическое создание каждому новому юзверю своей папки...профили.
Они не конкурируют а дополняют решения по IT
...
Рейтинг: 0 / 0
Запись в реестр
    #40031695
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp, имею это

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
TRegistry* reg2 = new TRegistry(KEY_ALL_ACCESS);
		reg2->RootKey = HKEY_LOCAL_MACHINE;
 g63:
		if (!reg2->KeyExists("Software\\ExtraMaster\\"))
		{
			reg2->CreateKey("Software\\ExtraMaster\\");
			goto g63;
		}
	/*	bool openResult = reg2->("Software\\ExtraMaster\\", true);
		if(!openResult)
		{
			MessageDlg("Unable to create key! Exiting.", mtError, TMsgDlgButtons() << mbOK, 0);
			Application->Terminate();
		} */
		if (!reg2->ValueExists("Connect"))
			reg2->WriteBool("Connect", false);
		if (!reg2->ValueExists("pwd"))
			reg2->WriteString("pwd", "");
		if (!reg2->ValueExists("plz"))
			reg2->WriteString("plz", "");
		if (!reg2->ValueExists("svr"))
			reg2->WriteString("srv", "");
		reg2->CloseKey();
		delete reg2;



вся ветка нормально записано в реестре, но...
при выполнении данного кода, это строка if (!reg2->ValueExists("Connect")) не определяет наличие параметра Connect и пытается его снова создать. Видимо, не определено, где искать этот параметр.
...
Рейтинг: 0 / 0
Запись в реестр
    #40031700
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73,
Поставь перед проверкой if вывод в лог или консоль что там записано.
...
Рейтинг: 0 / 0
25 сообщений из 140, страница 1 из 6
Форумы / C++ [игнор отключен] [закрыт для гостей] / Запись в реестр
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]