Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / C++ |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 вперед Ctrl→ все |
Mizer73 Member Откуда: Питер Сообщений: 251 |
Храню в регистре некоторые данные. Пытался хранить в ветке HKCU HKEY_LOCAL_MACHINE; - но там совсем плохо с возможностью записи на некоторых машинах даёт писать в HKEY_CURRENT_USER; а на других - нет как решить проблему доступа к записи в реестр? 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; |
26 дек 20, 00:58 [22254483] Ответить | Цитировать Сообщить модератору |
petrav Member Откуда: Сообщений: 2861 |
Вы уверены, что вам обязательно нужна возможность намусорить в реестр? Может лучше обойтись файлами ini, xml или json? |
26 дек 20, 01:19 [22254488] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52921 |
Путём отладки найти ошибку и исправить. Подсказка: 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 |
||
26 дек 20, 01:20 [22254489] Ответить | Цитировать Сообщить модератору |
petrav Member Откуда: Сообщений: 2861 |
Mizer73, И да, лучше завязать с Борландом. Возьмите православный Qt. |
26 дек 20, 01:21 [22254491] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7650 |
|
||||
26 дек 20, 11:34 [22254561] Ответить | Цитировать Сообщить модератору |
Mizer73 Member Откуда: Питер Сообщений: 251 |
тем не менее - это из практики. не поднял бы эту тему, если бы не столкнулся с этим. Сейчас переделываю все по правилам букварей. Работает. |
||||||||
27 дек 20, 11:37 [22254971] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51019 |
Что значит намусорить? Это штатная возможность Windows архитектур. И ей надо пользоваться. |
||||
27 дек 20, 12:29 [22254987] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52921 |
При её создании не учли пару моментов, включая производительность. Более свежие рекомендации по дизайну приложений обратно рекомендуют файловую систему для хранения информации приложений. Posted via ActualForum NNTP Server 1.5 |
||
27 дек 20, 14:12 [22255032] Ответить | Цитировать Сообщить модератору |
Dima T Member Откуда: Сообщений: 15689 |
Значит SQLite надо юзать. |
||||||
27 дек 20, 14:58 [22255054] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51019 |
Ну реестр не предназначен для хранения баз данных. Свойства разве что. Вопрос с файлами нужно рассмотреть с позиции например администрирования Windows домена с массой пользователей и настройками. И сравнить варианты развертывания на файлах и на реестре. |
||||||
27 дек 20, 15:56 [22255078] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52921 |
Вариант с файлами победит, поскольку их-то можно разогнать на local profile и roaming profile, а вот с реестром это не прокатит. Posted via ActualForum NNTP Server 1.5 |
||
27 дек 20, 16:09 [22255084] Ответить | Цитировать Сообщить модератору |
Mizer73 Member Откуда: Питер Сообщений: 251 |
Dimitry Sibiryakov, столкнулся с проблемой. Этот код проходит нормально 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\\, а дальше они идут друг за другом try { if (!reg2->KeyExists("SOFTWARE\\nsoftware\\RT\\IPBBA2\\")) { reg2->CreateKey("SOFTWARE\\nsoftware\\RT\\IPBBA2\\"); - отрабатывает, reg2->WriteString("RTK", "31500000000000000000000485958303956504A000056465336524A500"); //reg2->WriteString("", "IP"); reg2->WriteString("*", "JZ"); } Сообщение было отредактировано: 27 дек 20, 16:20 |
27 дек 20, 16:24 [22255088] Ответить | Цитировать Сообщить модератору |
Mizer73 Member Откуда: Питер Сообщений: 251 |
на самом деле и это не отрабатывает reg2->WriteBool("Connect", false); reg2->WriteString("pwd", ""); reg2->WriteString("plz", ""); reg2->WriteString("srv", ""); |
||||
27 дек 20, 16:35 [22255095] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52921 |
И это логично, поскольку ты так и не прислушался к советам выше. Какой смысл в продолжении?.. Posted via ActualForum NNTP Server 1.5 |
27 дек 20, 17:40 [22255112] Ответить | Цитировать Сообщить модератору |
Mizer73 Member Откуда: Питер Сообщений: 251 |
Dimitry Sibiryakov, попробуй объяснить |
27 дек 20, 20:22 [22255175] Ответить | Цитировать Сообщить модератору |
Dima T Member Откуда: Сообщений: 15689 |
Mizer73, билдер это дельфи. То что Паскаль заменили на С++ оно не стало С++, |
27 дек 20, 20:43 [22255187] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52921 |
Думаешь, там до него лучше дойдёт, что значения, возвращаемые функциями, надо проверять, а ошибки - протоколировать?.. Posted via ActualForum NNTP Server 1.5 |
||
27 дек 20, 21:11 [22255195] Ответить | Цитировать Сообщить модератору |
mayton Member Откуда: loopback Сообщений: 51019 |
IMHO и AFAIK. Хм... может быть. Еще приведу один довод в пользу реестра. Его API - прост. И действия атомарны. С конфигурациями типа .properties, .ini e.t.c. У вас появляется новый контракт. Нужно проверять валидность файла и иметь третье состояние - файл невалиден (был отредактирован вручную неверно) и принмать какое-то решение. И вообще редко какой разработчик заморачивается с правильным текстовым парсером вследствие чего конфиги могут быть долгое время сломаны но никто об этом не знает т.к. нет механизма проверки их валидности. Тоесть пока вы не упали в явном виде - неизвестно валиден-ли конфиг. Еще довод. На реестре проще следовать принципу Conversion Over Configuration для много-пользовательских систем. Для текстовых конфигов у вас придется дробить крупный файл на россыпь мелких по принципу 1 ключ == 1 текстовый файл что само по себе создает некие неудобства при ведении файлового хозяйства. Дробление может возникать от кастомизации настроек. Чем больше юзер кастомизировал - тем больше дробления. Кроме того значения в реестре - типизированы. Есть булевые значения. Есть числа и так далее. Это все - дополнительные уровни строгости конфигураций. Еще довод. Реестр проще бэкапить и реплицировать. Как с БД у админа будет сфокусировано внимание на одной сущности. А не на тысяче директорий и еще бох его знает надо их бэкапить или нет т.к. в файловой системе обычно создается некий флуд скрытых фолдеров-конфигов которые могут быть не нужны (не релевантны) к ведению админской деятельности. Сообщение было отредактировано: 27 дек 20, 22:37 |
||||||
27 дек 20, 22:42 [22255213] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52921 |
Ну, админы, конечно, бывают разные, но лично у меня одним махом бэкапилось всё дерево роуминговых профилей, а там и данные приложения и документы пользователя и всё остальное (включая реестр ЕМНИП). Posted via ActualForum NNTP Server 1.5 |
||
27 дек 20, 23:02 [22255218] Ответить | Цитировать Сообщить модератору |
Mizer73 Member Откуда: Питер Сообщений: 251 |
Dimitry Sibiryakov, пургу несешь в эфире. |
28 дек 20, 01:01 [22255251] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7650 |
Офф. То регистр это плохо, это миф с 2000х годов. Mizer73, >на самом деле и это не отрабатывает Удалите лишний код. Сделайте минимальный пример с комментарием на строчке ошибки и скрином ошибки. |
28 дек 20, 08:10 [22255294] Ответить | Цитировать Сообщить модератору |
Dima T Member Откуда: Сообщений: 15689 |
Спорный довод. Вся прога вместе в конфигами может жить в одной папке, тогда ее очень легко бэкапить или переносить. С другой стороны есть вирусы-шифровальщики, которые реестр не трогают. Буквально на днях разбирались: админ пишет что наша прога тупит сильно, по логам выясняем что постоянно выполняются тяжелые служебные операции, которые должны раз в сутки ночью отработать. Оказывается админ защитился от шифровальщиков, убрал права на запись в инишник ![]() |
||||
28 дек 20, 08:47 [22255297] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7650 |
Реестр, это всего лишь следующий этап автоматизации после ini. Например, автоматическое создание каждому новому юзверю своей папки...профили. Они не конкурируют а дополняют решения по IT |
28 дек 20, 09:30 [22255313] Ответить | Цитировать Сообщить модератору |
Mizer73 Member Откуда: Питер Сообщений: 251 |
PetroNotC Sharp, имею это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 и пытается его снова создать. Видимо, не определено, где искать этот параметр. |
28 дек 20, 09:42 [22255319] Ответить | Цитировать Сообщить модератору |
PetroNotC Sharp Member Откуда: Сообщений: 7650 |
Mizer73, Поставь перед проверкой if вывод в лог или консоль что там записано. |
28 дек 20, 10:09 [22255330] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 вперед Ctrl→ все |
Все форумы / C++ | ![]() |