Cómo obtener las variables de entorno de Windows con C#

Otro caso con el que me he enfrentado recientemente, cómo crear o copiar archivos a una ruta física con tu servicio web pero haciéndolo portable para cualquier servidor con IIS. Pues la solución fue más sencilla de lo que pensaba. Gracias a un compañero que me sugirió utilizar las variables de entorno, conseguí acceder fácilmente a mi carpeta del IIS creando una variable de entorno y accediendo a ella con C#.


Las variables de entorno son aquellas que nos ofrecen un "atajo" para acceder a algunos directorios del sistema, como Archivos de Programa, simplemente ejecutando en la herramienta de Ejecutar o en la barra de direcciones en una ventana el siguiente código:
%ProgramFiles%
Pues bien, yo me creé la variable %iisdir% para que me abriera /Inetpub/wwwroot/ y así instalar ahí lo que necesitaba.

Para acceder a las variables de entorno desde C# hay que hacer lo siguiente:

Primero añadimos el siguiente using:
using System.Collections;

Luego empezamos a obtener los valores que necesitamos:

//Ruta hasta la carpeta System32 de Windows
Console.WriteLine(Environment.SystemDirectory);

//Nombre de la máquina
Console.WriteLine(Environment.MachineName);

//Ruta del directorio desde donde se está trabajando (Esto ya lo utilizamos en un anterior post del blog)
Console.WriteLine(Environment.CurrentDirectory);

//Sistema operativo y versión
Console.WriteLine(Environment.OSVersion.ToString());

//Todas las variables de entorno y sus valores respectivos
IDictionary variablesEntorno = Environment.GetEnvironmentVariables();
foreach (DictionaryEntry de in variablesEntorno)
{
Console.WriteLine(de.Key+": "+de.Value);
}

//Y para obtener una en concreto de la cual conoces la clave, el ejemplo que yo utilicé, %issdir%:
Console.WriteLine(Environment.GetEnvironomentVariable("issdir"));


Con esto solucioné mi problema y pude acceder a ese directorio fácilmente, eso sí, después de reiniciar, porque hasta que no lo hice la aplicación no reconocía mi nueva variable de entorno.


1 comentarios:

Unknown 15 de junio de 2012, 4:24  

Está bien, pero no te interesa separar el directorio del programa con el directorio de esos ficheros?. Aún así con esto:
HttpContext.Current.Server.MapPath("~/") <-- ROOT
HttpContext.Current.Server.MapPath(".") <-- CURRENT DIRECTORY
HttpContext.Current.Server.MapPath("..") <-- PARENT DIRECTORY

tienes el directorio de tu web service independientemente de esté instalado.

Buscar este blog

Seguidores

Blogs amigos