Как получить ARP для запуска загрузочного приложения моего установщика для модифицированной установки? - PullRequest
1 голос
/ 25 марта 2009

Я работаю над проектом установщика, который состоит из MSI-файла и загрузочного приложения, которое управляет предварительными требованиями; и поскольку необходимость в некоторых предварительных условиях зависит от того, какие функции пользователь выбирает для установки, приложение начальной загрузки также предоставляет пользовательский интерфейс. Я хочу иметь возможность заставить панель управления «Установка и удаление программ» (или «Программы и компоненты») запускать приложение начальной загрузки вместо MSI, когда пользователь хочет запустить измененную установку. Я попытался изменить значение ModifyPath в разделе реестра Uninstall реестра установщика, указав путь к приложению начальной загрузки, но безрезультатно. Нажатие кнопки «Изменить» в ARP по-прежнему вызывает у меня MSI.

Есть ли простой способ сделать то, что я хочу? Если это не удастся, есть ли способ для MSI обнаружить, что он был запущен из ARP, с помощью кнопки «Изменить», чтобы я мог показать ему сообщение об ошибке, которое говорит пользователю вместо этого запустить приложение начальной загрузки? (То есть, использует ли ARP те же аргументы командной строки, которые пользователь использовал бы для запуска MSI и указания модифицированной установки без необходимости просмотра страницы обслуживания пользовательского интерфейса? Если нет, то на что мне обратить внимание?)

Редактировать Мой установщик устанавливает не одно приложение, а набор приложений, каждое из которых пользователю разрешено не устанавливать. (Мы устанавливаем эти приложения как набор, потому что большинство из них зависит от того, какое из них устанавливается, в частности. Поэтому пользователю будет проще иметь только один установщик, который будет обрабатывать их все, а не отдельные установщики, которые этот новый установщик заменит.)

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

Возможно ли, чтобы MSI запустил приложение начальной загрузки, а затем немедленно завершил молчание, пока приложение начальной загрузки продолжалось, в конечном итоге перезапустив MSI? (Когда приложение начальной загрузки запускает MSI, одно из аргументов командной строки, которое оно передает в MSI, является свойством, которое сообщает ему, что приложение начальной загрузки запустило его. Это в настоящее время используется, среди прочего, чтобы MSI показывал ошибку сообщение о запуске приложения начальной загрузки, если в командной строке не была указана деинсталляция или установка для восстановления.)

Ответы [ 3 ]

1 голос
/ 26 марта 2009

Установка и удаление программ будет запускать только ваш MSI, поддержка поиска и запуска каких-либо приложений начальной загрузки отсутствует.

Что вы можете (и должны) сделать, это добавить проверку предварительных условий в ваш MSI независимо от того, как он выполняется. Таким образом, вы можете предупредить пользователя о том, что он просит что-то, что в данный момент не может быть выполнено (добавление функции, у которой пока нет своих предварительных условий).

Вместо этого можно добавить сообщение о запуске загрузчика, если предварительное требование отсутствует.

0 голосов
/ 03 июня 2011

Я знаю, что уже поздно, однако у Брэда Хита есть некоторые комментарии по этому поводу. http://blogs.msdn.com/b/heaths/archive/2005/08/16/a-reason-for-arpsystemcomponent.aspx

0 голосов
/ 30 апреля 2009

Мне удалось решить мою дилемму, заставив MSI запустить для меня приложение начальной загрузки. Я просто написал пользовательское действие, которое запускает приложение начальной загрузки и не ждет его завершения. Первоначально я пытался поместить настраиваемое действие в последовательность пользовательского интерфейса, но не смог завершить установку, не создав таким образом ошибки.

Поскольку моя цель состояла в том, чтобы запустить загрузчик только для установок Modify, я поместил пару новых управляющих событий на кнопку Next в диалоге обслуживания (где пользователь выбирает между Modify, Repair и Remove). Если пользователь выбрал Maintenance (MaintenanceMode ~ = "Modify"), пользовательское действие запускается, и диалог закрывается с использованием действия EndDialog с параметром Exit в качестве аргумента. (Я изменил условие существующего управляющего события, которое переходит к следующему диалогу, чтобы оно было отрицательным по отношению к тому, которое вызывает запуск начальной загрузки, т. Е. НЕ (MaintenanceMode ~ = "Modify").) Приложение начальной загрузки запрограммировано на пропустите диалог обслуживания в его графическом интерфейсе и начните со следующего диалога в последовательности, хотя пользователю разрешено вернуться к диалогу обслуживания, если он того пожелает. (Если он это делает, приложение начальной загрузки просто возвращается к своей версии диалога обслуживания, которая очень похожа на ту, что в MSI.)

Я знаю, это что-то вроде клуджа, но он делает то, что мне нужно. : -)

...