Удаление MSI-файла из командной строки без использования msiexec

StackOverflow https://stackoverflow.com/questions/450027

Вопрос

msiexec является ли программное обеспечение командной строки, которое устанавливает МСИ программа.Но я обнаружил, что вы можете установить MSI-файл из командной строки, просто введя имя MSI-файла в командной строке.

Но для того, чтобы удалить MSI-файл, похоже, вам нужно вызвать msiexec запрограммируйте и придайте ему /x или /uninstall.

Как я могу удалить MSI из командной строки без использования msiexec рутина?

Это было полезно?

Решение

Краткий ответ: вы не можете. Используйте MSIEXEC / x

Длинный ответ. Когда вы запускаете файл MSI непосредственно из командной строки, все, что происходит, - это то, что он запускает MSIEXEC для вас. Эта связь хранится в реестре. Вы можете увидеть список ассоциаций (в проводнике Windows), перейдя в Инструменты / Параметры папки / Типы файлов.

Например, вы можете запустить файл .DOC из командной строки, и WordPad или WinWord откроет его для вас.

Если вы загляните в реестр в разделе HKEY_CLASSES_ROOT\.msi, то увидите, что файлы .MSI связаны с ProgID " Msi.Package " ;. Если вы загляните в HKEY_CLASSES_ROOT\Msi.Package\shell\Open\command, то увидите командную строку, которую Windows фактически использует, когда вы & Quot; запускаете & Quot; файл .MSI.

Другие советы

Существует много способов удалить пакет MSI.Это предназначено в качестве "ссылки".

Подводя итог вы можете удалить его с помощью: msiexec.exe, ARP, WMI, PowerShell, Системы развертывания , такие как SCCM, VBScript / Автоматизация COM, DTF, или через скрытая папка кэша Windows, и несколько других вариантов, представленных ниже.

Первые несколько абзацев содержат важные сведения о MSI, затем следуют 14 разделов с различными способами удаления MSI-файла.Puh.

"Лепет, Перебранка": Разделы 1, 2 и 3 являются ли обычные подходы к удалению (и, следовательно, рекомендуется). Personally I use option 3 or 5 from section 3 (оба варианта с протоколированием, но вариант 5 также выполняется бесшумно ).Если вы очень занят, пропустите всю болтовню и выберите один из них - он выполнит свою работу.


Если у вас есть проблемы с полным удалением и ищете альтернативу устаревшему MsiZap.exe и / или Утилита очистки Установщика Windows (MSICUU2.exe), вы можете попробовать новый Инструмент для исправления ошибок от Microsoft (или международная страница).По-видимому, может сработать и при других проблемах с установкой.


Если вы думаете, МСИ и Установщик Windows возможно, вам захочется почитать о том, что это доставляет больше хлопот, чем того стоит корпоративные преимущества использования файлов MSI.


Установочный скрипт MSI настройки обычно поставляются в виде setup.exe файл.Чтобы узнать больше о параметрах, используемых для удаления таких настроек, пожалуйста, ознакомьтесь с этими ссылками: setup.exe справочный лист в формате PDF, Setup.exe и Update.exe Параметры командной строки.


Некоторые файлы MSI устанавливаются как часть пачки с помощью такого механизма, как Гореть (WiX Toolkit) или Пакет InstallShield Suite Проекты.Это может привести к удалению, немного отличающемуся от того, что показано ниже.Вот пример для проектов InstallShield Suite.


Имейте в виду, что запущенная деинсталляция молча или интерактивно может привести к разным результатам (!).Для получения довольно пространного описания того, почему это так, пожалуйста, прочтите этот пост: Удаление из панели управления отличается от удаления из .msi


Если при попытке удаления у вас неожиданно попросят исходный установочный носитель, пожалуйста, прочтите этот ответ: Почему MSI требует исходный файл .msi для продолжения удаления? и, возможно, также в разделе 12 ниже приведены некоторые важные технические детали.


Если у вас есть CCleaner или аналогичные установленные инструменты очистки, возможно, перейти к раздел 11.


Если удаление завершается полным сбоем (запуск невозможен), смотрите разделы 12 и 13 ниже для потенциального способа "отменить" установка с использованием восстановление системы и / или инструменты для очистки.


1. Using the original MSI

  • Если у вас есть доступ к оригинальному MSI, используемому для установки, вы можете просто щелкните правой кнопкой мыши это в Проводник Windows и выберите Удалить.
  • Вы также можете удалить его через командную строку, как описано в разделе 3.

2. Using the old ARP Applet OR new Windows 8/10 Settings Interface

  • Просто должен упомянуть обычный подход (ы), хотя он очевиден

    • ARP = Add / Remove Programs Applet (appwiz.cpl)
    • Windows 10 Settings Interface => Новая оболочка для той же операции
  • ARP:

    • Вперед начать бежать appwiz.cpl ВОЙТИ для того, чтобы открыть апплет установка и удаление программ (или нажать кнопку Установка и удаление программ на панели управления)
    • Щелчок "Удалить" для продукта, который вы хотите удалить
  • Интерфейс настроек (Windows 8/10):

    • Используйте новый графический интерфейс настроек в Windows 8/10
    • Клавиша Windows + Коснитесь Я => Apps & Features.Выберите запись и удалите.
    • Некоторые сообщения об ошибках при вызове деинсталляции таким способом.Пожалуйста, добавляйте комментарии ниже, если увидите.

3. Using msiexec.exe command line (directly or via a batch file)

  • Вы можете удалить его с помощью командная строка (cmd.exe), пакетный файл или или даже изнутри исполняемого файла в виде операция оболочки.
  • Вы делаете это, передавая идентификатор продукта (проверьте ниже, как найти это GUID) или путь к исходному MSI-файлу, если таковой имеется, к msiexec.exe.
  • Для всех приведенных ниже командных строк вы можете добавить /qn Для сделайте так, чтобы удаление выполнялось в автоматическом режиме.Вот как выполняется деинсталляция при запуске из апплета "Добавить / удалить".

    • Вариант 1:Базовая интерактивная деинсталляция (доступ к исходному MSI-файлу):

       msiexec.exe /x "c:\filename.msi"
      
    • Вариант 2:Базовая интерактивная деинсталляция с помощью GUID продукта (нет доступа к исходному MSI-файлу - вот как найти GUID продукта - та же ссылка, что и ниже):

       msiexec.exe /x {11111111-1111-1111-1111-11111111111X}
      
    • Вариант 3:Интерактивная деинсталляция с подробным файлом журнала:

       msiexec.exe /x "c:\filename.msi" /L*V "C:\msilog.log"
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V "C:\msilog.log"
      
    • Вариант 4:Интерактивная деинсталляция с обновленным подробным файлом журнала (подробная опция для записи в журнал - запись журнала происходит непрерывно, может быть очень медленной):

       msiexec.exe /x "c:\filename.msi" /L*V! "C:\msilog.log"
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V! "C:\msilog.log"
      
      • Опция сброса в журнал замедляет удаление потому что файл журнала записывается непрерывно, а не пакетно.Это гарантирует, что буфер журнала не будет потерян в случае сбоя установки.

      • Другими словами, включите этот параметр, если ваша установка завершается сбоем и в вашем подробном файле журнала нет полезной информации.Уберите восклицательный знак, чтобы отключить опцию записи в журнал, и удаление будет намного быстрее.Вы по-прежнему получаете подробное ведение журнала, но, как уже говорилось, некоторый буфер журнала может быть потерян.

    • Вариант 5 (рекомендуется):Тихая деинсталляция с подробным файлом журнала - подавление перезагрузок (нет сброса для входа в систему - смотрите предыдущий вариант, чтобы понять, что это значит):

       msiexec.exe /x "c:\filename.msi" /QN /L*V "C:\msilog.log" REBOOT=R
       msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /QN /L*V "C:\msilog.log" REBOOT=R
      

      Краткое объяснение параметров (поскольку я рекомендую этот вариант):

       /X = run uninstall sequence
       /QN = run completely silently
       /L*V "C:\msilog.log"= verbose logging at path specified
       {11111111-1111-1111-1111-11111111111X} = product guid of app to uninstall
       REBOOT=R = prevent unexpected reboot of computer
      

      Опять же, как найти guid продукта:Как я могу найти GUID продукта установленной программы установки MSI? (для удаления, если у вас нет исходного MSI, который нужно указать в команде удаления).

  • Верхний наконечник:Если вы создадите файл журнала для удаления, вы сможете найти проблемы в журнале с помощью поиск "значения 3".Это особенно полезно для подробных файлов, потому что они такие, ну, в общем, подробные :-).

  • Как найти GUID продукта для установленного MSI?

  • Дополнительная информация о регистрации на сайте installsite.org: Как мне создать файл журнала моей установки? - отличный обзор различных опций, а также особенностей ведения журнала InstallShield.

  • Msiexec (параметры командной строки) - обзор командной строки для msiexec.exe От MSDN.Вот версия Technet.

4. Using the cached MSI database in the super hidden cache folder

  • MSI удаляет все cabs (более старые версии Windows) и кэширует каждый установленный MSI в супер-скрытой системной папке по адресу %Системный корень%\Установщик (вам нужно показать скрытые файлы, чтобы увидеть это).
  • Примечание:Эта папка, скрытая от посторонних глаз, теперь обрабатывается по-другому в Windows 7 и более поздних версиях. Файлы MSI теперь кэшируются в натуральную величину.Прочитайте связанную ветку для получения более подробной информации - рекомендуется прочитать всем, кто находит этот ответ и возится с опасными настройками Windows.
  • Всем MSI-файлам здесь будет присвоено случайное имя (шестнадцатеричный формат), но вы можете получить информацию о каждом MSI, показав строку состояния проводника Windows (Вид -> Строка состояния), а затем выбрав MSI.Итоговый поток из MSI будет виден в нижней части окна проводника Windows.Или, как указывает Кристофер Галпин, включите столбец "Комментарии" в проводнике Windows и выберите MSI-файл (смотрите эту статью о том, как это сделать).
  • Как только вы найдете нужный MSI, просто щелкните его правой кнопкой мыши и перейдите к удалению.
  • Вы также можете использовать PowerShell, чтобы показать полный путь к локально кэшированному пакету вместе с названием продукта.Это самый простой вариант, на мой взгляд.
  • Чтобы запустить PowerShell: удерживая нажатой клавишу Windows, нажмите R, отпустите клавишу Windows, введите "powershell" и нажмите OK.Тогда разверните окно PowerShell по максимуму и выполните приведенную ниже команду:
    get-wmiobject Win32_Product | Format-Table Name, LocalPackage -AutoSize

Enter image description here


5. Using PowerShell

  • Есть аналогичный, но более полный сценарий PowerShell доступен в MSDN.Это позволяет запускать деинсталляцию на нескольких компьютерах.
  • Запись добавлена Even Mien:

    $app = Get-WmiObject -Class Win32_Product -Filter "Name = 'YOUR_APP'"
    $app.Uninstall()
    
  • Этот подход будет работать, но доступ к WMI-классу Win32_Product вызовет проверка согласованности программного обеспечения который является очень медленно и в особых обстоятельствах это может привести к запуску самовосстановления MSI.Смотрите эту статью: Сценарий удаления Powershell - Настоящая головная боль

  • Я сам это не тестировал, но, похоже, $app.Uninstall() может запускать строку UninstallString, зарегистрированную в настройках реестра апплета ARP.Это означает, что в некоторых случаях он может запускать modify вместо uninstall.
  • Ознакомьтесь с этим разделом для получения более подробной информации и способов удаления с помощью Powershell: Как я могу удалить приложение с помощью PowerShell?

6. Using the .NET DTF Class Library (часть инструментарий WiX)

    using Microsoft.Deployment.WindowsInstaller;

    public static void Uninstall( string productCode)
    {
      Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=\"R\"");
    }

7. Using the Windows Installer Automation API


8. Using a Windows Installer major upgrade

  • Серьезное обновление программы установки Windows может произойти как часть установки другого файла MSI.
  • Основное обновление выполняется путем определения сопутствующих продуктов в каталоге MSI. "Таблица обновления".Затем эти связанные настройки обрабатываются, как указано в таблице.Как правило, это означает, что они удалены, но вместо этого можно прервать основную настройку (обычно используется для обнаружения более высоких версий вашего собственного приложения, присутствующих в коробке).

9. Using Deployment Systems / Remote Administration Systems

  • SCCM, Единый Центр CA, Tivoli от IBM, Альтирис Пакет управления клиентами и несколько других
  • Эти инструменты обеспечивают расширенное управление клиентским ПК, включая установку и удаление файлов MSI
  • Эти инструменты, по-видимому, используют комбинацию msiexec.exe, автоматизации, WMI, и т.д...и даже их собственный способ вызова установок и деинсталляции.
  • По моему опыту, эти инструменты обладают большой "индивидуальностью", и вам нужно адаптироваться к их различным способам ведения дел.

10. Using WMI - Windows Management Instrumentation

  • Добавляю просто для полноты картины.Это так не рекомендуется использовать этот подход, поскольку он очень медленно
  • Тот Самый WMICodeCreator.exe инструмент создания кода можно использовать для экспериментов
    • Установка может быть вызвана через Win32_Product.Install
    • Удаление может быть вызвано через Win32_Product.Uninstall
  • Образец MSDN: Метод удаления класса Win32_Product

11. Using a third-party tool such as ccleaner or similar

  • Несколько приложений Windows имеют собственный интерфейс для удаления не только пакетов MSI, но и устаревших установщиков.
  • Я не хочу давать здесь каких-либо конкретных рекомендаций по инструментам (особенно коммерческим), но хорошо известные CCleaner имеет такой интерфейс удаления (и у него есть бесплатная версия).Я должен также добавить, что недавно этот инструмент подвергся вредоносной атаке.
  • Я думаю, мы все должны помнить, что даже безобидное программное обеспечение может быть заражено вредоносным ПО в местах его загрузки (FTP-атака).
    • Я использую virustotal.com чтобы проверить мои загрузки, а также Системный Обозреватель процессов для проверки запущенных процессов после установки - вместе с обычным программным обеспечением безопасности (в зависимости от того, что доступно).
    • При таком подходе обычно обнаруживается удивительное количество программ "серой зоны" (панели инструментов, смайлики, рекламное ПО и т.д.), А также несколько ложных срабатываний (они также могут вызвать проблемы, поскольку программы безопасности блокируют доступ к ним или помещают их в карантин, создавая много шума).И, конечно же, настоящая вредоносная программа.
    • Некоторые советы по использованию Process Explorer можно найти здесь - серия твитов - этот инструмент Process Explorer подключается к VirusTotal.com чтобы проверить все запущенные процессы в интерактивном режиме, все, что вам нужно, - это несколько шагов настройки.
    • Я должен отметить, что Process Explorer выдает проверку подписи файла, но никакой эвристики - насколько я понимаю (никакой проверки на подозрительные операции, просто проверка с более чем 60 наборами безопасности для помеченных файлов).Вам нужен обычный инструмент безопасности для интерактивной, онлайн-эвристической защиты.
    • Как бы то ни было, я думаю, что некоторые программы безопасности граничат с тем, что вызывают больше ложноположительных проблем, чем вредоносное ПО наносит ущерба.Знаменитые последние слова в эпоху вымогательства...
    • Это достаточно большое отступление - я просто не хочу видеть, как люди скачивают вредоносное ПО.Делайте свое virustotal.com проверь хотя бы.
  • Удаление, подобное этому, должно работать нормально.Я думаю, что эти инструменты портят слишком много вещей, когда вы пробуете их "функции очистки".Используйте с осторожностью.Если вы используете только функцию удаления, все должно быть в порядке.

12. Using a cleanup tool such as msizap or similar

  • Для полноты картины msizap.exe следует упомянуть, хотя это и так устаревший, неподдерживаемый и устаревший.Его не следует использовать ни в каких более новых версиях Windows
  • Этот инструмент командной строки (msizap.exe) также был доступен графический интерфейс (MSICUU2.exe).Оба инструмента устарели.
  • Предполагаемое использование этих инструментов заключалось в том, чтобы удалите неудачные деинсталляции:
  • Как правило, для того редкого случая, когда кэшированный MSI-файл со случайным именем ошибочно отсутствует и удалить не удается по этой причине при запросе исходного MSI.Это редкая проблема, но я видел ее сам.Всего лишь несколько потенциальных причин: Перешел к этому ответу.
    • Ключевые слова:вмешательство в восстановление системы, плохие приложения для очистки, msiexec.exe сбой, отключение питания, вмешательство в программное обеспечение безопасности, ошибки при разработке MSI для отладки (идентичные коды пакетов и т.д.), вмешательство пользователей и взлом (что здесь?экономить место?) и т.д...
    • Он также может быть использован для блокировки любой установки MSI, хотя это явно нежелательно.
    • Дополнительная информация: Почему MSI требует исходный файл .msi для продолжения удаления?
  • Этот новый инструмент поддержки (этот инструмент теперь также устарел) можно попробовать в последних версиях Windows, если у вас есть несуществующие пакеты MSI, требующие удаления.
  • Некоторые предложили использовать инструмент, на который ссылается здесь saschabeaumont: Удаление без использования MSI-файла.Если вы попробуете это и это сработает, пожалуйста, обязательно сообщите нам об этом.
  • Если у вас есть доступ к оригинальному MSI, который фактически использовался для установки продукта, вы можете использовать его для запуска удаления.Это должен быть именно тот MSI, который был использован, а не просто похожий.

13. Using system restore ("installation undo" - last resort IMHO)

  • Строго говоря , это не способ "удалить" но для того , чтобы "отменить- последняя установка или несколько установок, если уж на то пошло.
  • Восстановление через точку восстановления возвращает систему в исходное состояние. предыдущее состояние установки (вы можете найти демо-версии этого видео на YouTube или аналогичном сайте).
  • Обратите внимание, что эта функция может быть отключена полностью или частично - ее можно отключить навсегда для всего компьютера или индивидуально для каждой установки.
  • Я видел новые, неразрешимые проблемы с установкой, возникающие в результате восстановления системы, но обычно все работает нормально.Очевидно, что вы используете эту функцию не для развлечения.Это последнее средство, и его лучше всего использовать для откат новых драйверов или настройки, которые только что были установлены и, как было обнаружено, вызывают немедленные проблемы (синий экран, перезагрузки, нестабильность и т.д.).
  • Чем дольше вы будете возвращаться назад, тем больше переделок вы создадите для себя и тем выше будет риск.Большинство систем имеют всего несколько точек восстановления, и, по-моему, большинство из них рассчитаны всего на месяц или два.
  • Имейте в виду, что восстановление системы может повлиять Обновления Windows затем это должно быть применено повторно, как и многие другие системные настройки.Помимо чисто неприятных моментов, это также может привести к повторному появлению проблем с безопасностью, и вы можете захотеть выполнить специальную проверку безопасности в целевых полях с помощью Базовый анализатор безопасности Microsoft или аналогичные инструменты.
  • Поскольку я упомянул о восстановлении системы, полагаю, я должен упомянуть последняя известная хорошая функция настройки.Эта функция не имеет ничего общего с удалением или восстановлением системы, но это последняя конфигурация загрузки, которая сработала или привела к запуску системы.Его можно использовать для возобновления работы вашей системы, если она загорается синим цветом или останавливается во время загрузки.Это часто происходит после установки драйвера.

14. Windows Installer Functions (C++)

Для полноты картины, я думаю, мы должны упомянуть суть всего этого - "от начала до конца": функции API установщика Win32 для Windows.Вероятно, это функции, используемые большинством, если не всеми другими подходами, перечисленными выше "под капотом".В основном они используются приложениями или решениями, непосредственно связанными с MSI как технологией.

Существует ответ на serverfault.com, который может представлять интерес как краткое описание различных программных подходов к удалению (Функции COM-автоматизации, .NET, установщика Win32).

Ниже вы найдете фрагмент кода на C ++, показывающий, как удалить Orca, 10.1.17134.12 по коду продукта, используя вызов Функция MsiConfigureProductEx.Чтобы удалить другой продукт, замените GUID, указанный для prodcode с тем, что подходит для вашего продукта.Чтобы найти код продукта, смотрите Этот ответ: Как я могу найти GUID продукта установленной программы установки MSI?

Удаление произойдет в режиме полного графического интерфейса.Чтобы работать в автоматическом режиме или в каком-либо другом графическом режиме (сокращенный, базовый и т.д.), пожалуйста, ознакомьтесь с: Функция MsiSetInternalUI.

#include "pch.h"

#define WIN32_LEAN_AND_MEAN //Minimize includes from Windows.h
#include <windows.h>
#include <msi.h> // Windows Installer
#include <tchar.h> 

#pragma comment(lib, "msi.lib") // To make code link

int main()
{
    const TCHAR noreboot[] = _T("REBOOT=ReallySuppress");
    const TCHAR prodcode[39] = _T("{D7B80ABC-1950-37B8-F851-C3783EED9C93}"); // Orca, 10.1.17134.12

    UINT res = MsiConfigureProductEx(prodcode, INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT, noreboot);

    return res; // Error Codes: https://msdn.microsoft.com/en-us/library/windows/desktop/aa376931(v=vs.85).aspx
}

Фрагмент был создан и протестирован с использованием последней версии Visual Studio 2017 по состоянию на сентябрь 2018 года:

  1. Создайте новое "Консольное приложение Windows" из Visual C++ => Рабочий стол Windows.
  2. Скопируйте и вставьте приведенный выше код в ваш основной CPP-файл (заменив все, что там есть).
  3. Это должно быть так, чтобы можно было запустить код.Может быть, установить точку останова, собрать и запустить.

Также помните, что удаление может быть инициировано с помощью команды WMIC:

wmic product get name - > В этом списке будут перечислены все установленные приложения.

wmic product where name='myappsname' call uninstall - > это приведет к удалению приложения.

Расширение файла msi сопоставлено с msiexec (аналогично, при вводе имени файла .txt в командной строке запускается обработчик файла Notepad / default .txt для отображения файла).

Таким образом, ввод имени файла с расширением .msi действительно запускает msiexec с MSI-файлом в качестве аргумента и выполняет действие по умолчанию, install. По этой причине удаление требует, чтобы вы вызвали msiexec с параметром удаления, чтобы удалить его.

wmic product get name

Просто застрял cmd ... все еще мигает _ через пару минут

в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, если вы можете найти папку с именем программного обеспечения, которое вы пытаетесь установить (а не с именем, указанным в ProductCode), UninstallString указывает на собственный деинсталлятор приложения C:\Program Files\Zune\ZuneSetup.exe /x

Я бы попробовал следующий синтаксис - он работает для меня.

msiexec /x filename.msi /q 

Я предполагаю, что когда вы вводите int file.msi в командную строку, Windows автоматически вызывает msiexec file.msi для вас. Я предполагаю это, потому что когда вы печатаете в picture.png, он вызывает просмотрщик изображений по умолчанию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top