|
Вопрос # 1 053/ вопрос открыт / |
|
Приветствую, уважаемые эксперты! Скажите пож-ста у меня такой вопрос был создан сервис с помощью делфи,
который должен выполнять определенные действия в заданный день. Инф-ция берется с реестра также и путь доступа к БД. Но при работе сервиса не происходит считывание данных с реестра, хотя все делал правильно.
Приложение: Переключить в обычный режим- procedure TBillingControlService.ServiceExecute(Sender: TService);
- var
- Today : string;
- Year, Month, Day : Word;
- Present : TDateTime;
- Data : Integer;
- Start : String;
- f : TextFile;
- error : String;
- begin
- while not Terminated do
- begin
- error:='';
- sleep(1000);
- Present:= Now;
- DecodeDate(Present, Year, Month, Day);
- Data:=(day);
- begin
- Key:='SoftwareBillingaccess';
- Reg:=TRegistry.Create(KEY_ALL_ACCESS);
- Reg.RootKey := HKEY_CURRENT_USER;
- Reg.OpenKey(Key,False);
- If Reg.KeyExists(Key) then
- begin
- Try
- Username:= Reg.ReadString('Username');
- Password:= Reg.ReadString('Password');
- Server:= Reg.ReadString('Server');
- Reg.CloseKey;
- Except
-
Error:='Íåâîçìîæíî
ïðî÷èòàòü
êëþ÷!!!';
- Reg.Free;
- end;
- end
- else
- Error:='Íå íàéäåí
êëþ÷ â
ðååñòðå!!!';
- end;
- AssignFile(f, 'C:inf.txt');
- Append(f);
- WriteLn(f, 'Ñåðâåð - ' + Username +
password + server + 'Äàòà
çàïóñêà - '
- + Start + ' Äåíü - ' + IntToStr(Data)+ '
Îøèáêè - ' + error);
- CloseFile(f);
- ServiceThread.ProcessRequests(False);
- end;
- end;
-
 |
Вопрос задал: John (статус: Посетитель)
Вопрос отправлен: 30 октября 2007, 06:51
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Косолапов Дмитрий Юрьевич
Здравствуйте, zvialov!
Подозреваю, что дело в Reg.OpenKey(Key,False), тогда как, по всей видимости, должно быть Reg.OpenKey(Key,true) - чтобы ключ создавался, если его нет. В приведенном коде создания ключа не происходит, поэтому если он не создается принудительно где-то еще, то поэтому и не работает.
Ответ #2. Отвечает эксперт: Вадим К
Здравствуйте, zvialov!
А ошибка на самом деле зарыта значительно глубже, в непонимании принципов работы Windows. Дело в том, что по умолчанию, сервис запускается от имени другого пользователя (от имени системы) и ветка реестра (куст, если быть точным) HKEY_CURRENT_USER для него другая.
Для устранения этого, надо либо сменить ветку реестра(куст) или сделать ini файлы(кстати, МС снова рекомендует их, ибо загаженность реестра достигла небывалых высот) или запускать сервис с правами текущего пользователя. Это делается просто. В списке служб находите свою, а там в свойствах службы заполняете имя/пароль. Но есть одно но! если у пользователя нет пароля, могут быть неприятности. с реестром не знаю, но в сеть такую службу никто не пустит.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 30 октября 2007, 11:10
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 30 октября 2007, 08:54; участников в обсуждении: 1.
|
John (статус: Посетитель), 30 октября 2007, 08:54 [#1]:
Да, но, в ключи (параметры доступа к серверу) записывает другая совсем программа, на этом этапе мне необходимо, чтобы сервис смог лишь считать параметры уже записанных заранее данных.
Я всеже попробую как вы сказали. Огромное спасибо!!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|