vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - G?nnen Sie Ihrem SQL-Kommando diesen kr?nenden Abschlu?!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2015
 
zurück
Rubrik: Dateisystem · Dateien allgemein   |   VB-Versionen: VB4, VB5, VB626.07.04
Ersetzen von Dateien, die in Benutzung sind

Haben Sie sich nicht schon lange gefragt, wie man unter Windows Dateien austauscht, die im Zugriff sind? Dieser Tipp verrät, wie´s geht.

Autor:   Gerhard KuklauBewertung:     [ Jetzt bewerten ]Views:  11.483 
ohne HomepageSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10kein Beispielprojekt 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise über 100,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 455,- EUR statt 569,- EUR
  • sevDTA 2.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 18,70 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 58,70 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    Haben Sie sich nicht auch schon einmal gefragt, wie man unter Windows Dateien austauscht, die gerade in Benutzung sind?

    Wer hat nicht schon immer mal wissen wollen, wie man die Exe-Datei austauscht, die gerade geladen ist?

    Unter Windows können Dateien, die im Zugriff sind, nicht einfach ausgetauscht werden.
    Das ist insbesondere dann ärgerlich, wenn man in der Anwendung einen eigenen Update-Service integrieren möchte.

    Auch Microsoft hat dies erkannt und dem Windows-Betriebsystem einen Mechanismus spendiert, der genau dafür vorgesehen ist:

    MoveFileEx

    Der Name ist vielversprechend

    Wir bauen heute eine Function um diese API, die neben einem sprechenden Namen fChangeFileOnReboot auch eine bequeme Handhabung ermöglicht.

    Aber bevor wir damit loslegen, noch ein Hinweis zu den Bedingungen, die unbedingt einzuhalten sind:

    • Das Parkverzeichnis, in dem wir die zu kopierende Datei vorhalten, muß auf dem gleichen Laufwerk (Partition) liegen, von der das System gebootet wird.
    • Die API-Funktion muß für jede zu kopierende Datei mit den entsprechenden Werten aufgerufen werden (das gilt dann natürlich auch für unsere Function).
    • Die Datei(en) müssen in das Parkverzeichnis kopiert werden. Diese Arbeit wird von der Function nicht geleistet!

    Fügen Sie Ihrem Projekt zunächst ein neues Modul hinzu und fügen im Folgenden den Code in dieses Modul ein.
    Beginnen wir mit den Deklarationen der benötigten API-Funktionen:

    Option Explicit
    ' -------------------------------------------------------------------
    ' Austauschen von Dateien, die im Zugriff sind:
    ' =============================================
    ' Unter Windows können Dateien, die im Zugriff sind, nicht einfach
    ' ausgetauscht werden. Dafür gibt es einen Mechnismus, der die
    ' Dateien beim Boot (Reboot, Restart) vor Erstellung des Windows-Swap-Files
    ' kopiert.
    ' Voraussetzung ist:
    ' - Quell- und Zieldatei müssen auf dem gleichen Laufwerk liegen
    ' - Aufruf der Function MoveFileEx mit dem Flag MOVEFILE_DELAY_UNTIL_REBOOT
    ' -------------------------------------------------------------------
     
    Private Declare Function MoveFileEx Lib "kernel32" _
      Alias "MoveFileExA" ( _
      ByVal lpExistingFileName As String, _
      ByVal lpNewFileName As String, _
      ByVal dwFlags As Long) As Long
     
    Private Const MOVEFILE_REPLACE_EXISTING = &H1
    Private Const MOVEFILE_COPY_ALLOWED = &H2
    Private Const MOVEFILE_DELAY_UNTIL_REBOOT = &H4

    Danach kommen wir zur eigentlichen Funktion

    Wie versprochen, wollen wir der Funktion ein wenig Intelligenz mitgeben, um komfortabel darauf zurückgreifen zu können. Die Funktion fChangeFileOnReboot gibt einen Rückgabewert vom Typ "Boolean" zurück, der über den Erfolg bzw. Mißerfolg Auskunft gibt.

    Die beiden Übergabeparameter "ExistingFile" und "NewFile" sprechen für sich.

    Public Function fChangeFileOnReboot( _
      ExistingFile As String, NewFile As String) As Boolean
     
      Dim lRet As Long
     
      ' ------------------------------------------------------
      ' Ist eine der beiden Dateinamen nicht übergeben worden, 
      ' wird die Function beendet und gibt False zurück:
      ' ======================================================
      If ExistingFile = "" Or NewFile = "" Then
        fChangeFileOnReboot = False
        Exit Function
      End If
     
      ' -------------------------------------------------------------------
      ' Eintragen der Dateipfade zum Austausch beim nächsten Reboot (Boot):
      ' ===================================================================
      lRet = MoveFileEx(ExistingFile, NewFile, MOVEFILE_DELAY_UNTIL_REBOOT + _ 
        MOVEFILE_REPLACE_EXISTING)
     
      ' --------------------------------------------------------
      ' Wenn die Function fehlerfrei ausgeführt wurde, dann wird
      ' ein Long-Wert > 0 zurückgegeben:
      ' ========================================================
      fChangeFileOnReboot = (lRet > 0)  
    End Function

    Kommen wir zur praktischen Anwendung der Funktion fChangeFileOnReboot.
    Im folgenden Beispiel soll die "MyApp.exe" ausgetauscht werden, die in unserem Beispiel als Servertask (z.B. als Dienst) ständig geladen ist.

    If fChangeFileOnReboot("c:\Files_Parken\MyApp.exe", _
      "c:\Programme\MyApp\MyApp.exe") = True Then
     
      MsgBox “Datei MyApp.exe wird beim nächsten Reboot ausgetauscht”
    End If

    Tja, und wenn jetzt das System neu gestartet wird, dann wird auch die Datei ausgetauscht.
     

    Dieser Tipp wurde bereits 11.483 mal aufgerufen.

    Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

    Über diesen Tipp im Forum diskutieren
    Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

    Neue Diskussion eröffnen

    nach obenzurück


    Anzeige

    Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

    Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
    - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
    - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
    Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
     
       

    Druckansicht Druckansicht Copyright ©2000-2015 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