Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 053

/ вопрос открыт /

Приветствую, уважаемые эксперты! Скажите пож-ста у меня такой вопрос был создан сервис с помощью делфи,
который должен выполнять определенные действия в заданный день. Инф-ция берется с реестра также и путь доступа к БД. Но при работе сервиса не происходит считывание данных с реестра, хотя все делал правильно.

Приложение:
  1. procedure TBillingControlService.ServiceExecute(Sender: TService);
  2. var
  3. Today : string;
  4. Year, Month, Day : Word;
  5. Present : TDateTime;
  6. Data : Integer;
  7. Start : String;
  8. f : TextFile;
  9. error : String;
  10. begin
  11. while not Terminated do
  12. begin
  13. error:='';
  14. sleep(1000);
  15. Present:= Now;
  16. DecodeDate(Present, Year, Month, Day);
  17. Data:=(day);
  18. begin
  19. Key:='SoftwareBillingaccess';
  20. Reg:=TRegistry.Create(KEY_ALL_ACCESS);
  21. Reg.RootKey := HKEY_CURRENT_USER;
  22. Reg.OpenKey(Key,False);
  23. If Reg.KeyExists(Key) then
  24. begin
  25. Try
  26. Username:= Reg.ReadString('Username');
  27. Password:= Reg.ReadString('Password');
  28. Server:= Reg.ReadString('Server');
  29. Reg.CloseKey;
  30. Except
  31. Error:='Íåâîçìîæíî ïðî÷èòàòü êëþ÷!!!';
  32. Reg.Free;
  33. end;
  34. end
  35. else
  36. Error:='Íå íàéäåí êëþ÷ â ðååñòðå!!!';
  37. end;
  38. AssignFile(f, 'C:inf.txt');
  39. Append(f);
  40. WriteLn(f, 'Ñåðâåð - ' + Username + password + server + 'Äàòà çàïóñêà - '
  41. + Start + ' Äåíü - ' + IntToStr(Data)+ ' Îøèáêè - ' + error);
  42. CloseFile(f);
  43. ServiceThread.ProcessRequests(False);
  44. end;
  45. end;
  46.  


John Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: John (статус: Посетитель)
Вопрос отправлен: 30 октября 2007, 06:51
Состояние вопроса: открыт, ответов: 2.

Ответ #1. Отвечает эксперт: Косолапов Дмитрий Юрьевич

Здравствуйте, zvialov!
Подозреваю, что дело в Reg.OpenKey(Key,False), тогда как, по всей видимости, должно быть Reg.OpenKey(Key,true) - чтобы ключ создавался, если его нет. В приведенном коде создания ключа не происходит, поэтому если он не создается принудительно где-то еще, то поэтому и не работает.

Ответ отправил: Косолапов Дмитрий Юрьевич (статус: 8-ой класс)
Время отправки: 30 октября 2007, 08:44

Ответ #2. Отвечает эксперт: Вадим К

Здравствуйте, zvialov!
А ошибка на самом деле зарыта значительно глубже, в непонимании принципов работы Windows. Дело в том, что по умолчанию, сервис запускается от имени другого пользователя (от имени системы) и ветка реестра (куст, если быть точным) HKEY_CURRENT_USER для него другая.
Для устранения этого, надо либо сменить ветку реестра(куст) или сделать ini файлы(кстати, МС снова рекомендует их, ибо загаженность реестра достигла небывалых высот) или запускать сервис с правами текущего пользователя. Это делается просто. В списке служб находите свою, а там в свойствах службы заполняете имя/пароль. Но есть одно но! если у пользователя нет пароля, могут быть неприятности. с реестром не знаю, но в сеть такую службу никто не пустит.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 30 октября 2007, 11:10
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 30 октября 2007, 08:54; участников в обсуждении: 1.
John

John (статус: Посетитель), 30 октября 2007, 08:54 [#1]:

Да, но, в ключи (параметры доступа к серверу) записывает другая совсем программа, на этом этапе мне необходимо, чтобы сервис смог лишь считать параметры уже записанных заранее данных.
Я всеже попробую как вы сказали. Огромное спасибо!!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 21 октября 2017, 20:31
Выполнено за 0.03 сек.
Рейтинг@Mail.ru