Pregunta

Estoy tratando de crear una configuración web para mi sitio web, y quiero usar una clase de instalador para hacer algunas cosas personalizadas. Estoy usando VS 2010, y el sitio web e instalador es .NET 3.5.

He agregado referencia a la salida del proyecto de clase de instalador en el Install sección debajo Custom Actions:
Custom Actions

Yo también he establecido /targetdir="[TARGETDIR]/" sobre el CustomActionData para esta acción.

los InstallScript El proyecto es una biblioteca de clase estándar (DLL).
Hay una clase pública que hereda de Installer clase. Anula el método de instalación como he visto en varios ejemplos en línea:

using System.Collections;
using System.Windows.Forms;

namespace InstallScript
{
  public class MyWebInstaller : System.Configuration.Install.Installer
  {
    public override void Install(IDictionary stateSaver)
    {
      base.Install(stateSaver);
      var targetDir = Context.Parameters["targetdir"];
      if(targetDir==null) targetDir = "No TARGETDIR!";
      MessageBox.Show("TARGETDIR:\t" + targetDir);
    }
  }
}

Creo que se le debería mostrar un cuadro de mensaje aquí en algún momento durante la instalación, pero parece que nunca se llama. Tampoco se muestra ningún error. La configuración simplemente se ejecuta como si este código nunca se llamara.

¿Alguien tiene una idea de lo que está mal?

¿Fue útil?

Solución

Ok, descubrí lo que faltaba.

Necesita especificar la clase con el atributo de clase RunInstaller(true) Para que la configuración recoja y ejecute el código.

Entonces la clase debe ser declarada así:

[System.ComponentModel.RunInstaller(true)]   
public class MyWebInstaller : System.Configuration.Install.Installer   
{
  ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top