2016-12-14 9 views
0

InstallShieldベースのインストーラを更新しています。 C#で書かれた、Wix DTFを使用してパッケージ化された新しい管理カスタムアクションを追加しました。 アクションが正しく呼び出され、必要な処理が実行されます。私が持っているMSI:インストールのUIフェーズでメッセージボックスを表示

問題は、ユーザーにエラーメッセージが表示されます。

方法1:MsiProcessMessage

私が読んだ記事から、私はMsiProcessMessageはそれを行うための正しい方法であることを理解セットアップが実際にファイルをコピーし、起動する前に、しかし、この方法は、(UIシーケンスでは動作しません。修正システム)。インストールの順番でこの方法が有効です。私が使用するコードは以下の通りです:

Record record = new Record() { FormatString = "Password is not valid for this user." }; 
session.Message(
    InstallMessage.Error | (InstallMessage)(MessageBoxIcon.Error) | (InstallMessage)MessageBoxButtons.OK, 
    record 
); 

MsiProcessMessageを使用してUIシーケンス(即時実行)にエラーメッセージを表示するために、実際には不可能ですか?

方法2:MessageBox.Show

メッセージボックスを示すWindows.Forms作品を使用します。ただし、セットアップウィザードのバックグラウンドにメッセージが表示され、Windowsタスクバーに別のアイコンが表示されます。

インストールウィザードのウィンドウハンドルを取得する方法はありますし、その方法は、この問題を解決しますか?

答えて

2

あなたはかなりこれについては言及しなかったが、私はあなたがボタンクリックのようなもののオフに公表され、DoAction ControlEventを離れてあなたのカスタムアクションを呼び出していることを推測しています。カバーの下では、InstallUISequenceのスケジューリングとはまったく異なります。 MsiProcessMessage doesn't work from DoAction。 WindowsインストーラのUIの経験と適切に統合するために

、あなたはMessageBox.Show(あなたの方法2)を使用しないでください。より良い統合のオプションが含まれます:あなたは条件付きで条件付きによる追加ウィザードパネルを表示SpawnDialog ControlEvent

  • を呼び出すことによって、ポップアップメッセージを表示
  • このアクションを呼び出すそこから、ダイアログ上に表示することができ、メッセージを微調整

    これらの3つはすべてプロジェクトのUIを編集することですが、その方法は異なります。

  • +0

    あなたは全く正しい推測しました。私はすでに回避策として 'SpawnDialog'を選択しました。第二の問題を回避するには、私の心にずっと悪いです(私のインストーラがありますどのような名前を知る)ウィンドウ名、によってインストーラのウィンドウを見つけることでした。ご協力ありがとうございました! –

    +0

    MSIでMESSAGECAPTIONとMESSAGETEXTプロパティを持つ汎用メッセージボックスダイアログを作成するのは簡単です。次に、あなたのControlEventでこれらのプロパティを割り当ててダイアログを起動するだけです。 –

    関連する問題