1

私はwixインストーラーを持っており、いくつかのファイルをいくつかのディレクトリにコピーします。各ファイルは、いくつかのパスを持つ単一のコンポーネントとして宣言されます。ディレクトリが存在しない場合、インストーラーはディレクトリを作成し、そこにファイルを配置します。

私がしたいこと: ディレクトリが既に存在する場合、インストーラーはそこにファイルをコピーしないでください (ファイルが存在しない場合でも、既存のディレクトリにコピーしないでください)。

しかし、ディレクトリに「上書きしない」を設定することはできないので、新しいファイルが既存のディレクトリにコピーされないようにするにはどうすればよいですか? ここで使用できる条件 (「ディレクトリが存在する」など) はありますか?

4

2 に答える 2

2

ここで使用できる条件 (「ディレクトリが存在する」など) はありますか?

はい、次のように Condition 要素を使用できます。

<Directory Id="FooFolder" Name="Foo">
    <Component Id="SomeId">
        <File Source="..." />
        <Condition>Not FOO_FOLDER_ALREADY_EXISTS</Condition>
    </Component>
</Directory>

条件として使用できる種類については、Windows インストーラーの条件付きステートメントの構文に関するドキュメントで説明されています。

この場合、次のようにDirectorySearchFOO_FOLDER_ALREADY_EXISTSを使用してプロパティを設定できると思います。

<Property Id="FOO_FOLDER_ALREADY_EXISTS">
    <DirectorySearch Id="FooFolderSearch" Path="[FooFolder]" />
</Property>

edit : プロパティはアクション[FooFolder]中にのみ解決されるため、上記のディレクトリ検索は明らかに機能しません(ドキュメントを参照)。ただし、ディレクトリ検索は、アクション中にその前に既に行われています。CostFinalizeAppSearch

それを回避する方法がわかりません。CostFinalizeおそらく、Windows インストーラーのディレクトリ検索ではなく、カスタム アクションの後に FOO_FOLDER_ALREADY_EXISTS プロパティを設定する必要があります。

于 2012-04-10T10:55:50.973 に答える
0

コストが確定する前にプロパティが設定されるタイミングの問題を回避する方法に関して、それに対処する別の信頼できる方法は、プロパティをレジストリに書き込むことです。

これは、プロパティの設定に関するタイミングの問題に対する最も一般的な回避策であり、インストーラーがアンインストールなどのためにそれらのプロパティを追跡できるようにすることだと思います...私はそれを非常に効果的に使用しました。

これは、Rob Mensching による優れた記事で、開始する方法が説明されています。

于 2013-07-30T17:23:11.053 に答える