Progetto di distribuzione che non aggiorna .exe

Ho un progetto Winforms con un singolo file .exe come output primario. Sto usando un progetto di distribuzione per distribuirlo, ma il file .exe non viene aggiornato quando viene installata la nuova versione, il che significa che devo chiedere agli utenti di disinstallare manualmente e quindi installare la nuova versione.

Ecco cosa sto facendo:

  • Incremento la versione dell’assembly nel progetto di output (che è l’output principale del progetto di distribuzione)
  • Aumentare la versione del progetto di distribuzione (e aggiornare il codice del prodotto quando richiesto)
  • Il progetto di distribuzione è impostato per rimuovere le versioni precedenti
  • la proprietà ‘Permanent’ su .exe è impostata su False

Sono sicuro di averlo fatto prima con successo, ma non riesco a farlo ora. Che cosa sto facendo di sbagliato?

Modifica: ho avuto modo di lavorare cambiando la versione del file nelle proprietà del progetto, come in questa risposta

È difficile dire cosa potrebbe causare questo. Come stai installando l’MSI che non rimuove la versione precedente? Consiglierei di eseguire l’installazione che non funziona con la registrazione dettagliata. Vorrei eseguirlo dalla riga di comando in questo modo:

msiexec /i "project.msi" /l*v "c:\install.log" 

/ l dice a msiexec (che è il servizio di installazione) di creare un registro, * dice di registrare tutto, e v dice di usare la modalità dettagliata.

Eseguilo e dai un’occhiata al file di registro e dovrebbe dirti cosa sta fallendo e perché. Puoi anche postare il file di registro qui e scommetto che possiamo trovare qualcosa insieme.

DOMANDE AGGIUNTIVE: Il file di registro fa sembrare che l’installatore pensi che non ci sia nulla da fare. Quando dichiari di aggiornare la versione del file, che cosa stai aggiornando? Come avete i file inclusi da distribuire? Li hai inclusi come “uscite primarie” nel progetto di installazione o stai includendo gli assiemi direttamente? Avete esso determinare le dipendenze e includerle automaticamente oppure avete incluso un output di progetto?

AGGIORNARE Vedere questo post per una descrizione di ciò che deve cambiare per aggiornare automaticamente MSI. Domanda 511789

L’eseguibile dell’applicazione potrebbe non essere aggiornato perché non è stata incrementata la risorsa di informazioni VERSION nel progetto MFC.

Non è sufficiente solo incrementare la versione del progetto di installazione. Vedi sotto:

http://msdn.microsoft.com/en-us/library/6fkzft86.aspx

“Le informazioni sulla versione vengono anche utilizzate dalle API di configurazione.”

Finalmente l’ho capito dopo aver sbattuto la testa contro il muro per ore.

Il mio problema era identico a questo e finì per essere molto semplice da risolvere. Due risposte sopra mi hanno portato nella giusta direzione e mi hanno aiutato a capire il mio problema, ma qui è in poche parole.

Se RemovePreviousVersion è impostato su true, il problema è più probabile nelle impostazioni dell’applicazione sotto il pulsante delle informazioni sull’assembly.

Ho eseguito il log come mohlsen ha mostrato nella risposta sopra, msiexec / i “project.msi” / l * v “c: \ install.log” e ha finito con la stessa risposta, Will not Overwrite; Non patch; Il file esistente è di una versione uguale

Inverse mi ha indirizzato nella giusta direzione ma mi ha anche buttato fuori un po ‘con il riferimento MFC. Sto scrivendo un’app di Windows e finalmente ne ho messi due e due insieme e sono andato alle proprietà dell’app che sto scrivendo sotto la scheda Applicazione. C’è un pulsante chiamato Informazioni sull’assemblaggio che porta alla versione dell’assembly e alla versione del file. Ho aggiornato questi e ora i miei aggiornamenti di file .exe.

Quindi devi fare due cose, incrementare la versione reale dell’assembly nell’app che stai scrivendo e la versione del pacchetto di installazione.

Un consiglio in più: se si apre il file AssemblyInfo.cs per il progetto e si cambia AssemblyVersion in

[assembly: AssemblyVersion (“1.0. *”)]

quindi le informazioni sulla versione dell’assieme vengono aggiornate automaticamente ogni volta che si crea il progetto. Quindi commentare o rimuovere la voce AssemblyFileVersion dallo stesso file, in modo che la versione del file sia uguale alla versione dell’assembly. Ciò significa che la versione del file viene aggiornata automaticamente ogni volta che viene generata, quindi è sufficiente aggiornare la versione del programma di installazione per far sì che i file vengano sovrascritti come previsto.

Stai cercando di aggiornare mentre l’applicazione è in esecuzione? Se è così, non sarà ansible. Devi pensare a un modo migliore, ad esempio utilizzare una piccola app esterna per terminare il processo in corso, installare l’aggiornamento e riavviare la nuova versione.

Potresti provare a fare una ricostruzione sulla soluzione. Puoi anche pulirlo mentre ci sei. Posso vedere come sarebbe successo se tutti i file fossero stati modificati. Altrimenti, quindi ignorare.