Я облажался, как я могу удалить свою программу? - PullRequest
25 голосов
/ 14 марта 2012

Мой установщик Wix работал над установкой моей программы, но она не работает для удаления.Файл удален слишком рано, и он необходим в дальнейшем.Деинсталлятор дает сбой и отменяет свои изменения.

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

Ответы [ 7 ]

22 голосов
/ 15 марта 2012
  1. Найдите ваш пакет в C:\Windows\Installer, где Windows хранит копии установленных пакетов MSI. Имена генерируются случайным образом, поэтому вам нужно посмотреть даты создания файлов.

  2. Откройте файл MSI с помощью Orca . (К сожалению, нет простой загрузки для установщика orca. Вы можете получить его, установив "MSI Tools" Windows 10 SDK , а затем выполнив поиск orca.msi в C:\Program Files (x86)\Windows Kits.)

  3. Удалите оскорбительное настраиваемое действие из таблицы CustomAction

Теперь вы сможете удалить пакет.

edit : согласно ответу @ darkrock76 ниже, папка для шага 1 также может быть C:\ProgramData\Package Cache\. У меня есть оба на моем компьютере с Windows 7 SP1. Я не смог сразу найти документацию по этому поводу.


ОБНОВЛЕНИЕ : Привет, Вим, спасибо за хорошую COM-информацию без регистрации, которую ты предоставил ранее! Несколько обновлений по этой проблеме удаления: ответ darkrock76s неверен, см. Мой комментарий к нему ниже . Кроме того, вместо удаления настраиваемого действия на шаге 3 выше, вы можете установить его условие в таблице InstallExecuteSequence на 0 (числовой ноль == false), чтобы оно никогда не выполнялось. Удаление записи в таблице пользовательских действий оставляет несколько неработающих ссылок на внешние ключи (возможно, в какой-то момент может произойти сбой). Инструмент Microsoft FixIt также можно попробовать, прежде чем прибегнуть к этому хаку. Есть некоторые альтернативные бесплатные инструменты / редакторы / средства просмотра MSI (внизу) в дополнение к Orca. Может быть, пользователь также должен сделать zip оригинального MSI перед редактированием, но я предполагаю, что это подразумевается. Пожалуйста, удалите этот грязный комментарий, как только вы его получите - я мог бы написать краткое изложение различных способов принудительного удаления таких программ, если у меня будет время (FixIt MS Tool, используя незначительные обновления, редактируйте кэшированный MSI напрямую, применяйте преобразование для удалить, и все остальное есть). Рок дальше с развертыванием :-). Ваш COM-ответ без регистрации помог мне (Stein) в прошлом. Большое спасибо.

И забыл одну вещь: Вы можете найти актуальный MSI-файл кэша, используя Powershell . Это было для одного пакета, вы также можете получить для всех пакетов (прокрутите вниз до первого снимка экрана).

8 голосов
/ 05 июля 2012

У меня обычно работает эта команда:

msiexec /fv installer.msi

Это несколько повторяет установщик, так что вы можете попробовать снова с исправленным.

Однажды эта команда не работала, и мне пришлось использовать Microsoft FixIt. Это решило проблему (довольно шокирует меня).

6 голосов
/ 14 марта 2012

В зависимости от точной причины поведения, которое вы описали, у вас может быть как минимум пара вариантов.

Если причиной сбоя является настраиваемое действие, которое запускается при удалении, и это настраиваемое действие обусловлено некоторыми свойствами, на которые вы можете влиять, вы можете попытаться передать нужное значение через командную строку:

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-пакет, и вы сможете впоследствии удалить его обычным способом.

Примечание: вы должны проверить свою установку на виртуальной машине, чтобы не рисковать своей реальной.

4 голосов
/ 11 февраля 2014

К вашему сведению: в Windows 8.1 установщики были перемещены сюда: C: \ ProgramData \ Package Cache \

0 голосов
/ 21 ноября 2018

Я использовал этот маленький инструмент также от Microsoft

https://support.microsoft.com/en-us/help/17588/fix-problems-that-block-programs-from-being-installed-or-removed

В основном этот инструмент можно использовать для «исправления проблем, включая поврежденные ключи реестра, которые блокируют установку или удаление программ»

Что это исправляет:

  1. Поврежденные ключи реестра в 64-разрядных операционных системах

  2. Поврежденные ключи реестра, управляющие данными обновления

  3. Проблемы, препятствующие установке новых программ

  4. Проблемы, препятствующие полному удалению или обновлению существующих программ

  5. Проблемы, которые мешают вам удалить программу через «Установка и удаление программ» (или «Программы и компоненты») на панели управления

Может использоваться для:

  • Windows 7
  • Windows 8
  • Windows 8.1
  • Windows 10
0 голосов
/ 08 октября 2014

Я обычно просто ищу <Your Installer's Name>.msi или <Your Installer's Company Name> в реестре и удаляю некоторые ключи деинсталляции из некоторых Products в деревьях установщика Windows, после чего все обычно работает нормально, хотя это WOULD оставляет некоторые вещи, такие как кэшированные установщики и, возможно, тонны других разделов реестра для каждого установленного файла и т. Д., Но его ВСЕГДА работал для меня при разработке установщиков, потому что, честно говоря, кого волнует, если один MSI осталось и где-то кешируется? В любом случае, вы используете машину для разработки, верно?

0 голосов
/ 14 марта 2012

Если вы действительно в отчаянии и все вышеперечисленные решения не работают, попробуйте

msizap.exe

Это сотрет все, что установщик установил на машину
МАЛЕНЬКОЕ ПРЕДУПРЕЖДЕНИЕ

Не запускайте msizap, не зная, с какими параметрами вы хотите его запустить (для списка параметров сначала запустите msizap /?).

...