Взаимодействие софта между собой и хранить настройки в 64 (и 32)-битном приложениях в реестре, правильно ли?
Написал 2 софтины (служба и клиентское приложение) на платформе 32-бит. Они общаются через реестр, ибо решил возложить на систему проблему совместного и одновременного доступа к настройкам этого хозяйства. Работают в таком ключе - клиентское ПО по запросу пользователя , что-то меняет в реестре (настройки), служба мониторит и дальше работает с новыми параметрами.
Наелся с этим...
1) Проблема при старте системы служба не может прочитать реестр, она стартует раньше чем входит пользователь (который может и не войти), причем иногда может прочитать, иногда нет. А допустим нужно получить какие-то настройки уже сразу, но реестр в ауте.. Что тут можно сделать?
2) где вообще лучше хранить настройки, чтобы имелся одновременный доступ к ним из разных программ на чтение и запись?
В винде сейчас виртуализация как реестра так и programmfiles.
Так что папка Temp вам в руки (из системной переменной вытягивается путь). Если кончено не слишком критично потерять настройки после очистки CCleaner'ом.
И HKLM совсем плохое решение из за прав... Лучше уж HKCU если сервис стартует не от системной учетки.
По-моему, лучше будет доделать софт до полноценного клиент-серверного приложения. И это общение через файлы или реестр вообще исключить. Настройки читать/писать будет только сервер, туда, куда ему позволено. А клиент будет подключаться к нему и давать указание изменить тот или иной параметр.
Che_Bu_Rashka: А так и гуглить "delphi клиент-серверное приложение пример" Будет конечно много ссылок применительно к базам данных, это не совсем то. А вот остальное, что-нибудь про сокеты, уже можно смотреть.
Но ведь тогда для этих 2=х локально работающих программ нужно будет открывать порт, ибо сокет - это ip/порт. Если я не ошибаюсь... А зачем открывать порты для локальных программ? Или я что-то не понял в сокетах?
Che_Bu_Rashka: Всё так. Просто ситуация, когда обе программы работают на одном компьютере, это частный случай. Могут и на разных. Тут уж всё зависит от особенностей и потребностей приложения. В плане общения между процессами можете ещё на Named Pipes поглядеть. Может они Вам лучше подойдут. Вот например статья, где они уже в готовые компоненты обёрнуты: Обмен данными между процессами в Delphi XE3