Гость
Форумы / C++ [игнор отключен] [закрыт для гостей] / Запись в реестр / 25 сообщений из 140, страница 1 из 6
26.12.2020, 00:58
    #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
26.12.2020, 01:19
    #40031307
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись в реестр
Вы уверены, что вам обязательно нужна возможность намусорить в реестр? Может лучше обойтись файлами ini, xml или json?
...
Рейтинг: 0 / 0
26.12.2020, 01:20
    #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
26.12.2020, 01:21
    #40031310
petrav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись в реестр
Mizer73,

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

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

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

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

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

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

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

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

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

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

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

Вариант с файлами победит, поскольку их-то можно разогнать на local profile и roaming
profile, а вот с реестром это не прокатит.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.12.2020, 16:24
    #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
27.12.2020, 16:35
    #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
27.12.2020, 17:40
    #40031620
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись в реестр
И это логично, поскольку ты так и не прислушался к советам выше. Какой смысл в продолжении?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.12.2020, 20:22
    #40031633
Mizer73
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись в реестр
Dimitry Sibiryakov,
попробуй объяснить
...
Рейтинг: 0 / 0
27.12.2020, 20:43
    #40031636
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись в реестр
Mizer73, билдер это дельфи. То что Паскаль заменили на С++ оно не стало С++, болячки компоненты какие были, те и остались. Спрашивай в форуме по Дельфи, оно им понятней.
...
Рейтинг: 0 / 0
27.12.2020, 21:11
    #40031639
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись в реестр
Dima TСпрашивай в форуме по Дельфи, оно им понятней.

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

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

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

IMHO и AFAIK.

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

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

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

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

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

С другой стороны есть вирусы-шифровальщики, которые реестр не трогают.
Буквально на днях разбирались: админ пишет что наша прога тупит сильно, по логам выясняем что постоянно выполняются тяжелые служебные операции, которые должны раз в сутки ночью отработать. Оказывается админ защитился от шифровальщиков, убрал права на запись в инишник , а прога пытается писать туда дату последнего запуска.
...
Рейтинг: 0 / 0
28.12.2020, 09:30
    #40031694
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись в реестр
Реестр, это всего лишь следующий этап автоматизации после ini.
Например, автоматическое создание каждому новому юзверю своей папки...профили.
Они не конкурируют а дополняют решения по IT
...
Рейтинг: 0 / 0
28.12.2020, 09:42
    #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
28.12.2020, 10:09
    #40031700
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись в реестр
Mizer73,
Поставь перед проверкой if вывод в лог или консоль что там записано.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Запись в реестр / 25 сообщений из 140, страница 1 из 6
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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