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. 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:
Fügen Sie Ihrem Projekt zunächst ein neues Modul hinzu und fügen im Folgenden den Code in dieses Modul ein. 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. 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 16.312 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
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. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 sevGraph (VB/VBA) Grafische Auswertungen Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! |
||||||||||||||||
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. |