meta data for this page
  •  

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

loeschroutine [2011/06/02 09:33] (aktuell)
Zeile 1: Zeile 1:
 +====== 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.