3

ウェルカム ダイアログの前にスケジュールされたカスタム ダイアログを作成したいと考えています。カスタム ダイアログには、ビットマップ コントロール、いくつかのテキスト コントロール、およびキャンセル (SpawnDialog->CancelDlg) と次へ (NewDialog->WelcomeDlg) の 2 つのボタンがあります。派手なカスタム アクションやプロパティの設定はありません。

  • Wix バージョン: 3.8
  • WixUI_InstallDir.wxs の使用

次の質問を既に見つけました: WelcomeDlg の前にカスタム ダイアログを挿入するにはどうすればよいですか? 回答済みとしてマークされていますが、質問者はその回答の解決策を使用して私と同じエラーメッセージ(コメントを参照)を受け取ります。したがって、これを重複としてマークしないでください。

次のコード (customDialog.wxs から、WixUi_InstallDir.wxs の dialogRef を使用) はビルドし、カスタム ダイアログは最初のダイアログとして表示されます。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
 <Fragment>
  <UI>
   <Dialog Id="CustomDlg" Width="370" Height="270" Title="[ProductName] - Setup">
    <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)">
      <Publish Event="NewDialog" Value="WelcomeDlg">1</Publish>
    </Control>
    <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" Disabled="yes"/>
    <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
      <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
    </Control>         
    <!-- ... More Controls ... -->
   </Dialog>

   <InstallUISequence>
     <Show Dialog="CustomDlg" After="CostFinalize">NOT Installed OR PATCH</Show>
   </InstallUISequence>
  </UI>
 </Fragment>
</Wix>

...しかし、UI シーケンスは完全に台無しです。

customDlg ->welcomeDlg ->verifyDlg ->welcomeDlg ->verifyDlg ->progressDlg ...

したがって、「インストール」ボタンをクリックすると、ようこそダイアログに戻ります。2 番目の「ターン」では、インストール ボタンをクリックすると、インストールがトリガーされるという望ましい効果があります :-P

@Before、@After、または @Sequence (UISequence を確認するために Orca を使用) のいずれかを使用して、さまざまな場所でカスタム ダイアログをスケジュールし、独自の WelcomeDlg を作成しようとしました (ここで説明されているように: http://neilsleightholm.blogspot. de/2008/08/customized-uis-for-wix.html )。カスタム ダイアログの後にスケジュールするなど、WelcomeDlg の InstallUISequence-Element をいじりました。しかし (驚いたことに) @After="CustomDlg" は、カスタム ダイアログで @Before="WelcomeDlg" と同じ効果を持ち、UI シーケンスを再び混乱させます。

ユーザー アカウント制御がその混乱を引き起こしていると考えましたが、UAC は MSI の ui-sequence に戻るために何をすべきでしょうか? 私には意味がありません。とにかく、インストールボタンを押したときにUACのプロンプトを抑制する必要があるadmin-CmdでMSIを実行してみました。しかし、それでも同じめちゃくちゃな UI シーケンスです。

助けてくれてありがとう。

4

2 に答える 2

5

通常、1 つのダイアログ (welcomeDlg) だけが InstallUISequence テーブルにエントリを持っています。他のすべてのダイアログは、NewDialog ControlEvents によって取り込まれます。あなたが行ったことは、新しいダイアログを追加し、welcomeDlg の前に UI シーケンスでスケジュールすることです。次に、この 2 つをリンクする NewDialog イベントを配置します。

verifyDlg に到達すると、EndDialog コントロール イベントが呼び出され、制御を InstallUISequence に戻します。次に、InstallUISequence は、welcomeDlg のエントリ ポイントを見つけ、プロセスを繰り返します。

カスタム ダイアログとウェルカム ダイアログの間の関係を削除し、EndDialog コントロール イベントに置き換える必要があります。これは、ようこそから最初のカスタム ダイアログに「戻る」ことができないことを意味することに注意してください。

カスタム ダイアログを最初のダイアログにする必要がある場合は、多くの作業が必要です。最初のダイアログは常に歓迎すべきなので、良い練習にはなりません。

追加のダイアログを前もってシーケンスするのは、Launch Conditions の置換を行うときだけです。この場合、インストーラーが続行するとは思わないので、問題ありません。ウェルカムは呼び出されません。

于 2014-03-27T14:43:12.440 に答える