"External exception" при закрытии TRegIniFile

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

"External exception" при закрытии TRegIniFile

Сообщение artem78 » 02.10.2021 20:02:40

Возьмём для примера следующий код для чтения значения параметра в реестре через TRegIniFile:

Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
  regini: TRegIniFile;
begin
  RegIni := TRegIniFile.Create('');
  try
    RegIni.RootKey := HKEY_CURRENT_USER;
    res.Text:= RegIni.ReadString(Path.Text, key.Text, '');
  finally
    RegIni.Free;
  end;
end; 


Если запускать в отладчике IDE, то на строке RegIni.Free возникает данная ошибка:

20211002_184013.png


Если запустить исполняемый файл напрямую, ошибки не будет. Кстати, в Delphi 7 этот же код также выполняется без ошибок.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
artem78
новенький
 
Сообщения: 43
Зарегистрирован: 09.08.2015 18:52:24

Re: "External exception" при закрытии TRegIniFile

Сообщение Vadim » 03.10.2021 05:33:12

artem78 писал(а):RegIni := TRegIniFile.Create('');

1. А если из скобок убрать пустую строку?
2. А если предположить, что у Вас в "Path.Text" или в "key.Text" чёрте что и в попе бантик?
Как видите, возможностей совершить ошибку в Вашем коде хоть пруд пруди, что и происходит. Ищите...

artem78 писал(а):Если запустить исполняемый файл напрямую, ошибки не будет.

Потому что в исполняемом файле "напрямую" у Вас есть подушка безопасности - try ... finally, в IDE она игнорируется.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: "External exception" при закрытии TRegIniFile

Сообщение Alex2013 » 03.10.2021 15:32:17

На КиберФоруме пишут что так работает ... ( Прикол именно в KEY_READ )

Код: Выделить всё
function FromReg2(Path: string): String;
var
  reg:TRegistry;
begin

  Reg:= TRegistry.Create(KEY_READ);
  with reg do
  try
   rootKey := HKEY_LOCAL_MACHINE;
    openKey(Path,false);
    result:=readstring('');
    closeKey;
  finally
    free;
  end;

end;
Alex2013
долгожитель
 
Сообщения: 2957
Зарегистрирован: 03.04.2013 11:59:44

Re: "External exception" при закрытии TRegIniFile

Сообщение artem78 » 03.10.2021 18:41:43

Vadim писал(а):1. А если из скобок убрать пустую строку?

Без изменений.

Vadim писал(а):2. А если предположить, что у Вас в "Path.Text" или в "key.Text" чёрте что и в попе бантик?

Vadim писал(а):Как видите, возможностей совершить ошибку в Вашем коде хоть пруд пруди

Думаю, Вы сами прекрасно понимаете, что данный код написан в качестве примера. В рабочем проекте я хочу проверить наличие своей программы в автозапуске (ветка HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run).

Alex2013
А в чём собственно говоря разница между TRegIniFile и TRegistry?
artem78
новенький
 
Сообщения: 43
Зарегистрирован: 09.08.2015 18:52:24

Re: "External exception" при закрытии TRegIniFile

Сообщение Alex2013 » 03.10.2021 19:54:48

artem78 писал(а):А в чём собственно говоря разница между TRegIniFile и TRegistry?


Пишут что TRegIniFile нужен для совместимости с Windows 3 и для переноса ini файлов в реестр. :idea:
Alex2013
долгожитель
 
Сообщения: 2957
Зарегистрирован: 03.04.2013 11:59:44

Re: "External exception" при закрытии TRegIniFile

Сообщение zub » 04.10.2021 01:56:57

>>Возьмём для примера следующий код для чтения значения параметра в реестре через TRegIniFile:
Будте любезны дать минимальный пример с воспроизводимой ошибкой, а не копипасту откуда непойми.

>>Если запустить исполняемый файл напрямую, ошибки не будет
Запуск под иде и вживую - разные вещи, например переменные окружения отличатся могут, текущая папка, и т.п.
Кроме того без отладчика некоторые вылеты можно не увидеть, пример - при закрытии программа молча свалилась и если лога нет - вот и пойми штатно она закрылась или нет. точно не валится?

Добавлено спустя 4 минуты 21 секунду:
>>На КиберФоруме пишут что так работает ... ( Прикол именно в KEY_READ )
Это как на заборе. хорошо что не то что я сначала подумал, а KEY_READ.
Ты бы ссылки хоть чтоли давал откуда куда тащишь. С ошибками надо разбираться и понимать причину, а не чтото гдето ктото комуто пишут.
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: "External exception" при закрытии TRegIniFile

Сообщение Vadim » 04.10.2021 02:21:49

artem78 писал(а):Думаю, Вы сами прекрасно понимаете, что данный код написан в качестве примера.

Я то как раз думаю, что Вы дали пример, в котором ошибка никак не воспроизводится, поэтому что у Вас там на самом деле - совершенно непонятно, поэтому и помочь Вам никакой возможности нет. ;-)
Постарайтесь это понять.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: "External exception" при закрытии TRegIniFile

Сообщение Alex2013 » 04.10.2021 14:32:15

zub писал(а):Ты бы ссылки хоть чтоли давал откуда куда тащишь. С ошибками надо разбираться и понимать причину, а не чтото гдето ктото комуто пишут.

Разумеется, главный перфекционист этого фрума плохого не посоветует. Постараюсь учесть ! :idea:
(Просто я вообще встрял туда где обычно говорят "гугл в помощь"( просто самому немного интересно стало разобраться в чем дело ), а уж отменить и найти источник кода через контекстное меню браузема , это вообще как-бы все равно что ссылка... но если вдруг кому-то лень два клика сделать то вот https://www.cyberforum.ru/delphi-beginn ... 88812.html )
По TRegIniFile...
http://delphimaster.net/view/4-43213
Последний раз редактировалось Alex2013 07.10.2021 09:58:38, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2957
Зарегистрирован: 03.04.2013 11:59:44

Re: "External exception" при закрытии TRegIniFile

Сообщение artem78 » 05.10.2021 21:13:03

zub писал(а):Будте любезны дать минимальный пример с воспроизводимой ошибкой, а не копипасту откуда непойми.


Да пожалуйста -
RegTest.zip
. Запускаю в Lazarus 2.0.13 32bit на Windows 7 64bit в режиме Default.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
artem78
новенький
 
Сообщения: 43
Зарегистрирован: 09.08.2015 18:52:24

Re: "External exception" при закрытии TRegIniFile

Сообщение zub » 05.10.2021 22:45:20

Вылета нет. транк fpc\lazarus
zub
долгожитель
 
Сообщения: 2886
Зарегистрирован: 14.11.2005 23:51:26

Re: "External exception" при закрытии TRegIniFile

Сообщение artem78 » 13.10.2021 23:16:22

В итоге заменил TRegIniFile на TRegistry. С ним работает нормально. Всем спасибо.
artem78
новенький
 
Сообщения: 43
Зарегистрирован: 09.08.2015 18:52:24


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 79

Рейтинг@Mail.ru