"Скрыть" функции, основанные на ALLUSERS / MSIINSTALLPERUSER
У меня есть установщик, который я преобразовываю из установки только для администратора в установщик для создания одного пакета, который можно установить для текущего пользователя или для всех пользователей. Две из моих функций требуют записи в раздел реестра, который не будет доступен обычному пользователю. Они имеют дело с интеграцией в другое приложение, поэтому я не могу записать значения реестра где-то еще в пространстве пользователя... Они должны идти в это место.
Я не обеспокоен тем, что пользователи не могут установить эти две специфические функции, если они не являются администраторами, а функции установщика без проблем, если они не выбраны, но я хочу вообще не отображать их в дереве функций и обеспечить они не включены в "полную" установку.
Решения, которые я видел, позволяют мне ставить условия вокруг компонентов, чтобы компоненты не устанавливались... или помещать условия внутри функции, которые устанавливали бы ее уровень на какое-то высокое значение. Как я могу отключить и / или полностью скрыть эту функцию, если ALLUSERS=2 или MSIINSTALLPERUSER=1.
1 ответ
Индивидуальные настройки: я не буду лгать вам, я активно избегаю такого рода настроек. Я считаю, что установки MSI для каждого пользователя "не идеальны". Это связано с плохой ремонтопригодностью (обновления, исправления и т. Д.) И рядом других деталей. Некоторые подробности в середине страницы здесь.
Некоторые ссылки для тех, кто читает этот ответ (я думаю, что вы читали это):
- Хорошая сводная страница по созданию отдельного пакета от Advanced Installer
- Одиночный пакет авторинга
- Контекст установки
- MSIINSTALLPERUSER
Условия функции: С учетом сказанного вы можете использовать условия функции, чтобы отменить выбор функций в зависимости от того, является ли определенное условие истинным или ложным. Вы даже можете установить 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>
Эти ответы могут помочь вам получить обзор этого:
Как установить уровень функции в зависимости от условий в wix? (
please do read this one
).
Скрыть тестирование функций: я добавлю небольшой фрагмент, который можно использовать для проверки работы сокрытия функций. Это заставляет рассматриваемое условие быть истинным, устанавливая его в 1 - в отличие от использования "реального условия", которое может быть неожиданно ложным.
<Feature Id="SupportingFiles" Title="SupportingFiles" Level="1">
<Condition Level="0">1</Condition>
</Feature>
Это должно скрыть функцию SupportingFiles от просмотра в графическом интерфейсе установки, и она также не должна устанавливать ее. Пожалуйста, дайте мне знать, если вы видите другое поведение.
Настраиваемые действия. Чтобы в интерактивном режиме скрыть функцию, основанную на изменениях, сделанных в графическом интерфейсе, вы можете попробовать использовать настраиваемые действия для управления уровнями функций.
Я не уверен, что это сработает. Я проверю, когда у меня будет шанс. Просто добавив эту ссылку на данный момент.
ОБНОВЛЕНИЕ: я не могу исследовать это прямо сейчас. Я хочу предупредить вас о возможности добавления временных строк в базу данных во время установки. Возможно, это способ скрыть эту функцию "в интерактивном режиме". Я просто не знаю, так как я никогда не пробовал. Вот первая ссылка, которую я нашел на временных записях. И внизу здесь ссылки. Нет гарантий.
Кроме этого, я полагаю, вы могли бы использовать внешний графический интерфейс запуска. Я мог бы прокомментировать это позже. Я недавно писал об этой проблеме (внешний GUI).
Некоторые дополнительные ссылки для справки: