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

54
задан Stein Åsmul 22 April 2014 в 13:23
поделиться

6 ответов

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

Long: То, когда Вы выполняете файл MSI непосредственно в командной строке, все, что это происходит, - то, что это выполняет MSIEXEC для Вас. Эта ассоциация хранится в реестре. Вы видите список ассоциаций (в Windows Explorer) идущий в Инструменты / Опции Папки / Типы файлов.

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

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

48
ответ дан Roger Lipscombe 7 November 2019 в 07:34
поделиться

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

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

3
ответ дан Peter Mortensen 7 November 2019 в 07:34
поделиться

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

-1
ответ дан smack0007 7 November 2019 в 07:34
поделиться

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

msiexec /x filename.msi /q 
1
ответ дан Peter Mortensen 7 November 2019 в 07:34
поделиться

There are many ways to uninstall an MSI package. This is intended as a "reference".

In summary you can uninstall via: msiexec.exe, ARP, WMI, PowerShell, Deployment Systems such as SCCM, VBScript / COM Automation, DTF, or via hidden Windows cache folder, and a few other options presented below.

The first few paragraphs provide important MSI tidbits, then there are 14 sections with different ways to uninstall an MSI file. Puh.

"Babble, Babble - Over": Sections 1, 2 and 3 are the normal uninstall approaches (and hence recommended). Personally I use option 3 or 5 from section 3 (both options with logging, but option 5 runs silently также). Если вы очень заняты , пропустите всю болтовню и выберите одну из них - он выполнит свою работу.


Если у вас проблемы с удалением вообще и вы ищете альтернативу устаревшей MsiZap.exe и / или Windows Installer CleanUp Utility ( MSICUU2.exe ), вы можете попробовать новый инструмент FixIt от Microsoft ( или международную страницу ). Очевидно, может работать и для других проблем с установкой.


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


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


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


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


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


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


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


1. Использование исходного MSI

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

2. Использование старого апплета ARP ИЛИ нового интерфейса настроек Windows 8/10

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

    • ARP = Апплет «Установка и удаление программ» ( appwiz.cpl )
    • Интерфейс настроек Windows 10 => Новая оболочка для той же операции
  • ARP :

    • Перейти start запустите appwiz.cpl ENTER , чтобы открыть апплет добавления / удаления программ (или щелкните «Добавить / удалить программы» на панели управления)
    • Нажмите « Удалить » для продукта, который вы хотите удалить
  • Интерфейс настроек (Windows 8/10):

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

3. Использование командной строки msiexec.exe (напрямую или с помощью командного файла)

  • Вы можете удалить с помощью командной строки ( cmd.exe ), командный файл или даже из исполняемого файла как операция оболочки .
  • Вы делаете это, передавая GUID продукта (проверьте ниже, как найти этот 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 = запустить последовательность удаления
       / QN = работать без звука
       / L * V "C: \ msilog.log" = подробное ведение журнала по указанному пути
       {11111111-1111-1111-1111-11111111111X} = руководство по продукту приложения для удаления
       REBOOT = R = предотвратить неожиданную перезагрузку компьютера
      

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

  • Главный совет : Если вы создайте файл журнала для удаления, вы можете найти проблемы в журнале, выполнив поиск «значение 3» . Это особенно полезно для подробных файлов, потому что они такие, ну, многословные: -).

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

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

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

4. Использование кэшированной базы данных MSI в папке суперскрытого кэша

  • MSI удаляет все кабины (более старые версии Windows) и кэширует каждый установленный MSI в суперскрытой системной папке по адресу % SystemRoot% \ Installer (вам нужно показать скрытые файлы, чтобы увидеть это).
  • NB : эта скрытая для ужина папка теперь обрабатывается по-другому в 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. Использование PowerShell

    get-wmiobject Win32_Product | Format-Table Name, LocalPackage -AutoSize

Enter image description here


5. Использование PowerShell

    get-wmiobject Win32_Product | Format-Table Name, LocalPackage -AutoSize

Enter image description here


5. Использование PowerShell

  • Существует аналогичный, но более полный сценарий PowerShell, доступный на MSDN . Это позволяет запускать удаление на нескольких машинах.
  • Запись добавлена ​​Эвеном Мьеном:

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

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

6. Использование. NET DTF Class Library (часть инструментария WiX )

    using Microsoft.Deployment.WindowsInstaller;

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

7. installer.InstallProduct "product.msi", "REMOVE = ALL REBOOT = ReallySuppress" Установить установщик = ничего
  • Вот еще один сценарий VBScript для удаления по GUID от Symantec: http://www.symantec.com/connect/downloads/uninstall-application-using-guid-registry

  • Удаление с помощью кода обновления и ConfigureProduct .


  • 8. Использование основного обновления установщика Windows

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

    9. Использование систем развертывания / систем удаленного администрирования

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

    10. Использование WMI - инструментарий управления Windows

  • Средство создания кода WMICodeCreator.exe можно использовать для экспериментов и он может также вызвать восстановление программного обеспечения . См. Эту статью: Сценарий удаления Powershell - настоящая головная боль
  • Хуже того, некоторые люди сообщают, что их журналы событий заполняются записями MsiInstaller EventID 1035 - очевидно, это вызвано запросами WMI к классу Win32_Product (лично я никогда такого не видел).
  • Средство создания кода WMICodeCreator.exe можно использовать для экспериментов
    • Install can be invoked via Win32_Product.Install
    • Uninstall can be invoked via Win32_Product.Uninstall
  • MSDN sample: Uninstall method of the Win32_Product class

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

    • Several Windows applications feature their own interface for uninstalling not just MSI packages, but legacy installers too.
    • I don't want to make any specific tool recommendations here (especially commercial ones), but the well known CCleaner features such an uninstall interface (and it has a free version). I should also add that this tool suffered a malware attack recently.
    • I guess we should all remember that even harmless software can be injected with malware in their download locations (FTP attack).
      • I use virustotal.com to check my downloads, and also Sysinternals Process Explorer to check running processes after installation - along with regular security software (whichever is available).
      • A surprising amount of "gray area" software is usually found with this approach (toolbars, smileys, adware, etc...), along with several false positives (they can also cause problems as security software block their access or quarantines them making a lot of fuzz). And certainly real malware as well.
      • Some usage tips for Process Explorer can be found here - a series of tweets - this Process Explorer tool hooks up to VirusTotal.com to check all running processes interactively - all you need is a few configuration steps.
      • I should note that Process Explorer yields a file signature check, but no heuristics - as far as I understand (no check for suspicious operations, just a check with 60+ security suites for flagged files). You need a regular security tool for interactive, online heuristic protection.
      • For what it is worth, I think some security software border on causing more false-positive problems than malware does damage. Famous last words in the era of ransom-ware...
      • That is a large enough digression - I just don't want to see people download malware. Do your virustotal.com check at least.
    • Uninstalling like this should work OK. I think these tools mess with too many things when you try their "cleanup features" though. Use with caution. If you only use the uninstall feature, you should be OK.

    12. Using a cleanup tool such as msizap or similar

    • For completeness msizap.exe should be mentioned though it is deprecated, unsupported and outdated. It should not be used on any newer Windows versions
    • This command line tool (msizap.exe) also had a GUI available (MSICUU2.exe). Both tools are deprectated.
    • The intended use of these tools was to clean out failing uninstalls:
    • Generally for the rare case when the cached MSI with the random name is erroneously missing and uninstall fails for this reason whilst asking for the original MSI. This is a rare problem, but I have seen it myself. Just a few potential causes: Moved to this answer.
      • Ключевые слова: вмешательство при восстановлении системы, плохие приложения для очистки, сбой msiexec.exe, отключение питания, вмешательство в программное обеспечение безопасности, ошибки при отладке при разработке MSI (идентичные коды пакетов и т. Д.), Вмешательство пользователя и взлом (что здесь ? сэкономить место?) и т. д.
      • Его также можно использовать для запаивания любой установки MSI, хотя это явно не рекомендуется.
      • Дополнительная информация: Почему MSI требует исходный файл .msi для продолжения удаления?
    • Этот новый инструмент поддержки (этот инструмент теперь также устарел) можно попробовать в последних версиях Windows, если у вас есть несуществующие пакеты MSI, которые необходимо удалить.
    • Некоторые предлагают использовать инструмент, ссылка на который приведена здесь saschabeaumont: Удаление без файла MSI . Если вы попробуете, и он сработает, сообщите нам об этом.
    • Если у вас есть доступ к исходному MSI-файлу, который фактически использовался для установки продукта, вы можете использовать его для запуска удаления. Это должен быть именно тот MSI, который использовался, а не просто аналогичный.

    13. Использование восстановления системы («отмена установки» - последнее средство ИМХО)

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

    14. Функции установщика Windows (C ++)

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

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

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

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

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

      • Остерегайтесь изменений шаблонов по умолчанию в VS2017 и странных ошибок, которые могут привести: Слишком много ошибок для правильной работы механизма IntelliSense .
      • ОБНОВЛЕНИЕ Сентябрь 2018 г. : шаблоны снова изменились. Я больше не вижу вышеуказанной проблемы.
      • Ссылка MSDN в коде содержит список возможных сообщений об ошибках, возвращаемых msiexec.exe.
    147
    ответ дан 7 November 2019 в 07:34
    поделиться

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

    WMIC Product Get Name -> Это перечисляет имена всех установленных приложений

    WMIC Откуда name = 'myAppsname' call unnstall -> Это удалит приложение.

    31
    ответ дан 7 November 2019 в 07:34
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: