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:

http://www.fotosik.pl/pokaz_obrazek/e3e9e0115c17304d.html