2

いくつかのファイルをコピーする WiX インストーラー (10.0 など) があります。ファイルコピーに関するすべてが正常に機能します。そのバージョンからパッチを作成しようとしています。パッチ (10.1) が実行され、以前の 10.0 のインストールでこれらのファイルの一部をコピーする必要があった場合は常に、次の領域が表示されます。repair:

「指定されたパス [Path] は使用できません。」

確認しましたが、指定されたパスは利用可能です。にコピーされたファイルがあります。さらに、10.0 のインストールでファイルがコピーされた元のソース データ ディレクトリもそこにあります。他のファイルがコピーされる他のディレクトリがあります。彼らにもエラーがあるかどうかはわかりませんが、まだ見たことがないだけです。

何がうまくいかないのですか?

元のインストールとパッチの両方で同じ .wxs コードを次に示します。

<DirectoryRef Id="SAVEDDBFOLDER">
  <Component Id="SavedDBVDirectory" Guid="xxx">
    <CreateFolder>
      <Permission User ="[WIX_ACCOUNT_ADMINISTRATORS]" GenericAll="yes"/>
      <Permission User ="[WIX_ACCOUNT_USERS]" GenericAll="yes"/>
    </CreateFolder>
  </Component>
</DirectoryRef>

<CustomAction Id="SetOldDBVWFiles"
              Property="OLDDBVWFILES"
              Value="[PATHTOOLDVER]Saved DB Files"/>
<DirectoryRef Id="SAVEDDBFOLDER">
  <Component Id="CopyOldDataBVFiles" Guid="yyy">
    <CopyFile Id="CopyOldDBVWFiles"
              Delete="yes"
              SourceProperty="OLDDBVWFILES" DestinationProperty="SAVEDDBFOLDER" SourceName="*"/>
    <Condition>
      <![CDATA[(NOT Installed) AND (NOT REMOVE) AND (PREVIOUSVERSION << "8." OR PREVIOUSVERSION << "7.")]]>
    </Condition>
  </Component>
</DirectoryRef>

        <!--This custom action runs in 10.0 install-->
<!--PREVIOUSHYVERSION is set for 10.0; it is not for 10.1-->
<CustomAction Id="SetOldDBVWFilesHy"
              Property="OLDHYDBVWFILES"
              Value="[PATHTOOLDAD]Saved DB Files"/>
<DirectoryRef Id="SAVEDDBFOLDER">
  <Component Id="CopyOldHyDatabusViewerFiles" Guid="zzz">
    <CopyFile Id="CopyOldHyDBVWFiles"
              Delete="yes"
              SourceProperty="OLDHYDBVWFILES" DestinationProperty="SAVEDDBFOLDER" SourceName="*"/>
    <Condition>
      <![CDATA[(NOT Installed) AND (NOT REMOVE) AND (PREVIOUSHYVERSION << "4.")]]>
    </Condition>
  </Component>
</DirectoryRef>
4

1 に答える 1

1

わかりました、私はこれを理解しました。ログ ファイル ( msiexec /L*V "[ log file ]" ) から、パス変数の 1 つ (「PATHTOOLDAD」、いいえ、それはお父さんのツールへのパスではありません) がパッチに設定されていないことがわかりました。 . このプロパティは最初のインストールでのみ使用され、パッチではまったく使用されないため、問題にはなりませんでしたが、何かに設定する必要がありました。プロパティを設定するために msiexec の呼び出しにオプション「PATHTOOLDAD=[ whatever ] 」を追加したところ、うまくいきました。

msiexec /i [ MSP パッチ ファイル] PATHTOOLDAD=[削除された古いプログラムのパス]

于 2012-06-06T12:41:43.503 に答える