jueves, 5 de noviembre de 2009

Como obtener el puerto, IP y header del IIS

En varias ocasiones se ocupa saber cierta información del IIS, como el puerto o la IP de uno de los servidores.

El ejemplo que les voy a mostrar permite obtener esa información de un servidor IIS local. Fue bastante util para mi en un proyecto.

Aquí les va:

using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
namespace EnumSites
{
class Program
{
static void Main(string[] args)
{
DirectoryEntry entry = new DirectoryEntry("IIS://localhost/w3svc/1");
PropertyValueCollection pvc = entry.Properties["ServerBindings"];
foreach (object value in pvc)
{
// Format is IPAddress:Port:HostHeader
string[] Bits = value.ToString().Split(':');
string IPAddress = Bits[0];
string TCPIPPort = Bits[1];
string HostHeader = Bits[2];
Console.WriteLine("IP = {0}, Port = {1}, Header = {2}",
(IPAddress.Length == 0) ? "(All Unassigned)" : IPAddress,
TCPIPPort,
(HostHeader.Length == 0) ? "(No Host Header)" : HostHeader);
}
Console.Read();
}
}
}

Como pueden ver, se obtiene un DirectoryEntry con el site localhost. De aquí se obtiene la variable ServerSettings, y de aquí obtener el valor que nos brinda. Estos valores vienen separados por dos puntos (":"). El primer valor nos indica la IP, la segunda el puerto y el tercero el header.

Espero que esto les sea útil algún día.

Saludos

lunes, 2 de noviembre de 2009

Obtener el path de mysql de forma dinamica

Algunas veces, uno ocupa saber donde está instalado alguna aplicación. Esta ruta puede variar dependiendo de donde haya escogido el usuario instalarla. Una de esta aplicaciones es mysql.

Muchas veces uno ocupa saber adonde está instalado la aplicación MySQL Server para poder ejecutar distintas opciones (un ejemplo es una archivo script). Sin embargo, la ruta donde está instalado puede variar de una máquina a otra o incluso de versión.

Un ejemplo de esto es el siguiente:

  • Mi ruta del MySQL es C:\Program Files\MySQL\MySQL Server 5.1\bin\mysql.exe
  • Pero en otra computadora es C:\Program Files\MySQL\MySQL Server 5.0\bin\mysql.exe.
Esta pequeña diferencia es suficiente para que algo funcione o no.

Entonces se pregunta, como hago para poder saber esto sin que el usuario tenga que escribirlo?

El truco es el siguiente: Cuando uno instala MySQL, este automáticamente instala y pone a ejecutar un servicio. Este servicio contiene valiosa información sobre la versión de MySQL que tenemos, entre esa, la ruta. El siguiente código se vale de esto para obtener la ruta de mysql:

public static string GetMySQLPath()
{
try
{
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("root\\CIMV2",
"SELECT * FROM Win32_Service WHERE DisplayName = 'MySQL'");

foreach (ManagementObject queryObj in searcher.Get())
{
string servicePath = (string)queryObj["PathName"];
string executablePath;
if (servicePath.StartsWith("\""))
{
executablePath = servicePath.Substring(1, servicePath.IndexOf('"', 1) - 1);
}
else
{
executablePath = servicePath.Substring(0, servicePath.IndexOf(' '));
}
FileInfo executableFile = new FileInfo(executablePath);
return executableFile.DirectoryName;
}
}
catch (Exception)
{
//No action in particular
}
return null;
}

Con este código, podemos obtener la ruta de MySQL sin tener que buscarla en un explorador ni tener que escribirla.

Saludos