Установите модуль слияния для всех пользователей, использующих WiX

Я создал установщик, используя WiX для установки VSIX вместе с двумя зависимыми компонентами. Эти два компонента были доступны для меня в виде модулей слияния. Ниже приведен код, в котором я использовал модули слияния в своем коде:

<DirectoryRef Id="TARGETDIR">
  <Merge Id="MergeModuleID1" SourceFile="MergeModule1.msm" DiskId="1"  Language="0"/>
  <Merge Id="MergeModuleID2" SourceFile="MergeModule2.msm" DiskId="1" Language="0" />
</DirectoryRef>

и я назвал эти модули слияния:

<Feature Id="ProductFeature" Title="Title" Level="1">
  <ComponentRef Id="VSPackage"/>
  <ComponentRef Id="ApplicationShortcut"/>
  <ComponentRef Id="DesktopShortcut"/>
  <ComponentRef Id="LicenseComp"/>
  <MergeRef Id="MergeModuleID1"/>
  <MergeRef Id="MergeModuleID2"/>
</Feature>

Проблема, с которой я сталкиваюсь, заключается в том, что мой VSIX установлен на все учетные записи пользователей на компьютере, но эти модули слияния не установлены, они устанавливаются только на учетную запись пользователя, на которой установлен продукт. На других учетных записях пользователей появляется диалоговое окно установки, которое, я считаю, устанавливает эти модули слияния, после чего все работает нормально. Как сделать так, чтобы эти модули слияния были установлены для всех пользователей?

PS: свойство ALLUSERS как в MSI, так и в модулях слияния установлено в '1'.

2 ответа

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

Догадываясь об этом, вы, вероятно, говорите, что файлы устанавливаются куда-то, например, в папку "Данные приложения пользователя" для устанавливающего пользователя. Если это то, что модули слияния указывают на свои внутренние компоненты, это нормально. Очевидно, что вы можете установить файлы в папку данных текущего пользователя, даже если вы выполняете установку для каждой машины. Я не могу сказать, правильно ли спроектированы эти модули слияния, но если это так, то:

  1. Первоначальная установка поместит эти файлы в папку с файлами установки пользователей.
  2. Если другой пользователь входит в систему и использует ярлык и ваш MSI правильно спроектирован, функция установки по требованию установит эти файлы для этого пользователя в папку этого пользователя, возможно, запросив исходный установочный носитель. Именно так это и работает, потому что: а) не существует механизма, который позволял бы устанавливать файл одновременно во все местоположения пользовательских файлов в системе, и в любом случае не имеет смысла, если они никогда не используют приложение. б) Что произойдет, если вы создадите новую учетную запись пользователя ПОСЛЕ установки продукта? Файл не будет находиться в местоположении этого пользователя, однако схема установки по требованию гарантирует, что этот новый пользователь получит файл в своем местоположении, если он войдет в систему и будет использовать приложение.

Короткий ответ: вероятно, все это работает так, как задумано.

Настройка ALLUSERS в порядке.

То, что вы описали, выглядит как "реклама".

Чтобы удалить рекламу для модулей слияния, добавьте AllowAdvertise="no" в атрибуты компонента, содержащего элемент MergeRef:

<Feature Id="ProductFeature" Title="Title" AllowAdvertise="no" Level="1">
  <ComponentRef Id="VSPackage"/>
  <ComponentRef Id="ApplicationShortcut"/>
  <ComponentRef Id="DesktopShortcut"/>
  <ComponentRef Id="LicenseComp"/>
  <MergeRef Id="MergeModuleID1"/>
  <MergeRef Id="MergeModuleID2"/>
</Feature>
Другие вопросы по тегам