"Скрыть" функции, основанные на ALLUSERS / MSIINSTALLPERUSER

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

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

Решения, которые я видел, позволяют мне ставить условия вокруг компонентов, чтобы компоненты не устанавливались... или помещать условия внутри функции, которые устанавливали бы ее уровень на какое-то высокое значение. Как я могу отключить и / или полностью скрыть эту функцию, если ALLUSERS=2 или MSIINSTALLPERUSER=1.

1 ответ

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

Некоторые ссылки для тех, кто читает этот ответ (я думаю, что вы читали это):

Условия функции: С учетом сказанного вы можете использовать условия функции, чтобы отменить выбор функций в зависимости от того, является ли определенное условие истинным или ложным. Вы даже можете установить Level функции для 0 который будет скрывать его от GUI полностью во время установки. Вы можете попробовать это. Пожалуйста, прочитайте связанный ответ ниже (выделен жирным шрифтом). Содержит более подробное объяснение состояния объекта.

У меня нет времени, чтобы проверить это, но вот макет WiX, который вы можете попробовать:

<Feature Id="MyFeature" Level="1"> <!--Default to install feature-->

    <Condition Level="0"> <!--Do not install feature if condition is true-->
       ALLUSERS=2 OR MSIINSTALLPERUSER=1
    </Condition>

</Feature>

Эти ответы могут помочь вам получить обзор этого:


Скрыть тестирование функций: я добавлю небольшой фрагмент, который можно использовать для проверки работы сокрытия функций. Это заставляет рассматриваемое условие быть истинным, устанавливая его в 1 - в отличие от использования "реального условия", которое может быть неожиданно ложным.

<Feature Id="SupportingFiles" Title="SupportingFiles" Level="1">
   <Condition Level="0">1</Condition>
</Feature>

Это должно скрыть функцию SupportingFiles от просмотра в графическом интерфейсе установки, и она также не должна устанавливать ее. Пожалуйста, дайте мне знать, если вы видите другое поведение.


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

Я не уверен, что это сработает. Я проверю, когда у меня будет шанс. Просто добавив эту ссылку на данный момент.

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

Кроме этого, я полагаю, вы могли бы использовать внешний графический интерфейс запуска. Я мог бы прокомментировать это позже. Я недавно писал об этой проблеме (внешний GUI).


Некоторые дополнительные ссылки для справки:

Другие вопросы по тегам