Accesso Application.LocalUserAppDataPath

mercoledì 14 aprile 2010 - 15.46

skraus Profilo | Junior Member

Salve, eccomi nuovamente a chiedere il vostro prezioso aiuto.

Ho un'applicazione con una form con un tasto. Al clic su detto tasto eseguo una serie di query su di un database i cui risultati vengono archiviati in vari datatable che poi vengono aggiunti e relazionati in un unico dataset, che viene reso persistente mediante la scrittura di un file xml su disco.

Il problema è proprio sul dove salvare il file. Ossia all'inizio avevo salvato il file in una cartella aggiunta all'albero della finestra esplora soluzioni. L'istruzione che utilizzavo era

//dati è il nome del dataset dati.WriteXml(Application.StartupPath + "\\dati");

In Debug funziona perfettamente. Ma quando sono andato a distribuire l'applicazione mediante ClickOnce nel punto in cui deve avvevire la creazione del file XML ottengo una bella eccezione.

Girando un pò in rete ho trovato questo articolo [url]http://msdn.microsoft.com/it-it/library/d8saf4wy(v=VS.80).aspx[/url] per cui ho modificato il mio codice ed ora l'istruzione è

dati.WriteXml(Application.LocalUserAppDataPath);

Ora però quando eseguo il debug dell'applicazione all'esecuzione dell'istruzione ottengo un eccezione che mi notifica di non avere le autorizzazioni su quella risorsa. Allora ho aggiunto le seguenti istruzioni

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

ma non sono troppo convinto, sopratutto perchè continuo ad avere il medesimo errore.

Grazie
Sk

Cimperiali Profilo | Newbie

[quote]Poiché le applicazioni ClickOnce sono intrinsecamente isolate, l'installazione o l'esecuzione di un'applicazione ClickOnce non può causare l'interruzione di quelle esistenti. Le applicazioni ClickOnce sono completamente indipendenti. Ciascuna applicazione ClickOnce viene installata ed eseguita in una cache sicura specifica dell'utente e dell'applicazione. Per impostazione predefinita, le applicazioni ClickOnce vengono eseguite nelle aree di sicurezza Intranet o Internet. Se necessario, possono richiedere autorizzazioni di sicurezza elevate. Per ulteriori informazioni, vedere Distribuzione e sicurezza ClickOnce [url]http://msdn.microsoft.com/it-it/library/76e4d2xw[/url] [/quote]

skraus Profilo | Junior Member

Per cui dove dovrei salvare il file xml ?
Sk

Cimperiali Profilo | Newbie

non è tanto questione di dove, ma di permessi: dovresti chiedere esplicitamente il permesso FileIOPermission.
L'installer di suo metterebbe i file xml nel "Documents and Settings" dell'utente con cui è stato lanciato, mentre i file non marcati come "dati" starebbero nella "Application Directory" (dove c'è anche il tuo exe). Ms avverte di non mettere qui anche i dati dell'utente, perchè in caso di disinstallazione la "Application Directory" viene svuoata e rimossa. Ma per usare la "Data Directory", che poi è nel documents and settings dell'utente di turno, devi richiedere i permessi (nel manifest):
da msdn:
Reading from and Writing to the Data Directory
Reading from the Data Directory requires that your ClickOnce application request Read permission; similarly, writing to the directory requires Write permission.
Your application will automatically have this permission if it is configured to run with Full Trust
insomma, se giri in Full Trust ce la fai, oppure puoi richiedere un elevamento dei permessi, ma attento alla nota simpatica:
If your organization does not use Trusted Application Deployment and has turned off Permission Elevation, asserting permissions will fail
Ora, come si fa a girare in full trust o a chiedere di elevare i privilegi?
vedi qui: http://msdn.microsoft.com/en-us/library/76e4d2xw.aspx
se è troppo difficile, prova questo:
http://msdn.microsoft.com/en-us/library/hafybdaa.aspx
già che ci sei, vedi se per caso è necessario che l'uente esegua una particolare azione (non dovrebbe, con clickonce, ma non si sa mai): http://www.izenda.com/Site/KB/FAQ/How-to-unblock-your-dll-under-windows-7

skraus Profilo | Junior Member

ti ringrazio per la disponibilità e l'aiuto, ma il problema era molto + banale ossia ..... nell'istruzione WriteXml ho dimenticato di inserire il nome del file in cui salvare il dataset, avevo inserito solo il path.

Grazie, ancora, ciao
Sk

Cimperiali Profilo | Newbie

uppssss....
allora i permessi di scrittura già li avevi
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5