Jump to content
Sign in to follow this  
knuto

Slette den køyrande .exe-fila...

Recommended Posts

Hallo!

 

Eg har laga eit lite "eingongsprogram", og lurar på korleis eg kan få windows til å slette .exe-fila når ho har køyrt ferdig. Det må jo være teknisk mogleg, ellers ville det jo ikkje gått ann å lage avinstalleringsprogram ...

Share this post


Link to post

Ved avinstalleringsprogram tror jeg programmet får hjelp av noe som heter "windows installer" til å fjerne det helt... :ermm:

 

Rett meg visst det er feil!

Share this post


Link to post
du kan ikke slette exe-filen til en kjørende prosess. enkelt og greit.

 

Avinstalleringsprogrammer er en helt annen sak.

Han sa "etter den har kjørt ferdig"!

 

Edit: Visst det er prat om et eget program skrevet i C foreksempel:

 

printf("Jeg er en noob");

 

Vil dette programmet terminere seg selv dersom ma ikke legger inn en pausekommando. :hrm:

Edited by ^FeKtus

Share this post


Link to post

jeg svarte på om den kunne slette seg selv. leste kanskje litt feil. Uansett må en avinstallasjon kjøres etterpå da. (tror du sliter med å gjøre dette automatisk, da selve exe-filen må starte denne, og blir da fortsatt kjørende selv i bakgrunnen). Skal du avinstallere, må du også ha en installasjon først.

Share this post


Link to post

hmm... bra spørsmål så jeg prøvde meg litt ut.

la oss si at du bruker en bat fil istede, den har muligheten til å slette seg selv.

1 Jeg starter Uninstall programmet.

2 programmet fjerner alt av reg. filer. mapper osv. alt utenom programmet selv og mappene som det ligger i.

3 programmer genererer en bat fil med en delay på fks 10 sek. som blir lagt på et sted som ikke kommer i komflikt med fjerningen (fks c:\).

4 programmet dealokerer alt av minne handlere osv. , så rett før programmer slutter starter det bat filen som et separat program så avsluttes uninstallen.

5 bat filen kjører å sletter alle spor.

 

Jeg mener å huske at proffene lager et skript som kjøres i av en windows kommando/API kall, men jeg husker ikke hvilke.

Share this post


Link to post

Alternativ til bat-fil er å bruke MoveFileEx med MOVEFILE_DELAY_UNTIL_REBOOT.

 


Prototype:

BOOL MoveFileEx(
  LPCTSTR lpExistingFileName,
  LPCTSTR lpNewFileName,
  DWORD dwFlags
);


Eks:

MoveFileEx(_T("c:\\self.exe"), 0, MOVEFILE_DELAY_UNTIL_REBOOT);

 

Filen blir da slettet ved neste reboot - og du slipper unna med kun en kodelinje :)

Share this post


Link to post
lstor@mputt:~$ cp /bin/rm .

lstor@mputt:~$ ./rm ./rm

lstor@mputt:~$ ls rm

ls: rm: Ingen slik fil eller filkatalog

 

Norsk:

1) Kopier slette-programmet til nåværende mappe

2) Slett slette-programmet i nåværende mappe med sletteprogrammet i nåværende mappe

3) Vis at slette-programmet i nåværende mappe ikke eksisterer

 

Delvis off-topic, men uansett: Tråden burde befinne seg i Programmering->Windows. Så lenge tråden opprettes i et plattformuavhengig forum får dere tåle at jeg poengterer andre løsninger på andre plattformer ;)

Share this post


Link to post

nemmen myubi da, er ikke c/c++ engang det du foreslo :tease:

 

int main(int argc, char **argv) {
if(!unlink(argv[0]))
 printf("%s er bortevekk\n",argv[0]);
else
 printf(":(\n");
return 0;
}

u@w:~/waa$ ls -la

total 28

drwxr-xr-x    2 user    users        4096 Aug 28 05:51 ./

drwx--x--x  23 user    users        4096 Aug 28 05:41 ../

-rwxr-xr-x    1 user    users      13388 Aug 28 05:51 delself*

-rw-r--r--    1 user    users        130 Aug 28 05:51 delself.c

u@w:~/waa$ delself

delself er bortevekk

u@w:~/waa$ ls -la

total 12

drwxr-xr-x    2 user    users        4096 Aug 28 05:52 ./

drwx--x--x  23 user    users        4096 Aug 28 05:41 ../

-rw-r--r--    1 user    users        130 Aug 28 05:51 delself.c

u@w:~/waa$

Share this post


Link to post

Er heilt inni granskogen tåpeleg å skrive at det ikkje høyrer til i dette forumet. Windows-forumet handlar ikkje om C++, så om eg hadde fått svar hadde det garantert berre vore: "Prøv i C++-forumet, du.". Det som heller ville vore aktuelt var å endre tittelen til "[Windows] Korleis slette den køyrande fila".

 

Korleis lagar ein forresten ein delay i bat? Nokon som veit om ein tutorial til .bat-filer?

 

Redigert:

 

Trudde dette skulle fungere, noko det ikkje gjer: :cry:

 

    ofstream out("dkh.bat");
   out << ":: Denne fila er heilt midlertidig, og vil forsvinne automatisk.\n"
 	"echo off\n"
 	"ping -n 5 localhost > nul\n"
 	"del kh.exe\n"
 	"del dkh.bat";

   system("dkh.bat");

Edited by knuto

Share this post


Link to post
FILE *f = fopen("temp.bat","w");
fputs("@echo off & ping a.b.c.d -n 5\n",f);
fputs("del filen-din.exe & del temp.bat & exit", f);
fclose(f);
system("start temp.bat");

Edited by charlie di meola

Share this post


Link to post

Redigert: Virker som dette er teknisk umuleg. (har testa på 2 datamaskinar med Win XP Pro). Det viser seg bat-fil klarer ikkje å slette seg sjølv om ho er starta av ein annan prosess, men om ho blir starta manuelt går det fint. Eg fatter ikkje kvifor, for det virker ikkje svært logisk, men noko seier meg at det er eit sikkerheitspåfunn frå Microsoft.

Edited by knuto

Share this post


Link to post
nemmen myubi da, er ikke c/c++ engang det du foreslo  :tease:

Å finne opp hjulet på nytt for en så liten demonstrasjon var overkill, synes jeg ;)

 

knuto: Dette kan vi vel heller ta i pm.

 

Av nysgjerrighet, hvorfor vil ikke Windows slette en kjørende fil? Av "sikkerhetsårsaker"?

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...