Witam. Mam problem z komponentem indy http. Mój problem polega na tym, że przy ponownym wywołaniu komponentu program wywala błąd "Access violation at address 004C9450 at module 'Project1.exe'. Read of address 00000118." Wszystko działa jak należy przy pierwszym wywołaniu a przy następnym za każdym razem otrzymuję taki błąd. Jak uniknąć tego błędu?
0
0
Oto kod:
function CheckUpdates(auto : boolean = false) : boolean;
var
exename : string;
dlfile : TFileStream;
ini : TIniFile;
vminor : integer;
vmajor : integer;
vlink : string;
begin
exename := extractFileName(Application.ExeName);
if fileexists(ExtractFilePath(ParamStr(0)) + 'update.exe') then
begin
dlfile := TFileStream.Create(ExtractFilePath(ParamStr(0)) + 'version.ini', fmcreate);
main.idhttp1.Request.UserAgent := 'Mozilla/4.0, Indy Library (Windows; en-US)';
main.idhttp1.Get('http://10.10.1.12/version.ini',dlfile);
main.IdHttp1.Free;
dlfile.Free;
if FileExists(ExtractFilePath(ParamStr(0)) + 'version.ini') then
begin
ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'version.ini');
try
vminor := StrToInt(ini.ReadString('VERSION', 'MINOR', IntToStr(minor)));
vmajor := StrToInt(ini.ReadString('VERSION', 'MAJOR', IntToStr(major)));
vlink := ini.ReadString('UPDATE', 'LINK', '');
if (vminor > minor) or (vmajor > major) then
begin
ShowMessage(Application.Title);
case Application.MessageBox('Dostępna jest nowa wersja programu.'+#13+'Czy chcesz dokonać aktualizacji?', 'Aktualizacja', MB_YESNO+MB_ICONQuestion) of
IDYES: ShellExecute(0, 'open', 'update.exe', PChar(vlink + ' ' + exename + ' "' + Application.Title + '"'), nil, SW_SHOWNORMAL)
end;
end else
if auto then
Application.MessageBox('Brak dostępnych aktualizacji.', 'Aktualizacja', MB_OK+MB_ICONInformation);
DeleteFile(ExtractFilePath(ParamStr(0)) + 'version.ini');
finally
ini.Free;
end;
end else
if auto then
Application.MessageBox('Brak dostępnych aktualizacji.', 'Aktualizacja', MB_OK+MB_ICONInformation);
end else
Application.MessageBox('Wystąpił błąd podczas sprawdzania dostępności aktualizacji!'+#13+'Ponowna instalacja programu powinna rozwiązać ten problem.', 'Aktualizacja', MB_OK+MB_ICONError);
end;
1
Zwalniasz komponent IdHttp1, a przed kolejnym skorzystaniem z tej funkcji zapewne zapominasz o jego utworzeniu. Poza tym ten kod jest fatalny.
0
Fatalny czy nie do poznania języka jak najbardziej wystarczy. Dzięki za pomoc. Miłej nocy.