Ejecutar un servicio de Windows en 32-bit en un Windows de 64-bit

Hola a todos, llevo un tiempo apartado de los maravillosos mundos de internés, porque estamos en fase de puesta en producción en mi proyecto actual, y ya sabéis como es eso. Muchos nervios por parte de la jefatura, se ven algún que otro látigo de siete colas, alguna que otra frase graciosa del tipo “¿Dormir? Para que necesitas dormir… a trabajar…” y cosas similares. Bueno, pues unos de los diversos cambios que se hizo fue en la plataforma y pasamos de un bonito Windows Server 2003 32 bit a su esplendido predecesor el Windows 2008 Server 64-bit. Y después de unas pruebas de concepto con la aplicación vimos que todo funcionaba incluso un poco mejor, pero…¿todo?, NO todo no funcionaba a la perfección. Teníamos un pequeño servicio de Windows que se encargaba de ejecutar unos procesillos asíncronamente que decidió dejar de funcionar.

 

La situación fue un poco caótica, un procesillo del que nadie se había acordado, paso a ser la prioridad número uno, vamos que se caía el mundo si eso no funcionaba. Y allí estaba yo, con un montón de jefes revoloteando a mi lado, mirando la pantalla de mi ordenador y sus smartphones viendo que el mundo se caía, y haciendo los típicos comentarios que imagino que todos hemos escuchado alguna vez “¿Ya está?”, “¿Seguro que eso es por (poned aquí cualquier cosa que paso el día anterior que no tenga nada que ver con esto)?”, “Esto tiene que estar ya”. Y yo ahí aguantando el chaparrón y el servicio sólo me decía “No encuentro la xxx.dll”, y yo… “Joé, que la dll está aquí, ¿dónde quieres que te la deje corazón?”.

 

Lo único que había cambiado era la plataforma, así que me dije, voy a ejecutarlo en 32-bit y a probar, y… más problemillas no tenía acceso al código para compilarlo para la plataforma x86, que sería la solución ideal, y busqué por internet y encontré una pequeña maravilla que se esconde en el Windows 2008 SDK (esta herramienta es más antigua, pero para el 2008 se encuentra ahí), la herramienta ‘CorFlags.exe’.

 

Esta herramienta se encuentra en “C:Program FilesMicrosoft SDKsWindowsv6.0Binx64CorFlags.exe “, y sirve para activar el modo 32BIT a un ejecutable, en mí caso el servicio.

Para ejecutarla, es muy sencillo, si queremos poner el modo 32BIT:

CoreFlags.exe Ejecutable.exe /32BIT+

Si queremos quitar el modo 32BIT:

CoreFlags.exe Ejecutable.exe /32BIT-

Y con eso todo empezó a funcionar. Y el pequeño proceso dejó de ser la prioridad uno, y todo el mundo respiró más tranquilo. Luego estuve investigando un poco más, y el problema no era el proceso en sí que puede ejecutarse en 32 o 64, era la dll que referenciaba (un proveedor de base de datos) que no estaba instalado en modo 64bit porque no existía.

 

Hasta la próxima.

3 comentarios en “Ejecutar un servicio de Windows en 32-bit en un Windows de 64-bit”

Deja un comentario

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