| |

Allgemeine DiskussionenBitteschön : | |  | Autor: Joe | Datum: 15.04.02 15:09 |
| Automatisches Programm-Update
03.08.2000
ByVal | Debug | Dim | DoEvents | ForNext | Parameter | PfuiHui | Reg. | Tasten | Update | VB5/6/7
Mit der unten gezeigten Routine wird es einer VB-Anwendung ermöglicht, in einem bestimmten Verzeichnis (sinnvollerweise auf einem Netzlaufwerk) nach einer neuen Version zu suchen. Falls eine solche vorhanden ist, so wird diese neue EXE lokal kopiert und von da an auch benutzt. Soviel zur Idee... Leider gibt es einige Probleme, die dabei auftreten können:
Windows verbietet es, ein gestartetes Programm umzubenennen, überzuschreiben oder gar zu löschen.
Auch wenn ein Programm beendet wird, dauert es u.U. einige Sekunden, bis es wirklich vollständig aus dem Speicher entfernt ist.
Wird die VB-Anwendung mit Kommandozeilen-Parameter gestartet, so muss auch die neue Version mit den gleichen Parametern gestartet werden.
Daher geht die Routine in folgenden Schritten vor (sei der Dateiname der Anwendung "test.exe"):
Wird in dem angegeben Pfad eine neuere Version gefunden, so wird diese lokal kopiert, allerdings als "test.upd.exe" (dies vermeidet die Überschreibe-Konflikte). *1*
Anschließend wird (via Shell und unter Berücksichtigung eventueller Parameter) "test.upd.exe" gestartet und die eigentliche Anwendung beendet. *2*
Die neue (gerade lokal kopierte) Version "test.upd.exe" erkennt am Applikationsnamen (endet mit ".upd"), dass sie erstmals gestartet worden ist. Sie kopiert sich selbst an die Stelle der ursprünglichen "test.exe". *3*
Anschließend wird (via Shell und unter Berücksichtigung eventueller Parameter) die neue Version als "test.exe" gestartet und "test.upd.exe" beendet. *4*
Endlich läuft die neue Version unter dem richtigen Namen "test.exe"! Es bleiben nur noch Aufräumarbeiten, d.h. "test.upd.exe" wird gelöscht. *5*
Private Sub AutoUpdate(ByRef OrgPath As String)
Dim AppPath As String
Dim Versuch As Long
Dim DateLocal As Double
Dim DateNet As Double
On Error Resume Next
If LCase$(Right$(App.EXEName, 4)) <> ".upd" Then
'Normale EXE wurde gestartet:
AppPath = App.Path & "\" & App.EXEName
If Len(Dir$(AppPath & ".upd.exe")) Then
'Aufräumen, ggf. altes Update löschen: *5*
For Versuch = 1 To 10
Err.Clear
Kill AppPath & ".upd.exe"
If Err.Number = 0 Then Exit For
Pause 1
Next Versuch
End If
'Zeitstempel vergleichen: *1*
DateLocal = FileDateTime(AppPath & ".exe")
DateNet = FileDateTime(OrgPath)
If DateNet > DateLocal Then
Beep
'Neue Version lokal kopieren:
For Versuch = 1 To 10
Err.Clear
FileCopy OrgPath, AppPath & ".upd.exe"
If Err.Number = 0 Then Exit For
Pause 1
Next Versuch
If Err.Number Then
'Wiederholter Fehler:
Beep
MsgBox _
App.EXEName & " konnte nicht aktualisiert werden!", _
vbInformation
Else
'Neue Version erstmals starten: *2*
Pause 0.1
Shell AppPath & ".upd.exe " & Command$, vbNormalFocus
End
End If
End If
Else
'Neue Version erstmals gestartet:
AppPath = App.Path & "\" & _
Left$(App.EXEName, Len(App.EXEName) - 4) & ".exe"
'*.upd.exe nach *.exe kopieren: *3*
For Versuch = 1 To 10
Err.Clear
FileCopy App.Path & "\" & App.EXEName & ".exe", AppPath
If Err.Number = 0 Then Exit For
Pause 1
Next Versuch
If Err.Number Then
'Wiederholter Fehler:
Beep
MsgBox _
App.EXEName & " konnte nicht aktualisiert werden!", _
vbInformation
Else
'Endlich die neue Version "richtig" starten: *4*
Pause 0.1
Shell AppPath & " " & Command$, vbNormalFocus
End
End If
End If
End Sub
Typischerweise würde man diese Routine z.B. in der Main-Prozedur verwenden, etwa so:
Sub Main()
'Auf neue Version testen:
AutoUpdate "\SV-DatenAbt3ProgTestTest.exe"
'Ansonsten Hauptformular anzeigen:
frmMDI.Show
End Sub |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
sevISDN 1.0 
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) sevOutBar 4.0 
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|