Seite 2 von 2

Re: Exe die sich selbst löscht

Verfasst: 11.04.2012 18:27
von NicTheQuick
Oder man nutzt einfach das Temporäre Verzeichnis um von dort ein Programm zu starten, was alles gewünschte löscht. Die Datei im Temp-Ordner kann ja einfach bestehen bleiben. Irgendwann wird der eh gelöscht.

Re: Exe die sich selbst löscht

Verfasst: 11.04.2012 19:13
von pyromane

Code: Alles auswählen

ShellExecute_(0,"open","cmd.exe","/c del "+Chr(34)+ProgramFilename()+Chr(34),"c:\",#SW_HIDE)
Problem lag woanders. Code oben funktioniert. EInen schönen Tag noch!

Re: Exe die sich selbst löscht

Verfasst: 11.04.2012 22:23
von Falko
Ich habe mal deine abgewandelte Procedure am Anfang mit dem PB-Beispiel zusammen
ausprobiert und sehe keine aufflackernde DOS-Shell während das Programm gelöscht wird.

Wenn du dieses als Exe kompilierst und die ausführst, dürfte der es ausgeführt und nachdem es
beendet wird, ohne eine aufflackernde Shell auch gelöscht werden. Bei mir klappt dieses Beispiel soweit
ganz gut.

Code: Alles auswählen

;Diese Procedure löscht das hier gestartete Programm
Procedure SelfErase()
  RunProgram(GetEnvironmentVariable("comspec"), "/c del "+Chr(34)+ProgramFilename()+Chr(34), "", #PB_Program_Hide)
  End
EndProcedure

;
; ------------------------------------------------------------
;
;   PureBasic - Console example file
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;
    text$  = "Feel the Power of PureBasic!"        ; just a small text$ string
    dlay   = 4000                                  ; delay will set to 4000

;
;-------- Open our Console --------
;

    OpenConsole()                                  ; First we must open a console
    ConsoleTitle ("PureBasic - Console Example:")  ; Now we can give the opened console a Titlename ;)                                                  
    EnableGraphicalConsole(1)

;                                                                                                   
;-------- Ask and display the UserName --------
;
    
    ConsoleLocate (18,12)                          ; x y position 
    Print ("Please enter your name:   ")           ; Ask for name
    name$=Input()                                  ; Wait for user input

    ClearConsole()                                 ; This will clean the ConsoleScreen
    
    ConsoleLocate (24,10)                          ; x y position 
    PrintN ("Welcome "+name$)                      ; Print our text and the UserName
    ConsoleLocate (24,12)                          ; x y position
    PrintN (text$)                                 ; Print our text

    Delay (dlay)                                   ; Waits for moment

;
;-------- Cls and Cycle the Text-BG-Color 0 to 15 --------
;                                                  

    ClearConsole()                                 ; This will clean the ConsoleScreen
                                                   ; Info: Standard colors are (8 for text, 0 for backround)
    For i = 0 To 15
        ConsoleColor (0,i)                         ; Change BackGround text color (max 15) in every loop         
        ConsoleLocate (24,4+i)                     ; x y position 
        Print (text$)                              ; Print our text
    Next i

    Delay (dlay)                                   ; Waits for moment

;
;-------- Cls and Cycle the Text-FG-Color 0 to 15 --------
;

    ConsoleColor(0,0)                              ; Set back to black (0,0) for complete background...
    ClearConsole()                                 ; This will clean the ConsoleScreen
                                                   ; Info: Standard colors are (8 for text, 0 for backround)
    For i = 0 To 15
        ConsoleColor (i,0)                         ; Change ForGround text color (max 15) in every loop         
        ConsoleLocate (24,4+i)                     ; x y position 
        Print (text$)                              ; Print our text
    Next i

    Delay (dlay)                                   ; Waits for moment

;
;-------- Cls and Cycle the Background-Color 0 to 15 --------
;

    For a = 1 To 15
        ConsoleColor(a,a)                          ; Cycle background color...
        ClearConsole()                             ; This will clean the ConsoleScreen
        ;                                          ; Info: Standard colors are (8 for text, 0 for backround)
        For i = 0 To 15
            ConsoleColor (i,a)                     ; Change ForGround text color (max 15) in every loop         
            ConsoleLocate (24,4+i)                 ; x y position 
            Print (text$)                          ; Print our text
        Next i
        ;
        Delay(dlay/10)                             ; Waits for moment
    Next a    

    ;-------- Exit --------

    CloseConsole()

SelfErase()
Sollte das bei dir auch so sein, stimmt irgendwas anderes im Programm nicht, das quasi das löschen
der Exe kurzzeitig verhindert.

Gruß,
Falko