Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TRegistry в службе [D7, WinXP]


alex870 ©   (2010-12-09 00:28:00) 

Здравствуйте!
Не могу обратится к параметру реестра из службы.
Вот функция

function TServ.RegQueryStr():String;
var
 Reg : TRegistry;
 str : string;
begin
 Result := '';
 Reg := TRegistry.Create(KEY_READ);
 try
   Reg.RootKey := HKEY_CURRENT_USER;
   if Reg.OpenKey('Software\Microsoft\MediaPlayer\Player\RecentFileList') then
   begin
     Result := Reg.ReadString('File0');
     Reg.CloseKey;
   end;
 finally
   Reg.Free;
 end;
end;

Если написать просто программу - работает, а если вставляю в службу -нет. Не находит параметр 'File0'. Я подозреваю, что это из-за того, что служба запускается из-под Системы, а не от пользователя, но сомнительно, что в этом причина, я же указываю RootKey. Подскажите пожалуйста как победить. Или хотябы в чем особенность работы с реестром из службы.
Спасибо.


Anatoly Podgoretsky   (2010-12-10 09:14:00) [1]

> alex870  (09.12.2010 22:33:06)  [6]

Это неверно, очень неверно, CURRENT_USER для службы это тот кто установлен в
настройках и это вполне можешь быть ты.
Искать в HKU бесполезно, для этого сначала надо перезагрузиться под нужным
пользователем, а нафиг оно все это нужно, показать какой крутой или есть
реальная, а не придуманая цель?


alex870   (2010-12-09 22:33:00) [2]

Спасибо, разобрался. Для тех кому интересно как: CURRENT_USER для службы это Система (SYSTEM). Настройки пользователей хранятся в HKEY_USERS в разделах с названиями, совпадающими с их SID'ами (Security ID). Нужно просто найти нужный SID. Путь же к разделам пользователя будет выглядеть не HKCU\... а HKU\SID\... Если смотреть его из службы. Если где не прав - Мэтры, поправьте. Единственное, что хочу сказать, что все заработало. Правда пришлось искать ф-цию для получения SID'a, но это мелочи.
Eraser ©а Вам отдельное спасибо!


Anatoly Podgoretsky   (2010-12-09 21:48:00) [3]


> .е. как я понял, система не видит ветку HKEY_CURRENT_USER?

Не так, прекрасно видит.


Eraser   (2010-12-09 21:35:00) [4]

> [3] alex870   (09.12.10 21:30)


> Т.е. как я понял, система не видит ветку HKEY_CURRENT_USER?

почитай ;-)


alex870   (2010-12-09 21:30:00) [5]

Спасибо большое! Почитаю. Т.е. как я понял, система не видит ветку HKEY_CURRENT_USER? Ну не суть, главное развеяли мои сомнения, еще раз огромное спасибо.


Palladin   (2010-12-09 09:38:00) [6]

...или запускать службу от имени нужного пользователя


Eraser   (2010-12-09 01:15:00) [7]

>
>
> [0] alex870   (09.12.10 00:28)


> Системы, а не от пользователя, но сомнительно, что в этом
> причина, я же указываю RootKey

в этом, как раз и причина.

HKEY_CURRENT_USER - переводится как текущий пользователь. в случае службы - это система.
hint: см. ветку HKEY_USERS + почитай у Руссановича про реестр.


Наверх

Титульная страница Поиск, карта сайта Написать письмо