Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2019, 22:40   #1
Haberman
Форумчанин
 
Регистрация: 01.05.2018
Сообщений: 104
Вопрос TRegistry.OpenKey рабочий код перенесенный в xe перестал работать

Код:
   var reg:TRegistry;
    baseDir:string;
begin

 reg := TRegIstry.Create;
 reg.RootKey :=HKEY_LOCAL_MACHINE;

if reg.OpenKey('\software\oneMansoft\StayTop\',false) then
 begin

  BaseDir:=reg.ReadString('Installpath');

end  else 
   BaseDir:='RegistryFailed';
reg.OpenKey не срабатывает но GetLastError=0
Haberman вне форума Ответить с цитированием
Старый 21.07.2019, 16:36   #2
Haberman
Форумчанин
 
Регистрация: 01.05.2018
Сообщений: 104
По умолчанию

Может есть у когото хоть какие-то предположения в чем ошибака?
Haberman вне форума Ответить с цитированием
Старый 22.07.2019, 08:37   #3
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

а что именно не работает-то?
Цитата:
Сообщение от Haberman Посмотреть сообщение
reg.OpenKey('\software\oneMansoft\S tayTop\'
если включен UAC, то без прав администратора данная ветка не прочитается и не запишется.
BLACK_RAIN вне форума Ответить с цитированием
Старый 22.07.2019, 19:38   #4
Haberman
Форумчанин
 
Регистрация: 01.05.2018
Сообщений: 104
По умолчанию

Цитата:
Сообщение от BLACK_RAIN Посмотреть сообщение
а что именно не работает-то?

если включен UAC, то без прав администратора данная ветка не прочитается.
У меня сейчас 1 компьютер с 1 ОС, я сделал код который работает в Delphi7 и перенёс его в Xe8 где он не работает.
Haberman вне форума Ответить с цитированием
Старый 22.07.2019, 19:55   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Вы учли, что строки стали юникодовскими?
p51x вне форума Ответить с цитированием
Старый 23.07.2019, 01:35   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,867
По умолчанию

Имхо.
Во-первых.
Действительно может быть проблема с UAC. Без прав администратора доступ к HKLM разрешен только на чтение а при создании
Цитата:
Сообщение от Haberman Посмотреть сообщение
reg := TRegIstry.Create;
доступ запрашивается как KEY_ALL_ACCESS. При этом действительно функция OpenKey вернёт FALSE. В этом случае надо создать экземпляр TRegistry так:
Код:
reg:=TRegistry.Create(KEY_READ);
Во-вторых меня смущает слэши в начале и в конце
\software\oneMansoft\StayTop\
им там нечего делать.

Цитата:
Сообщение от p51x Посмотреть сообщение
Вы учли, что строки стали юникодовскими?
А при чём тут юникод? Тем более что в примере ТС нет ни одного "нелатинского" символа.

Последний раз редактировалось northener; 23.07.2019 в 01:40.
northener вне форума Ответить с цитированием
Старый 23.07.2019, 12:56   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Во-первых.
Вы тему читали? Этот код работает, если собрать его в Д7. Д7 научился сам обходить уац и права в реестре? И гетласт 0, хотя может у д7 свои функции в обход винапи...

Цитата:
Сообщение от northener Посмотреть сообщение
А при чём тут юникод? Тем более что в примере ТС нет ни одного "нелатинского" символа.
Вы видите суслика? А он есть... ТС читает из реестра строку.
p51x вне форума Ответить с цитированием
Старый 23.07.2019, 16:28   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
ТС читает из реестра строку.
судя по его словам

Цитата:
Сообщение от Haberman Посмотреть сообщение
reg.OpenKey не срабатывает
до чтения строки дело не доходит.

а вообще, я согласен с northener - я бы очень внимательно посмотрел, что там творится с правами доступа и открытием реестра на полный доступ или на чтение.

ну и исправил код в соответствии с замечаниями (см. оф.сайт)
Код:
if reg.OpenKey('Software\\oneMansoft\\StayTop\\',false) then
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.07.2019, 00:56   #9
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,867
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вы тему читали?
Пока нет полного кода проекта я склонен следовать совету незабвенного Козьмы Пруткова по поводу надписи на клетке слона
northener вне форума Ответить с цитированием
Старый 25.07.2019, 20:34   #10
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Попробуйте это:
Код:
function RegReadString(RootK: HKEY; OpenK, ValNam: string): string;
var
  Reg :TRegistry;
begin // чтение string
 Result := '';
 Reg := TRegistry.Create(KEY_ALL_ACCESS or KEY_WOW64_64KEY);
   try
 Reg.RootKey := RootK;
 if Reg.KeyExists(OpenK) then
 if Reg.OpenKeyReadOnly(OpenK) then
 begin
   if Reg.ValueExists(ValNam) then
    Result := Reg.ReadString(ValNam);
   Reg.CloseKey;
 end;
   finally
 FreeAndNil(Reg);
   end;
end;

function RegWriteString(RootK: HKEY; OpenK, ValNam, fVal: string):string;
var
  Reg :TRegistry;
begin
 Result := '';
 Reg := TRegistry.Create(KEY_ALL_ACCESS or KEY_WOW64_64KEY);
   try
 Reg.RootKey := RootK;
 if Reg.OpenKey(OpenK, True) then
 begin
   Reg.WriteString(ValNam, fVal);
   Result := Reg.ReadString(ValNam);
   Reg.CloseKey;
 end;
   finally
 FreeAndNil(Reg);
   end;
end;
uRegTul.zip
Alter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перестал работать код Оксана33 Microsoft Office Excel 6 07.10.2015 21:10
Перенес рабочий скрипт и он перестал работать Mick_20 JavaScript, Ajax 2 17.07.2014 13:02
Проблемы с функцией OpenKey класса TRegistry sergey_dmitrievich C++ Builder 0 13.07.2011 17:32
Перестал работать код Mikuro Microsoft Office Excel 6 12.11.2010 15:24
перестал работать cd-rom Betty Компьютерное железо 7 22.08.2009 09:10