![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 + почитай у Руссановича про реестр.