0

WebサイトのWebセットアップを作成しようとしていますが、インストーラークラスを使用してカスタム処理を実行したいと考えています。VS 2010を使用していますが、Webサイトとインストーラーは.NET3.5です。

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

私もこの行動/targetdir="[TARGETDIR]/"のために設定しました。CustomActionData

プロジェクトは標準のInstallScriptクラスライブラリ(dll)です。
クラスから継承するパブリッククラスがありInstallerます。いくつかのオンライン例で行われているように、これはInstallメソッドをオーバーライドします。

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

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

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

4

1 に答える 1

0

OK、何が欠けているのかわかりました。

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

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

[System.ComponentModel.RunInstaller(true)]   
public class MyWebInstaller : System.Configuration.Install.Installer   
{
  ...
于 2012-02-22T11:35:31.893 に答える