2014-04-30 16 views
5

Sto avendo un po 'di difficoltà a capire come InstallShield tratta aggiornamenti.Eseguire sempre la rimozione/reinstallazione durante l'aggiornamento

Quello che voglio è essere in grado di incrementare il numero di versione del programma di installazione, ricompilare, e distribuire il mio programma di installazione. Questo dovrebbe rimuovere automaticamente qualsiasi versione precedente dell'applicazione e installare la versione più recente (e dovrebbe essere presentata all'utente come "aggiornamento").

Questo è un programma di installazione molto semplice, prende solo l'output da alcuni progetti di Visual Studio (un'applicazione EXE, alcune DLL e così via) e li installa tutti in Programmi. C'è solo una funzione ed è sempre installata.

Io non voglio cambiare il codice di aggiornamento del prodotto perché avrei poi dovuto creare nuovi percorsi di aggiornamento (uno per ogni versione precedente), che è disordinato.

Ho provato prima questo (incrementando il numero di versione, ma non modificando né il codice prodotto né il codice di aggiornamento), ma ogni volta che eseguo, quando eseguo l'installazione per "aggiornare" il prodotto, si dice " riprendendo la procedura guidata per [ProductName]", e, talvolta, alcuni dei file non sono sostituite con le loro controparti più recenti del programma di installazione più recente.

Non sto incrementando il numero di "revisione" del numero di versione. So che è ignorato. Tipicamente, proverò qualcosa come 2.0.3 => 2.0.4.

Come posso installare InstallShield in modo che rimuova automaticamente tutte le versioni precedenti, installa la versione più recente e la presenta all'utente come "Aggiornamento" o "Aggiornamento" se ha già una versione precedente installata? In caso contrario, dovrebbe installare come normale (un "Installa", non un "Aggiornamento").

sto usando InstallShield 2013 Pro (Versione 20 SP1), e mi attengo ad usare l'editor di InstallShield all'interno di Visual Studio 2010.

+0

Quale tipo di progetto stai utilizzando? InstallScript MSI, Basic MSI, puro InstallScript? –

+0

Credo che sia un progetto MSI di base, ma non ho familiarità con InstallShield, quindi non lo so per certo. Ha un file '.isproj' e un file' .ism' nella cartella del progetto. – qJake

+0

Penso che potresti riuscire a ottenere ciò che desideri semplicemente aggiornando la tabella di aggiornamento oltre a ciò che stai già facendo. Leggilo attentamente per favore: http://apprepack.blogspot.no/2012/06/msi-upgrade-table.html. Aggiorna essenzialmente il campo VersionMax. Ciò presuppone che l'installazione sia già impostata per uno scenario di aggiornamento principale. –

risposta

6

Quello che vi serve è un importante aggiornamento. Si tratta essenzialmente di una disinstallazione automatica della versione esistente e della reinstallazione di una nuova versione eseguita come una sola operazione dal motore di installazione di Windows stesso dopo aver creato la tabella di aggiornamento dell'MSI, impostare una nuova versione di prodotto e modificare il pacchetto e il codice del prodotto. Questo è il meccanismo di aggiornamento meno soggetto a errori in Windows Installer. Per implementare un aggiornamento importante in Installshield vai alla vista Aggiornamenti e aggiungi un elemento di aggiornamento. Quindi segui la procedura guidata o le pagine della GUI e imposta le opzioni di aggiornamento. Vedrò se riesco a trovare un collegamento migliore per te ora, ma questo dovrebbe farti andare avanti.

per capire veramente di Windows Installer Aggiornamenti si dovrebbe leggere this book chapter. O questo Microsoft MSDN page.

Solo per completezza: un minore aggiornamento -, che sta aggiornando l'installazione esistente senza disinstallarlo, è generalmente più difficile da ottenere in principio. Si applicano alcune restrizioni tecniche. Ecco un ottimo riassunto di ciò che è necessario per un minore di aggiornamento per il lavoro (così come altri dettagli): http://www.installsite.org/pages/en/msi/updates.htm

+0

Questa è la cosa, anche se ... distribuiamo versioni frequenti dei prodotti e la creazione di un percorso di aggiornamento/elemento di aggiornamento per ciascun prodotto all'interno del progetto InstallShield è ingombrante. L'applicazione dovrebbe supportare l'aggiornamento da qualsiasi versione precedente, quindi questo richiederebbe un elemento per ogni versione precedente esistente. Aggiornamento – qJake

+0

: Questo è effettivamente corretto, stavamo cambiando il codice di aggiornamento, non il codice del prodotto (i nomi di queste proprietà sono confusi e sembrano tornare indietro!). I nostri principali aggiornamenti ora funzionano da qualsiasi versione precedente. – qJake

0

In questo caso è possibile utilizzare COM automazione per automatizzare il processo di rilascio utilizzando Javascript o VBScript. Questa è una procedura familiare se hai automatizzato altri prodotti prima di Word o Excel.Ecco alcune risorse per andare avanti:

ho fatto un processo di generazione, una volta di utilizzare questo tipo di script VB e anche un tool di creazione chiamato FinalBuilder che ha avuto cura del resto del processo di costruzione. Immagino che FinalBuilder potrebbe avere un'azione per Installshield a questo punto in modo da poter ignorare del tutto lo scripting. Non lo so per certo. Volevo solo collegare alla GUI in modo da poter vedere come appare lo strumento. Further screenshots.

+0

Utilizziamo già TFS per l'automazione build, che ha anche l'integrazione InstallShield. Non sono un ingegnere di costruzione, quindi mi sto sforzando di capire che cosa ha a che fare con la creazione di programmi di installazione auto-aggiornanti? Di solito costruiamo manualmente i nostri programmi di installazione utilizzando Visual Studio (siamo una piccola squadra). – qJake

+0

Quel processo di compilazione dovrebbe essere in grado di sputare un MSI che esegue un importante aggiornamento di tutte le versioni precedenti su richiesta - o non è un processo di compilazione completo. Non ho usato TFS e non posso descrivere come vengono fatte le cose lì. –

+0

Immagino che questa sia la mia domanda - come posso farlo senza un processo di compilazione? Come posso creare un setup eseguibile che eseguirà l'upgrade principale da qualsiasi versione precedente ... ma * solo * usando l'editor InstallShield? – qJake