Auto - suppression
Auto - suppression
Bonjour
Je voulais savoir comment on pouvais faire pour qu'un prog puisse se supprimer sans avoir recours à un fichier .bat.
Merci d'avance.
Je voulais savoir comment on pouvais faire pour qu'un prog puisse se supprimer sans avoir recours à un fichier .bat.
Merci d'avance.
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
intéressante comme question. C'est pour faire un prog de désinstallation (qui se supprime lui même au passage) ?
J'ai pas de réponse dsl..
J'ai pas de réponse dsl..
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
DSL j'étais pas chez moi du week-end.
J'ai regardé ta fonction qui à l'air interessante mais le hic est le handle que l'on obtiens avec un CreateFile_ mais dans le cas d'un exe qui se supprime, comment a-t-on cet handle ??? Car le handle du exe et celui qu'on obtiendrais en l'ouvrant ne serai certainement pas identique et là windows risque de faire une sale gueule mdr.Dr. Dri a écrit :je dirais l'api unlockfile mais je sais pas m'en servir
Dri
Il existe la solution d'un programme exécutable sous Ms-dos, qui pourrait s'inclure dans le programme exécutable de PureBasic, pour s'auto-extraire et s'exécuter sur commande dès la fermeture et la possibilité d'être effacé.
Une fois le programme PureBasic effacé, le programme sous Ms-dos pourra s'auto-supprimer sans contraintes, voir même supprimer le répertoire avant de se refermer à jamais.
Les nouvelles et les dernières version windows le permettront-elles encore dans le futur
A +
Une fois le programme PureBasic effacé, le programme sous Ms-dos pourra s'auto-supprimer sans contraintes, voir même supprimer le répertoire avant de se refermer à jamais.
Les nouvelles et les dernières version windows le permettront-elles encore dans le futur

A +
Bonjour
Pour ma part, je ne vois pas ce que tu as à reprocher au fichier .bat, surtout s'il est généré par l'exécutable lui même et comme il sait s'autodetruire...
Voici un exemple rapide :
Pour ma part, je ne vois pas ce que tu as à reprocher au fichier .bat, surtout s'il est généré par l'exécutable lui même et comme il sait s'autodetruire...
Voici un exemple rapide :
Code : Tout sélectionner
Procedure Killer()
OpenFile(0,"AutoDest.bat")
WriteStringN("dir *.* >null")
WriteStringN("del auto.exe >null")
WriteStringN("del autodest.bat >null")
CloseFile(0)
EndProcedure
; La ligne "dir *.* >null" (temporisation) n'est là que pour laisser le temps au programme maître de se fermer !
;Code ...
;Code ...
;Code ...
;Code ...
;Code ...
Killer()
MessageRequester("Auto destruction","Appuyer sur Ok pour le détruire")
RunProgram("autodest.bat")
End
Dernière modification par brossden le lun. 13/févr./2006 13:50, modifié 1 fois.
Denis
Bonne Jounée à tous
Bonne Jounée à tous
Catégorie : Fichiers
Description :
Cette fonction permet de débloquer une zone d'un fichier ouvert. Débloquer une zone d'un fichier permet aux autres processus d'y accèder.
Renvoie "0" en cas d'erreur
Déclaration :
Declare Function UnlockFile Lib "kernel32.dll" ( _
ByVal hFile As Long, _
ByVal dwFileOffsetLow As Long, _
ByVal dwFileOffsetHigh As Long, _
ByVal nNumberOfBytesToUnlockLow As Long, _
ByVal nNumberOfBytesToUnlockHigh As Long) As Long
Paramètre :
hFile : Handle du fichier dont on veux débloquer une zone. Le fichier doit avoir une zone bloquée au préalable. Le handle de fichier doit avoir été crée avec les accès GENERIC_READ ou GENERIC_WRITE.
dwFileOffsetLow : Définit les bits inférieurs du point de départ de la zone à débloquer dans le fichier.
dwFileOffsetHigh : Définit les bits supérieurs du point de départ de la zone à débloquer dans le fichier.
nNumberOfBytesToUnlockLow : Définit les bits inférieurs de la largeur (en bits) de la zone à débloquer.
nNumberOfBytesToUnlockHigh : Définit les bits supérieurs de la largeur (en bits) de la zone à débloquer.
Remarque : Vous ne pouvez débloquer qu'une région complète et une seule à la fois d'un fichier. Vous ne pouvez pas bébloquer une partie de zone, ou alors deux zones complètes à la fois.
Le point de départ et la largeur de la zone à débloquer sont définies en fusionnant les paramètres dwFileOffsetLOW ET dwFileOffsetHigh pour le point de départ et nNumberOfBytesToUnlockLow et nNumberOfBytesToUnlockHigh pour obtenir une position et une largeur codées sur 64 bits. Ceci permet de débloquer une zone d'une largeur suffisante pour n'importe quel type de fichier.
Si un processus se termine avec une portion de fichier encore bloquée, la zone est débloquée par le système automatiquement. Il est cependant recommandé de débloquer la zone au préalable avant de quitter le processus car le temps mis pour débloquer la zone après la mort du processus dépend des ressources du système, et peut empêcher d'autres processus d'y accèder.
Compatible tout windows
Bibliothèque : kernel32
Description :
Cette fonction permet de débloquer une zone d'un fichier ouvert. Débloquer une zone d'un fichier permet aux autres processus d'y accèder.
Renvoie "0" en cas d'erreur
Déclaration :
Declare Function UnlockFile Lib "kernel32.dll" ( _
ByVal hFile As Long, _
ByVal dwFileOffsetLow As Long, _
ByVal dwFileOffsetHigh As Long, _
ByVal nNumberOfBytesToUnlockLow As Long, _
ByVal nNumberOfBytesToUnlockHigh As Long) As Long
Paramètre :
hFile : Handle du fichier dont on veux débloquer une zone. Le fichier doit avoir une zone bloquée au préalable. Le handle de fichier doit avoir été crée avec les accès GENERIC_READ ou GENERIC_WRITE.
dwFileOffsetLow : Définit les bits inférieurs du point de départ de la zone à débloquer dans le fichier.
dwFileOffsetHigh : Définit les bits supérieurs du point de départ de la zone à débloquer dans le fichier.
nNumberOfBytesToUnlockLow : Définit les bits inférieurs de la largeur (en bits) de la zone à débloquer.
nNumberOfBytesToUnlockHigh : Définit les bits supérieurs de la largeur (en bits) de la zone à débloquer.
Remarque : Vous ne pouvez débloquer qu'une région complète et une seule à la fois d'un fichier. Vous ne pouvez pas bébloquer une partie de zone, ou alors deux zones complètes à la fois.
Le point de départ et la largeur de la zone à débloquer sont définies en fusionnant les paramètres dwFileOffsetLOW ET dwFileOffsetHigh pour le point de départ et nNumberOfBytesToUnlockLow et nNumberOfBytesToUnlockHigh pour obtenir une position et une largeur codées sur 64 bits. Ceci permet de débloquer une zone d'une largeur suffisante pour n'importe quel type de fichier.
Si un processus se termine avec une portion de fichier encore bloquée, la zone est débloquée par le système automatiquement. Il est cependant recommandé de débloquer la zone au préalable avant de quitter le processus car le temps mis pour débloquer la zone après la mort du processus dépend des ressources du système, et peut empêcher d'autres processus d'y accèder.
Compatible tout windows
Bibliothèque : kernel32
Denis
Bonne Jounée à tous
Bonne Jounée à tous
Dommage que puresources n'est plus accessible, j'avais posté un code avec deux solutions.
Désolé pour la mise en forme je suis pas chez moi
PB 3.94

Désolé pour la mise en forme je suis pas chez moi
PB 3.94
Code : Tout sélectionner
Procedure AutoDeleteProg() ; Supprime le programme
ExeName.s = Space(255) : GetModuleFileName_(0, @ExeName, 255) ; Recherche l'adresse du programme
cmd$ = Space(255) : GetEnvironmentVariable_("comspec", @cmd$, 255) ; Recherche le programme de commande (command.exe ou cmd.exe)
RunProgram(cmd$, "/c del.exe /F " + Chr(34) + ExeName + Chr(34), GetPathPart(ExeName), 2) : End ; Lance la suppression en mode forcé et caché
EndProcedure
Merci Gillou sa marche nikel ^^Gillou a écrit :Dommage que puresources n'est plus accessible, j'avais posté un code avec deux solutions.![]()
Désolé pour la mise en forme je suis pas chez moi
PB 3.94Code : Tout sélectionner
Procedure AutoDeleteProg() ; Supprime le programme ExeName.s = Space(255) : GetModuleFileName_(0, @ExeName, 255) ; Recherche l'adresse du programme cmd$ = Space(255) : GetEnvironmentVariable_("comspec", @cmd$, 255) ; Recherche le programme de commande (command.exe ou cmd.exe) RunProgram(cmd$, "/c del.exe /F " + Chr(34) + ExeName + Chr(34), GetPathPart(ExeName), 2) : End ; Lance la suppression en mode forcé et caché EndProcedure