WiX: Как предотвратить добавление нескольких копий связанного файла в MSI? - PullRequest
2 голосов
/ 18 января 2011

У меня есть установщик, который связывает wixlib. Wixlib устанавливает исполняемый файл в несколько каталогов.

Когда я включаю «Привязать файлы в файл библиотеки» для wixlib (используя ключ -bf), lit.exe добавляет исполняемый файл в wixlib. Однако, когда я связываю wixlib в MSI, исполняемый файл добавляется несколько раз в MSI-файл, увеличивая размер установщика.

Когда я отключаю «Привязать файлы в файл библиотеки», проблема не возникает (но, очевидно, мне нужно настроить проект установщика WiX, чтобы знать, где найти исполняемый файл, а не находить внутри wixlib).

С ключом -bf и без него конечные файлы MSI выглядят одинаково при просмотре с помощью orca, поэтому я пытаюсь понять, почему в первом случае MSI необходимо включать несколько копий.

Файл wixlib wxs выглядит так:

<Fragment>

<ComponentGroup Id="cmpFoo1">
  <ComponentRef Id="cmpFooExe1" />
</ComponentGroup>

<DirectoryRef Id="TARGET_PATH1">
  <Component Id="cmpFooExe1" Guid="*">
    <File Id="filFooExe1" Name="foo.exe" KeyPath="yes" Source="$(var.source_path)\foo.exe" />
  </Component>
</DirectoryRef>

<ComponentGroup Id="cmpFoo2">
  <ComponentRef Id="cmpFooExe2" />
</ComponentGroup>

<DirectoryRef Id="TARGET_PATH2">
  <Component Id="cmpFooExe2" Guid="*">
    <File Id="filFooExe2" Name="foo.exe" KeyPath="yes" Source="$(var.source_path)\foo.exe" />
  </Component>
</DirectoryRef>

<Feature Id="ftFooFeatures" Level="1">
 <ComponentGroupRef Id="cmpFoo1"/>
 <ComponentGroupRef Id="cmpFoo2"/>
</Feature>

</Fragment>

И файл установщика wxs вроде:

<Product Id="MyProduct" Name="ProductName" Language="1033" Version="1.0.0.0" Manufacturer="MyCompany" UpgradeCode="{UpgradeCode_Guid}">
<!-- ...etc... -->

<Directory Id="ROOT_TARGET_PATH" Name="Foo">
  <Directory Id="TARGET_PATH1" Name="Foo1" ComponentGuidGenerationSeed="{Guid1}" />
  <Directory Id="TARGET_PATH2" Name="Foo2" ComponentGuidGenerationSeed="{Guid2}" />
</Directory>

<Feature Id="ftMain" Level="1">
  <FeatureRef Id="ftFooFeatures" />
</Feature>

<!-- ...etc... -->
</Product>

Ожидается, что окончательный список установки будет выглядеть примерно так: C: \ Foo \ foo1 \ foo.exe с: 'Foo \ foo2 \ foo.exe

Есть ли способ запретить WiX (предположительно, компоновщику?) Добавлять несколько копий файла foo.exe в окончательный файл MSI, в то же время связывая foo.exe с файлом wixlib?

Ответы [ 2 ]

4 голосов
/ 18 января 2011

WiX имеет функцию под названием Smart Cabbing .Предполагается, что WiX автоматически сделает это за вас, при условии, что элементы файла имеют точно такой же атрибут исходного пути.

Об этом раньше спрашивали в StackOverflow, но уже слишком рано, чтобы его найти.:-) Вы, вероятно, захотите найти и найти его, хотя, потому что я помню вопрос, который звучал так: «У меня тот же исходный путь, почему он не работает», Роб Меншинг запустил поток, но я не помнюкакое разрешение было.

0 голосов
/ 18 января 2011

Лучшее, что я могу придумать, чтобы избежать установки нескольких копий .exe в программу установки, - это использовать элемент CopyFile .

Если вы планируете копировать не только файлыВы устанавливаете, но также и другие файлы, присутствующие на целевом ПК, не забудьте включить элемент RemoveFile , поскольку такие файлы не удаляются установщиком Windows при удалении .

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