WIX インストーラー プロジェクトでは、マネージド カスタム アクション関数で FileA と呼ばれるデプロイ済みファイルに基づいて、新しいファイルを生成する必要があります。これを FileB と呼びましょう。つまり、コンポーネント宣言では、FileA を宣言します。カスタム アクション (コミット フェーズで発生) では、FileA に基づいて FileB を生成する必要があります。その後、FileAはもう使えないので、同じカスタムアクションで削除したいと思います。
ここで問題が発生します。デフォルトのインストール フォルダーである Program Files では、通常のユーザーはカスタム アクションでこのフォルダーにファイルを追加 (FileB を生成) することはできません (私は 100% 正しいと確信していませんが、私のテストではそうでしたが、別のフォルダにインストールしてもまったく問題ありません)。そのため、ファイルを作成する許可を与える必要があると思います。そのために、FileA を含むコンポーネントに CreateFolder 要素を追加します。コンポーネント宣言全体は次のようになります。
<Component Id='COMPONENT_NAME' Guid='MY_GUID'>
<!--OTHER FILES IN THE COMPONENT-->
...
<CreateFolder Directory='INSTALLDIR'>
<Permission CreateFile='yes' User='Everyone' GenericAll='yes' Delete='yes'/>
</CreateFolder>
<File Id='MyFileA' Name='FileA' Source='PATH_TO_FILEA' KeyPath='no' >
<Permission GenericAll='yes' User='Everyone' Delete='yes'/>
</File>
</Component>
コンポーネントは、実際には INSTALLDIR に存在するコンポーネント グループに属しています。同じコンポーネント要素に他のファイルがある理由は、FileA を削除しても問題が発生しないように、別の File をキーパスにしたいからです。そして今、FileB の生成は正常に動作しています。しかし、後で同じカスタム アクションで、FileA を削除するときに問題が発生しています。「: パス 'DEPLOYMENT_PATH_TO_FILEA' へのアクセスが拒否されました」とだけ書かれています。問題は FileA 宣言にあると考えたので、File の下の Permission 要素に Delete='yes' を追加し、削除しても問題ないようにしたいと考えました (ただし、これがインストールで可能であることを意味するかどうかはわかりません)。削除する)。しかし、それでもこのエラーが発生します。誰が私が間違ったことを教えてもらえますか?
もう 1 つの質問は、これらの CreatFolder 要素の目的が何なのか本当にわからないということです。1 つには、目的がディレクトリ構造を作成することである場合、(ネストされた)Directory 要素が既にそれを行っていると思います。また、ほとんどの場合、ディレクトリ構造をコンポーネント構造と分離したい場合に、Component 要素の下にそのような要素を配置する理由 (コンポーネントはディレクトリ参照を使用して正しいディレクトリを参照するだけです)。次に、CreateFolder のデフォルトの Directory プロパティは、コンポーネントが存在する親ディレクトリです。しかし、ここにあるように、複数のコンポーネントが同じディレクトリに存在するのが一般的です。複数のコンポーネントが同じコンポーネント グループにあり、そのディレクトリがエレメントは INSTALLDIR を参照します。したがって、これらのコンポーネントの 1 つだけが CreateFolder 要素を持ち、私の場合の Directory プロパティは、これらすべてのコンポーネントの親ディレクトリです。この構造を理解するのは本当に難しいです。CreateFolder 要素について誤解していると思います。誰かが CreateFolder の使い方を教えてくれますか? ありがとう!
ありがとう!