2010-05-20 13 views
19

Ho un'applicazione ClickOnce che lascia tutte le vecchie versioni sul mio disco. È un'applicazione aziendale interna che riceve aggiornamenti frequenti, quindi questo è un disastro per gonfiare rapidamente le dimensioni del nostro backup.La distribuzione ClickOnce lascia più versioni (sì, più di due)

Secondo la documentazione e altre Stack   Domande di overflow, si suppone che lascino solo le versioni correnti e precedenti su disco. Tuttavia, ogni volta che distribuisco il progetto e aggiorno un client, ottengo un'altra copia di tutti i file EXE, DLL e dati. Non sto apportando alcuna modifica all'applicazione, basta spingere di nuovo la distribuzione in Visual Studio.

Come posso risolvere questo problema?

Il problema sembra verificarsi sia su Windows 7 e Windows XP, sia su Windows a 64 e 32 bit.

Ho fatto un diff delle cartelle in cui è installata la versione ei seguenti file sono diversi:

MyApp.exe.manifest 
MyApp.exe.cdf-ms 
MyDll1.cdf-ms 
MyDll2.cdf-ms 

Nessun file eseguibili effettivi sono diversi, né la MyApp.manifest, MyDll1.manifest, ecc

Che ne dici di un'alternativa. È sicuro cercare altre cartelle contenenti la mia applicazione in fase di runtime ed eliminarle? Sta andando a rompere qualcosa?

ClickOnce è solo un'apparente scatola nera misteriosa?

+0

Per essere chiari, vuoi dire che tutte le vecchie versioni rimangono memorizzate sul computer * client *? Tutte le versioni devono rimanere nella * posizione di distribuzione * fino a quando non le elimini, poiché potresti avere utenti diversi su versioni diverse in qualsiasi momento. – Jay

+0

Sì, sul computer client, sepolto nelle cartelle utente – Clyde

+0

Fa la differenza se si specifica un numero di versione minimo richiesto nelle impostazioni di pubblicazione? – Jay

risposta

6

Penso di aver finalmente capito questo. Per qualche motivo sconosciuto (e inaccettabile, francamente), la pulizia delle versioni precedenti non avverrà se la versione più recente è in esecuzione - semplicemente fallisce silenziosamente.

La pulizia tenta di essere eseguita mentre la vecchia versione termina, ma poiché ho riavviato l'app, la nuova versione è già in esecuzione, bloccando la pulizia.

Inoltre, si noti che il "servizio spazzino" menzionato in altre risposte sembra essere una fabbricazione totale. Non ho trovato alcuna documentazione di tali servizi, né alcuna prova che sia in esecuzione. La pulizia sembra avvenire in linea come parte del processo di aggiornamento di clic.

+0

Incontriamo lo stesso problema con la nostra applicazione aziendale. La nostra app è aggiornata nel codice con 'ApplicationDeployment.CurrentDeployment.Update()'. Non riavviato dopo che l'aggiornamento non ha risolto il problema, le versioni precedenti rimangono sul disco. Sei riuscito a risolvere il problema? – Niki

0

Lo stai verificando immediatamente? Non vanno nemmeno via dopo un giorno o così? Il servizio scavenger ClickOnce dovrebbe venire in giro e rimuovere le vecchie versioni. Se si spinge la versione più recente come aggiornamento richiesto, rimuove le altre versioni? (Per fare ciò, impostare la versione minima richiesta nella finestra di dialogo Aggiornamenti sulla stessa versione che si sta distribuendo).

+0

La versione minima richiesta non fa nulla. C'è un modo per eseguire immediatamente questo servizio "ClickOnce scavenger"? C'è qualche documentazione su questo servizio scavenger?Non ne ho mai sentito parlare – Clyde

+0

Inoltre, ho creato una nuova app di Windows Form e l'ho implementata con un clic e si è comportata correttamente, lasciando solo due versioni. Quindi c'è qualcosa nella mia vera app che è diversa, ma non riesco a trovare alcuna differenza nella loro configurazione di pubblicazione. – Clyde

+0

E sì, sono ancora lì un giorno dopo – Clyde

1

Il servizio di scavenger fa parte del motore ClickOnce; viene eseguito automaticamente e non è qualcosa a cui è possibile accedere direttamente. Dovrebbe essere in giro e ripulire le vecchie versioni.

Domanda sulla versione min. Se si distribuisce la nuova versione &, impostare la versione minima richiesta sulla nuova versione #, aggiorna l'app a tale versione? Quindi lascia i precedenti su disco?

C'è qualche motivo che è possibile vedere? C'è un limite al numero di distribuzioni che sta memorizzando nella cache?

C'è anche qualcosa sulle cartelle shadow che solleticano i bordi della mia memoria; i file non sono realmente lì. Farò una piccola ricerca e guarderò tra le mie note e vedrò cosa riesco a trovare.

Che tipo di app è? WinForms/WPF/VSTO?

Quando si dice che si memorizzano nella cache le cartelle, quale cartella è? Per un'app winforms, ad esempio, sono state create due cartelle per ogni versione (xxxxtion ... e xxxxexe ... o qualcosa del genere) più un gruppo di cartelle, una per ogni assembly incluso nella distribuzione, che sono versioni memorizzate nella cache degli assembly, per evitare di doverli scaricare ogni volta se non sono stati modificati. Sono le cartelle xxxxtion e xxxxexe a cui stai vedendo multipli?

+0

È un'app winforms e ha i due tipi di cartelle che hai descritto. Esistono solo due cartelle "exe" e contengono l'icona dell'applicazione, il file di configurazione e un file della guida chm che ho incluso come contenuto dell'applicazione. Sono le cartelle "tion" che vengono ripetute all'infinito. Ogni singolo contiene l'exe, tutte le DLL, più i file che erano nella cartella "exe", incluso il file da 10 meg chm. – Clyde

+0

Non so se è importante, ma non ho la versione auto-check dell'applicazione all'avvio - che viene gestita nel codice utilizzando ApplicationDeployment.CurrentDeployment.CheckForDetailedUpdate e quindi ApplicationDeployment.CurrentDeployment.Update() – Clyde

+0

hai provato a cambiarlo aggiornare automaticamente e vedere se cancella i file? – RobinDotNet

-1

How to Delete

Clear Click-Once (versioning) Cache

Dalla documentazione:

applicazioni ClickOnce disponibili online sono limitate nella quantità di spazio che possono occupare da una quota che vincola la dimensione della cache ClickOnce. La dimensione della cache si applica a tutte le applicazioni online dell'utente; una singola applicazione online parzialmente attendibile è limitata a occupare metà dello spazio di quota. Le applicazioni installate non sono limitate dalla dimensione della cache e non contano rispetto al limite della cache. Per tutte le applicazioni ClickOnce, la cache conserva solo la versione corrente e la versione installata in precedenza. Per impostazione predefinita, i computer client dispongono di 250 MB di spazio di archiviazione per le applicazioni ClickOnce in linea. I file di dati non contano per questo limite. Un amministratore di sistema può ingrandire o ridurre questa quota su un determinato computer client modificando la chiave di registro, HKEY_CURRENT_USER \ Software \ Classes \ Software \ Microsoft \ Windows \ CurrentVersion \ Deployment \ OnlineAppQuotaInKB, che è un valore DWORD che esprime la dimensione della cache in kilobyte . Ad esempio, per ridurre la dimensione della cache a 50 MB, si cambierebbe questo valore in 51200

+1

Penso che tu abbia interpretato male i documenti: questo limite di cache è il limite totale per tutte le applicazioni click-once sulla macchina. Per una singola applicazione, "la cache conserva solo la versione corrente e la versione precedentemente installata" http://msdn.microsoft.com/en-us/library/267k390a(v=VS.100).aspx – Clyde

0

So che questa domanda è un po 'vecchia, ma abbiamo avuto questo problema di recente, e non sono nemmeno sicuro della causa. A volte sembra che succeda e per alcuni utenti.

Abbiamo provato a implementare il codice che eliminerebbe parzialmente alcune vecchie cartelle nella directory ..\Apps\2.0, tuttavia quando si ripristina una versione precedente, se la cartella della versione precedente è presente ma è stata eliminata dal nostro codice, ClickOnce non controlla se è stato cancellato e lo scarichi nuovamente, ma si presuppone che sia ancora lì, e quindi l'installazione diventa corrotta e l'IT deve reinstallarlo manualmente per ogni utente prima che possa usare di nuovo l'app! Terribile se hai 50 utenti in più.

Se qualcuno conosce un modo per forzare ClickOnce a scaricare nuovamente tutte le dipendenze di file prima/dopo l'aggiornamento, mi piacerebbe sapere!

Problemi correlati