2013-06-03 6 views
8

Sto provando a creare un rapido auto-aggiornamento in Perl Windows. Ho notato che quando chiamo cpanp per installare l'aggiornamento del pacchetto non riesce a installare una nuova versione dello script perché lo script è attualmente in esecuzione. Sto chiamando cpanp con CORE::system() attualmente. Se avessi chiamato cpanp con exec(), avresti rilasciato l'eseguibile per la sostituzione? Oppure, Windows lo tiene legato anche se l'esecuzione è stata interamente convertita in cpanp?Aggiornamento automatico script di Windows che sostituisce l'eseguibile corrente con exec?

Attualmente, il mio flusso di processo simile a questa,

  1. Scarica META.yml dai server
  2. analizzare fuori la versione di META.yml
  3. confrontare con l'attuale $VERSION
    • Se la corrente la versione è inferiore, genera una stringa di versione utilizzando i dati in META.yml
      1. Ge nerare un URL al pacchetto utilizzando l'host/percorso per META.yml e la versione/informazioni
      2. Informare l'utente dell'aggiornamento
      3. Spawn cpanp eseguire l'aggiornamento con l'URL.
    • Se la versione corrente è la stessa
      1. fare nulla

Sarebbe system() comportarsi in modo diverso rispetto exec() su Win32 per quanto riguarda la sostituzione del file eseguibile? Su Linux funziona come progettato.

+0

Stai parlando del ** Perl ** eseguibile? –

risposta

Problemi correlati