viernes, 19 de febrero de 2010

Microsoft Virtual Academy

Aunque ya conocía algunos programas de Microsoft para promover el auto aprendizaje como desarrollador 5 estrellas me llego hoy un boletín de Microsoft invitandome a unirme al MVA (Microsoft Virtual Academy) resulta que ofrecen cursos sobre temas variados en su web, y parece estar enfocada en latino américa, hasta ahora el material que he encontrado esta todo en español, lamentablemente mucho del mismo esta desactualizado, igual los invito a que le entren yo ya me inscribí y se ve interesante, ¿le entran?

lunes, 8 de febrero de 2010

Instalando SQL 2008 what a pain in the ass

Que onda hace rato que no me aparecia, bueno hoy me di cuenta que ando algo oxidado porque no he probado el visual studio 2008 que ya se hace viejo y se enfila el 2010, sin embargo me decidi por instalar la version express y ver que onda.

Nada fuera de lo común entrar a la pagina de microsoft bajar el C# express y el Visual Web Developer que ahroa viene con un instalador unificado que te ofrece otras cosas no esta mal, mi dolor de cabeza empezo a la hora de instalar SQL 2008, se descargo y todo hiba bien hasta que la instalación trono!, vaya que sorpresa... obviamente el instalador de refirio al log que de inmediato abrí, bueno pues me encontre con este mensaje:

El subárbol del Registro de contadores de rendimiento está dañado. Para continuar, debe reparar éste subárbol.


Bueno a juzgar por la descripción se trataba de algun registro de rendimiento local, abri el monitor de rendimiento el "perfmon.exe" no se veia nada extraño así que segí, el log tambien me refirio a un KB de microsoft que resulto inutil al ser para Win XP no aplicaba a vista, asi que dije le preguntare a google, ¿porque no? despues de HORAS de búsqueda me di cuenta que no era el único con este problema, parece afectar a usarios de Vista que desean instalar SQL 2008 en una computadora con un idioma que no sea Ingles (que genialidad de programadores) segun este bug report (que me ayudo mucho ;) ) y algunas cosas que vi en foros el problema parece radicar que el instalador busca cierta información en una llave de registro inexistente en sistemas con idiomas que no son Ingles.

Afortunadamente el buen tipo que posteo ese bug (link un poco arriba) hizo algunas pruebas y se dio cuenta de donde radicaba el problema y planteaba una solución, usando c#, el dejó el código en la página del reporte (son 2 líneas nomas) estas te avisan que llave de registro esta buscando el instalador, la idea es crearla y llenarlas con la información que viene en la llave que es de idioma ingles y con esto el instalador de SQL ya no se queja.

Bueno estoy feliz con la ayuda de ese amigo así que para no aburrirme de avente un programita que usa su idea para poner las llaves de registro adecuedas, basicamente córrelo si tuviste ese problema para instalar SQL, despues reinicia la instalción y listo =) ojala les sirva.

Código aca abajito :) Descargar


using System;
using System.Security.Permissions;
using Microsoft.Win32;
using System.Globalization;

[assembly: RegistryPermissionAttribute(SecurityAction.RequestMinimum,
ViewAndModify = "HKEY_LOCAL_MACHINE")]

class RegKey
{
static void Main()
{
Console.WriteLine("\n" + "Estas listo para empezar? (Y/N)");

if(char.ToUpper(Convert.ToChar(Console.Read()))=='Y')
{
string strPath = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\";

string str2 = string.Format("{0,3}", CultureInfo.InstalledUICulture.Parent.LCID.ToString("X")).Replace(" ", "0");


Console.WriteLine("Agregando llaves de registro...");


RegistryKey regKey = Registry.LocalMachine.CreateSubKey(strPath + str2);

string counter = (string)regKey.GetValue("Counter");
string help = (string)regKey.GetValue("Help");

regKey.SetValue("Counter", counter, RegistryValueKind.MultiString);
regKey.SetValue("Help", help, RegistryValueKind.MultiString);

Console.WriteLine("Todo debe estar listo, Instala SQL 2008 de nuevo =)");
Console.WriteLine("http://diario-geek.blogspot.com/");
Console.ReadKey(true);


}
else
{
Console.WriteLine("Como gustes :)");
Console.ReadKey(true);
}
}
}