0

複数のインストーラー (さまざまなアプリケーションや Web サイトをインストールするため) を含むプロジェクトがあり、それらはすべて同じ親フォルダー (\Websites など) にインストールされます。各インストーラーは、C# コンソール アプリ (すべてのインストーラーで共有) を実行する CustomAction を呼び出し、そのインストーラーに固有のいくつかのパラメーターを渡します。

各インストーラーは複数の Web サイトをインストールし、それぞれが独自のフォルダー構造 (\Websites\App1、\Websites\App2 など) を持ちます。

たとえば、あるインストーラーでは次のようになります。

<DirectoryRef Id="WebsitesFolder">
    <Directory Id="App1Folder" Name="App1"/>
    <Directory Id="App2Folder" Name="App2"/>
</DirectoryRef>

そして別のインストーラーで:

<DirectoryRef Id="WebsitesFolder">
    <Directory Id="App3Folder" Name="App3"/>
    <Directory Id="App4Folder" Name="App4"/>
    <Directory Id="App5Folder" Name="App5"/>
    <Directory Id="App6Folder" Name="App6"/>
</DirectoryRef>

子ディレクトリのリストをカンマ区切りのリストに列挙して、カスタム アクションに引数として渡す方法はありますか? たとえば、次のようなものです。

<CustomAction Id="ConfigureWebsites" Directory="WebsitesFolder" ExeCommand="&quot;[%DEPLOYEXE]&quot; /d:&quot;[WebsitesFolder]\<list child directories here>&quot;" Execute="deferred" Return="ignore" />

1 つのインストーラーで以下を生成するには:

deploy.exe /d:"C:\Websites\App1,C:\Websites\App2"

2 番目のインストーラーで:

deploy.exe /d:"C:\Websites\App3,C:\Websites\App4,C:\Websites\App5,C:\Websites\App6"

CustomAction ですべてのサブフォルダーを明示的に一覧表示できることはわかっていますが、これらは成長中のプロジェクトであり、サブフォルダーが常にこれらのインストーラーに追加されるか、時間の経過とともにフォルダー名が変更される可能性があり、フォルダーのリストを維持したくありません。複数の場所での名前。

deploy.exe に特定のフォルダー リストを持たせたい理由は、それらのフォルダーを反復処理し、多くのカスタム タスクを実行するためであり、その親フォルダーの下にあるすべての Web サイトを通過させたくないからです。ただし、現在のインストールの一部である Web サイト フォルダーのみです。

4

1 に答える 1

0

Enumerat[ing] child directoriesカスタムアクションでそれを行う正しい方法です。WiX は、Windows インストーラー API の DTF ラッパーを提供します。必要なすべてのインストール、ロールバック、アンインストールのシナリオを適切なカスタム アクションが実行するように、C# でカスタム アクションを記述することができます。影響を受ける子ディレクトリを見つけるには、Directory テーブルで Websites ディレクトリを見つけ、それを親としてテーブル内のすべてのディレクトリを取得します。ディレクトリ ID を取得したら、DTF の GetTargetPath ( MsiGetTargetPath ) を使用してそれらのインストール場所を取得し、シナリオに適したアクションを実行します。WiX に付属の DTF ドキュメントを参照してください。

または、カスタム アクションのアイデアを続けるには、.wixproj ファイル (MSBuild プロジェクト ファイル) で MSBuild XslTransformation タスクを使用して、関連データを .wxs ファイルからWiX インクルードファイルに変換し、そこで CustomAction 要素を定義します。 . プロジェクト ファイルにあるコメントで説明されているように、BeforeBuild ターゲットにタスクを配置できXslTransformationます。(少しの XSL はそれほど複雑ではありません。また、少しの MSBuild も、特に Windows インストーラーと比較すると複雑ではありません。)

注: Visual Studio でプロジェクト ファイルを編集するには、ソリューション エクスプローラーでプロジェクトを右クリックし、[アンロード] を選択します。次に、もう一度右クリックして [編集] を選択します。

于 2013-06-24T20:40:29.747 に答える