heat.exe

heat.exe – Genera automáticamente código para instaladores WiX a partir de archivos y carpetas

Descripción del programa heat.exe

heat.exe es una herramienta de línea de comandos que forma parte del conjunto de utilidades de WiX Toolset, el marco de trabajo de código abierto para crear paquetes de instalación Windows Installer a partir de código fuente XML. Desarrollada por la comunidad de WiX, con el apoyo original de Microsoft y actualmente bajo el paraguas de la Fundación.NET, su función principal consiste en inspeccionar directorios, archivos, sitios web, claves de registro y otros recursos, y generar de forma automática el código fuente.wxs necesario para incluirlos en un instalador MSI.

La ventaja más destacada de heat.exe es su capacidad de cosechar automáticamente cientos o miles de archivos y convertirlos en componentes Windows Installer correctamente estructurados. Sin esta herramienta, el desarrollador del instalador tendría que escribir manualmente cada elemento, una tarea inviable para proyectos empresariales con decenas de miles de ficheros. El cosechado permite pasar de un directorio de salida de compilación a un fragmento de proyecto de instalación en cuestión de segundos, manteniendo la coherencia entre los GUID de los componentes y las rutas de destino.

WiX Toolset nació en 2004 como el primer proyecto de Microsoft publicado bajo una licencia de código abierto, y sus creadores, entre ellos Rob Mensching, detectaron la necesidad de automatizar la tediosa creación de componentes. Así surgió heat.exe como evolución de las primeras herramientas de cosechado, integrándose plenamente en el ecosistema de compilación con MSBuild. La herramienta ha madurado durante casi dos décadas, recibiendo mejoras continuas para cubrir nuevos tipos de recursos como los sitios web de IIS, los servicios de Windows y los módulos de SQL Server.

¿Necesitas generar el código de instalación de un proyecto complejo sin escribir manualmente cada entrada de archivo?

Características clave de heat.exe

1. Cosechado de directorios completos

heat.exe puede recorrer una carpeta y todas sus subcarpetas para generar el fragmento de código.wxs que describe cada archivo como un componente individual. Esta cosechadora, denominada directory, extrae automáticamente la información de versión, tamaño y tipo de cada archivo para rellenar los campos obligatorios del componente. Resulta especialmente práctica para proyectos que generan grandes árboles de carpetas, como aplicaciones web o suites ofimáticas.

2. Extracción de información de registro

La cosechadora registry analiza un archivo.reg exportado desde el Editor del Registro y lo convierte en elementos de código fuente de WiX. Esto permite trasladar las claves y valores del registro al formato declarativo de Windows Installer sin necesidad de transcribir manualmente ni de recurrir a la autorregistración. La salida generada puede revisarse y adaptarse fácilmente para usar variables de instalación en lugar de rutas fijas.

3. Cosechado de proyectos Visual Studio y COM

heat.exe puede inspeccionar directamente los archivos de proyecto de Visual Studio para cosechar las referencias y dependencias de un proyecto. Asimismo, la cosechadora COM extrae la información de registro de componentes COM desde archivos DLL, OCX y EXE, generando las entradas de las tablas Class, ProgId y TypeLib. Esta funcionalidad solapa parte del trabajo de herramientas como RegSpy2 y lo integra directamente en el flujo de compilación.

4. Integración total con MSBuild y sistemas de compilación

La herramienta se invoca habitualmente desde los propios archivos de proyecto.wixproj mediante tareas de MSBuild. Esta integración permite que el cosechado se ejecute como parte del proceso de compilación del instalador, de modo que los fragmentos.wxs se regeneran cada vez que se compila el producto. El resultado es un sistema de creación de instaladores que se adapta automáticamente a los cambios en la salida de compilación del proyecto principal.

5. Soporte para múltiples tipos de recurso

Más allá de archivos y registro, heat.exe incluye cosechadoras especializadas para sitios web de IIS, grupos y cuentas de usuario, servicios de Windows, ensamblados de la caché global y bases de datos de SQL Server. Esta versatilidad convierte a la herramienta en un asistente de generación de código para prácticamente cualquier recurso que pueda ser instalado mediante Windows Installer, centralizando en un único ejecutable la captura de todo el estado deseado del sistema.

Explicación detallada de las funcionalidades

La cosechadora de directorios funciona mediante un algoritmo de recorrido recursivo que asigna cada archivo a un componente individual. Por defecto, heat.exe genera un componente por archivo, lo cual es la práctica recomendada en Windows Installer para que la reparación del paquete funcione correctamente. El desarrollador puede ajustar este comportamiento mediante parámetros como -ag, que agrupa varios archivos en un mismo componente cuando no hay riesgo de dañar la lógica de reparación. La herramienta también permite excluir extensiones, carpetas o patrones de nombre mediante expresiones comodín.

El proceso de cosechado de registro actúa como un traductor de archivos.reg a código.wxs. Cuando usas RegSpy2 para obtener el archivo.reg de un componente COM, heat.exe es el siguiente paso lógico en la cadena de herramientas. El comando toma ese archivo.reg y genera automáticamente las claves y valores de registro en formato WiX. Sin embargo, la integración ideal va más allá: para componentes COM, la cosechadora específica COM puede leer directamente el binario y generar las entradas de registro y las tablas COM en un solo paso, aplicando las prácticas correctas de registro declarativo.

Cabe destacar el mecanismo de transformación con XSLT que incorpora heat.exe. La salida generada por cualquier cosechadora es un archivo.wxs funcional pero genérico, que a menudo contiene identificadores poco descriptivos o rutas absolutas no deseadas. La herramienta acepta un parámetro -t seguido de un archivo de transformación XSLT que permite modificar la salida sobre la marcha. Con esta técnica, se pueden renombrar automáticamente los identificadores de componente, añadir atributos de instalación o eliminar secciones redundantes, adaptando el cosechado a las convenciones del proyecto.

En este sentido, la integración con MSBuild convierte a heat.exe en una pieza invisible y automática del sistema de compilación. En un proyecto.wixproj típico, se define un objetivo de MSBuild que se ejecuta antes de la compilación del instalador. Este objetivo invoca a heat.exe con los parámetros configurados, cosecha los directorios de salida del proyecto principal y genera el archivo.wxs de contenido. Cuando un desarrollador añade, elimina o actualiza un archivo en el proyecto principal, la siguiente compilación del instalador refleja esos cambios sin ninguna intervención manual adicional.

Descarga e instalación de heat.exe

  • Página oficial: WiX Toolset – Página de descargas
  • Versión actual: WiX Toolset v4.0.5 (enero 2024)
  • Últimas versiones: WiX v3.14.1 (última de la rama 3.x, abril 2023), WiX v3.11.2 (rama estable anterior, mayo 2017)
  • Tamaño: Aproximadamente 45 MB el paquete de herramientas completo.
  • Sistemas operativos compatibles: Windows 10, Windows 11, Windows Server 2016, 2019 y 2022 en arquitecturas x86 y x64.
  • Requisitos mínimos:.NET Framework 4.7.2 o superior (para WiX v3);.NET 6.0 o.NET 8.0 (para WiX v4). Sin requisitos específicos de RAM o espacio en disco más allá del sistema operativo.
  • Licencia: Microsoft Reciprocal License (MS-RL), una licencia de código abierto aprobada por la OSI.
  • Idiomas: Inglés. La documentación, los mensajes de la herramienta y la comunidad de soporte utilizan este idioma.
  • Soporte técnico: Comunidad activa en el repositorio de GitHub, lista de correo de WiX, foros en Stack Overflow con la etiqueta wix y wiki del proyecto con documentación detallada de cada parámetro.

Cómo usar heat.exe

Tras instalar WiX Toolset, la herramienta heat.exe queda disponible en la ruta de instalación y a través de la línea de comandos para desarrolladores de Visual Studio. Para un cosechado de directorios, abres esa terminal y tecleas el comando que incluye la palabra clave dir, seguida de la ruta absoluta del directorio de origen con el parámetro -dr y el nombre del directorio de destino en el instalador, además de la salida con el parámetro -out. El comando base es sencillo, pero debes ajustar parámetros adicionales como -cg para dar un nombre al grupo de componentes.

El flujo de trabajo principal comienza cosechando el directorio donde tu proyecto deja los archivos compilados. Ejecutas heat.exe dir sobre esa carpeta, generando un archivo.wxs que contiene todos los componentes de archivo. La primera vez es probable que el resultado no se ajuste a tus convenciones, por lo que preparas un archivo XSLT para filtrar archivos no deseados, limpiar identificadores largos y añadir atributos comunes. Incorporas este paso a tu archivo.wixproj con una tarea de MSBuild para que el cosechado se ejecute automáticamente antes de cada compilación del instalador.

Para el caso concreto de componentes COM, puedes combinar heat.exe con herramientas de extracción como RegSpy2. Una opción consiste en usar la cosechadora registry de heat para procesar el archivo.reg generado por RegSpy2 y convertirlo en código de instalación. La alternativa más directa es usar la cosechadora com de heat, que inspecciona directamente el binario y genera las entradas de las tablas COM. Este último método produce un resultado más fiel al modelo declarativo de Windows Installer, siempre que revises la salida para verificar que las rutas y los índices de archivo se correspondan con los del resto del instalador.

Observaciones sobre el programa heat.exe

heat.exe se distingue de otras herramientas de cosechado por su integración total y nativa con el ecosistema de WiX. Mientras que algunas soluciones de empaquetado comerciales ofrecen sus propios cosechadores dentro de interfaces gráficas cerradas, esta herramienta opera en la línea de comandos y sigue el principio de generar código fuente editable que el desarrollador mantiene bajo control. Quienes confían en ella valoran la transparencia del proceso y la ausencia de cajas negras en la construcción del instalador.

El beneficio más tangible de usar heat.exe es la drástica reducción de errores humanos en la confección de las listas de archivos y componentes. La automatización evita omisiones, discrepancias en los GUID de los componentes y olvidos al actualizar la versión de los archivos. La velocidad de ejecución, que permite cosechar y regenerar decenas de miles de entradas en pocos segundos, convierte la compilación del instalador en un paso ligero y repetible que puede integrarse en cualquier sistema de integración continua.

El equipo de desarrollo de WiX Toolset, liderado originalmente por Rob Mensching y mantenido por una comunidad de colaboradores voluntarios y empleados de Microsoft, ha logrado que este conjunto de herramientas se convierta en el estándar de la industria para la creación de instaladores MSI. heat.exe refleja el conocimiento profundo que esta comunidad posee sobre el funcionamiento interno de Windows Installer y sus mejores prácticas, encapsulando ese saber en un ejecutable que cualquier desarrollador puede usar.

WiX Toolset recibe actualizaciones con regularidad. La rama v3 se mantiene en un estado de soporte a largo plazo para proyectos heredados, mientras que la rama v4 constituye una modernización profunda de la herramienta. Las revisiones corrigen problemas, mejoran la documentación y adaptan el cosechado a las nuevas características de los sistemas operativos y las plataformas de desarrollo. Al tratarse de un proyecto alojado en GitHub, el ciclo de publicación de versiones es transparente y predecible.

No existe una versión portable independiente de heat.exe porque la herramienta depende de las bibliotecas de WiX Toolset. Sin embargo, el proyecto WiX sí ofrece una distribución en formato ZIP que no requiere instalación administrativa. Basta con descargar el archivo comprimido, descomprimirlo en una carpeta y ejecutar heat.exe desde ahí, lo que funciona para escenarios de compilación en sistemas donde no se desea ejecutar el instalador completo del Toolset.

Más allá de los tipos de cosechado más comunes, heat.exe incluye cosechadoras menos conocidas pero muy útiles. La cosechadora performance captura las categorías de contadores de rendimiento, la cosechadora perfmon extrae los DLL de contadores de rendimiento, y la cosechadora website inspecciona un sitio web de IIS y genera toda la configuración necesaria para reproducirlo en el equipo de destino. Estas cosechadoras especializadas ahorran horas de documentación y escritura de código de instalación para configuraciones complejas de servidor.

Limitaciones importantes

  • La salida directa de heat.exe es genérica y requiere revisión. Los identificadores automáticos son largos y poco descriptivos, y las rutas de origen pueden quedar fijas al equipo de cosechado, lo que obliga a usar transformaciones XSLT o ediciones manuales posteriores.
  • La herramienta asume por defecto el modelo de un componente por archivo, que es correcto pero genera instaladores con miles de componentes. Para proyectos enormes, este comportamiento puede ralentizar la compilación del MSI si no se emplean agrupaciones controladas con el parámetro -ag.
  • El cosechado de componentes COM con la cosechadora com puede ser incompleto en comparación con la extracción especializada de RegSpy2. Algunas entradas de registro generadas automáticamente no reflejan todas las peculiaridades de servidores EXE complejos y requieren ajustes manuales posteriores.

Alternativa recomendada

Paraffin es una alternativa ligera y especializada para el cosechado de archivos en proyectos WiX. Se trata de otra herramienta de la comunidad que se centra exclusivamente en mantener sincronizados los fragmentos.wxs con los directorios, pero a diferencia de heat.exe, mantiene los identificadores y la estructura que el desarrollador ya ha personalizado.

Frente a heat.exe, la principal ventaja de Paraffin es que no regenera todo desde cero en cada ejecución. La herramienta lee el archivo.wxs existente y solo añade los componentes de archivos nuevos, manteniendo intactos los GUID y los nombres que hayas modificado manualmente. Esta filosofía de sincronización incremental resuelve la frustración de perder las personalizaciones en cada cosechado, ofreciendo un control más fino sobre los cambios y facilitando la integración en proyectos donde la salida de heat ya ha sido revisada minuciosamente. Descarga WiX Toolset desde su página oficial para empezar a usar heat.exe y agilizar la creación de tus instaladores.

Sección FAQ

¿heat.exe es gratis o de pago?

heat.exe es completamente gratuito y de código abierto. Forma parte del proyecto WiX Toolset, que se distribuye bajo la licencia Microsoft Reciprocal License. Su descarga no implica ningún coste y su uso no está restringido, ni siquiera en entornos empresariales.

¿Funciona en Linux, macOS, Windows 10 y Windows 11?

La herramienta se ejecuta de forma nativa en todas las versiones modernas de Windows, incluyendo Windows 10 y Windows 11, así como en sus equivalentes de servidor. No funciona directamente en Linux ni en macOS, ya que depende de las bibliotecas de Windows Installer. En estas plataformas, su uso es posible a través de máquinas virtuales o contenedores de compilación que ejecuten Windows.

¿Qué diferencia a heat.exe de otras alternativas similares?

heat.exe forma parte integral de WiX Toolset y es la única herramienta de cosechado que genera código fuente.wxs directamente compatible con el compilador de WiX. Otras alternativas pueden generar formatos intermedios o scripts, pero ninguna ofrece la integración tan profunda con MSBuild y el resto del ecosistema de compilación de instaladores.

¿Es obligatorio usar heat.exe para trabajar con WiX Toolset?

No, no es obligatorio. Muchos desarrolladores prefieren escribir manualmente los componentes en código.wxs para mantener un control absoluto sobre cada GUID y cada identificador. heat.exe es una ayuda a la productividad que brilla en proyectos con cientos de archivos, pero en instaladores pequeños o en aquellos donde la estructura de archivos cambia muy poco, el cosechado manual puede ser una opción perfectamente válida.

¿Cómo se pueden evitar las rutas absolutas en el código generado por heat.exe?

La solución consiste en usar variables de preprocesador en la línea de comandos. Al pasar el parámetro -var indicando una variable de WiX, el código cosechado referenciará los archivos de origen mediante esa variable en lugar de usar la ruta absoluta del equipo donde se ejecuta la herramienta. Esta práctica permite que el mismo código de instalación se compile sin cambios en distintas máquinas y entornos de integración continua.