0

具体的には、私の WIX 展開プロジェクトで、TARGETDIR を [ProgramFilesFolder][Manufacturer] に設定しようとしています。これにより、WixUI_InstallDir のカスタム変更バージョンが InstallDirDlg を開いたときに、ドライブ ルートではなくそのパスにデフォルト設定されます。

TARGETDIRの設定、ダイアログ間のアクションの挿入、およびドキュメント内のさまざまなデータに関する質問に対して見つけた回答に基づいて、次のようなさまざまな形式のカスタム アクションを試しています。

<CustomAction Id="SetTARGETDIR" Property="TARGETDIR" Value="[ProgramFilesFolder][Manufacturer]" Execute="immediate" />

Property="WIXUI_INSTALLDIR"、Execute="firstSequence"、値のハードコーディングも試しました。

これをInstallExecuteSequenceで呼び出してみました:

<InstallExecuteSequence>
  <Custom Action="SetTARGETDIR" After="FindRelatedProducts"></Custom>
</InstallExecuteSequence>

そしてもちろん、さまざまなイベントの前後に挿入しようとしました。(厄介な障害の 1 つは、Before="InstallDirDlg" がアクションを挿入するのに最適な場所であると期待していたのに、ダイアログをイベントとして使用しようとするとコンパイル エラーが発生することです。)

また、InstallDirDlg が呼び出された時点で、UI フラグメント内でアクションを公開しようとしました。

<Publish Dialog="WelcomeDlg" Control="Next" Event="DoAction" Value="SetTARGETDIR">NOT Installed</Publish>

私が試したいくつかのことはエラーをスローしましたが、ほとんどの場合、問題は TARGETDIR が変更されていないことです。デフォルトのインストール パスはドライブ ルートのままです。私の推測では、この WixUI の使用について、カスタム アクションの起動方法を根本的に変える何かがあるということです。しかし、これがなぜそうなのか、手がかりが見つからないようです。

4

1 に答える 1

1

WixUI_InstallDir テンプレートを使用する場合、インストール ディレクトリを定義するために使用される特定のプロパティが 1 つあります。このプロパティは と呼ばれWIXUI_INSTALLDIRます。次のコード スニペットを見て、その仕組みを確認してください。

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder" Name="PFiles">
    <Directory Id="TESTFILEPRODUCTDIR" Name="Test File">
      ...
    </Directory>
   </Directory>
</Directory>
...
<Property Id="WIXUI_INSTALLDIR" Value="TESTFILEPRODUCTDIR" />
<UIRef Id="WixUI_InstallDir" />

この例は、次のドキュメントから直接取得したものです: WixUI_InstallDir Dialog Set

あなたの例を正しく理解していれば、製造元の名前を持つ別のサブディレクトリを含めることができます。プロパティをディレクトリ名として使用できないことに注意してください。代わりにorを使用できます。$(var.variables)!(loc.localizationVariables)ローカライズ変数の使用をお勧めします。例えば:

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder" Name="PFiles">
    <Directory Id="ManufacturerDir" Name="!(loc.manufacturer)">
      <Directory Id="TESTFILEPRODUCTDIR" Name="Test File">
      ...
      </Directory>
    <Directory>
   </Directory>
</Directory>

別の注意: ダイアログが表示される前にカスタム アクションを実行する場合は、InstallUISequence. Standard Actions Referenceを参照して、それらが何を行うかを理解してから、インストーラー ログを確認してください。標準アクションがいつ実行されるかを確認し、それに応じてカスタム アクションをスケジュールできます。

例えば:

<InstallUISequence>
  <Custom Action="MyCA" Before="AppSearch" />
</InstallUISequence>

最初の標準アクションが実行される前にMyCAカスタム アクションが実行されるようにします。

于 2013-09-19T09:57:29.347 に答える