プロジェクトに多くのファイルを含むBinフォルダーがあります。今のところ、以下のコードを使用して、特定のファイルをインストールフォルダーに追加する方法を知っています。
<File Source='$(var.Debug)Myapplication.exe' Id='file4028276A0CAD84E3BDE449237AE31A5F' />
ただし、ディレクトリ全体をインストールパスに移動したいと考えています。たとえば、フォルダ「Bin」全体をインストールパス「C:\ Myapplication」に移動します。
どうしたらいいですか?
前もって感謝します!
これはよさそうだ。しかし、行うにはあまりにも多くの仕事。
上記のリンクはうまくいきました。ただし、サブフォルダはコピーできません。
だから私がしたことは、フォルダー全体を読み取り、そのサブディレクトリとファイルを取得し、必要なコードブロックを生成するアプリを作成しました
<Component Id="myfile" Guid="GUID">
<File Id="myfile.txt" Source="MySourceFiles\myfile.txt" KeyPath="yes" Checksum="yes"/>
</Component>
次に、生成されたコードブロックを.wxsファイルに追加しました。
このアプリの作成に費やす最初の時間は無駄ではありません。いつまでも使い続けることができるから。ファイルごとにコピーすることをお勧めします。アップグレードまたは修復時に役立ちます。 MSIは、コピーされるファイルごとにレコードを保持します。そのため、アップグレードや修理の際に保守可能で便利です。
使用したいように聞こえるのは、WiXツールheat
です。これは、ディレクトリ(または個々のファイル)を「収集」して、プロジェクトで使用できるWiXフラグメントファイルを作成するために使用されます。
たとえば、ハーベスティングしたいディレクトリがあり、サブディレクトリが含まれている場合がありますが、ファイルがたくさんあり、すべてを必要としています... Heatがそれを行います。
この簡単な構造を考えてみましょう:
Somedir
|
|---A file.txt
|---An init file.ini
|---another file.txt
|---subfolder
|
|---a subfolder file.txt
このディレクトリを取得するために熱を使用する場合、ツールはフラグメントファイルを生成します。これは、ファイルを一度に1つずつ指定したり、回避策のソリューションを使用したりすることなく、プロジェクトのコンポーネント参照として使用できます。
たとえば、次のHeatコマンドはこのディレクトリを処理します(この例では1レベル上)
heat dir somedir -o MyHarvestedStuff.wxs -scom -frag -srd -sreg -gg -cg MyComponentGroupId -dr BIN_DIR_REF
どこ:
dir = harvest a directory
somedir = directory you want to harvest
-o MyHarvestedStuff.wxs = the output fragment file
-scom -sfrag -srd -sreg = Suppress COM elements, fragments, root directory as element, registry harvesting (these options will create a grouping that most applications can use)
-gg = generate GUID's now (this will put the GUID's into your output file, rather than using a wildcard "*". The advantage here is you can use non-standard TARGETDIR, which would not qualify for autogenerated GUID's)
-cg MyComponentGroupId = component group. this is what you will use in your feature set to include these files
-dr BIN_DIR_REF = this is the directory reference for which to place the files in your final package.
結果のXMLは次のようになります(これは、実際のGUIDの投稿を避けるために-ggなしで実行されました)
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.Microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="BIN_DIR_REF">
<Directory Id="dirF065D7446868E03DB0B296EBADA4E4A1" Name="subfolder" />
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="MyComponentGroupId">
<Component Id="cmp739547000B47E975B0452D876AF7810B" Directory="BIN_DIR_REF" Guid="PUT-GUID-HERE">
<File Id="fil09B311A6D1EABD9E94DFA5C83F59C548" KeyPath="yes" Source="SourceDir\A file.txt" />
</Component>
<Component Id="cmp84C8400F892D39B05EE3021CCEEAA14F" Directory="BIN_DIR_REF" Guid="PUT-GUID-HERE">
<File Id="fil11A22646343997D26AC54171A62DFF4C" KeyPath="yes" Source="SourceDir\an init file.ini" />
</Component>
<Component Id="cmpFA266FC6F3269CB5D9E42C38FC995117" Directory="BIN_DIR_REF" Guid="PUT-GUID-HERE">
<File Id="filA545B6E4B63B8211E982917FC78F6EB4" KeyPath="yes" Source="SourceDir\another file.txt" />
</Component>
<Component Id="cmp2EC5C1618A59F47B7BDE800EB9AA8688" Directory="dirF065D7446868E03DB0B296EBADA4E4A1" Guid="PUT-GUID-HERE">
<File Id="filB0CD0B02385137DC806112E293083459" KeyPath="yes" Source="SourceDir\subfolder\a subfolder file.txt" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>
プロジェクトファイルでは、ルート<Directory>
要素の下に次のようなものがあります。
<Directory Id="BIN_DIR_REF" Name="bin">
<!-- anything else you might put here...-->
</Directory>
そしてあなたの機能グループで:
<Feature Id="Complete" Level="1">
...
<ComponentGroupRef Id="MyComponentGroupId" />
...
</Feature>
すべてをまとめる...
candle
に提供しますcandle
が生成する.wixobjファイルをlight
に提供します新しいフラグメントファイルのSourceDir
参照を、WiXプリプロセッサ変数または-b
オプションを使用してlight
に解決します。
例:light ... -b "path to my directory that I harvested" ...
回答の長さがこのソリューションの探索を妨げないようにしてください。非常にうまく機能し、非常に簡単です。ここで、そのディレクトリから何かを除外したい場合、それはwhole他のストーリーです...