viernes, 10 de febrero de 2012

Windows Azure Startup tasks. Instalando .exe, .msi y .msu

Windows Azure BigMuy buenas,

Cuando es necesario que una de nuestras aplicaciones a desplegar en Azure cuente con algún prerrequisito, Toolkit, SDK Adicional, etc., para que todo funcione correctamente, Azure cuenta con las “Startup Task”, que  seguro que ya conocéis.  Nuestra compañera Gisela ya lo comentó en un post hace ya un tiempo. No obstante, aunque las nociones son estas, existen algunos matices que me gustaría comentar:

Recordemos que estas tareas son necesarias, porque Windows Azure puede decidir en cualquier momento por cuestiones de mantenimiento (transparente para nosotros, eso sí), hacer un movimiento de la maquina  que contiene nuestro role, en cuyo caso si hemos optado por instalar manualmente algunos de estos prerrequisitos, perderíamos dicha configuración y nuestra aplicación dejaría de funcionar si aviso previo.

Para evitar esto necesitaremos configurar las “Startup task” como resumo a continuación:

   1: <WorkerRole name="ElGuerreWorkerRole" vmsize="Small">



   2:     <Startup>



   3:       <Task commandLine="Startup.cmd" executionContext="elevated" taskType="simple">



   4:       </Task>



   5:     </Startup>



   6: ...








Recordemos también que   por defecto un role de Windows Azure se despliega como Windows Server 2008 Sp2 así que para que en su lugar este sea “R2”  tenemos que establecer el valor de la propiedad  como osFamily="2"  en del fichero de configuración “.cscfg”.



A continuación un ejemplo para la instalación de WIF necesaria para la conexión con CRM OnLine:








1: @echo off




   2: sc config wuauserv start=demand



   3: wusa.exe "%~dp0Windows6.0-KB974405-x64.msu" /quiet /norestart               



   4: sc config wuauserv start=disabled



   5: exit /b 0







  • Para Windows Server 2008 R2 habría que modificar el “0” por un “1”  en la línea 3 del script anterior además de, osFamily=”2”:





   1: wusa.exe “%~dp0Windows6.1-KB974405-x64.msu”




 



Adicionalmente, para incluir  “.dll” en la “gac” es necesario proceder de la misma manera:





  1. Incluir el fichero “gacutil.exe” en nuestro proyecto (.csprog)  y, “Copy Allways”.


  2. Crear un “.cmd” con la instrucción adecuada y “Copy Allways”:





   1: gacutil /nologo /i .\Microsoft.IdentityModel.dll 



   2: exit /b 0




Importante: Es necesario seguir los siguientes pasos para guardar los  scripts “.cmd” y que este sea legible por el SSOO y principalmente para evitar problemas durante el deploy. Parece que esto es debido a un “issue / bug” !!!




image



image



image




La “recomendacion” en este post, es incluir nuestros instalables en un directorio“setup” dentro de cada proyecto “.csproj” (Role de Azure)  e indicar esteen la propiedad commandLine de nuestra “Task”. Asi todo estará un poco más organizado:





   1: <Task commandLine="setup\startup.cmd" executionContext="elevated" />




Aquí os dejo un muy buen enlace que también nos guía y llega a profundizar un poco más, y otro más, que incluye ejemplos con PowerShell.



Un camino más ágil, nunca viene mal, ¡seguro que no! Guiño



Saludos

Juanlu @Higuera la Real

Etiquetas:


This page is powered by Blogger. Isn't yours?