0

現在、IIS で新しい Web サイトを作成し、アプリケーション プールを作成してから、このプールを Web サイトに割り当てるインストーラーを作成しています。これを行うカスタム アクションを作成しましたが、これは正常に機能します。

現在、ユーザー入力 (サイト名、ターゲット ディレクトリ、ポート番号など) にいくつかのチェックを構築しようとしています。これは私が立ち往生しているところです。ポート番号が「有効」でない場合、つまり 65535 より大きい場合、0 より小さい場合、null または空白である場合、または現在別のサイトで使用されている場合に、ユーザーにメッセージ ボックスを表示しようとしています。これは OnBeforeInstall メソッドで行われます。

ユーザーがメッセージを受け取って「OK」をクリックした時点で、インストーラーを停止し、ユーザーが別のポート番号を入力できるようにします。明確にするために、インストーラーをロールバックまたは終了させたくありません。ユーザーが新しいポート番号を入力できるようにしてから、「次へ」をクリックしてみてください。Web サイトが既に存在するかどうかを確認するなど、OnBeforeInstall メソッドで他のチェックも実行します。ユーザーからの基本的な入力が検証されるまで、これらのチェックを実行したくありません。

これまでの私のコードは次のとおりです。

    protected override void OnBeforeInstall(System.Collections.IDictionary savedState)
    {
        base.OnBeforeInstall(savedState);

        string msg = "The port: " + targetPort + " is invalid.";
        string caption = "Invalid Port Supplied";
        MessageBoxButtons buttons = MessageBoxButtons.OK;
        DialogResult result = DialogResult.None;

        int UserPort;
        Int32.TryParse(targetPort, out UserPort);

        if (UserPort <= 0 || string.IsNullOrEmpty(targetPort))
        {
           result = MessageBox.Show(msg, caption, buttons);
        }
        else if (UserPort > 65535)
        {
            result = MessageBox.Show(msg + " Please enter a port number less than 65535.", caption, buttons);
        }
        else if (!IsValidPort())
        {
            result = MessageBox.Show(msg + " The port is already in use.", caption, buttons);
        }

        if (result == DialogResult.OK)
        {
            //Pause installer
        }

        ...more checks...

    }

どんな助けでも大歓迎です。

4

1 に答える 1

1

これは Visual Studio セットアップ プロジェクトのように見えますが、VS セットアップ プロジェクトでその検証を行うことはできません。

その名前にもかかわらず、OnBeforeInstall はインストールが完了してファイルがインストールされた後に実行されるため、使用されていたダイアログが表示されなくなり、値にアクセスできなくなります。そのコードからのメッセージを表示し、進行状況バーとの相対的な位置を確認します。Web サイトが既に作成されている場合もあります。

MSI インストールで検証が行われる方法は、カスタム アクション コードがダイアログのボタンによってトリガーされるため、値が正しくない場合、[次へ] ボタンが無効になり、メッセージが表示されます。これは、VS セットアップ プロジェクトでは実行できません。

于 2014-08-09T17:37:52.040 に答える