Удалить экран параметров восстановления из установщика MSI
-
03-07-2019 - |
Вопрос
Я создал стандартный установщик MSI для P&D моего приложения, который использует следующие компоненты:
- Служба WCF, размещенная как служба Windows.
- Приложение с графическим интерфейсом, которое взаимодействует с этим сервисом.
- Расширение оболочки Dll.
Установщик работает очень хорошо и без каких-либо проблем.Проблема возникает, когда пользователь пытается снова установить приложение поверх существующего приложения с помощью установщика MSI.В настоящее время появляется экран с двумя опциями «Восстановить» и «Удалить».Оба эти варианта не работают и повреждают установленное приложение.
Я хочу пропустить этот экран и показать что-то вроде MessageBox, в котором говорится, что приложение уже установлено.Поскольку мне не обязательно предоставлять пользователю возможность восстановления.И как минимум я должен иметь возможность скрыть или каким-то образом не предоставлять опцию «Восстановить».
Любая помощь или предложения для меня?Итак, я пробовал очень много вещей, таких как использование ORCA, добавление свойства NotRepair и т. д.Но ни один из них не сработал.
Решение
Взгляните на Руководство установщика Windows в MSDN для этих двух свойств:
Другие советы
Принятый ответ оставляет некоторые вопросы для тех, у кого нет большого опыта установки.
Для этого вам необходимо отредактировать .MSI после того, как он будет создан установочной сборкой .NET.Самый простой способ сделать это, поддерживаемый Microsoft: Орка.Вы можете установить Orca из Пакет SDK для .NET Framework.Если вы считаете, что у вас уже есть SDK, но в меню «Пуск» нет Orca, найдите на своем компьютере «Orca.exe» или «Orca.msi».
Как только Orca будет установлена, просто запустите ее.Откройте файл MSI с помощью пользовательского интерфейса Orca.Слева вы увидите список «Таблицы».Выберите стол Свойство.На правой панели щелкните правой кнопкой мыши и добавьте.Добавьте узел с именем ARPNOREPAIR
.Убедитесь, что вы установили значение в пустую строку ""
.Также добавьте узел для ARPNOMODIFY
если вы не хотите, чтобы опция изменения отображалась в окнах вашей программы.
Поймите, что этой проблеме уже несколько лет, но я полагаю, что такие люди, как я, все еще сталкиваются с этой проблемой.Сумит упоминает в комментарии к принятому решению, что пользователь по-прежнему может получить доступ к экрану с обеими опциями: «Восстановить» и «Удалить».
Фактически существует три различных способа, с помощью которых пользователь может получить доступ к установщику приложения.
Один:Как уже было сказано, ARPNOMODIFY и ARPNOREPAIR устраняют проблему только при добавлении и удалении программы, это можно сделать с помощью «Orca.exe».
Два:Щелкнув правой кнопкой мыши установщик файла msi.К сожалению, это единственное место, где, похоже, нет возможности избежать обоих вариантов без внесения корректировок на уровне всего компьютера для всех файлов MSI.
Три:При двойном щелчке по установщику, если он уже установлен, появляется экран с переключателями «Восстановить» и «Удалить».
Ниже я нашел эту аккуратную адаптацию для решения третьей точки доступа, несколько переписанную здесь: http://us.generation-nt.com/there-way-disable-remove-repair-option-through-orca-project-properties-help-49010162.html.Он графически удаляет выбор разрешения варианта ремонта.За это я благодарен Полу Бруну.
- Откройте MSI-файл с помощью Orca.exe.
- Зайдите в таблицу «Свойство».
- Добавьте ключ «ARPNOMODIFY» со значением
1
. - Добавьте ключ «ARPNOREPAIR» со значением
1
. - Измените значение свойства MaintenanceForm_Action с
Repair
кRemove
. - Зайдите в таблицу «Контроль».
- Найдите запись с Dialog_ «MaintenanceForm» и элементом управления «BodyText».
- Измените свойство «Текст» на следующее:
{\VSI_MS_Sans_Serif13.0_0_0}Select "Finish" to remove [ProductName]
- Найдите запись с Dialog_ «MaintenanceForm» и элементом управления «RepairRadioGroup».
- Измените свойство Control_Next с
CancelButton
кFinishButton
. - Найдите и удалите запись с помощью Dialog_ «MaintenanceForm» и Control «RepairRadioGroup».
С выполнением вышеописанных шагов может быть связана автоматизация процесса адаптации MSI с помощью преобразования, полученного в результате выполнения этих шагов только один раз.Более подробную информацию о том, как это сделать, можно найти здесь: Используйте Orca для редактирования MSI из командной строки?
Я согласен с Хенриком, но в моем случае последний шаг
Найдите и удалите запись с помощью Dialog_ «MaintenanceForm» и Control «RepairRadioGroup».
вызвать ошибку 2814.
Итак, мое предложение:сделайте RepairRadioGroup невидимым.Чтобы сделать это, просто установите его, с Атрибут до 0
UPDATE Control SET Attributes = 0 WHERE Control = 'RepairRadioGroup'
На сегодняшний день это намного проще, если вы отредактируете файл ISM через installshield.Чтобы отключить Change
и Repair
Кнопка на экране «Добавить/удалить программу» установите следующие настройки на Yes
на Installation Designer
вкладка > Installation Information
узел на панели навигации > General Information
узел на панели навигации > Add or Remove Programs
раздел в панели подробностей
Disable Change Button
Disable Repair Button
Чтобы решить вторую проблему, вы можете просто изменить встроенный MaintenanceWelcome
Диалоговое окно installshield.
- Измените текст метки приветственного сообщения на какое-либо сообщение об ошибке, например.«Другая версия этого продукта уже установлена.Установка не может быть продолжена».
- В поведении при нажатии
Next
кнопка просто добавитьEndDialog
событие.Установите условие выполнения на1
чтобы он выполнялся всегда.Установите егоValue
кExit
- Измените текст
Next
нажмите кнопку «Готово». - Отключите или скройте
Cancel
нажмите кнопку, если хотите.
У вас все настроено!
Я завернул setup.exe и MSI в EXE-файл.При нажатии извлекаются файлы и активируется файл Setup.exe.В этот exe я добавил код, проверяющий, установлено ли приложение на компьютере или нет.Если он установлен, я запрашиваю пользователя и выхожу.Таким образом, MSI никогда не запускается, если приложение уже установлено, поэтому экран «Восстановить и удалить» никогда не появляется.Что касается кнопки «Изменить» на экране «Добавить/Удалить», я использовал решение, предоставленное «CheGueVerra».Благодаря вам.