Newsgroup: it.comp.lang.visual-basic
Titolo: VB6 e Vista: domande sparse

Ho sviluppato un applicativo con VB6 sotto Windows XP e funzionante alla grande 
sotto questo sistema operativo.
Avevo paura, ma è successo: ho provato ad installare il mio software su un PC 
con Windows Vista. A parte l'anomala richiesta di confermare l'esecuzione del 
SETUP, l'installazione è andata a buon fine.
I problemi sono iniziati quando ho eseguito il programma che si è quasi subito 
bloccato con un Run-time error 75: File/path access error.
Provando a disabilitare del tutto l'UAC da Pannello di Controllo oppure 
lanciando il programma come amministratore, non ho problemi.
Ho il dubbio che il problema sia la creazione e la scrittura di due file di 
configurazione (i classici INI) nella cartella di installazione del programma 
(quindi in C:\PROGRAMMI\...). Forse in quella cartella il programma non può 
andare a scrivere.
Così ho deciso di installare VB6 (intendo l'ambiente di sviluppo) su Windows 
VISTA per fare debug, ma incontro altri problemi. Al SETUP di VB6 Windows mi 
dice che il programma è incompatibile con Vista, ma decido di continuare. Alla 
fine dell'installazione, aprendo il progetto della mia applicazione, ottengo 
molti errori di apertura di chiavi del registro o di accesso al registro.
Come al solito, risolvo tutto se apro il progetto dopo aver disabilitato l'UAC.
Ovviamente non posso dire agli utenti del mio programma di disabilitare 
completamente l'UAC sulla loro macchina (magari loro credono alla Microsoft e 
pensano che sia una feature utile) e già dire di eseguire il programma come 
amministratori è antipatico. Ma come faccio a risolvere il problema se non posso 
usare l'ambiente di sviluppo mentre c'è l'errore e cioè quando è abilitato 
l'UAC? Tra l'altro, abilitando e disabilitando l'UAC Windows deve essere 
riavviato, rendendo il tutto mooolto più complicato e noioso.
Possibile che non ci sia un'altra soluzione? Sta di fatto che sposterò i file di 
configurazioni da C:\PROGRAMMI\... alle cartelle degli utenti. Qual è la 
funzione API che mi ritorna la cartella più papabile per memorizzare i miei 
file? Naturalmente questa funzione di libreria dovrebbe funzionare correttamente 
anche sotto Windows XP (non vorrei avere problemi al contrario).
<OT>
Mi sto rendendo conto che Visual Basic ormai ha i suoi anni e molto 
probabilmente bisognerà passare a qualcos'altro. Sicuramente la Microsoft offre 
i suoi strumenti .NET (come il C#), ma alla fine ho dei dubbi sulla loro 
affidabilità. Che ne dite di tutti quei linguaggi trasversali, free e facilmente 
portabili come Python, Ruby, Java e delle librerie grafiche relative (wxWidgets, 
GTK, ecc.)? Lo so, sono più per sviluppatori linux, ma alla fine sembra che 
questi funzionino sempre senza gli impicci della Microsoft.
</OT>

 Microsoft.
Sarà fortuna, ma io di 'impicci Microsoft' non ne incontro.
Ciao
Alberto
-- 
Carlo Rubbia: Siamo su un treno che va a trecento chilometri all'ora, 
non sappiamo dove ci sta portando e, soprattutto, ci siamo accorti che 
non c'è il macchinista.

 singoli utenti, anche non administrator.
Hai ragione anche su questo, però è molto più semplice scrivere in file da me 
creati. Tra l'altro vedo che moltissime applicazioni salvano dati e impostazioni 
nella cartella Application Data.

 impostazioni nella cartella Application Data.
Può essere.
Ma io non l'ho mai fatto, per cui non so se ci siano altre complessità.
Ciao
Alberto
-- 
Heinrich Zille: Ognuno crede che l'altro sia come se stesso, 
dimenticando che al mondo esistono anche delle persone oneste.

 meglio, andare nel registry.
Mi sai dire in quali casi non esiste? TEMP o TMP sono per file temporanei che 
potrebbero non esserci al successivo riavvio. Io devo salvare delle 
configurazioni del programma che devono essere presenti al successivo riavvio.
Penso che APPDATA sia la cartella più papabile a tale scopo.

 a tale scopo.
Per ottenere i percorsi delle cartelle predefinite, in alternativa all'API 
SHGetSpecialFolderLocation, puoi usare l'automazione Shell:
- Aggiungi ai riferimenti del progetto la libreria "Microsoft Shell Controls 
And Automation"
- Per ottenere ad esempio il percorso della cartella con i dati applicazioni 
comuni a tutti gli utenti:
Dim oShell As New Shell32.Shell
    Path = oShell.NameSpace(ssfCOMMONAPPDATA).Self.Path
Bye
Raf 

 Penso che APPDATA sia la cartella più papabile a tale scopo.
Ma hai guardato l'help di Environ?
Perchè questa tua risposta è quantomeno disorientante...
Alberto
-- 
La forza di volontà è guardare negli occhi una ragazza in topless.

 Perchè questa tua risposta è quantomeno disorientante...
Perchè ti disorienta la mia risposta? Ho capito che con Environ riesce ad 
ottenere il valore delle variabili d'ambiente. Alcune di queste contengono i 
percorsi alle cartelle speciali usate da Windows. Quale devo scegliere tra 
queste cartelle per salvare la configurazione e i dati della mia applicazione? 
Penso che questa domanda sia indipendente dal metodo con cui ottengo il percorso 
alla cartella, diciamo che si tratta di un comportamento che l'applicazione 
dovrebbe avere secondo le regole Microsoft.
Per esempio, qui (
http://vbnet.mvps.org/index.html?code/browse/csidl.htm
) si 
dice di usare la SHGetFolderPath rispetto alle variabili d'ambiente.
E anche qui (
http://support.microsoft.com/?scid=kb%3Ben-us%3B252652&x=17&y=9
) si 
dice più o meno lo stesso.

     Path = oShell.NameSpace(ssfCOMMONAPPDATA).Self.Path
Perfetto...