8

このサイトのすべてのトピックをこのような問題で読みましたが、必要なものが見つかりません。

1 つのプログラムの 2 つのバージョンがあります: 古いバージョンと新しいバージョンです。古いバージョンでは、フォルダー f1 があります。新しいバージョンでは、このフォルダーf1はありません。

新しいプログラムのインストーラーが古いバージョンを検出すると、この古いバージョンは削除されますが、フォルダー f1 は削除されません。

新しいバージョンのインストーラーから f1 を削除するにはどうすればよいですか?

      <Component Id ="deleteall"  Guid="AA11A32B-9E1E-458A-8C94-3EFEDA77E494" >
        <RemoveFolder Id='iDocDir' On='both' />
      </Component>

      <Directory Id="iDocDir" Name="iDocs">
      </Directory>

動作していません =(

4

1 に答える 1

15

RemoveFolderExUtilExtensionの要素をチェックアウトする必要があります。それはまさにあなたが望むことをします。Bob Arnson は、以前にそれについてブログを書いています。

<Component Id="deeletall" Guid="PUT-GUID-HERE">
    <util:RemoveFolderEx Id="RemoveiDocDir" On="uninstall" Property="iDocDir" />
</Component>

テーブルに一時的な行を書き込むことで機能しRemoveFileます。ただし、マニュアルに記載されているように、これを使用するには制限があります。

Windows インストーラーのファイル コスト計算に劇的な影響を与える可能性があるため、CostInitialize 標準アクションの前に一時行を書き込む必要があります。残念ながら、MSI は、後の CostFinalize アクションで、パッケージ内のディレクトリ階層のプロパティを作成しません。

アンインストール中にフォルダを削除する一般的な使用例の簡単な回避策は、ディレクトリ パスをレジストリに書き込み、アンインストール中にそれをロードすることです。

カスタム アクションを使用してプロパティを設定する場合は、それらが WixRemoveFoldersEx カスタム アクションの前にスケジュールされていることを確認してください。

また、ボブの投稿で:

削除するディレクトリとファイルを追加すると MSI のファイル コストに影響するため、RemoveFolderEx はコストを計算する前にその処理を行う必要があります。残念ながら、コスト計算が完了するまで、MSI はターゲット ディレクトリのプロパティを設定しません。

以前のインストール パスを既にレジストリに保存している場合 (Rob は、ここでこれを行う方法を説明しています)、CostInitialize の前に AppSearch アクションが実行されるため、問題ありません。

于 2013-07-30T11:26:46.517 に答える