Aggiornare applicazione da dropbox con Clickonce

mercoledì 08 ottobre 2014 - 16.14
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  Visual Studio Express

.net Profilo | Newbie

Ciao a tutti, ho questo problema: Vorrei che la mia applicazione fatta con vb2010 express, quando viene aperta, controllasse nella mia dropbox se ce un aggiornamento ed eventualmente ce ci fosse,
scaricare ed aggiornare l'applicazione automaticamente. Tutto questo in modalità di distribuzione clickonce.
Ho provato ad inserire il percorso della cartella nella mia dropbox dove ho riversato un aggiornamento ma quando apro l'applicazione e prova a cercare l'aggiornamento mi ristituice
questo messaggio di errore:
* L'attivazione di C:\Users\giovanni\Desktop\PROFESSIONAL.appref-ms| ha causato un'eccezione. Sono stati rilevati i messaggi di errore seguenti:
+ Eccezione durante la lettura del manifesto da https://www.dropbox.com/sh/em2ldmt1jhgukdd/AADRKIleuBLmxTr3aQDR4fYa?dl=0/Iris.application: manifesto non valido o impossibile aprire il file.
+ Per motivi di sicurezza la DTD non è consentita in questo documento XML. Per abilitare l'elaborazione DTD impostare la proprietà DtdProcessing in XmlReaderSettings su Analizza e passare le impostazioni al metodo XmlReader.Create.
Non so dove sbaglio, mi potete dare una mano.

Grazie

Scusate per sbaglio ho creato un doppione di questa discussione.

0v3rCl0ck Profilo | Guru

se vuoi installare l'applicazione clickonce da link pubblico o sharato di dropbox, non credo proprio che tu possa farlo... clickonce cerca tutti i file dipendenti dall'application a partire della virtual directory del file .application, e dropbox non ti da questa modalità di accesso alle risorse, alla fine ti serve un IIS server o apache server.

invece se l'installazione avviene da file system, e cioè cliccando sul file con estensione .application direttamente dalla dropbox folder locale, forse una speranza c'è... in teoria dovrebbe installarsi senza problemi (se da clickonce hai lasciato stare il flag per applicazione solo online), non sono sicuro si auto-aggiorni all'avvio dell'applicazione se c'è una nuova versione, o se poi l'utente è costretto comunque a riaprire il file .application una volta aggiornato da dropbox, devi fare qualche prova, ma sono quasi certo che con dropbox e un link pubblico non puoi farlo, devi avere un piccolo spazio web, potresti aprirti un conto free su azure, e fare un web site su profilo free, completamente gratuito.


Michael Denny | Microsoft Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.net
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

.net Profilo | Newbie

Ho provato con altervista, ma e basato su linux e anche li non ci sono riuscito.

0v3rCl0ck Profilo | Guru

se con altervista è possibile avere un ftp e uppare i file come te li genera... non dovresti avere problemi, basta che a quel punto quando crei il pacchetto clickonce specifichi di preciso l'URL definitivo dove andrai a pubblicare il tutto, perchè il pacchetto viene firmato con un certificato, e nel file firmato è contenuto anche l'URL, se l'url non corrisponde a dove il .application è stato effettivamente scaricato, l'applicazione non si installa, è un controllo di sicurezza, non disattivabile!

l'importante è che il sito ti permetta di scaricare ogni file presente nel pacchetto, in particolare vedrai il pacchetto genera dei file ".application", ".manifest" e ".deploy", devi assicurarti che altervista o chi per lui ti permetta di scaricare i file con quelle estensioni, l'unica che puoi cambiare è ".deploy", dove può essere configurato per omettere quella estensione, e lasciare l'originale ".exe", ".dll", ecc.. il succo non cambia, ogni estensione deve essere scaricabile. Teoricamente l'estensione ".deploy" è stata pensata per ridurre il problema di estensioni bloccate dal server web, dovendo solo preoccuparsi di abilitare l'estensione .deploy, invece che anche .exe, .dll, .jpg, e quant'altro, ma certi web server pubblici potrebbero avere invece abilitato proprio quelle estensioni al download (exe, dll, ...), mentre .deploy no, quindi puoi fare un tentativo disabilitando l'opzione "Use ".deploy" file extension" dal box su visual studio "Publish Options Dialog Box".

In questa guida trovi tutti i problemi che potresti riscontrare durante il deploy di un pacchetto clickonce: http://msdn.microsoft.com/en-us/library/ms228998.aspx (ITA: http://msdn.microsoft.com/it-it/library/ms228998.aspx)


Michael Denny | Microsoft Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.net
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

.net Profilo | Newbie

Queste sono l'impostazioni per la pubblicazione sul server:

Posizione cartella di pubblicazione: ftp://intercommunication@ftp.intercommunication.altervista.org/iris
URL cartella di installazione: https://s221.altervista.org/lf.pl?sid=1c6b897508a3f742992a27ad80619f36&CWD=/iris
Percorso per gli aggiornamenti: https://s221.altervista.org/lf.pl?sid=1c6b897508a3f742992a27ad80619f36&CWD=/iris
Modalita di installazione: Applicazione disponibile anche offline dal menu start

Ho controllato i permessi pubblici a tutti file e cartelle del pacchetto, , il upload sulla posizione di pubblicazione lo fa correttamente,

Poi fascio una pubblicazione con una release inferiore in locale con queste impostazioni:

Posizione cartella di pubblicazione: C:\Users\Serafin\Desktop\IRIS\
URL cartella di installazione: vuoto
Percorso per gli aggiornamenti: https://s221.altervista.org/lf.pl?sid=1c6b897508a3f742992a27ad80619f36&CWD=/iris
Modalita di installazione: Applicazione disponibile anche offline dal menu start

E quando installo l'applicazione, la installa correttamente ma al ricercare l'aggiornamento mi restituice questo errore:
Quello che segue è un riepilogo degli errori. Informazioni dettagliate su tali errori sono disponibili più avanti nel registro.
* L'attivazione di C:\Users\Serafin\Desktop\IRIS PROFESSIONAL.appref-ms| ha causato un'eccezione. Sono stati rilevati i messaggi di errore seguenti:
+ Eccezione durante la lettura del manifesto da https://s221.altervista.org/lf.pl?sid=1c6b897508a3f742992a27ad80619f36&CWD=/iris/Iris.application: manifesto non valido o impossibile aprire il file.
+ Per motivi di sicurezza la DTD non è consentita in questo documento XML. Per abilitare l'elaborazione DTD impostare la proprietà DtdProcessing in XmlReaderSettings su Analizza e passare le impostazioni al metodo XmlReader.Create.

Vedi qualcosa di errato?

0v3rCl0ck Profilo | Guru

sinceramente non mi sembra un url che possa essere pubblico questo:

https://s221.altervista.org/lf.pl?sid=1c6b897508a3f742992a27ad80619f36&CWD=/iris

da dove lo prendi?

se io lo provo a navigare mi dice che la sessione è scaduta... come se quel link puntasse al tua pannello di amministrazione


Michael Denny | Microsoft Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.net
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

.net Profilo | Newbie

In fatti lo ho preso dal mio panello di controllo tra le tante prove che ho fatto, ma inserendo quello che credo sia quello corretto, come percorso di aggiornamento:
" http://intercommunication.altervista.org/iris/", mi da sempre il errore.Non so...sono settimane che ci provo e pure secondo me sara una cavolata.
Mi resta il dubbio sul server basato su linux.

0v3rCl0ck Profilo | Guru

ricontrolla bene gli indirizzi che metti quando fai la pubblicazione, sono FONTAMENTALI, devono corrispondere PERFETTAMENTE all'indirizzo da dove verrà scaricato il pacchetto.

il link completo immagino sarà qualcosa tipo http://intercommunication.altervista.org/iris/TuaApplicazione.application giusto? hai creato il pacchetto specificando come url di aggiornamento http://intercommunication.altervista.org/iris ?

quando installi la prima volta, non farlo da disco locale, fallo direttamente dal file scaricato dal sito, per fargli scaricare tutte le dipendenze via internet e non da file disco, perchè non sono sicuro che installandolo da disco locale si abiliti al download da internet, sinceramente dovrei provare, ma prima fai le prove che ti ho detto e controlla bene il tutto, deve essere una cavolata per forza.


Michael Denny | Microsoft Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.net
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

.net Profilo | Newbie

Buone notizie, funziona, il link giusto è: "http://intercommunication.altervista.org/iris" oppure "http://www.intercommunication.altervista.org/iris", e indiferente. Non serve indicare il file "/miaApplicazione.application", ansi credo ricordare che non funziona perche non deve fare riferimento al file ma alla cartella dove si trova il pacchetto.
Non mi funzionava perche la mia idea era di controllare gli aggiornamenti con clickonce ma aggiungendo un codice in "ApplicationEvent" che mi gestirebbe in modo personalizzato gli download, ad esempio: se l'applicazione è in modalità trial viene fuori un messaggio che informa l'utente la disponibilità di un aggiornamento ma che non può fare il download fino che non acquista la licenza.Cosi disabilitando l'opzione "Controlla aggiornamenti dell'applicazione", ma lasciando il link nel percorso degli aggiornamenti, il programma dovrebbe comunque al avvio della applicazione cercare gli aggiornamenti.
Perciò, togliendo il codice da "ApplicationEvent" e abilitando l'opzione "Controlla aggiornamenti dell'applicazione" funziona.
Secondo te dove mi sbagliavo?, ti mando il codice che ho introdotto in "ApplicationEvent".
Ah, per fortuna anche installando da disco locale funziona, in fatti anche io avevo quel dubbio che dicevi tu, non ho capito perche se installo una applicazione in locale in una cartella chiamata ad esempio "iris", e poi lancio una nuova release sempre in locale ma in una cartella con un nome diverso o pure l'installo da cd anche con l'esteso nome, mi viene fuori un errore indicando che l'applicazione è già stata installata da un altro percorso. Ce un modo per evitare questo problema?.
Questo è il codice di qui ti parlavo sopra:
Grazie mille mi stai dando una gran mano !!!

>Imports System.Threading
>Imports System.Deployment.Application
>Imports System.Security.Cryptography
>Imports System.ComponentModel
>Imports System.Net
>
>Namespace My
>
>
>
> Partial Friend Class MyApplication
>
> Private Sub MyApplication_NetworkAvailabilityChanged(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.Devices.NetworkAvailableEventArgs) Handles >Me.NetworkAvailabilityChanged
> 'Ti avisa quando il programma è aperto se hay perso la conexione o se ti sei riconnesso.
> ' MessageBox.Show("Imposibile controllare se cè un aggiornamento. Controllare la connessione di rete")
> End Sub
> Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) Handles Me.Startup
> Thread.CurrentThread.CurrentUICulture = My.Settings.AttivazioneLingua
>
> 'Private Sub InstallUpdateSyncWithInfo()
>
> Dim info As UpdateCheckInfo = Nothing
> If (ApplicationDeployment.IsNetworkDeployed) Then
> Dim AD As ApplicationDeployment = ApplicationDeployment.CurrentDeployment
>
> Try
> info = AD.CheckForDetailedUpdate()
> Catch dde As DeploymentDownloadException
> MessageBox.Show("La nuova versione dell'applicazione non può essere scaricato in questo momento. " + ControlChars.Lf & ControlChars.Lf & "Controllare la >connessione di >rete, o riprovare più tardi. errore: " + dde.Message)
> Return
> Catch ioe As InvalidOperationException
> MessageBox.Show("Questa applicazione non può essere aggiornato. Non è probabile un'applicazione ClickOnce. errore: " & ioe.Message)
> Return
> End Try
>
> If (info.UpdateAvailable) Then
> Dim doUpdate As Boolean = True
> If (info.UpdateAvailable) And My.Settings.Trial = True Then
>
> MessageBox.Show("La versione si prova non consente gli aggiornamenti")
> Exit Sub
> End If
>
> If (Not info.IsUpdateRequired) Then
> Dim dr As DialogResult = MessageBox.Show("È disponibile un aggiornamento. Vuoi aggiornare l'applicazione adesso?", "Aggiornamento disponibile", >MessageBoxButtons.OKCancel)
> If (Not System.Windows.Forms.DialogResult.OK = dr) Then
> doUpdate = False
> End If
> Else
> ' Display a message that the app MUST reboot. Display the minimum required version.
> MessageBox.Show("Questa applicazione ha rilevato un aggiornamento obbligatorio dal vostro attuale " & _
> "versione a versione " & info.MinimumRequiredVersion.ToString() & _
> ". L'applicazione ora installarà l'aggiornamento e poi verrà riavviata.", _
> "Aggiornamento disponibile", MessageBoxButtons.OK, _
> MessageBoxIcon.Information)
> End If
>
> If (doUpdate) Then
> Try
> AD.Update()
> MessageBox.Show("L'applicazione è stata aggiornata, e verrà ora riavviata.")
> ' Application.Restart()
> Catch dde As DeploymentDownloadException
> MessageBox.Show("Impossibile installare l'ultima versione dell'applicazione. " & ControlChars.Lf & ControlChars.Lf & "Controllare la connessione di rete, o riprova >più >tardi.")
> Return
> End Try
> End If
> End If
> End If
> End Sub
> End Class
>End Namespace

Il codice l'ho provato in una rete locale e funziona, il problema viene fuori quando lo testo in rete.

Grazie ancora.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5