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.

  1. '### Definitionen ( siehe oben)
  2.  
  3. '### Dialog mit &d-Schaltfläche
  4.  
  5. call main
  6. '---------------------------------------------------------------
  7. Sub main
  8.  
  9. do
  10. Select Case FF_ShowDialog (Dialog)
  11. Case "&d"
  12. Antwort = msgbox("Soll das Skript " & SkriptName & vbNewline & _
  13. " mit allen dazugehörigen Komponenten wirklich gelöscht werden?", _
  14. vbYesNo + vbQuestion,"Sicherheitsabfrage")
  15. if Antwort = vbYes then
  16. SkriptKill = true
  17. exit do
  18. end if
  19. Case "CANCEL"
  20. exit do
  21. Case Else
  22. End Select
  23. loop
  24.  
  25. FF_CloseDialog (Dialog)
  26. if SkriptKill then call KillSkript 'ggf. Skript komplett entfernen
  27.  
  28. End Sub
  29. '---------------------------------------------------------------
  30. Sub KillSkript
  31. 'Skript mit allen Komponenten entfernen
  32. Dim Spfad
  33. const RegSchluessel = "\FF_Beispiel\"
  34.  
  35. '### FixFotoScript.ini bereinigen
  36. TempFile = FF_GetFFPathEx(1) & "\FixFotoScript.ini"
  37. if objFS.FileExists(TempFile) then
  38. call IniBereinigung
  39. if Abbruch then exit sub
  40. else
  41. msgbox "Die Datei FixFotoScript.ini konnte nicht gefunden werden." & vbNewLine & _
  42. "Der Löschvorgang wird abgebrochen!",vbExclamation,"Hinweis"
  43. exit sub
  44. end if
  45.  
  46. '### zip-Archiv auf Wunsch sichern, dann löschen
  47. TempFile = FF_GetScriptPath & "\" & objFS.GetBaseName(Skriptname) & ".zip"
  48. 'wenn das Archiv einen anderen Namen als das Skript hat, muss das hier berücksichtigt werden!!!
  49. if objFS.FileExists(TempFile) then
  50.  
  51. Antwort = msgbox("Soll das Archiv " & objFS.GetBaseName(Skriptname) & ".zip" & _
  52. " gesichert werden?",vbYesNo + vbQuestion,"Sicherheitskopie")
  53. if Antwort = vbYes then
  54. SPfad = FF_EnterPath(true,"Wo soll die Sicherheitskopie angelegt werden?")
  55. if SPfad = "" then
  56. msgbox "Das Löschen des Skripts wird abgebrochen!",vbExclamation,"Hinweis"
  57. exit sub
  58. end if
  59. SPfad = SPfad & "\" & objFS.GetBaseName(Skriptname) & ".zip"
  60. objFS.CopyFile Tempfile, SPfad, true
  61. end if
  62. objFS.DeleteFile TempFile,true
  63. end if
  64.  
  65. '### Skriptdatei löschen
  66. TempFile = FF_GetScriptPath & "\" & Skriptname
  67. objFS.DeleteFile TempFile,true
  68.  
  69. '### evtl. beigepackte bzw. erzeugte Dateien und Ordner löschen
  70. TempFile = FF_GetScriptPath & "\Beipack.txt" 'Dateibeispiel
  71. if objFS.FileExists(TempFile) then objFS.DeleteFile TempFile,true
  72.  
  73. TempFile = FF_GetScriptPath & "\BeipackSammlung" 'Ordnerbeispiel
  74. if objFS. FolderExists (TempFile) then objFS. DeleteFolder TempFile,true
  75.  
  76. '### Registry-Daten löschen
  77. TempFile = "HKEY_CURRENT_USER\Software\Joachim Koopmann Software\FixFoto\Script" & RegSchluessel
  78. WshShell.RegDelete(TempFile)
  79.  
  80. '### Fertigmeldung
  81. msgbox "Nach Durchführung der 'Automatischen Skriptkonfiguration' ist das Skript" & vbNewLine & _
  82. Skriptname & " mit allen Komponenten gelöscht!",vbExclamation,"Hinweis"
  83.  
  84. End Sub
  85. '---------------------------------------------------------------
  86. Sub IniBereinigung
  87. 'FixFotoScript.ini - Bereinigung
  88. Dim Zeile, zNr,Anfang, Ende, DateiTmp, ZielZeile, tmpString
  89.  
  90. DateiTmp = FF_GetFFPathEx(1) & "\FixFotoScript.tmp"
  91.  
  92. '### Wo befindet sich der Eintrag zum Skript?
  93. Set Zeile = objFS.OpenTextFile(TempFile, ForReading)
  94. zNr = 0
  95. do Until Zeile.AtEndOfStream
  96. tmpString = Zeile.ReadLine
  97. zNr = zNr + 1
  98. if tmpString = "[Script]" then Anfang = zNr
  99. if tmpString = "File=.\" & Skriptname then
  100. Ende = zNr
  101. exit do
  102. end if
  103. loop
  104. Zeile.Close
  105.  
  106. if Ende <= Anfang then
  107. msgbox "Die Datei FixFotoScript.ini konnte nicht bereinigt werden." & vbNewLine & _
  108. "Der Löschvorgang wird abgebrochen!",vbExclamation,"Hinweis"
  109. Abbruch = true
  110. exit sub
  111. end if
  112.  
  113. '### Zeilen ohne skriptbezogene Zeilen in DateiTmp übertragen
  114. Set Zeile = objFS.OpenTextFile(TempFile, ForReading)
  115. Set ZielZeile = objFS.CreateTextFile(DateiTmp, True)
  116. zNr = 0
  117. do Until Zeile.AtEndOfStream
  118. tmpString = Zeile.ReadLine
  119. zNr = zNr + 1
  120. if zNr < Anfang or zNr > Ende then
  121. ZielZeile.WriteLine tmpString
  122. end if
  123. loop
  124. Zeile.Close
  125. ZielZeile.Close
  126.  
  127. '### Umkopieren von DateiTmp nach FixFotoScript.ini (TempFile)
  128. objFS.CopyFile DateiTmp, TempFile, True
  129. objFS.DeleteFile (DateiTmp)
  130.  
  131. End Sub
  132. '---------------------------------------------------------------


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