Je recherchais récemment une solution pour pouvoir supprimer le fichier exécutable de mon application en .Net après sa fermeture. L'idée d'embarquer une seconde application ou un script pou faire le travail ne m'enchantais pas.
J'ai donc décidé de poser la question sur le forum. Les réponses ont fusées, elle sont diverses et variés.
J'ai choisi la solution la plus adapté à mon besoin même si elle n'est pas la plus "propre". Si elle ne vous convient pas alors vous trouverez surement votre bonheur en lisant les réponses des membres.
http://www.vbfrance.com/forum/sujet-BAR-COMMANDE-AVEC-RETARD_1532814.aspx
Un grand merci à eux.
Source / Exemple :
Dim pInfos As New ProcessStartInfo
With pInfos
.FileName = "cmd.exe"
.Arguments = "'/K ""for /L %I IN (1 1 10000) DO ping -n 2 127.0.0.1 > NUL && if EXIST " & _
Application.ExecutablePath & " (del " & Application.ExecutablePath & ") ELSE exit"
.CreateNoWindow = False
.UseShellExecute = True
.WindowStyle = ProcessWindowStyle.Hidden
End With
Process.Start(pInfos)
Application.Exit()
Conclusion :
Cette application est sans prétention. Elle est une adaptation en .Net du code Delphi de Caribensila.
Le but est simple, lancer une invite de commande en boucle avec un ping bidon tant que l'application est ouverte (autrement dit un batch). Une fois l'application fermée le batch supprime le fichier exécutable ayant lancé la commande.
Ce que fais ce programme: Il supprime l'exécutable du disque lors de la fermeture de celle-ci sans aucun programme ou script tiers.
Voila.
13 sept. 2011 à 09:34
pas mal comme sources ;)
13 sept. 2011 à 07:48
J'ai trouvé une autre utilisation à cette source : la mise à jour automatique de l'application.
Si une nouvelle version de l'application est disponible, au lieu de faire un "DEL", on fait un "COPY" du nouvel exécutable et on le redémarre.
Ça évite d'avoir un programme en plus qui copie la nouvelle version.
Après quelques recherches, j'ai trouvé la bonne syntaxe de la commande DOS à faire.
Ça fonctionne bien.
J'ai mis 10 comme vote.
Merci.
11 sept. 2011 à 17:33
Je me suis permis de modifier un peu ta source et de créer un nouvel post, pour ceux qui disent qu'il ne voient pas l'utilité...
http://www.vbfrance.com/codes/VERSION-DEMO-NOS-PROGRAMMES_53576.aspx
Merci
8 août 2011 à 16:03
Je trouve très utile ton app, surtout pour les mauvais payeurs (quand tu fais un prog et le client refuse de te payer après)
J'ai donc ajouté une astuce qui va inscrire dans le fichier LISEZMOI.txt un compteur du nombre de démarrages autorisés.
Il faut juste créer le LISEZMOI.txt dans le répertoire de l'application, si le gars ne le sait pas l'application s’efface et c'est fini.
Je peux t'envoyer le tout par mail si tu veux carlos_gwada@hotmail.fr (j'ai visual studio 2010)
Regarde:
Public Class AutoDelete
Public Str, St As String
Public Rt As Integer
Private Sub btn_Del_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Del.Click
Me.Close()
End
End Sub
Private Sub AutoDelete_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Str = (Val(Str) + 1)
FileOpen(1, Application.StartupPath & "\LISEZMOI.txt", OpenMode.Random)
FilePut(1, Str, 222)
FileClose()
End Sub
Private Sub AutoDelete_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Count()
End Sub
Private Sub Count()
On Error GoTo 10
FileOpen(1, Application.StartupPath & "\LISEZMOI.txt", OpenMode.Input)
FileClose()
FileOpen(1, Application.StartupPath & "\LISEZMOI.txt", OpenMode.Random)
FileGet(1, Str, 222)
FileGet(1, St, 223)
If Val(St) < 3 Then
St = 15
FilePut(1, St, 223)
End If
FileClose()
ProgressBar1.Maximum = Val(St)
ProgressBar1.Value = Val(Str)
Rt = Val(Str)
If Rt > Val(St) Then
FileOpen(2, Application.StartupPath & "\APPLICATION SUPPRIMEE.txt", OpenMode.Append)
Print(2, vbCrLf & vbCrLf & " CF2i(-Guadeloupe)" & vbCrLf)
Print(2, "*** Ingénierie Informatique ***" & vbCrLf & vbCrLf)
Print(2, vbCrLf & vbCrLf & "Merci d'avoir testé notre application!..." & vbCrLf)
Print(2, "L'application en version démo est arrivée à expiration..." & vbCrLf & vbCrLf)
Print(2, "Veuillez contacter le concepteur pour obtenir une version définitive:" & vbCrLf)
Print(2, "Par Email: carlos_gwada@hotmail.fr" & vbCrLf)
Print(2, "Ou par téléphone: 06 90 38 66 05" & vbCrLf)
FileClose()
MsgBox(AcceptButton, MsgBoxStyle.Critical, "Version de démo expirée!...")
KillApp()
End If
Exit Sub
10:
MsgBox(AcceptButton, MsgBoxStyle.Critical, "Installation incorrecte, contactez: carlos_gwada@hotmail.fr")
End
End Sub
Private Sub KillApp()
Dim pInfos As New ProcessStartInfo
With pInfos
.FileName = "cmd.exe"
.Arguments = "'/K ""for /L %I IN (1 1 10000) DO ping -n 2 127.0.0.1 > NUL && if EXIST " & _
Application.ExecutablePath & " (del " & Application.ExecutablePath & ") ELSE exit"
.CreateNoWindow = False
.UseShellExecute = True
.WindowStyle = ProcessWindowStyle.Hidden
End With
Process.Start(pInfos)
Application.Exit()
End Sub
End Class
1 juil. 2011 à 11:43
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.