[delphi] bestand weggooien (uninstall)

Pagina: 1
Acties:

  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 21:33
Ik heb een uninstall gemaakt maar als ik nu alle bestanden wegmieter dan blijft er nog 1 filetje over namelijk uninstall.exe (momenteel dus draaiend)

hoe krijg ik dat filetje dan automatisch weg
want zolang uninstall.exe open staat kan ik uninstall.exe niet verwijderen

PSN jschut_82 | Xbox: JSchut82


  • WOmBaT
  • Registratie: September 2000
  • Laatst online: 30-11-2025

WOmBaT

Nyaaa!!!

In het register bij de runonce key een entry aanmaken met
code:
1
'del ' + application.exename;

  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 21:33
maar dan word ie niet direct verwijderd.
pas na het opstarten toch ?

kan het niet op een andere manier direct :?

PSN jschut_82 | Xbox: JSchut82


  • WOmBaT
  • Registratie: September 2000
  • Laatst online: 30-11-2025

WOmBaT

Nyaaa!!!

Op donderdag 06 juni 2002 15:49 schreef JSchut het volgende:
maar dan word ie niet direct verwijderd.
pas na het opstarten toch ?

kan het niet op een andere manier direct :?
Klopt inderdaad. :)



Daarvan schijnt deze erg goed te werken :7
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
procedure DeleteSelf; 
var 
  module: HModule; 
  buf: array[0..MAX_PATH - 1] of char; 
  p: ULong; 
  hKrnl32: HModule; 
  pExitProcess, 
  pDeleteFile, 
  pFreeLibrary: pointer; 
begin 
  module := GetModuleHandle(nil); 
  GetModuleFileName(module, buf, SizeOf(buf)); 
  CloseHandle(THandle(4)); 
  p := ULONG(module) + 1; 
  hKrnl32 := GetModuleHandle('kernel32'); 
  pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess'); 
  pDeleteFile := GetProcAddress(hKrnl32, 'DeleteFileA'); 
  pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary'); 
  asm 
    lea eax, buf 
    push 0 
    push 0 
    push eax 
    push pExitProcess 
    push p 
    push pDeleteFile 
    push pFreeLibrary 
    ret 
  end; 
end;

http://groups.google.com/groups?q=%22procedure+deleteSelf%22&hl=nl&lr=&selm=3CD4F75C.3AC8C42D%40ngs.ru&rnum=1

Hier staat een ton aan oplossingen :)

  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 21:33
bedankt dit werkt idd

alleen nu nog een probleem wat er op volgt
normaal gesproken delete ik in delphi ook de directory maar dat kan nu dus niet meer

kan je dat ook niet inbouwen in die bat file

ik heb het al geprobeerd maar dit
code:
1
writeln(f,format('Erase "prog dir"',[paramstr(0)]));

werkt niet

ik heb trouwens het volgende gebruikt
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Procedure DelExe;
   Var f: TextFile;
   begin
     assignfile(f,changefileext(paramstr(0),'.bat'));
     rewrite(f);
     writeln(f,':1');
     writeln(f,format('Erase "%s"',[paramstr(0)]));
     writeln(f,format('If exist "%s" Goto 1',[paramstr(0)]));
     writeln(f,format('Erase
"%s"',[changefileext(paramstr(0),'.bat')]));
     closefile(f);
     winexec(PChar(changefileext(paramstr(0),'.bat')),sw_hide);
     halt;
   end;

PSN jschut_82 | Xbox: JSchut82


  • WOmBaT
  • Registratie: September 2000
  • Laatst online: 30-11-2025

WOmBaT

Nyaaa!!!

Als je er eerst voor zorgt dat de directory die je wilt legen ook echt leeg is (dus ook alle subdirectories zijn leeg) kun je gewoon
code:
1
deltree %directorynaam%

Ik geloof dat je met /Y geen verdere bevestiging hoeft te geven...
Als dit op sommige systemen niet werkt... en dat kan best zal je in een temp dir een bestandje moeten aanmaken dat hetzelfde doet en die vervolgens weer door je batch file laten verwijderen... Zorg er echt voor dat die batchfile en deltree bestandje niet in je uninstall directory staan maar in de temp directory!!
Pagina: 1