#windows-installer #conditional-statements #installshield-2011
#windows-установщик #условные операторы #installshield-2011
Вопрос:
В моем приложении используется дополнительный компонент с ярлыками, которые заменяют ярлыки, предоставляемые установкой по умолчанию. Я не могу понять, как заставить его устанавливать ярлыки по умолчанию, только если этот необязательный дополнительный не установлен — или мне просто нужно дать им обоим одинаковое имя и надеяться на лучшее? Это должно выполняться через пользовательское дерево установки, а также с помощью обычных кнопок.
Посмотрите, как это работает: если при установке выбрано это дополнительное, ярлыки меню «Пуск» для основного приложения должны вместо этого указывать на это, которое само откроет основное, когда это необходимо.
Я использую InstallShield 2011 Professional.
РЕДАКТИРОВАТЬ: для пояснения — у меня он состоит из трех компонентов: main, ярлыка main и дополнения с ярлыком. Я просто не знаю, как проверить, был ли установлен аддон таким образом, чтобы я мог поместить его в условие для ярлыка main. Наверняка для этого есть переменная? Документация очень спартанская.
Ответ №1:
Если я правильно понимаю вопрос, MAIN.EXE получает ярлык, если MIDDLEMAN.EXE выполняется установка. В этом случае MIDDLEMAN.EXE получает ярлык.
Это странная проблема, поскольку существование компонента изменяет определение другого компонента. Тем не менее, это можно сделать. Способ, которым я бы это сделал, — создать компонент для MIDDLEMAN.EXE и определите его ярлык. Создайте другой компонент для MAIN.EXE и не определяйте его ярлык.
Затем напишите пользовательское действие, которое выполняется в последовательности выполнения при немедленном выполнении, которое выполняется после вычисления стоимости файла. Проверьте, не установлен ли MIDDLEMAN.EXE не установлен и не устанавливается. Если это верно, запишите временную строку в таблицу ярлыков, чтобы определить ярлык для MAIN.EXE .
Оттуда вы можете позволить MSI обрабатывать все остальное без необходимости отложенных пользовательских действий для обработки обслуживания ярлыка.
Тем не менее, я не могу не задаться вопросом, нельзя ли упростить это, изменив дизайн приложения. По сути, вы пытаетесь выполнить внедрение зависимостей на уровне EXE, и было бы проще выполнить это на уровне DLL. Другими словами:
Главная.EXE с ярлыком Необязательной библиотеки DLL
The MAIN.EXE всегда вызывается, но при необходимости он будет вести себя по-другому.Присутствует DLL.
Ответ №2:
Предполагая, что компонент по умолчанию включен в установку, вы, вероятно, можете использовать условие компонента для вашего «дополнительного» компонента. Затем вы можете убедиться, что этот дополнительный компонент установлен, только если другой компонент не установлен, т. е. они становятся взаимоисключающими. Это позволит избежать каких-либо проблем с функциями, которые значительно усложнили бы ваш пользовательский диалог.
Ответ №3:
@Stephen: Я не вижу, как вы можете избежать использования функций, поскольку пользователю видны только функции в графическом интерфейсе и, следовательно, позволяет пользователю указывать, что устанавливать?
Обычно мне не нравятся такого рода решения, поскольку они не проверяются в соответствии с внутренними средствами проверки согласованности файлов MSI, но вы можете установить EXE-файл в один компонент, а затем иметь два компонента, каждый с разными ярлыками, которые вы считаете взаимоисключающими. Затем вы присоединяете настраиваемый компонент быстрого доступа к функции, которая запускает установку пользовательских ярлыков. Функция должна быть установлена видимой в графическом интерфейсе. Ярлыки не должны рекламироваться, поскольку они находятся в компонентах без файлов. Возможно, вам потребуется установить флаг переходного процесса на компонентах быстрого доступа, чтобы разрешить удаление / добавление нужного компонента для установки на техническое обслуживание. Переходные компоненты повторно оценивают свои компонентные условия во время установки для технического обслуживания, чтобы проверить, приведут ли указанные для них условия к удалению / добавлению.