meta data for this page
  •  

Updatefunktion


Um zu prüfen, ob ein Update für ein Skript möglch ist, muss im Skript selbst die Version abgelegt sein und der Ort im Internet, wo die aktuelle Version abgelegt ist.

Das kann beispielsweise im Skriptkopf wie folgt eingetragen und dann beim Update ausgelesen werden

  1. 'FFSkriptVersion=3.03
  2. 'FFSkriptURL=http://www.ffsf.de/local_links.php?catid=235&linkid=914

oder direkt in Konstanten definiert werden, was das Auslesen einspart

  1. const SkriptVersion = "3.03"
  2. const SkriptUrl = http://www.ffsf.de/local_links.php?catid=235&linkid=914

Für FF-Skripte bietet sich an, die aktuelle Versionsnummer auf der Downloadseite im Zubehörbereich einzutragen. Das erlaubt dann auch den Aufruf dieser Webseite, wenn ein Update
gewünscht wird. Hier ein Beispiel dafür, wie das aussehen kann: Downloadseite für das Skript Webschatten

Sind Skriptversion und aktuelle Version bekannt, kann aus einem Vergleich abgeleitet werden, ob ein Update möglich ist. Im folgenden Beispiel wird dann angeboten, direkt die Downloadseite aufzurufen.

Skriptbeispiel für einen Updatetest (vbs)

  1. Option Explicit
  2. const SkriptVersion = "3.02"
  3. const SkriptUrl = "http://www.ffsf.de/local_links.php?catid=235&linkid=914"
  4. '************************************************************************
  5. 'Suchen der Versionsangabe auf der SkriptURL und diese
  6. 'vergleichen mit der SkriptVersion
  7.  
  8. Dim objFS,WshShell
  9. Set objFS = CreateObject("Scripting.FileSystemObject")
  10. Set WshShell = CreateObject("WScript.Shell")
  11.  
  12. Dim UrlVersion,UrlV_Zahl,SkriptV_Zahl
  13. Dim Abbruch : Abbruch = false
  14. '************************************************************************
  15.  
  16. call Update
  17.  
  18. '------------------------------------------------------------------------
  19. Sub Update
  20. Dim Antwort
  21.  
  22. call Versionsermittlung_url
  23.  
  24. if not Abbruch then
  25. SkriptV_Zahl = Replace(SkriptVersion,".","") *1
  26.  
  27. if UrlV_Zahl = SkriptV_Zahl then
  28. msgbox "Die Version " & SkriptVersion & " ist aktuell!",vbInformation,"Versionsmeldung"
  29. elseif SkriptV_Zahl < UrlV_Zahl then
  30. Antwort = msgbox("Die Skriptversion " & SkriptVersion & " ist nicht mehr aktuell!" & vbNewLine &_
  31. "Es steht die Version " & UrlVersion & " zum Download bereit." & vbNewLine & vbNewLine & _
  32. "Soll die Downloadseite aufgerufen werden?",vbQuestion + vbYesNo,"Versionsmeldung")
  33. if Antwort = vbYes then
  34. on error resume next
  35. WshShell.Run SkriptUrl,1,false
  36. if err <> 0 then
  37. msgbox "Die Downloadseite wurde nicht gefunden!",vbExclamation,"Hinweis"
  38. err.clear
  39. end if
  40. on error goto 0
  41. end if
  42. else
  43. msgbox "Es liegt ein Fehler in den Versionsangaben vor." & vbNewLine &_
  44. "Die Skriptversion " & SkriptVersion & " ist größer als die auf" & vbNewLine &_
  45. "der Downloadseite angegebene Version " & UrlVersion & ".",vbInformation,"Fehlermeldung"
  46. end if
  47. end if
  48.  
  49. End Sub
  50. '------------------------------------------------------------------------
  51. Sub Versionsermittlung_url
  52.  
  53. Dim Inhalt,Start,Zeit,pos1,pos2,n
  54. Dim Browser
  55.  
  56. on error resume next
  57. Set Browser = CreateObject("InternetExplorer.Application")
  58. Browser.Navigate SkriptUrl 'Zugriff auf die Internetseite
  59. if err.number > 0 then
  60. msgbox "Der Internetexplorer kann nicht aufgerufen werden." & vbNewLine & _
  61. "Damit steht die Updatefunktion nicht zur Verfügung!",vbCritical,"Hinweis"
  62. Abbruch = true
  63. exit sub
  64. end if
  65.  
  66. 'max. 6 sec. prüfen, ob die Seite geladen wurde
  67. Start = Timer
  68. do
  69. Inhalt = Browser.Document.Body.InnerHtml
  70. if instr(Inhalt,"Version") > 0 then exit do
  71.  
  72. FF_Sleep(200) 'Zeit für die Arbeit des IE (wichtig!)
  73.  
  74. Zeit = Timer - Start
  75. if Zeit < 0 then Start = Timer
  76.  
  77. loop until Zeit > 6
  78. on error goto 0
  79.  
  80. ' Ressourcen freigeben
  81. Browser.Quit
  82. Set Browser = Nothing
  83.  
  84. if len(Inhalt) = 0 then
  85. msgbox "Die Versionsangabe im Internet wurde nicht gefunden!" & vbNewLine &_
  86. "Möglicherweise funktioniert der Internetaufruf nicht." & vbNewLine & vbNewLine & _
  87. "Am besten nochmal probieren!",vbExclamation,"SkriptVersion " & SkriptVersion
  88. exit sub
  89. end if
  90.  
  91. 'Version ermitteln
  92. pos1 = instr(Inhalt,"Version")
  93. if pos1 > 0 then
  94. pos2 = instr(pos1,Inhalt,".")
  95. if pos2 > pos1 then
  96. UrlVersion = trim(mid(Inhalt,pos1,pos2-pos1 +3))
  97. else
  98. msgbox "Auf diesem Rechner funktioniert die Updatefunktion leider nicht!",vbCritical,"Updateinfo B"
  99. Abbruch = true
  100. exit sub
  101. end if
  102. else
  103. msgbox "Auf diesem Rechner funktioniert die Updatefunktion leider nicht!",vbCritical,"Updateinfo A"
  104. Abbruch = true
  105. exit sub
  106. end if
  107.  
  108. 'Version als Zahl
  109. pos1 = instr(UrlVersion," ")
  110. if pos1 = 0 then pos1 = 7
  111. UrlVersion = trim(mid(UrlVersion,pos1+1))
  112. UrlV_Zahl = Replace(UrlVersion,".","") *1
  113.  
  114. End Sub
  115. '------------------------------------------------------------------------

Der Zugriff auf die Webseite zur Versionsermittlung kann auch über das Objekt XMLHTTP erfolgen wie es im Beitrag URL auslesen beschrieben ist. Der ist nach den letzten Erfahrungen schneller und zuverlässiger und wird daher empfohlen.

Die oben gezeigte Unterroutine Versionsermitllung_url kann dann beispielsweise wie folgt aussehen:

  1. Sub Versionsermittlung_url
  2.  
  3. Dim objXML,Inhalt,Start,Zeit,pos1,pos2,n
  4. Dim Fehler : Fehler = false
  5.  
  6. on error resume next
  7. Set objXML = CreateObject("Microsoft.XMLHTTP")
  8. objXML.Open "Get",SkriptUrl,false
  9. objXML.Send
  10.  
  11. Inhalt = objXML.responseText
  12.  
  13. if err > 0 then
  14. Fehler = true
  15. else
  16. 'Version suchen und anzeigen
  17. pos1 = instr(Inhalt,"Version")
  18. if pos1 > 0 then
  19.  
  20. pos2 = instr(pos1,Inhalt,"<br")
  21. if pos2 > 0 then
  22. UrlVersion = trim(mid(Inhalt,pos1,pos2-pos1))
  23. else
  24. Fehler = true
  25. end if
  26. else
  27. Fehler = true
  28. end if
  29. end if
  30.  
  31. Set objXML = nothing
  32.  
  33. if Fehler then
  34. msgbox "Die Versionsangabe wurde nicht gefunden!" & vbNewLine &_
  35. "Möglicherweise funktioniert der Internetaufruf nicht." & vbNewLine & vbNewLine & _
  36. "Am besten nochmal probieren!",vbExclamation,"Fehlermeldung"
  37. Abbruch = true
  38. exit sub
  39. end if
  40.  
  41. 'Version als Zahl
  42. pos1 = instr(UrlVersion," ")
  43. if pos1 = 0 then pos1 = 7
  44. UrlVersion = trim(mid(UrlVersion,pos1+1))
  45. UrlV_Zahl = Replace(UrlVersion,".","") *1
  46.  
  47. End Sub

Das Ganze setzt natürlich eine sorgfältige Pflege der Versionsangaben, sowohl im Skript als auch auf der Downloadseite voraus.

Der Aufruf des Updatetest könnte bei jedem Skriptstart erfolgen oder/und auf einen Befehl hin, der vom Benutzer ausgelöst wird.

  1. 'max. 3 sec. prüfen, ob die die Seite geladen ist
  2. Start = Timer
  3. do
  4. on error resume next
  5. Inhalt = Browser.Document.Body.InnerHtml
  6. on error goto 0