Page 1 sur 1

Auto - suppression

Publié : ven. 10/févr./2006 16:02
par Dorian
Bonjour

Je voulais savoir comment on pouvais faire pour qu'un prog puisse se supprimer sans avoir recours à un fichier .bat.

Merci d'avance.

Publié : ven. 10/févr./2006 17:47
par lionel_om
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..

Publié : ven. 10/févr./2006 18:17
par Dr. Dri
je dirais l'api unlockfile mais je sais pas m'en servir

Dri

Publié : lun. 13/févr./2006 0:11
par Dorian
DSL j'étais pas chez moi du week-end.
Dr. Dri a écrit :je dirais l'api unlockfile mais je sais pas m'en servir

Dri
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.

Publié : lun. 13/févr./2006 2:04
par Lna
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 +

Publié : lun. 13/févr./2006 9:03
par brossden
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 :

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



Publié : lun. 13/févr./2006 12:18
par gansta93
Dans ton bat, il faudrait mettre des ">nul" après chaque del, comme ça pas de risque de message d'erreur.
Mais c vrai que UnlockFile_() m'a l'air intéressant, au fait prêt que je ne comprand pas comment elle fonctione. :-)

Publié : lun. 13/févr./2006 13:48
par brossden
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

Publié : lun. 13/févr./2006 13:49
par nico
UnlockFile_() permet de déverrouiller un fichier verrouiller par la fonction LockFile_(), je n'ai pas l'impression que c'est ce que vous recherchez.

Publié : mar. 14/févr./2006 10:37
par Gillou
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

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

Publié : mar. 14/févr./2006 11:50
par Dorian
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.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 ^^