Tag Archives: Windows Vista

Fixing WMI Service (root\cimv2 namespace missing)

I was working on a VBScript code that uses the Windows Management Instrumentation (WMI) to query the running processes on the local machine, something like this:

strComputer = "."
strProcess2Kill = "something.exe"
 
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcess = objWMIService.ExecQuery("Select * from Win32_Process Where Name = " & strProcess2Kill)
 
For Each objProcess In colProcess
	'Now we will each one of the running processes "something.exe"
	objProcess.Terminate()
Next

This code works in, at least, Win2k, WinXP, WinVista and Win7 (not sure if works on WinNt 4). The problem I had (as you can see here) was that the box where it should have been deployed (Win2k) showed an 0x8004100E error (Namespace specified cannot be found) on the 4th line of the code.

When I ran the following script to query all the namespaces on root:

strComputer = "."
 
Set objSWbemServices = GetObject("winmgmts:\\" & strComputer & "\root")
Set colNameSpaces = objSwbemServices.InstancesOf("__NAMESPACE")
 
For Each objNameSpace In colNameSpaces
 Wscript.Echo objNameSpace.Name
Next

I got this:

DEFAULT
SECURITY
WMI
directory
aspnet

As you can see, the CIMV2 namespace was not present and it should have been. So, something was wrong with the WMI installation on that box.

Then, I ran a very nice tool called wmidiag.vbs (pointed by user Uros Calakovic on my StackOverflow question) to diagnose several problems with WMI. Unfortunately, the tool gave me the same error and no proposed solution. He also mention a couple of interesting screencasts that more than one may find useful.

At the end, Google gave me the final answer once again. Reinstalling the WMI into the Windows Registry and rebuilding the WMI Repository did the trick (I did both, but maybe only the Repository rebuilding helped me this time).

In any case, to rebuild the WMI Repository, these are the only required steps:

  • Stop the WMI service (net stop winmgmt)
  • Go to %windows%/system32/wbem (in my win2k, winnt, on XP would be windows)
  • Rename or remove the repository directory
  • Start the WMI service again (net start winmgmt)

And for reinstalling WMI, you should run these commands on a console:

winmgmt /clearadap
winmgmt /kill
winmgmt /unregserver
winmgmt /regserver
winmgmt /resyncperf

Habilitar y deshabilitar la hibernación en Windows Vista

Aunque parezca tonto el título para quienes no lo han intentando, el proceso de habilitar o deshabilitar la funcionalidad de hibernar el equipo en Windows Vista es un poco más oscuro que el del Windows XP.

La única forma que he encontrado para hacerlo es utilizando la consola de DOS y ya no desde el panel de Opciones de Energía. Primero, se debe abrir la línea de comando con privilegios de administrador. Para esto, se hace clic en el botón Inicio, y en el campo buscar, se escribe cmd, pero en vez de presionar Enter, se debe presionar simultaneamente Ctrl + Shift + Enter. Luego de esto, aparecerá la ventana negra de la línea de comando y el título deberá contener el nombre Administrador. Luego, se procede a escribir el comando que habilitará la hibernación:

powercfg -h ON

Si lo que se busca es deshabilitarla, se deberá reemplazar el ON por OFF.

Windows Vista falla al obtener la IP por DHCP

Las primeras veces que trataba de conectar laptops con Windows Vista al wireless de mi casa, éste fallaba miserablemente en su intento por obtener una dirección IP de mi router ZyXel. Me tomó muchas horas de google para dar con el dichoso problema. Resulta que el Vista define un flag (BROADCAST en los paquetes de DHCP) como habilitado (a diferencia del Window XP SP2, que lo mantiene deshabilitado). Esto causa que existan problemas con algunos routers (como el mío :S). Explicado según Microsoft acá.

Afortunamente, la solución es relativamente sencilla aunque requiere de la manipulación del Registro de Windows (esa horrenda base de datos dentro del sistema operativo que no deja de acumular información y configuraciones de todo el hardware y software de la máquina).

Basta con entrar al registro (ir a Inicio/Ejecutar ó presionar las teclas Windows+R, luego escribir regedit y darle ejecutar). Allí recorremos el arbol según la ruta:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\

Alli vamos a encontrar varias ramas, cada una correspondiente a los adaptadores de red instalados (por ejemplo, una para la tarjeta wireless, otra para la tarjeta ethernet, etc.). Lo complicado puede ser identificar cual es el que debemos escoger. Me parece que el método más práctico es por la dirección IP (sí, justamente esa dirección del tipo 169.254.x.x que obtenemos cuando no encuentra otra adecuada y con la cual no podemos llegar ni siquiera al router).

Entonces, vamos por partes:

  1. Identificar la IP que tiene nuestra PC. Para esto, vamos a Inicio/Ejecutar ó presionamos las teclas Windows+R, y colocamos cmd y damos ejecutar. En la pantalla negra de DOS, escribimos ipconfig y damos enter. Ahí buscamos el campo Dirección IPv4 del adaptador que estemos usando (si estamos tratando de conectarnos por wireless, deberíamos ver en Conexión de Red Inalámbrica o algo que se le parezca). Seguramente va a ser una dirección como 169.254.x.x.
  2. Con esa dirección, buscamos en el registro, entre las claves dentro de Interfaces, alguna que contenga un valor igual a la dirección IP que obtuvimos en el paso 1.
  3. Una vez identificada la clave correspondiente, deberemos cambiar el valor de DhcpConnForceBroadcastFlag a 0 (cero). Para esto, se hace doble click sobre él y se coloca 0 en la ventana que aparece y se da enter.
  4. Cerramos el regedit, y reiniciamos el adaptador de red (basta con deshabilitarlo y volverlo a habilitar). Tras lo cual, el Windows Vista debería obtener sin problemas una dirección IP válida (probablemente del tipo 192.168.x.x que es lo más común) y por consiguiente, Internet.

Si aún con esto, sigue sin obtener la IP, quizá puedan probar esto. A mi me ha bastado con la solución que les propongo en unas 5 laptops, pero uno nunca sabe.