Löschroutine


Ist ein Skript in FixFoto aktiviert, will man dieses möglicherweise wieder entfernen, z.B. wenn man ein Skript nur mal testen will.
Skriptarchive können sehr unterschiedlich benannt werden und beim Entpacken des Archivs oder bei Anwendung des Skripts werden möglicherweise zusätzliche Dateien und Ordner im FF-Skriptverzeichnis abgelegt. Außerdem legt ein Skript eventuell Daten in der Registry des Betriebssystems ab. Was genau geschieht, weiß nur der Skriptautor und der sollte daher in seinem Skript eine Löschroutine einbauen, mit der auf Wunsch alle Komponenten des Skripts restlos entfernt werden können.

VBS-Beispiel für eine Löschroutine (grün > individuelle Anpassung erforderlich)


Definitionen (jeweils prüfen ob evtl. schon vorhanden)

Der Skriptname muss abgelegt werden,
const SkriptName = "Beispiel.vbs"
die folgenden Objekte sind anzulegen,
Dim objFS
Set objFS = CreateObject("Scripting.FileSystemObject")
Dim WshShell
Set WshShell = CreateObject("WScript.Shell")
die Lese-Konstante ist erforderlich,
const ForReading = 1
drei Variable sind notwendig
Dim Antwort, Abbruch, TempFile
Abbruch = false
und eine Konstante wird definiert, die beim Aufruf der Löschroutine auf true gesetzt wird
Dim SkriptKill
SkriptKill = false

Aufruf und Durchführung

Als erstes muss festgelegt werden, wie die Löschroutine vom Anwender aufgerufen werden soll. Da der Aufruf möglichst versteckt und nicht unbeabsichtigt erfolgen soll, wurde hier die Tastenkombination Alt + d festgelegt. Realisierbar ist dieser Aufruf aber nur, wenn das Skript bei Aufruf einen Dialog anzeigt. In diesem Dialog wird ein BUTTON-Steuerfeld integriert mit der Benennung &d. Das vorgestellte & bewirkt, dass der Button mit der genannten Tastenkombination aktiviert werden kann. Damit das Steuerfeld unsichtbar ist, wird ihm die Größe 1 x 1 zugewiesen.
FF_AddControl Dialog,"&d","BUTTON",40,170,1,1
Um sicher zu stellen, dass der Aufruf direkt erfolgen kann, wird außerdem der Fokus auf den Button gesetzt mit dem Befehl
FF_ActivateControl Dialog,"&d"
In der Abrufschleife erfolgt bei Erkennung von &d eine Sicherheitsabfrage. Wird diese bejaht, wird die Löschroutine aufgerufen.

'### Definitionen ( siehe oben)

'### Dialog mit &d-Schaltfläche

call main
'---------------------------------------------------------------
Sub main
 
do
    Select Case FF_ShowDialog (Dialog)
    Case "&d"
        Antwort = msgbox("Soll das Skript " & SkriptName & vbNewline & _
            " mit allen dazugehörigen Komponenten wirklich gelöscht werden?", _
            vbYesNo + vbQuestion,"Sicherheitsabfrage")
        if Antwort = vbYes then
            SkriptKill = true
            exit do
        end if
    Case "CANCEL"
        exit do
    Case Else
    End Select
loop
 
FF_CloseDialog (Dialog)
if SkriptKill then call KillSkript 'ggf. Skript komplett entfernen

End Sub
'---------------------------------------------------------------
Sub KillSkript
'Skript mit allen Komponenten entfernen
Dim Spfad
const RegSchluessel = "\FF_Beispiel\"
 
'### FixFotoScript.ini bereinigen
TempFile = FF_GetFFPathEx(1) & "\FixFotoScript.ini"
if objFS.FileExists(TempFile) then
    call IniBereinigung
    if Abbruch then exit sub
else
    msgbox "Die Datei FixFotoScript.ini konnte nicht gefunden werden." & vbNewLine & _
    "Der Löschvorgang wird abgebrochen!",vbExclamation,"Hinweis"
    exit sub
end if
 
'### zip-Archiv auf Wunsch sichern, dann löschen
TempFile = FF_GetScriptPath & "\" & objFS.GetBaseName(Skriptname) & ".zip"
'wenn das Archiv einen anderen Namen als das Skript hat, muss das hier berücksichtigt werden!!!
if objFS.FileExists(TempFile) then
 
Antwort = msgbox("Soll das Archiv " & objFS.GetBaseName(Skriptname) & ".zip" & _
    " gesichert werden?",vbYesNo + vbQuestion,"Sicherheitskopie")
if Antwort = vbYes then
    SPfad = FF_EnterPath(true,"Wo soll die Sicherheitskopie angelegt werden?")
    if SPfad = "" then
        msgbox "Das Löschen des Skripts wird abgebrochen!",vbExclamation,"Hinweis"
        exit sub
    end if
    SPfad = SPfad & "\" & objFS.GetBaseName(Skriptname) & ".zip"
    objFS.CopyFile Tempfile, SPfad, true
end if
objFS.DeleteFile TempFile,true
end if
 
'### Skriptdatei löschen
TempFile = FF_GetScriptPath & "\" & Skriptname
objFS.DeleteFile TempFile,true
 
'### evtl. beigepackte bzw. erzeugte Dateien und Ordner löschen
TempFile = FF_GetScriptPath & "\Beipack.txt" 'Dateibeispiel
if objFS.FileExists(TempFile) then objFS.DeleteFile TempFile,true
 
TempFile = FF_GetScriptPath & "\BeipackSammlung" 'Ordnerbeispiel
if objFS. FolderExists (TempFile) then objFS. DeleteFolder TempFile,true
 
'### Registry-Daten löschen
TempFile = "HKEY_CURRENT_USER\Software\Joachim Koopmann Software\FixFoto\Script" & RegSchluessel
WshShell.RegDelete(TempFile)
 
'### Fertigmeldung
msgbox "Nach Durchführung der 'Automatischen Skriptkonfiguration' ist das Skript" & vbNewLine & _
Skriptname & " mit allen Komponenten gelöscht!",vbExclamation,"Hinweis"
 
End Sub
'---------------------------------------------------------------
Sub IniBereinigung
'FixFotoScript.ini - Bereinigung
Dim Zeile, zNr,Anfang, Ende, DateiTmp, ZielZeile, tmpString
 
DateiTmp = FF_GetFFPathEx(1) & "\FixFotoScript.tmp"
 
'### Wo befindet sich der Eintrag zum Skript?
Set Zeile = objFS.OpenTextFile(TempFile, ForReading)
zNr = 0
do Until Zeile.AtEndOfStream
    tmpString = Zeile.ReadLine
    zNr = zNr + 1
    if tmpString = "[Script]" then Anfang = zNr
    if tmpString = "File=.\" & Skriptname then
        Ende = zNr
        exit do
    end if
loop
Zeile.Close
 
if Ende <= Anfang then
    msgbox "Die Datei FixFotoScript.ini konnte nicht bereinigt werden." & vbNewLine & _
        "Der Löschvorgang wird abgebrochen!",vbExclamation,"Hinweis"
    Abbruch = true
    exit sub
end if
 
'### Zeilen ohne skriptbezogene Zeilen in DateiTmp übertragen
Set Zeile = objFS.OpenTextFile(TempFile, ForReading)
Set ZielZeile = objFS.CreateTextFile(DateiTmp, True)
zNr = 0
do Until Zeile.AtEndOfStream
    tmpString = Zeile.ReadLine
    zNr = zNr + 1
    if zNr < Anfang or zNr > Ende then
        ZielZeile.WriteLine tmpString
    end if
loop
Zeile.Close
ZielZeile.Close
 
'### Umkopieren von DateiTmp nach FixFotoScript.ini (TempFile)
objFS.CopyFile DateiTmp, TempFile, True
objFS.DeleteFile (DateiTmp)
 
End Sub
'---------------------------------------------------------------

Bevor man diese Routine testet muss natürlich das Skript gesichert werden um es nachher wieder importieren zu können.