Frage von Aaronator30, 27

Kann sich eine VB.net-Datei selbst ersetzen?

Hey, ich will beim Start meines Programmes dass sich die Datei selbst updatet, da ich die Datei an einer Stelle speicher und die sich beim Update auf eine neuere Version auch dort hinzufügen soll.

Dafür nutzte ich bisher das:

If Not IO.File.Exist("DATEIPFAD") Then
    My.Computer.FileSystem.CopyFile("DATEINAME", "DATEIPFAD")
Else
    My.Computer.FileSystem.DeleteFile("DATEIPFAD")
    My.Computer.FileSystem.CopyFile("DATEINAME", "DATEIPFAD")
End If

Jedoch geht das nur, wenn ich die Datei habe und nicht in DATEIPFAD ausführe. Ansonsten heißt es: Programm funktioniert nicht - CLR02r3

Kann ich das so machen, dass wenn ich das Programm an einer anderen Stelle öffne, die Datei ersetzt wird und wenn ich das in dem Pfad selbst öffne dann nicht? Oder dass die Datei sich dann ohne einen Fehler ersetzt...

Antwort
von PWolff, 16

Eine Datei kann nicht ersetzt werden, während sie gesperrt ist, und ausführbare Dateien sind während der Ausführung geperrt (außer batch-Dateien, warum auch immer).

Ich verstehe nicht ganz, was du willst ...

Aber du kannst von deinem Programm aus ein anderes Programm starten, das Original-Programm beenden, dann das andere Programm die Datei des Originalprogramms austauschen lassen, die Austausch-Datei starten und das zweite Programm wieder beenden.

Antwort
von xGlumi, 15

Wieso lässt du die neue Datei nicht einfach auf den Desktop laden (oder in dem Ordner, wo die aktuelle Datei liegt), und lässt diese dann ausführen.

Anschließend lässt du das Programm sich selbst schließen und löschen.

MFG xGlumi

Kommentar von Aaronator30 ,

aber die neue datei soll dann auch in dem dateipfad liegen. und wenn ich die auf dem desktop starte und eine neue version vorhanden ist habe ich wieder das gleiche problem...

Kommentar von xGlumi ,

Dann mach folgendes...

  1. Update z.b in %APPDATA% runterladen.
  2. Programm mit Parametern aufrufen lassen, und die "alte Version" sich selbst schließen lassen.
  3. Das neue Programm(Das die Parameter übergeben bekommen hat), speichert sich nun den 1. Parameter (Welcher der Absolute Pfad zur "alten Version" ist, und löscht diese
  4. Das Update Kopiert nun sich selbst an dessen Stelle (mit dem Namen, dem ihm als Parameter übergeben wurde)

MFG xGlumi

Kommentar von CrystalixXx ,

Dort sollten Dateien auf keinen Fall einfach so landen...

Es gibt nicht umsonst ein Temp-Verzeichnis. Das ist für solche Vorhaben perfekt geeignet. Kein Desktop, keine Eigenen Dateien und kein Appdata oder sonst irgendein Verzeichnis!

Kommentar von xGlumi ,

erzähl kein schwachsinn crystalixxx, danke

Kommentar von CrystalixXx ,

Du hälst es solange für Schwachsinn bis du auf Berechtigungsprobleme in einer nicht-privaten Umgebung triffst.

PS: Du darfst übrigens auch gerne Begründungen zu deinen Ansichten abliefern. Macht es einfacher.

Keine passende Antwort gefunden?

Fragen Sie die Community