2012-10-08 15 views
21

Per il progetto su cui sto lavorando, non sono autorizzato a utilizzare ClickOnce. Il mio capo vuole che il programma appaia "reale" (con un programma di installazione, ecc.).Come aggiornare automaticamente un'applicazione senza ClickOnce?

Ho installato Visual Studio 2012 Professional e ho giocato con il programma di installazione InstallShield, e sicuramente rende gli installer carini, ma non riesco a capire come abilitare l'applicazione all'aggiornamento automatico (cioè, quando si avvia, controlla per assicurarsi che stia usando l'ultima versione).

Mi è stato chiesto di apportare una piccola modifica al codice: passare un'aggiunta a una sottrazione e non voglio che le persone debbano disinstallare la vecchia versione e quindi dover reinstallare la nuova versione ogni volta Faccio un piccolo cambiamento come questo.

Come posso fare in modo che l'applicazione controlli gli aggiornamenti e li installi? O questo non è possibile (o non è facile)?

+0

possibile duplicato del [libreria di Auto-aggiornamento per .NET?] (Http://stackoverflow.com/questions/691663/auto -update-library-for-net) –

risposta

15

Ci sono già molte domande su questo, quindi vi rimanderò a quelle.

Una cosa che si vuole fare in modo di evitare la necessità di disinstallazione, è che si utilizza lo stesso codice di aggiornamento su ogni versione, ma cambiare il codice del prodotto . Questi valori si trovano nelle proprietà del progetto Installshield.

Alcune referenze:

+1

Ho provato questo - entrando e cambiando il codice del prodotto. Ma quando vado a reinstallare, Si dice che sta installando, ma non cambia affatto il programma .... qualche idea? grazie :) – Toadums

+0

Oh, sembra che lo abbia effettivamente reinstallato (più volte), ma non abbia mai aggiornato i file sul mio computer – Toadums

+0

La versione già installata è stata eseguita utilizzando lo stesso codice di aggiornamento del tuo attuale programma di installazione? In caso contrario, potrebbe essere necessario utilizzare Orca. Vedi anche questa domanda: http://stackoverflow.com/q/11540520/161052 – JYelton

1

Il più comm sulla strada sarebbe di mettere un semplice file di testo (XML sarebbe meglio) sul tuo server web con l'ultima versione di build. L'applicazione scaricherà questo file, verificherà la versione e avvierà l'aggiornamento. Un tipico file sarebbe simile a questa:

Aggiornamento dell'applicazione File // Una stringa univoca che lasciare che l'applicazione riconosce il tipo di file

versione: 1.0.0 // ultima versione di montaggio

scaricare: http://yourserver.com/ ... // Un link per la versione download

redicrect: http://yournewserver.com/ ... // ho usato questo fi campo in caso di modifica dell'indirizzo del server. Ciò consentirebbe al cliente di sapere che è necessario guardare a un nuovo indirizzo.

È inoltre possibile aggiungere altri dettagli importanti.

+0

che ha senso. ma come si evita il messaggio di: "Un'altra versione di questo progetto è già installata ...." quando si va a reinstallare? – Toadums

+0

come indicato da @JYelton mantiene lo stesso codice di aggiornamento. Ci sono altri modi, ma ho dimenticato :( –

1

Questo è il codice per aggiornare il file ma non per l'installazione Questo programma viene eseguito tramite dos per copiare i file alla data più recente ed eseguire automaticamente il programma.possono aiutare a

aprire il blocco note e salvare il file sotto con ext .bat

xcopy \\IP address\folder_share_name\*.* /s /y /d /q 
start "label" /b "youraplicationname.exe" 
3

Credo che si dovrebbe verificare il seguente progetto codeplex.com http://autoupdater.codeplex.com/

Questa applicazione di esempio è sviluppato in C# come una biblioteca con il nome del progetto "AutoUpdater". La DLL "AutoUpdater" può essere utilizzata in un'applicazione Windows C# (WinForm e WPF).

ci sono alcune caratteristiche circa l'AutoUpdater:

  1. facile da implementare e utilizzare.
  2. Riavvio automatico dell'applicazione dopo aver verificato l'aggiornamento.
  3. Processo di aggiornamento trasparente per l'utente.
  4. Per evitare il blocco del thread principale utilizzando il download multi-thread.
  5. Possibilità di aggiornare il sistema e anche il programma di aggiornamento automatico.
  6. Un codice che non richiede modifiche quando utilizzato da sistemi diversi e potrebbe essere compilato in una libreria.
  7. Facile per l'utente scaricare i file di aggiornamento.

Come utilizzare?

Nel programma che si desidera aggiornare automaticamente, è sufficiente chiamare la funzione AutoUpdate nella procedura principale. La funzione AutoUpdate controllerà la versione con quella letta da un file che si trova in un sito Web/FTP. Se la versione del programma è inferiore a quella letta, il programma scarica il programma di aggiornamento automatico e lo avvia e la funzione restituisce True, il che significa che verrà eseguito un aggiornamento automatico e il programma corrente dovrebbe essere chiuso. Il programma di aggiornamento automatico riceve diversi parametri dal programma da aggiornare ed esegue l'aggiornamento automatico necessario e successivamente avvia il sistema aggiornato.

#region check and download new version program 
    bool bHasError = false; 
    IAutoUpdater autoUpdater = new AutoUpdater(); 
    try 
    { 
     autoUpdater.Update(); 
    } 
    catch (WebException exp) 
    { 
     MessageBox.Show("Can not find the specified resource"); 
     bHasError = true; 
    } 
    catch (XmlException exp) 
    { 
     bHasError = true; 
     MessageBox.Show("Download the upgrade file error"); 
    } 
    catch (NotSupportedException exp) 
    { 
     bHasError = true; 
     MessageBox.Show("Upgrade address configuration error"); 
    } 
    catch (ArgumentException exp) 
    { 
     bHasError = true; 
     MessageBox.Show("Download the upgrade file error"); 
    } 
    catch (Exception exp) 
    { 
     bHasError = true; 
     MessageBox.Show("An error occurred during the upgrade process"); 
    } 
    finally 
    { 
     if (bHasError == true) 
     { 
      try 
      { 
       autoUpdater.RollBack(); 
      } 
      catch (Exception) 
      { 
      //Log the message to your file or database 
      } 
     } 
    } 
    #endregion 
1

Un Lay modo degli uomini è

su Main() rinominare il file di assieme esecuzione exe per qualche altra cosa data controllo e l'ora di creazione. e l'ora di data del file aggiornato e copia nella cartella dell'applicazione.

//Rename he executing file 
System.IO.FileInfo file = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location); 

System.IO.File.Move(file.FullName, file.DirectoryName + "\\" + file.Name.Replace(file.Extension,"") + "-1" + file.Extension); 

poi fare il check logica e copiare il nuovo file per l'esecuzione di cartelle

Problemi correlati