WiX ファイルには常に次の行が含まれているようです。
<Directory Id="TARGETDIR" Name="SourceDir">
「ソースディレクトリ」とは何ですか? それは何のために使用されますか?実際のディレクトリ名ではありません。それはある種の魔法の価値ですか?
WiX ファイルには常に次の行が含まれているようです。
<Directory Id="TARGETDIR" Name="SourceDir">
「ソースディレクトリ」とは何ですか? それは何のために使用されますか?実際のディレクトリ名ではありません。それはある種の魔法の価値ですか?
差出人:http ://robmensching.com/blog/posts/2010/1/26/StackOverflow-what-does-NameSourceDir-refer-to
正直なところ、それは私たちが開発者から隠すべきだったが、隠さなかったものです。ごめん。問題の真実は、Windowsインストーラーは、ディレクトリツリーが常に主キー(Directory / @ Id)が「TARGETDIR」でDefaultDir列(Directory / @ Name)が「SourceDir」であるディレクトリ行にルートされることを期待しているということです。 。
インストール中、TARGETDIRはデフォルトでマシン上の最大のドライブになります。SourceDirは、MSIが実行されている場所に設定されます。現在、SourceDirは、ResolveSourceアクションが呼び出されない限り設定されないため、初期インストール後に注意が必要です。ただし、元のソースメディアを提供するように求められる可能性があるため、ResolveSourceアクションを明示的に呼び出す必要はありません(別名:CDを挿入してください)。
WiXツールセットで行うべきことは、TARGETDIR / SourceDirのペアを指定する必要をなくし、「MSI SDKが行うように、親を持たないディレクトリ要素は自動的にTARGETDIRにペアレント化される」と言うことです。代わりに、あなたはそれを自分でしなければなりません...そして何人かの開発者はそれが何を意味するのか疑問に思います。
wix.chm ドキュメントのトピック「方法: インストーラーにファイルを追加する」:
ID TARGETDIR を持つ要素は、Windows インストーラーに必要であり、インストールのすべてのディレクトリ構造のルートです。
MSDNのドキュメントによると、TARGETDIRは
インストールのルート宛先ディレクトリ
また、MSDNによると、SourceDirは
インストール パッケージのソース キャビネット ファイルまたはソース ファイル ツリーを含むルート ディレクトリ
そのため、SourceDir プロパティは実際のディレクトリ (MSI ファイルが置かれているディレクトリ) を指しています。を使用してインストールする場合、これはインストーラ ログで確認できますmsiexec /lvx* installer.log installer.msi
。
ただし、何らかの理由で、TARGETDIR を解決するときに SourceDir が完全に無視されます。TARGETDIR は明示的に (コマンド ラインなどで) 設定するか、ROOTDRIVE に解決する必要があります。ROOTDRIVE が明示的に設定されていない場合は、空き容量が最も多いドライブのルートになります。
簡単なテストでは、コンポーネントを TARGETDIR にインストールすると、MSI が置かれているフォルダーではなく、実際に D:\ ドライブのルートにファイルが配置されることがわかります。