Как скопировать все файлы из исходной папки без указания имен файлов в конфигурациях установщика WIX - PullRequest
0 голосов
/ 07 сентября 2018

Вот содержимое файла WXS для копирования отдельных файлов

      <Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="MergeRedirectFolder">
    <Component Id="owcF3EB3D7C133F5B48E5859309ABDC2EE0" Guid="5a6040ae-b91e-47b6-8438-d9cd47fb947a">
      <File Id="owfF3EB3D7C133F5B48E5859309ABDC2EE0" 
     Source="$(var.SourceDir)\api-ms-win-core-console-l1-1-0.dll" KeyPath="yes" />
    </Component>
    <Component Id="owcB0E3C7251F136710A0F11E0C18525364" Guid="f80e6202-0436-d488-52cf-827e37483096">
      <File Id="owfB0E3C7251F136710A0F11E0C18525364" 
      Source="$(var.SourceDir)\api-ms-win-core-datetime-l1-1-0.dll" KeyPath="yes" />
    </Component>
    <Component Id="owc4B0AD9DF281D253C1207D4E82DEB0DD2" Guid="4ac4edbd-2c6a-8aed-125e-11237a36e4f8">
     <File Id="owf0E5D53A7E23AE08AF9D984ADC41AC589"

     Source="$(var.SourceDir)\publish\sos_amd64_amd64_4.6.26628.05.dll" KeyPath="yes" />

Я определил мой исходный каталог следующим образом

    <?define SourceDir="..\..\Services\bin\Debug\netcoreapp2.1\win7-x64\"?>

Как указать WIX для копирования всех файлов вместо указания одного в каждой строке?

Почему?

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

Папка публикации содержит файлы, которые зависят от системы, в которой она была опубликована

В машине разработчика , у меня есть файл sos_amd64_amd64_4.6.26725. 06

В Build machine , у меня есть файл sos_amd64_amd64_4.6.26725. 05

Если вы видите, версия выше в файлах выше. Таким образом, сборка Wix не выполняется из-за несовпадения версий в файле * .wxs. Поэтому я хочу читать все файлы из папки, а не указывать отдельные файлы.

Обновление

Проблема решена автоматической генерацией файла компонента

      <HeatDirectory OutputFile="ComponentsGenerated.wxs" 
               DirectoryRefId="INSTALLFOLDER" 
               Transforms="Filter.xslt" 
               ComponentGroupName="PublishedComponents" 
               SuppressCom="true" 
               Directory="..\..\Service\bin\$(Configuration)\netcoreapp2.1\win-$(Platform)\publish" 
               SuppressFragments="true" SuppressRegistry="true" 
               SuppressRootDirectory="true" 
               AutoGenerateGuids="false" 
               GenerateGuidsNow="true" 
               ToolPath="$(WixToolPath)" 
               PreprocessorVariable="var.BasePath" />

Бонус

Поскольку мне приходилось устанавливать и запускать службу Windows, я использовал методы Transforms для удаления EXE-файла, созданного в компонентном файле WXS.

Теперь я люблю Wix!

1 Ответ

0 голосов
/ 07 сентября 2018

Из авторинга видно, что вы используете IsWiX (отказ от ответственности: я автор). IsWiX был разработан для поддержки только статической авторизации, а не той, которую вы пытаетесь сделать. Я много раз писал в блогах о том, почему я чувствую, что это безопаснее, но рассказывать историю о переполнении стека обычно не получается.

Тем не менее, IsWiX не помешает вам делать то, что вы пытаетесь сделать. Обычно я рекомендую сделать следующее:

В вашем основном проекте установки в папке Code создайте новый фрагмент wxs с именем "HarvestedComponents.wxs"

Передайте этот пустой файл в систему управления версиями и добавьте его в .gitignore при использовании Git.

Поместите следующее на этапе предварительной сборки проекта

C:\Program Files (x86)\WiX Toolset v3.11\bin\heat.exe" dir "$(SolutionDir)Deploy\Path-To-Some-Directory-To-Harvest" -dr INSTALLLOCATION -cg HarvestedComponents -gg -g1 -sf -srd -scom -sreg -ke -var "var.Deploy" -out "$(SolutionDir)ClientTools\Code\harvestedcomponents.wxs

Вам придется немного подправить его, чтобы он соответствовал желаемой структуре каталогов в Features.wxs.

Создайте проект и обратите внимание, что HarvestedComponents.wxs получает данные. Вы не хотите передавать это в систему контроля версий, но это не должно повредить, если вы это сделаете. Я бы не стал.

Теперь, чтобы подключить эти собранные компоненты к установщику, вам нужно отредактировать Code \ Features.wxs. Добавить:

<ComponentGroupRef Id="HarvestedComponents" />

к функции, с которой вы хотите связать эти компоненты.

Окончательный MSI теперь будет динамически создавать эти папки / файлы в MSI вместе со всем, что вы статически определяете в модуле mege wxs, используя IsWiX.

Примечание. Обратите внимание, что при таком подходе есть недостатки. Главным образом:

http://blog.iswix.com/2007/06/dealing-with-very-large-number-of-files.html

Мне также интересно, почему ваш артефакт sos имеет версию 06 на коробке разработчика и версию 05 на коробке сборки. Как часто это меняется? Если это просто ошибка версии и артефакт редко изменяется, возможно, вы решаете не ту проблему. Если версия предназначена для управления средой сборки и часто меняется, а имена папок и имена файлов меняются от версии к версии, тогда это может быть правильным решением для ваших нужд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...