Domanda

Sto cercando di creare una configurazione Web per il mio sito Web e voglio utilizzare una classe di installatore per fare alcune cose personalizzate. Sto usando VS 2010 e il sito Web e l'installatore sono .NET 3.5.

Ho aggiunto un riferimento all'output del progetto di classe di installazione in Install sezione sotto Custom Actions:
Custom Actions

Ho anche impostato /targetdir="[TARGETDIR]/" sul CustomActionData per questa azione.

Il InstallScript Il progetto è una libreria di classe standard (DLL).
C'è una classe pubblica che eredita Installer classe. Sostituisce il metodo di installazione come ho visto in diversi esempi online:

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);
    }
  }
}

Penserei che dovrebbe essere mostrata una casella di messaggio qui durante l'installazione, ma sembra che non venga mai chiamato. Nessun errore è mostrato neanche. L'impostazione viene eseguita come se questo codice non fosse mai stato chiamato.

Qualcuno ha idea di cosa c'è che non va?

È stato utile?

Soluzione

Ok, ho scoperto cosa mancava.

È necessario specificare la classe con l'attributo della classe RunInstaller(true) per il prelievo di impostare ed eseguire effettivamente il codice.

Quindi la classe deve essere dichiarata così:

[System.ComponentModel.RunInstaller(true)]   
public class MyWebInstaller : System.Configuration.Install.Installer   
{
  ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top