В файлах WiX, что означает Name = & # 8220; SourceDir & # 8221; Ссылаться на?

StackOverflow https://stackoverflow.com/questions/1641094

  •  08-07-2019
  •  | 
  •  

Вопрос

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

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

Другие советы

В документации по wix.chm тема " Как добавить файл в установщик "

  

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

Согласно документации MSDN TARGETDIR это

  

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

Также по данным MSDN, SourceDir это

  

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

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

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

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

Ничто из этого не помогло мне. Я обнаружил, что этот поток интересуется, как сделать сборку Debug, где мои исходные файлы (те, которые идут в установщике) могут быть извлечены либо из " Release " build dir или "Debug" build dir проекта, для которого я пытаюсь создать установщик.

После некоторой разборки я нашел фактический путь в файле wixproj, там SourceDir определен как:

<SourceDir>$(SolutionDir)distribution\Release</SourceDir>

, который на самом деле не имеет ничего общего с установочными файлами и файлами проекта. Мне удалось добавить еще одну PropertyGroup, которая зеркально отображала группу релизов, которая теперь указывала на мои файлы отладки:

<SourceDir>$(SolutionDir)distribution\Debug</SourceDir>

Надеюсь, это кому-нибудь поможет. Я знаю, что это немного не по теме, но, надеюсь, это поможет кому-то в будущем. Не уверен, почему плагин проекта не предоставляет это значение? Или я это пропускаю?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top