0

リンクを読んだ後、このコードを書きました: http://blogs.technet.com/b/alexshev/archive/2008/03/25/property-does-not-exist-or-empty-when-accessed-from-遅延カスタム アクション.aspx

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Module Id="MergeModule1" Language="1033" Version="1.0.0.0">
    <Package Id="cffa568e-1bf0-4eb3-bee3-eb5801a0bbd0" Manufacturer="Microsoft" InstallerVersion="200" />

    <Binary Id="myCustomActionsDLL" SourceFile="CustomAction1.CA.dll" />

    <CustomAction Id="SetProperty" Execute="immediate" 
                  Property="CA_myCustomAction"
                  Value="InstallDir=[PRIMARYFOLDER];SourceDir=[SourceDir]" />


    <CustomAction
    Id="CA_myCustomAction"
    BinaryKey="myCustomActionsDLL"
    DllEntry="CustomAction1"
    Execute="deferred" Impersonate="no"
    Return="check" />

    <InstallExecuteSequence>
      <Custom Action="SetProperty" Before="InstallInitialize">Not Installed</Custom>
      <Custom Action="CA_myCustomAction" Before="InstallFinalize">Not Installed</Custom>
    </InstallExecuteSequence>

    <!--<InstallUISequence>
      <Custom Action="CA_myCustomAction" After="CostFinalize"></Custom>
    </InstallUISequence>-->

  </Module>
</Wix>

の代わりにInstallDir - PRIMARYFOLDER、INSTALLLOCATION、InstallDir、TargetDir を試しましたが、ProgramFiles(x86) の下にあるアプリケーションに指定されたインストール フォルダーを取得できません。

の値は、SourceDir実行中に MSI ファイルが配置されている適切な値として出てきます。

4

1 に答える 1

4

トラブルシューティングは、常に詳細ログの生成と読み取りから開始する必要があります。おそらく複数の問題が同時に発生し、すべてを同時に修正する必要があります。

1 つ目は、Type 51 set property カスタム アクションが InstallInitialize の前にスケジュールされていることです。プロパティは安全なカスタム プロパティではないため、トランザクションに渡されません。代わりに、InstallInitialize の後にスケジュールしてみてください。

2 つ目は、マージ モジュールにいて、マージ モジュールがほとんどすべての識別子をモジュール化 (GUID を追加) していることです。ORCA のビルド マージ モジュールを見ると、INSTALLDIR を探しているのではなく、INSTALLDIR.GUID を探していることがわかります。

本当に INSTALLDIR を使用する必要がある場合は、INSTALLDIR という名前のプロパティを値なしで定義し、SuppressModularization 属性を使用して GUID を防止します。私が通常とるアプローチは、MergeRedirectFolder ディレクトリを定義し、代わりにそれを使用することです。次に、マージ モジュールを InstallShield に追加するときに、モジュールを INSTALLDIR に関連付けると、推移的な性質が引き継がれます。

他にも問題がある可能性がありますが、最終的な MSI を確認してログを読まないとわかりません。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Module Id="MergeModule2" Language="1033" Version="1.0.0.0">
    <Package Id="c4acbfbc-a0e8-4d52-b516-bee471a76e8a" Manufacturer="" InstallerVersion="200" />
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="MergeRedirectFolder"/>
    </Directory>
    <Binary Id="myCustomActionsDLL" SourceFile="CustomAction1.CA.dll" />
    <CustomAction Id="SetProperty" Execute="immediate"
                  Property="CA_myCustomAction"
                  Value="InstallDir=[MergeRedirectFolder];SourceDir=[SourceDir]" />
    <CustomAction Id="CA_myCustomAction"
        BinaryKey="myCustomActionsDLL"
        DllEntry="CustomAction1"
        Execute="deferred" Impersonate="no"
        Return="check" />
    <InstallExecuteSequence>
      <Custom Action="SetProperty" After="InstallInitialize">Not Installed</Custom>
      <Custom Action="CA_myCustomAction" Before="InstallFinalize">Not Installed</Custom>
    </InstallExecuteSequence>

  </Module>
</Wix>
于 2013-08-01T12:18:01.553 に答える