Frage

Ich versuche, ein Web -Setup für meine Website zu erstellen, und ich möchte mit einer Installateur -Klasse benutzerdefinierte Dinge durchführen. Ich verwende VS 2010 und die Website und das Installationsprogramm sind .NET 3.5.

Ich habe einen Hinweis auf die Projektausgabe des Installationsprojekts in der hinzugefügt Install Abschnitt unter Custom Actions:
Custom Actions

Ich habe auch gesetzt /targetdir="[TARGETDIR]/" auf der CustomActionData für diese Aktion.

Das InstallScript Das Projekt ist eine Standardklassenbibliothek (DLL).
Es gibt eine öffentliche Klasse, die von erbt Installer Klasse. Es überschreibt die Installationsmethode, wie ich es in mehreren Online -Beispielen gesehen habe:

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

Ich würde denken, dass hier während der Installation ein Nachrichtenfeld angezeigt werden sollte, aber es scheint, als würde es nie genannt. Es wird auch kein Fehler angezeigt. Das Setup läuft nur so, als würde dieser Code nie aufgerufen.

Hat jemand eine Vorstellung davon, was falsch ist?

War es hilfreich?

Lösung

Ok, ich fand heraus, was fehlte.

Sie müssen die Klasse mit dem Klassenattribut angeben RunInstaller(true) Damit das Setup den Code abholt und tatsächlich ausführen kann.

Die Klasse muss also so deklariert werden:

[System.ComponentModel.RunInstaller(true)]   
public class MyWebInstaller : System.Configuration.Install.Installer   
{
  ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top