Settare le variabili d'ambiente di windows

sabato 14 gennaio 2006 - 20.30

riofly Profilo | Newbie

Ciao a tutti!! E buon anno...!

Ho fatto una applicazione da riga di comando con VB.NET 2003 che dovrebbe leggere e scrivere variabili d'ambiente.
Pensavo di fare tutto in 15 minuti... sapendo dell'esistenza della funzione ENVIRON.
Non pensavo però che fosse così complicato trovare il modo di scrivere queste variabili.

Ho provato ad usare il metodo SHELL per lanciare CMD.EXE :
Shell(Environ("comspec") & " /s /v:on /c SET " & nomeParametro & "=" & valoreParametro)
Questo funziona, non ricevo errori. Però alla fine dell'esecuzione di CMD.EXE non rimane piu nessuna traccia del parametro settato.

Come si risolve questo problema ...?


GRAZIE !! Ciao

Cteniza Profilo | Guru

Se tu imposti le variabili di ambiente mettendole così come si trovano sui .bat (PATH,SET, ecc), tali variabili vengono distrutte appena rientri dalla shell.
Impostare "le altre invece" (le stesse variabili ma permanenti) è un lavoraccio abbastanza complesso da fare che ti sconsiglio vivamente intraprendere.

riofly Profilo | Newbie

Non capisco...
Mi puoi fare un esempio di codice?
4 righe messe in croce?

-- RioFly --

Brainkiller Profilo | Guru

>Non capisco...
>Mi puoi fare un esempio di codice?
>4 righe messe in croce?

Ciao Riofly,
in teoria puoi creare una chiave di registro anche qui:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Queste sono le variabili d'ambiente system wide.
Invece che crearele manualmente da windows aggiungendo la chiave raggiungi lo stesso scopo.

Per accedere al registro usa le classi del Registry del Framework:
http://www.dotnethell.it/articles/WindowsRegistry.aspx

ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/

riofly Profilo | Newbie

Ho provato ad aggiungere una chiave in quel percorso di registro, ma a quanto pare fà effetto solamente al riavvio del pc, mentre a me servirebbe sfruttare il settaggio della variabile d'ambiente solo per la sessione di shell aperta attualmente.

Per farvi meglio capire l'utilità di ciò, vi spiego cosa dovrebbe fare il piccolo programma che sto realizzando.
L'ho chiamato SETDRIVE ed accetta due argomenti: la LABEL di una unità (es. di una penDrive) e il nome di una variabile d'ambiente.
Lanciando SETDRIVE da riga di comando, vorrei che mi creasse una variabile d'ambiente con nome indicato nel parametro, e che me la riempisse con la lettera in cui è stata trovata l'unità con l'etichetta di volume indicato nel primo parametro, così che poi posso sfruttare tale variabile d'ambiente nel resto del file CMD per copiare files... ecc...ecc...
Simmpatica idea, no? :)

-- RioFly --

Brainkiller Profilo | Guru

>Ho provato ad aggiungere una chiave in quel percorso di registro,
>ma a quanto pare fà effetto solamente al riavvio del pc, mentre
>a me servirebbe sfruttare il settaggio della variabile d'ambiente
>solo per la sessione di shell aperta attualmente.

Forse hai ragione, non ho fatto menzione di questa cosa ma avevo il dubbio anche io che fosse abilitata solo al riavvio del sistema. In realtà manca qualche comando (a me ignoto) per far rinfrescare a Windows le variabili d'ambiente. Infatti se tu provi ad aggiungere una variabile d'ambiente da Risorse del Comptuer, e dando Ok, la lista si rinfresca e aprendo una shell è già presente (senza riavvio).

Modificando invece o aggiungendo una chiave dal registro come ti ho consigliato non c'è questo Refresh e quindi diventa valida solo al riavvio.

>Per farvi meglio capire l'utilità di ciò, vi spiego cosa dovrebbe
>fare il piccolo programma che sto realizzando.
>L'ho chiamato SETDRIVE ed accetta due argomenti: la LABEL di
>Lanciando SETDRIVE da riga di comando, vorrei che mi creasse
>una variabile d'ambiente con nome indicato nel parametro, e
>che me la riempisse con la lettera in cui è stata trovata l'unità
>con l'etichetta di volume indicato nel primo parametro, così
>che poi posso sfruttare tale variabile d'ambiente nel resto
> del file CMD per copiare files... ecc...ecc...
>Simmpatica idea, no? :)

Allora, essendo il fiel che produci un eseguibile da riga di comando, forse puoi fare anche in questo modo.
Che appena avviato nel main() esegui un comando Esterno tramite la classe Process.
Il comando esterno da eseguire è appunto quello che setta una nuova variabile d'ambiente con il comando SET.

ciao

David De Giacomi
Microsoft MVP
http://blogs.dotnethell.it/david/
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5