Подтвердить что ты не робот

В файлах WiX, что означает Name= "SourceDir"?

Файлы WiX всегда включают эту строку:

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

Что такое "SourceDir"? Для чего его используют? Это не настоящее имя каталога. Это какая-то магическая ценность?

4b9b3361

Ответ 1

От: 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, потому что оно, скорее всего, предложит вам предоставить исходный исходный носитель (ака: вставьте компакт-диск, пожалуйста).

Что мы должны были сделать в наборе инструментов WiX, так это удалить необходимость указать пару TARGETDIR/SourceDir и сказать, что "Любой элемент Directory, у которого нет родителя, автоматически будет помечен для TARGETDIR, потому что это то, что говорит MSI SDK". Вместо этого вы должны сделать это сами... и некоторые разработчики задаются вопросом, что все это значит.

Ответ 2

Из документации wix.chm, тема "Как добавить файл к вашему установщику":

Элемент с идентификатором TARGETDIR требуемый установщиком Windows и является корнем всей директории структуры для вашей установки

В соответствии с документацией MSDN TARGETDIR

корневой каталог назначения для установка

Также, согласно MSDN, SourceDir есть

корневой каталог, содержащий исходный файл шкафа или исходный файл дерево установочного пакета

Таким образом, свойство SourceDir указывает на реальный каталог: тот, где находится ваш файл MSI. Это можно увидеть в журнале установщика при установке с помощью msiexec /lvx* installer.log installer.msi.

Однако, по какой-то причине SourceDir полностью игнорируется при разрешении TARGETDIR. TARGETDIR должен быть либо установлен явно (например, в командной строке), либо он разрешает ROOTDRIVE. Если ROOTDRIVE не задан явно, это корень диска с самым свободным пространством.

Быстрый тест показывает, что установка компонента в TARGETDIR действительно помещает файлы в корень моего диска D: \, а не в папку, в которой находится MSI.