Desde Visual Studio tienes dos opciones para crear programas de
instalación: Una de ellas es ClickOnce, y la otra es un Proyecto de
Instalacion.
ClickOnce es muy poco configurable. Podrías jugar con el Manifiesto de
despliegue utilizando la herramienta MAGE.EXE, pero en líneas generales vas
a tener bastante poca flexibilidad. Si quieres hacer algo especial (por
ejemplo, descargar o no ciertas DLLs dependiendo de las opciones que el
usuario seleccione en la instalación), en general lo que tendrás que hacer
es dejar que ClickOnce instale el "núcleo" de tu programa, y luego, cuando
el usuario ejecute éste, desde dentro de tu código hacer las preguntas que
quieras y llamar a las APIs correspondientes (en
System.Deployment.Application) para descargar los módulos adicionales que
necesites.
Un Proyecto de Instalación es mucho más flexible. Te genera un .msi para
Windows Installer (y un Setup.exe que lo que hace es lanzar el .msi), y
tiene muchas opciones configurables desde Visual Studio. Puedes seleccionar
las pantallas que salen durante la instalación y las preguntas que hacen,
las rutas de instalación de cada fichero que quieres instalar, comprobar
condiciones previas a la instalación, registrar DLLs tipo COM o instalar
DLLs en el GAC, etc. etc., e incluso lanzar "acciones personalizadas" que
son DLLs o EXEs que adjuntas con la instalación y se ejecutan durante la
misma. Pero esto no se puede publicar por ClickOnce; tienes que copiar el
msi a cada equipo y ejecutarlo ahi.
MAGE.EXE (herramienta de linea de comandos) y su interfaz gráfica
(MageUI.exe) vienen con el SDK:
http://msdn.microsoft.com/es-es/library/acz3y3te.aspx
Tienes algunos escenarios de uso aqui:
http://books.google.es/books?id=DFL94lsrc-sC&pg=PA228&lpg=PA228&dq=mage.exe&source=web&ots=yHC98HfYcf&sig=14sEVGTI3V5rZlzsezri2mblXco&hl=en&sa=X&oi=book_result&resnum=6&ct=result
Esto es fácil si te olvidas de ClickOnce y en su lugar utilizas un
Proyecto de Instalación. También te genera un Setup.exe (y un .msi) y te
deja configurar directamente desde Visual Studio el directorio de
instalación y los accesos directos que quieres crear.
Alberto de nuevo muchas gracias.
El "truco" que utilizan algunos desarrolladores, aunque yo nunca lo he
hecho, es crear un .msi con una aplicación "pequeñita" que configura todo lo
necesario, y al final esa aplicación lanza la "grande" que es la que se
descarga por ClickOnce. La idea es que la aplicación pequeña es tan pequeña
que no se espera que nunca haya que actualizarla, mientras que la grande
(que se lanza desde la pequeña) si que recibe las actualizaciones por medio
de ClickOnce. Al pasar primero por la pequeña, se consigue superar ciertas
limitaciones de clickonce, como por ejemplo la ejecución con elevación de
permisos del UAC. De paso, se puede usar el msi para configurar las cosas
que clickonce no permite, como por ejemplo iconos en el escritorio.