4

いくつかの EXE ファイルをインストールする WiX プロジェクトがあります。1 つは「メイン」実行可能ファイルで、その他は問題の診断に役立つサポート プログラムです。

メインの実行可能ファイルはオプションであり、サポート プログラムは単独で実行されます。多くの場合、エンド ユーザーはメインの実行可能ファイルの代わりにサードパーティ プログラムをインストールします。

WiX インストーラーの最後に、インストーラーが閉じるとすぐにプログラムを実行する「プログラムの起動」チェックボックスが必要です。

INSTALLLEVEL プロパティに基づいてチェックボックスを非表示にできますが、ユーザーが「標準」または「完全」インストールを選択したかどうかによってのみ変化します。メインの実行可能機能がインストールされているかどうかに基づいて非表示にしたいと思います。

次のようなものが理想的です。

<Feature Id='MainProgram' Title='MainExe'
         Description='This application stores and displays information from our hardware.'
         ConfigurableDirectory='INSTALLDIR' Level='4'
         AllowAdvertise='no'>
    <ComponentRef Id='MainExecutable' />
    <ComponentRef Id='SQLLibrary' />
    <ComponentRef Id='ProgramIcon' />
    <ComponentRef Id='RemovePluginsFolder'/>
    <Property Id='ShowFinalCheckbox'>1</Property> #<--This won't work, but I'd like it to.
</Feature>
4

3 に答える 3

10

SetProperty 要素を使用して、アクションの前または後にプロパティの値を変更できます。実行可能ファイルのインストール状態に基づいて値を設定するには、MSI SDK の Conditional Statement Syntax に記載されているコンポーネントの状態の組み合わせを使用します。この例をいじる必要がありますが、これで少しは近づけると思います。

<SetProperty Id="ShowFinalCheckBox" Value="1" After="CostFinalize">?MainExecutableComponent&gt;2 OR $MainExecutableComponent&gt;2</SetProperty>

そこにあるすべての魔法は、上記の MSI SDK へのリンクで説明されています。

于 2009-01-26T16:48:41.130 に答える
1

WiX 2 の場合、 &Feature を使用して、その機能がインストールされているかどうかを確認できます。

<Dialog Id="ExitDlg" Width="370" Height="270" Title="[ProductName] [Setup]" NoMinimize="yes">
    <Control Id="Finish" Type="PushButton" X="236" Y="243" Width="56" Height="17"
             Default="yes" Cancel="yes" Text="Finish">
      <Publish Event="EndDialog" Value="Return">1</Publish>
      <Publish Event="DoAction" Value="LaunchFile">(NOT Installed) AND (LAUNCHPRODUCT = 1) AND (&amp;MainExecutable = 3)</Publish>
    </Control>
    <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Disabled="yes" Text="Cancel" />
    <Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="[DialogBitmap]" />
    <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Disabled="yes" Text="Back" />
    <Control Id="Description" Type="Text" X="135" Y="70" Width="220" Height="20" Transparent="yes" NoPrefix="yes">
      <Text>Click the Finish button to exit the Wizard.</Text>
    </Control>
    <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
    <Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes">
      <Text>{\VerdanaBold13}Completing the [ProductName] Wizard</Text>
    </Control>
    <Control Id="Launch" Type="CheckBox" X="135" Y="120" Width="150" Height="17"
             Property="LAUNCHPRODUCT" CheckBoxValue="1">
      <Text>Launch [ProductName]</Text>
      <Condition Action="hide">
        NOT (&amp;MainProgramFeature = 3)
      </Condition>
    </Control>
  </Dialog>

このようにして、ダイアログを非表示にし、同じ条件を使用してプログラムを起動しないようにすることができます (チェック ボックスの初期状態に関係なく)。

于 2009-01-26T18:06:49.147 に答える