Problema aggiornamenti automatici

giovedì 03 giugno 2010 - 13.28

FaN7aSy Profilo | Newbie

Salve a tutti,

Ho creato un piccolo programma in cui ho implementato degli aggiornamenti automatici.
Tutto sembra funzionare perfettamente; quando lancio il programma al di fuori di visual basic, se clicco sul pulsante "Verifica aggiornamenti" mi dice che è disponibile una nuova versione. Clicco su OK e mi riporta il seguente errore:

"Access to the path 'C:\Program Files\ExiledGlitchers Tools\ExiledGlitchers Tools.exe' is denied."

Credo che significhi che non ha i permessi per effettuare operazioni in quella cartella, perchè è una cartella di sistema. L'errore nel codice risulta quando chiedo di cancellare (delete) il files ExiledGlitchers Tools.exe per poi riscaricarlo aggiornato.

Cosa mi consigliate di fare?

Grazie in anticipo,
Gianmarco

P.S.: Scusate se scrivo delle cavolato ma sono alle prime armi.

kataklisma Profilo | Senior Member

>Salve a tutti,
Salve!

>Ho creato un piccolo programma in cui ho implementato degli aggiornamenti
>automatici.
>Tutto sembra funzionare perfettamente; quando lancio il programma
>al di fuori di visual basic, se clicco sul pulsante "Verifica
>aggiornamenti" mi dice che è disponibile una nuova versione.
>Clicco su OK e mi riporta il seguente errore:
>
>"Access to the path 'C:\Program Files\ExiledGlitchers Tools\ExiledGlitchers
>Tools.exe' is denied."

Sicuro che il file ExiledGlitchers tools.exe non sia aperto? :) se il processo legato all'exe risulta essere attivo non potrai mai effettuare operazioni su di esso!

>Grazie in anticipo,
Di nulla ;) vediamo di risolvere ;)

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

FaN7aSy Profilo | Newbie

Beh, si, ExiledGlitchers Tools.exe è aperto ed è proprio il file da cui lancio l'aggiornamento... Hai ragione... è proprio questo il problema! Che fesso che sono :D Allora penso di creare un' altro .exe con dentro solo l'updater e poi lo richiamo dal Programma principale. Sapresti come fare per dire all' updater di chiudere il file ExiledGlitchers Tools.exe?

Grazie ancora per l'aiuto!
Gianmarco

kataklisma Profilo | Senior Member

>Beh, si, ExiledGlitchers Tools.exe è aperto ed è proprio il file
>da cui lancio l'aggiornamento... Hai ragione... è proprio questo
>il problema! Che fesso che sono :D
:)
>Allora penso di creare un'
>altro .exe con dentro solo l'updater e poi lo richiamo dal Programma
>principale. Sapresti come fare per dire all' updater di chiudere
>il file ExiledGlitchers Tools.exe?

Si, l'idea è quella, creare un'eseguibile con funzione di updater!

Resta comunque il fatto che non puoi di punto in bianco "chiudere" il processo ExiledGlitchers.exe perchè magari l'utente sta effettuando operazioni che andrebbero perse. Secondo il mio modesto parere l'iter da seguire è il seguente :

Creare un'app con splashscreen che controlli per esempio se sono presenti tutte le dll dell'applicazione e altro includendo la ricerca di un'eventuale update.

Se l'update viene trovato viene chiesto all'utente di aggiornare, se accetta l'aggiornamento allora l'updater aggiorna tutti i file ed eventualmente fa partire in automatico l'applicazione, altrimenti l'applicazione parte senza aver aggiornato nulla.

Per gestire i processi .Net mette a disposizione il namespaces System.Diagnostic , esempio : come chiudere un processo istantaneamente :

Process[] p = Process.GetProcessesByName("TuoProcesso"); p[0].CloseMainWindow(); //Puoi anche utilizzare questo metodo : p[0].Kill();

Come vedi inserisco in un'array di Process tutti i processi che hanno nome "TuoProcesso", dopodichè prendo la prima occorrenza e la chiudo.

Dai un'occhiata a questo namespaces!Puoi gestire i processi come meglio credi e in tutti i modi ;)

>Grazie ancora per l'aiuto!
Ciao! Di niente ;)

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

FaN7aSy Profilo | Newbie

Apprezzo moltissimo i tuoi consigli, però ti confesso che non ho nessun tipo di base sul .net. Infatti non l'ho mai studiato e lo uso moltissimo a intuito e leggendo tutorial su internet. Adesso ti chiedo un enorme favore: Potresti dirmi in termini molto basilari come strutturare un' app con splashscreen (come crearla) e che controlla gli update... Io per gli update controllavo se la versione del programma era uguale alla versione scritta su un file .txt caricato su un sito tramite FTP e poi per scaricare i files, i nomi li prendeva da un' altro file di testo con scritti i nomi dei files da scaricare, sempre dal sito.
Comunque ti posto il codice della funzione (credo sia una funzione, scusa l'ignoranza) di Update; il codice è preso da internet.

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Grazie della pazienza,
Gianmarco

kataklisma Profilo | Senior Member

>Apprezzo moltissimo i tuoi consigli, però ti confesso che non
>ho nessun tipo di base sul .net. Infatti non l'ho mai studiato
>e lo uso moltissimo a intuito e leggendo tutorial su internet.
>Adesso ti chiedo un enorme favore: Potresti dirmi in termini
>molto basilari come strutturare un' app con splashscreen (come
>crearla) e che controlla gli update... Io per gli update controllavo
>se la versione del programma era uguale alla versione scritta
>su un file .txt caricato su un sito tramite FTP e poi per scaricare
>i files, i nomi li prendeva da un' altro file di testo con scritti
>i nomi dei files da scaricare, sempre dal sito.
>Comunque ti posto il codice della funzione (credo sia una funzione,
>scusa l'ignoranza) di Update; il codice è preso da internet.

Ok tralasciando i vari metodi esistenti utilizzati per controllare gli aggiornamenti di un software, ti ho gia detto come procedere(anzi lo hai detto tu stesso):

1)crei un'applicazione che contiene l'updater (con la stessa metodologia che hai utilizzato, giusta o sbagliata che sia! Questo è un'altro argomento ;) è preferibile aprire un'altro post!)
2)Controlli gli aggiornamenti, se ci sono chiedi di aggiornare o meno (quindi l'applicazione vera e propria non è stata ancora eseguita, percio puoi tranquillamente sovrascrivere i file senza il problema dell'accesso negato)
3)Apri l'applicazione tramite le classi presenti in System.Diagnostic (ti ho fatto l'esempio di chiusura di un processo )

Buona fortuna! ;)

>Grazie della pazienza,
Di nulla :) ciao!

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

FaN7aSy Profilo | Newbie

Stavo googleando un po' e ho letto delle guide che dicono di aggiungere al progetto un elemento SplashScreen. Mi consigli di usare questa cosa?
Poi ti chiedo un'ultima cosa: come mi consigli di effettuare gli aggiornamenti? Magari se hai un link ad una guida... va bene anche in inglese...

Grazie
Gianmarco
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