Automatische Aktualisierung des Windows-Skripts ersetzt die aktuelle ausführbare Datei durch exec?

8

Ich versuche einen schnellen automatischen Updater in Perl Windows zu erstellen. Ich habe festgestellt, dass wenn ich cpanp anrufe, um das Update des Pakets zu installieren, es keine neue Version des Skripts installieren kann, weil das Skript gerade ausgeführt wird. Ich rufe momentan cpanp mit CORE::system() an. Wenn ich cpanp mit exec() aufrufen würde, würde das die ausführbare Datei zum Ersetzen freigeben? Oder hält Windows die Verbindung aufrecht, obwohl die Ausführung vollständig in cpanp umgesetzt wurde?

Momentan sieht mein Prozessablauf so aus,

  1. Laden Sie META.yml vom Server
  2. herunter
  3. Parsen Sie die Version von META.yml
  4. aus
  5. Vergleiche mit dem aktuellen $VERSION
    • Wenn die aktuelle Version niedriger ist, generieren Sie eine Versionszeichenfolge mit den Daten in META.yml
      1. Generieren Sie eine URL zum Paketieren mit dem Host / Pfad von META.yml und der Version / Dateninformation
      2. Benutzer über update informieren
      3. Spawn cpanp , um das Update mit URL auszuführen.
    • Wenn die aktuelle Version die gleiche ist
      1. Nichts tun

Würde system() sich anders verhalten als exec() auf Win32 bezüglich des Ersetzens der ausführbaren Datei? Unter Linux funktioniert es wie vorgesehen.

    
Evan Carroll 03.06.2013, 16:17
quelle

1 Antwort

1

Ich habe es gerade getestet. exec funktioniert sowohl unter Linux als auch unter Win32. Siehe diese Seite für Informationen zur Portabilität auf Perl .

    
Francisco Zarabozo 20.08.2013 06:43
quelle