En el pasado, hemos utilizado el Instalador avanzado para crear nuestros instaladores .msi para un proyecto en particular. Nuestra licencia anual para Advanced Installer ha expirado, por lo que para evitar el costo de renovación y porque creo que se puede lograr lo mismo con Visual Studio, intento utilizar Visual Studio 2010 Setup Project para compilar mi .msi.Acción personalizada no funciona - Proyecto de instalación de Visual Studio
En su mayor parte, el instalador que he creado con Visual Studio funciona bien. Sin embargo, una cosa que necesitamos que haga el instalador es ejecutar un par de archivos .reg para agregar una gran colección de configuraciones al registro (Vale la pena señalar que este es un software antiguo que solo se mantiene y actualiza hasta que se reemplaza completamente en el futuro cercano. No es práctico cambiar nuestro método de almacenamiento de configuraciones). Con el Instalador avanzado, pudimos ejecutar un archivo .cmd como una Acción personalizada "Instalar" que ejecutaría estos archivos .reg que también se incluyeron en la instalación. VS Proyectos de instalación tienen acciones personalizadas, pero parece que aquí están obligados a ser tanto .dll o .exe archivos, por lo que deben encontrar una alternativa al uso de un .bat o .cmd archivo.
En primer lugar, he intentado añadir un proyecto de línea de comandos para mi solución que consistía sólo en las siguientes líneas en el método main():
using (Process registryInput = Process.Start("regedit.exe", "/s Settings1.reg"))
{
registryInput.WaitForExit();
}
using (Process registryInput= Process.Start("regedit.exe", "/s Settings2.reg"))
{
registryInput.WaitForExit();
}
que añade el de salida principal de este proyecto para el "Instalar" carpeta del editor "Acciones personalizadas". Intenté ejecutar el instalador, pero el proceso de la línea de comando nunca pareció ejecutarse y no se instaló ninguna configuración de registro. Si ejecutaba manualmente el ejecutable de la línea de comando desde el directorio de la aplicación donde estaba instalado, agregaba las entradas de registro como estaba previsto, por lo que el problema no está en el código que estoy usando para llamar a los archivos .reg.
Me volví a MSDN y cambié mi solución para que se modele después de su Custom Actions Walkthrough. Creé un proyecto de biblioteca de clase (y eliminé mi proyecto de línea de comando) y agregué una clase de instalador. En lugar de iniciar un navegador usando la URL del sitio web de Microsoft en el método Commit() como se muestra en su ejemplo, agregué el código anterior al método Install(). Esto es lo que terminé con:
[RunInstaller(true)]
public partial class Installer1 : System.Configuration.Install.Installer
{
public Installer1()
{
InitializeComponent();
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
using (Process registryInput = Process.Start("regedit.exe", "/s Settings1.reg"))
{
registryInput.WaitForExit();
}
using (Process registryInput = Process.Start("regedit.exe", "/s Settings2.reg"))
{
registryInput.WaitForExit();
}
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Commit(IDictionary savedState)
{
base.Commit(savedState);
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Rollback(IDictionary savedState)
{
base.Rollback(savedState);
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);
}
}
que añade el de salida principal de este nuevo proyecto de biblioteca de clases a la carpeta "Install" del editor "Acciones personalizadas". Aún así, cuando ejecuto el instalador, el código no parece ejecutarse y mi configuración de registro no se agrega. He probado este instalador ambos configurados para "Instalar para todos los usuarios" y "Este usuario solamente".
Cualquier ayuda para obtener este funcionamiento de Acción personalizada o un método alternativo para obtener un archivo .reg para ejecutar en la instalación será muy apreciada. Gracias de antemano.
Puede ejecutar archivos .cmd o .bat utilizando 'cmd.exe/c .cmd'. –
Intente ejecutar su instalación con un registro detallado: 'msiexec/i product.msi/l * vx product.log'. Este archivo de registro tendrá las líneas de comando utilizadas para ejecutar sus acciones personalizadas. –
En VS2005 al menos, no le permitirá ingresar "cmd.exe/c .cmd" como el comando para ejecutar, debe elegir el archivo del buscador de carpetas :( –
gollumullog