Newsgroup: it.comp.lang.visual-basic
Titolo: [OT] Windows Vista e UAC

Ciao a tutti,
forse sono un po OT... ieri mi sono imbattuto nella mia prima installazione 
del mio software gestionale - interamente sviluppato in Visual Basic 6 - su 
Windows Vista; il pacchetto di installazione è stato creato utilizzando la 
tecnologia Windows Installer, dopo avere lanciato il 'Setup' Windows Vista 
chiede per continuare il permesso di amministratore e dopo avere confermato 
l'installazione procede e termina senza dare errori (sembrerebbe essere 
andato tutto bene ma in realtà i problemi sono sorti dopo l'installazione).
Dopo un primo avvio dell'applicazione ho scoperto che i file di 
inizializzazione (*.ini) e di log (*.log) che venivano salvati sotto la 
cartella \Program Files\MiaApp\Bin\ erano SCOMPARSI... ma nonostante tutto 
l'applicazione sembrava funzionare... stava succedendo qualcosa di 
curioso...
Girando un po' per internet ho scoperto che in Windows Vista è attivo l'UAC 
(User Account Control) un sistema di protezione a livello utente per 
garantire maggior sicurezza al sistema proteggendo dati e risorse.
Da quello che ho capito lo 'User Account Control' interviene ad ogni 
installazione di software, modifica di settaggi di sistema ed esecuzione di 
applicazioni considerate pericolose e blocca l'accesso ad alcune risorse. In 
particolare se l'applicazione scrive in alcune locazioni di sistema ad 
esempio 'SystemRoot', 'ProgramFiles' ecc. Windows Vista con il processo di 
virtualizzazione redirige automaticamente la scrittura verso una cartella 
virtuale ad es. su LocalAppData\VirtualStore\NomeUtente\ senza che 
l'applicazione 'se ne renda conto'.
Insomma fino ad oggi usavo la directory di sistema 'Program Files' come 
destinazione di installazione del mio software e andavo a copiare tutti gli 
eseguibili sotto 'Program Files\MiaApp\Bin\' ed il file MDB ed i files di 
inizializzazione sotto 'Program Files\MiaApp\Data\'.
In Vista invece i programmi vengono suddivisi: i settaggi (File INI, File 
XML, Db..etc.) vanno sotto la cartella del proprio profilo (che cambia da 
Documents and Settings\NomeUtente a User\NomeUtente) mentre i file di 
esecuzione continuano ad essere sotto la 'Program Files'.
Ora mi domando: dovendo mantenere una certa compatibilità con le diverse 
versioni di Windows (a partire da Win 98) in quale cartella dovrei salvare 
il mio MDB considerando che il database è condiviso in rete (e cosi' tutti 
gli altri file condivisi) e i miei file .INI e .LOG?
Un'altra domanda: ho sviluppato anche un software di live update che scarica 
automaticamente i files necessari dal server web e li copia sotto Program 
Files\MiaApp\Bin\ ma dal momento che la copia di qualsiasi files è bloccata 
nella cartella 'Program Files' la funzione di live update si blocca. Come si 
risolve il problema?
L'unica soluzione che ho trovato per aggirare l'ostacolo UAC è andare ad 
installare il software sotto C:\, ma chiaramente non rispetta le regole 
imposte da Windows Vista...
Grazie.
Alberto 

 Grazie.
neanche quelle di win normale. ma direi sia proprio il motivo per cui molti 
prg con un mdb installano in root. nella program files un normal user di 
solito non puo' scrivere, quindi, salvo permessi a mano o salvo tutti admin, 
niente ldb...
sullo uac c'era un articolo di hw upgrade
http://www.hwupgrade.it/articoli/software/1619/microsoft-windows-vista-e-lo-user-account-control_index.html
hth, ciao, a.

 hth, ciao, a.
ma che tu sappia non esistono delle api o qualche altro sistema per aggirare 
l'UAC limitatamente ad un eseguibile? Cioè qualche API che assegni di 
default i permessi di admin ad un eseguibile (nel mio caso il live update)?
ciao e grazie per la risposta.
Alberto 

 Alberto
Dai un'occhiata qui:
http://msdn2.microsoft.com/en-us/library/aa480150.aspx
Bye
Raf
-----------------------------------------------------
Funk: cooler than the other side of the pillow.
--------------------------------------------------------------------------------
La mia Cartella di Posta in Arrivo è protetta con SPAMfighter
449 messaggi contenenti spam sono stati bloccati con successo.
Scarica gratuitamente SPAMfighter!

 default i permessi di admin ad un eseguibile (nel mio caso il live update)?
mi sembra cosa da sistemisti. qui in una situazione simile facciamo andare
un prog con un runas, ma spero sempre che gli utenti non ci pensino troppo
approfonditamente.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 l'utente non lo è). Non c'è modo di impedirlo, se non disattivando UAC.
Non conoscendo il modo di trasformare il mio live update in un servizio NT 
opto per la seconda possibilità! :)
Per quanto riguarda la seconda possibilità (richiamare un eseguibile 
utilizzando l'API ShellExecute effettuando una "elevazione di privilegi"), 
non è possibile fare in modo che l'eseguibile elevi se stesso con il 
privilegio di amministratore?
Mi sembra di avere capito leggendo quell'articolo che mi hai mandato che 
basterebbe scrivere un file manifest per ogni eseguibile che si decide di 
elevare di privilegio o sbaglio?
(Dovrei fare qualche prova comunque per verificare quale soluzione 
funziona... e poi riposto.)
Grazie ancora per l'aiuto. Alberto 

 Grazie ancora per l'aiuto. Alberto
Prego


 Il che significa che:
Scusate se mi aggancio.
Io per i file ini li ho messi all'interno dell'app.path e dato accesso
everyone.
Qualcuno sa se un .bat del genere funziona:
COPY C:\stampa.txt LPT3
Oppure
TYPE C:\stampa.txt >LPT1
O ancora
MODE COM1:9600,N,8,1
TYPE C:\ETIC.TXT > COM1
Grazie a tutti.
(In pratica nei miei progetti vb6 ho delle stampe riprese dal QBasic, che
generano un file di testo e lanciano i .BAT di cui sopra).
Se non funzionano cosa potrei fare per stampare un file su una determinata
LPT/COM che so io qual č?
-- 
DBMS Firebird
VB6 + Ado