Windows Mobile 5.0 y MSMQ

Llevo un par de dias urgando en la versión de MSMQ para dispositivos móviles preparando una maravillosa parte para los cursos de certificación de CampusMVP, que espero sean del agrado de los asistentes. Ya había jugado con este tema desde las versiones beta de Compact Framework 2.0 e incluso había publicado un artículo en MTJ.NET. Revisando blogs y más blogs sobre este tema en busca de algún detalle que se me pudiera estar escapando y que fuera interesante como material para el curso observaba bastantes cuestiones acerca de un error en la instalación de MSMQ que voy a pasar a comentar.


En principio se suelen usar dos formas, una variante de la otra, para instalar MSMQ en los dispositivos, la primera es llevarse el archivo de empaquetado msmq.cab, que podremos encontrar en los ‘Optional Windows Mobile 5 Server Componentes’ y proceder a su instalación, con esto conseguimos llevar las librerías y herramientas como msmqadm.exe y visadm.exe  a los directorios apropiados, posteriormente tendríamos que ejecutar visadm.exe y los comandos necesarios para proceder al registro de MSMQ. La segunda versión de instalación consiste en establecer estas librerías y herramientas como archivos incluídos en el proyecto y como ‘Copy To Output Allways’ . es decir, que acompañen a nuestra aplicación, para posteriormente desde código copiarlas a los directorios específicos, en este caso Windows. Hasta este punto nada fuera de lo normal, sin embargo existe un paso a realizar en ambos casos y consiste en registrar el driver de MSMQ y es aquí dónde viene el misterioso problema. Para registrar el driver de MSMQ realizamos una llamada a nativo tal y como vemos a continuación:


IntPtr handle = ActivateDevice(MSMQ_DRIVER_REG, 0);


                    CloseHandle(handle);


                    if (CreateProcess(MSMQ_ADM, «status»))


                        MessageBox.Show(«MSMQ running»);


                    else


                        MessageBox.Show(«System Error = « + GetLastError().ToString());


Tal y como decía el problema que se repite en multitud de foros y blogs como los anteriormente propuestos hace referencia a que este registro de driver que acabamos de ver funciona correctamente en los emuladores de Windows Mobile 5.0 pero no en los dispositivos reales y en la consola de visadm.exe siempre encontramos un maravilloso y explicativo código de error, el error C00E000B  ¿ Cual es el problema y cual es la solución ?


Despues de darle muchas vueltas y hablar con mi compañero y amigo Alejandro Mezcua comentamos que podría ser algún tipo de problema de seguridad puesto que el driver esta firmado con un certificado no presente en el Root de los dispositivos por lo que lo exportamos y lo incluímos, el problema es que seguía sin funcionar…. Alejandro se dió cuenta de un problema que le había pasado en el registro de un Driver que el se había construído y sugirió hacer el registro del driver en WindowsStartUp y !!!!!voila!!!!!!


 Realmente el problema es que Windows Mobile no permite el registro de un nuevo driver en User Mode por lo que el código visto nunca funcionará a lo menos que lo ejecutemos en la carga del S.O.


 


Espero que os haya gustado y que no perdais mucho tiempo con el maravilloso C00E000B..


 


Saludos


Unai Zorrilla Castro

2 comentarios sobre “Windows Mobile 5.0 y MSMQ”

  1. plas plas plas!

    buenisimo, chaval! Sois unos crases! Esas habilidades de deduccion por ingenieria inversa sirven para todo! }:D

    Por cierto, dejadles caer una nota a los del grupo de producto, por si acaso… Ya sabes que como el grupo de Mobile es pequenyito, se hace mucho caso a lo que se cuenta desde fuera }:)

    Nos vemos pronto!

  2. ole ole esos pedazo de troubleshooters 😀

    He visto algún caso parecido que se resolvia tras instalar una dll de debug para msmq para obtener trazas, pero habeís hecho un curro de deducción genial.

    Yo estoy con phobeo, seguro que el grupo de producto esta interesado, yo por el momento le voy a pasar este enlace a los compañeros de soporte a embedded devices 🙂

    por cierto… C00E000B (mq.h)
    MQ_ERROR_SERVICE_NOT_AVAILABLE

    gracias por la info!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *