Tengo una aplicación con requisitos de configuración complejos. Estoy familiarizado con algunas de las herramientas que existen para crear programas de configuración como Wix, proyecto de instalación de Visual Studio, Inno-setup y herramientas de terceros. Para esta aplicación en particular, sin embargo, he determinado que necesito escribir el programa de instalación desde cero en C#, sin utilizar ninguna de esas herramientas. Algunos de los razonamientos expresados por Joel se aplican aquí, excepto que quiero hacer esto en C# en lugar de MFC.¿Cómo crear un programa de instalación independiente y autónomo escrito en C#?
De todos modos, mi pregunta es: ¿cómo podría crear un ejecutable .NET que pueda contener un conjunto de archivos que se extraen en tiempo de ejecución? En este caso, el exe es el programa de instalación y los archivos son los archivos de programa que necesita instalar. Además, ¿cómo puedo hacer que el programa ejecutable sea completamente independiente, es decir, aunque estoy usando algunos ensambles externos (tanto los propios como los de terceros) quiero que estén empaquetados en un solo EXE (en C/C++ nativo este era realizado a través de enlaces estáticos).
ACTUALIZACIÓN
Este es el enfoque que he conseguido trabajar hasta el momento, que voy a seguir con menos que alguien sugiere algo mejor:
- Creado un archivo de manifiesto en XML que contiene la lista de todos los archivos y la estructura de carpetas que comprende la aplicación que está instalando mi programa de instalación. Agregué este archivo al proyecto VS para el programa de instalación.
- Escribió una herramienta en C# (zipfiles.exe) que toma el manifiesto XML y crea un archivo zip que contiene todos los archivos. Esta herramienta utiliza la increíble biblioteca DotNetZip para crear el archivo zip.
- Agregué una acción de preconstrucción a mi proyecto de programa de instalación que inicia la herramienta de archivos zip con el manifiesto XML y genera el archivo zip (Files.zip) en la carpeta del proyecto.
- Agregué Files.zip como recurso incrustado en mi proyecto de programa de instalación.
- Mi programa de configuración en tiempo de ejecución extrae la cremallera incorporado y descomprime al objetivo de la carpeta de instalación de la aplicación (de nuevo usando DotNetZip)
- añadido una acción posterior a la generación de mi proyecto de programa de instalación que utiliza la herramienta ILMerge para agrupar todos los ensamblajes externos que usa en el exe.
Ahora tengo un proyecto VS para mi programa de instalación que construye un exe autónomo con todos los archivos que necesita para instalar incrustado en él. Cuando cambia la lista de archivos para la aplicación que se está instalando, simplemente actualizo el XML del manifiesto y la reconstrucción.
¡Ahora puedo enfocarme en el resto de mi lógica de configuración!
escribir 'cualquier cosa' en MFC es una locura! –
Espera, solo porque Joel lo haya hecho no excluye la posibilidad de que sea una locura. Inició una compañía de software en Manhattan que no es también un banco de inversión. ¡Eso es una locura! – JasonTrue
Bueno, esos fueron tiempos diferentes ... Estoy tratando de hacer lo mismo, excepto que use un lenguaje más moderno C# – DSO