質問

私は自分のWebサイトのWebセットアップを作成しようとしています。インストーラークラスを使用して、カスタムスタッフを行いたいと思います。私は2010年VSを使用しており、Webサイトとインストーラーは.NET 3.5です。

インストーラークラスのプロジェクト出力への参照を追加しました Install セクションアンダー Custom Actions:
Custom Actions

私も設定しました /targetdir="[TARGETDIR]/"CustomActionData このアクションのために。

InstallScript プロジェクトは標準クラスライブラリ(DLL)です。
継承する公開クラスがあります Installer クラス。いくつかのオンライン例で行われているのを見たように、インストール方法をオーバーライドします。

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

インストール中にここにメッセージボックスが表示されるべきだと思いますが、呼び出されないようです。エラーも表示されません。セットアップは、このコードが呼び出されることはないかのように実行されます。

何が悪いのか誰もが考えていますか?

役に立ちましたか?

解決

わかりました、私は何が欠けているかを知りました。

クラス属性を使用してクラスを指定する必要があります RunInstaller(true) セットアップがピックアップして実際にコードを実行します。

したがって、クラスは次のように宣言する必要があります。

[System.ComponentModel.RunInstaller(true)]   
public class MyWebInstaller : System.Configuration.Install.Installer   
{
  ...
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top