WiXファイルには常に次の行が含まれているようです。
<Directory Id="TARGETDIR" Name="SourceDir">
「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ペアを指定する必要をなくし、「親を持たないすべてのDirectory要素は自動的にTARGETDIRにペアレント化されます。これは、MSI SDKがそうするためです。」代わりに、あなたは自分でそれをしなければなりません...そして何人かの開発者はそれがすべての意味を疑問に思います。
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:\ドライブのルートに配置されることがわかります。
これのどれも私にとって本当に役に立ちませんでした。このスレッドは、デバッグビルドの作成方法を疑問に思っていました。ソースファイル(インストーラーで作成されるファイル)は、作成しようとしているプロジェクトの "リリース"ビルドディレクトリまたは "デバッグ"ビルドディレクトリのいずれかからプルできます。インストーラー。
なんらかのgrepの後で、wixprojファイルに実際のパスが見つかりました。SourceDirは次のように定義されています。
<SourceDir>$(SolutionDir)distribution\Release</SourceDir>
インストールファイルやプロジェクトファイルとはまったく関係ありません。デバッグファイルをポイントするリリースグループをミラーリングする別のPropertyGroupを追加できました。
<SourceDir>$(SolutionDir)distribution\Debug</SourceDir>
これが誰かを助けることを願っています。私はそれが少し外れたトピックであることを知っていますが、うまくいけば、将来的に誰かを助けるでしょう。プロジェクトプラグインがこの値を公開しない理由がわかりませんか?それとも私はそれを逃していますか?