67

WiX ファイルには常に次の行が含まれているようです。

<Directory Id="TARGETDIR" Name="SourceDir">

「ソースディレクトリ」とは何ですか? それは何のために使用されますか?実際のディレクトリ名ではありません。それはある種の魔法の価値ですか?

4

3 に答える 3

92

差出人: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にペアレント化される」と言うことです。代わりに、あなたはそれを自分でしなければなりません...そして何人かの開発者はそれが何を意味するのか疑問に思います。

于 2010-01-27T06:58:08.963 に答える
21

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:\ ドライブのルートにファイルが配置されることがわかります。

于 2009-10-29T02:34:46.097 に答える