Я облажался, как я могу удалить свою программу?
-
13-12-2019 - |
Вопрос
Мой установщик Wix сработал при установке моей программы, но он не работает при деинсталляции.Файл удален слишком рано, и он необходим в дальнейшем.Деинсталлятор завершает работу с ошибкой и отменяет свои изменения.
Это означает, что я не могу удалить пакет со своего компьютера и, следовательно, не могу установить какие-либо дальнейшие сборки моего установщика (значительное неудобство).Как я могу принудительно удалить пакет?
Решение
Обновление, Штейн Осмул: внедрение этого нового списка подходов к очистке.
Найдите свой пакет в
C:\Windows\Installer
, где Windows хранит копии установленных пакетов MSI.Имена генерируются случайным образом, поэтому вам придется смотреть даты создания файлов.Откройте файл MSI с помощью Орка.(К сожалению, простой загрузки установщика orca не существует.Вы можете получить его, установив «MSI Tools» из Windows 10 SDK, а затем выполните поиск orca.msi в
C:\Program Files (x86)\Windows Kits
.)Удалите нарушающее пользовательское действие из Таблица CustomAction
Теперь вы сможете удалить пакет.
редактировать:согласно ответу @darkrock76 ниже, папка для шага 1 также может быть C:\ProgramData\Package Cache\
.У меня есть оба на моем компьютере с Windows 7 SP1.Я не смог сразу найти документацию по этому поводу.
ОБНОВЛЯТЬ:Привет, Вим! Спасибо за полезную информацию о COM без регистрации, которую вы предоставили ранее!Несколько обновлений по этой проблеме удаления:ответ darkrock76 неверен, пожалуйста, посмотрите мой комментарий к нему ниже.Кроме того, вместо удаления настраиваемого действия на шаге 3 выше вы можете установить его условие в таблице InstallExecuteSequence на 0 (числовой ноль == false), чтобы предотвратить его запуск.Удаление записи таблицы настраиваемых действий оставляет несколько неработающих ссылок на внешние ключи (я думаю, в какой-то момент это может привести к сбою). Инструмент Microsoft FixIt также можно попробовать, прежде чем прибегать к этому хаку.Есть некоторые альтернативные бесплатные инструменты/редакторы/просмотрщики MSI (внизу) помимо Орки.Возможно, пользователю также следует заархивировать исходный MSI перед редактированием, но я думаю, это подразумевается.Пожалуйста, удалите этот беспорядочный комментарий, как только вы его получите - я мог бы написать краткое описание различных способов принудительного удаления, если у меня будет время (инструмент FixIt MS, используя небольшие обновления, напрямую редактирует кэшированный MSI, применяет преобразование для удалить и все остальное, что есть).Продолжайте развертывание :-).Ваш ответ COM без регистрации очень помог мне (Штайну) в прошлом.Большое спасибо.
И забыл одно: вы можете найти фактический MSI-файл кеша с помощью Powershell.Это было за одну посылку, вы также можете получить за все пакеты (прокрутите вниз до первого скриншота).
Другие советы
Эта команда обычно работает для меня:
msiexec /fv installer.msi
.
Это несколько пересматривает установщик, так что вы можете попробовать еще раз с исправленным.
Одно время эта команда не работает, и мне пришлось использовать Microsoft Fixit.Это решило проблему (довольно ударный для меня).
В зависимости от точной причины поведения, которое вы описали, у вас может быть по крайней мере пара вариантов.
Если причиной сбоя является пользовательское действие, которое выполняется при удалении, и это пользовательское действие обусловлено некоторыми свойствами, на которые вы можете повлиять, вы можете попытаться передать желаемое значение через командную строку:
msiexec /x {YOUR-PRODUCTCODE-HERE} RUNMYACTION=false
В этом примере RUNMYACTION
это свойство установщика Windows, которое участвует в пользовательском условии действия, и если вы передадите false
как и его значение, действие не будет выполнено.
В противном случае вы можете исправить логику (или просто явно отключить пользовательское действие) и создать новый пакет MSI.Затем загрузите его на этот целевой компьютер и запустите следующим образом:
msiexec /i YourPackage.msi REINSTALL=ALL REINSTALLMODE=vomus
Здесь YourPackage.msi
это новый фиксированный пакет, REINSTALL=ALL
инструктирует msiexec
чтобы переустановить продукт, используя этот новый пакет, и REINSTALLMODE=vomus
(тот v
часть этого) повторно кэширует пакет MSI, и впоследствии вы сможете удалить его обычным способом.
Дополнительное примечание:вам следует протестировать свою установку на виртуальной машине, чтобы не рисковать своей реальной.
fyi: в Windows 8.1 Установщики были перемещены здесь: C: \ ProgramData \ Пакет Cache \
Если вы действительно отчаянные, и все решения не работают, попробуйте
Это стирает все, что ваш установщик положил на машину
Мало предупреждения
Обычно я просто ищу <Your Installer's Name>.msi
или <Your Installer's Company Name>
в реестре и удалите некоторые ключи удаления из некоторых Products
под деревьями установщика Windows, и после этого все обычно работает нормально и денди, хотя это было бы оставьте какой-нибудь материал валяться где попало, например, кэшированные установщики и, возможно, тонны других разделов реестра для каждого установленного файла и т.д.но его всегда сработало у меня при разработке установщиков, потому что, честно говоря, кого волнует, если один MSI остался и где-то кэширован?Вы все равно используете машину для разработки, верно?
Я использовал этот маленький инструмент также от Microsoft
В основном этот инструмент может быть использован для «исправления, включая поврежденные ключи реестра, которые блокируют вас от установки или удаления программ»
Что он исправляет:
-
поврежденные ключи реестра на 64-битных операционных системах
-
Поврежденные ключевые ключи реестра, которые контролируют данные обновления
-
Проблемы, которые предотвращают установку новых программ
-
Проблемы, которые предотвращают полностью удаление существующих программ, или обновляются
-
Проблемы, которые блокируют вас от удаления программы через добавление или удаление программ (или программ и функций) на панели управления
- Windows 7
- Windows 8
- Windows 8.1
- Windows 10
Его можно использовать для:
- .