После использования msiexec для удаления программы она остается в панели управления (добавление / удаление программ) - PullRequest
0 голосов
/ 14 февраля 2019

Это кажется действительно странным.У меня установлена ​​программа (через установщик WiX), и я пытаюсь удалить ее программно (используя c #), поэтому я использую msiexec.exe / x {product-code-GUID}.Программа удалена, но все равно отображается на панели управления (добавление / удаление программ).Когда я смотрю в реестре, я вижу программу в HKLM \ SOFTWARE \ WOW6432Node \ Microsoft \ Windows \ CurrentVersion \ Uninstall \, но она не находится под GUID, который имеет этот продукт в качестве кода продукта.Это по-видимому случайный GUID, который даже не существует в .msi.Кто-нибудь знает, почему и как я могу сказать, каким будет GUID, чтобы я мог программно удалить его?

Я полагаю, я мог бы установить каждую версию, которую мне нужно удалить, проверить реестр и использовать GUID, который там есть.Это будет работать, но я хочу понять, почему GUID не соответствует коду продукта.


ОБНОВЛЕНИЕ 2-15-19 9:21 PT:

OK - я вошел в системуудаление и вот конец журнала.Похоже, что он успешно завершен, но все еще отображается на панели управления:

MSI (s) (10:E4) [09:16:22:812]: Note: 1: 1724 
MSI (s) (10:E4) [09:16:22:812]: Product: Product Name -- Removal completed successfully.

MSI (s) (10:E4) [09:16:22:812]: Windows Installer removed the product. 
Product Name: Product Name. Product Version: 1.21.4. Product Language: 1033. 
Manufacturer: . Removal success or error status: 0.

MSI (s) (10:E4) [09:16:22:870]: Deferring clean up of packages/files, if any 
exist
MSI (s) (10:E4) [09:16:22:870]: MainEngineThread is returning 0
MSI (s) (10:80) [09:16:22:871]: RESTART MANAGER: Session closed.
MSI (s) (10:80) [09:16:22:871]: No System Restore sequence number for this 
installation.
=== Logging stopped: 2/15/2019  9:16:22 ===
MSI (s) (10:80) [09:16:22:892]: User policy value 'DisableRollback' is 0
MSI (s) (10:80) [09:16:22:892]: Machine policy value 'DisableRollback' is 0
MSI (s) (10:80) [09:16:22:892]: Incrementing counter to disable shutdown. 
Counter after increment: 0
MSI (s) (10:80) [09:16:22:892]: Note: 1: 1402 2: 



HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2 
MSI (s) (10:80) [09:16:22:894]: Note: 1: 2265 2:  3: -2147287035 
MSI (s) (10:80) [09:16:22:894]: Note: 1: 1402 2: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Installer\Rollback\Scripts 3: 2 
MSI (s) (10:80) [09:16:22:894]: Decrementing counter to disable shutdown. If counter >= 0, shutdown will be denied.  Counter after decrement: -1
MSI (s) (10:80) [09:16:22:894]: Post-install cleanup: removing installer file 'C:\Windows\Installer\c8de6843.msi'
MSI (s) (10:80) [09:16:22:896]: Post-install cleanup: removing installer file 'C:\Windows\Installer\{2DE751D3-33F4-4C3E-BD12-63E7F7F0A3C9}\icon.ico'
MSI (s) (10:80) [09:16:22:896]: Post-install cleanup: removing installer folder 'C:\Windows\Installer\{2DE751D3-33F4-4C3E-BD12-63E7F7F0A3C9}\' (if empty)
MSI (s) (10:80) [09:16:22:896]: Note: 1: 2318 2:  
MSI (s) (10:80) [09:16:22:897]: Destroying RemoteAPI object.
MSI (s) (10:B4) [09:16:22:897]: Custom Action Manager thread ending.
MSI (c) (78:7C) [09:16:22:898]: Decrementing counter to disable shutdown. If counter >= 0, shutdown will be denied.  Counter after decrement: -1
MSI (c) (78:7C) [09:16:22:898]: MainEngineThread is returning 0
=== Verbose logging stopped: 2/15/2019  9:16:22 ===

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Решением было запустить C: \ ProgramData \ Package Cache { Product-GUID } \ ProductSetup.exe / uninstall / quiet.Хотя Штейн и не ответил прямо выше, он написал в еще одно сообщение , поэтому я «закрываю» это и отдаю ему должное.

0 голосов
/ 14 февраля 2019

Фактическое решение (после отладки):

Выполнение: C:\ProgramData\Package Cache{Product-GUID}\ProductSetup.exe /uninstall /quiet


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

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

Код продукта : Вы можетенайти коды продуктов и названия продуктов для всех установленных продуктов , используя один из методов, описанных здесь: Как найти GUID продукта с установленной установкой MSI? Возможно, попробуйте использовать однострочную оболочку PowerShell или VBScript.

Откат : обратите внимание, что MSI может откатить удаление, если пользовательское действие завершится неудачно во время выполнения.деинсталляция.Это означает, что откат становится переустановкой или, по крайней мере, восстановлением удаленных файлов.Таким образом, в этом сценарии похоже, что удаление выполнено, но продукт был восстановлен из-за сбоя настраиваемого действия.Таким образом, удаление никогда не «фиксируется».

Удаление : И вот несколько способов удаления пакетов MSI: Удаление файла MSI изкомандная строка без использования msiexec .Когда вы удалите все записи, я ожидаю, что запись ARP исчезнет.Это ваш собственный пакет?Дублирующие установки очень распространены в таких случаях, как побочный продукт циклов быстрого тестирования.


Упакованные GUID : GUID, которые вы найдете в реестре:обычно упакованы или, другими словами, не отформатированы так же, как в MSI.

Пример преобразования GUID:

HKEY_CLASSES_ROOT\Installer\Products

Packed GUID: 0076C0A639AEC2738817CDFC311D064A
Normal GUID: {6A0C6700-EA93-372C-8871-DCCF13D160A4}

Вот более подробная информация:

Последняя ссылка имеет VBScript для преобразования PackedИдентификаторы GUID для обычных идентификаторов GUID.


LocalPackage : при установке MSI во всех системах кэшируется локальный пакет.Он будет расположен в %SystemRoot%\Installer.Вы можете использовать это, чтобы найти файл, и затем вы можете щелкнуть его правой кнопкой мыши в проводнике Windows и выбрать «Удалить».

Идея здесь состоит не в том, чтобы использовать это в качестве основного подхода, а для определенияесли есть скрытый MSI, который вам также нужно удалить, чтобы избавиться от всего, что происходит с ARP.

Вот сценарий VBScript, показывающий путь LocalPackage (создайте файл сценария VB вРабочий стол, сохранение и двойной щелчок. Ищите выходные данные msiinfo.csv - двойной щелчок и импорт в Excel или аналогичный файл или блокнот):

' Retrieve all ProductCodes (with ProductName and ProductVersion)
Set fso = CreateObject("Scripting.FileSystemObject")
Set output = fso.CreateTextFile("msiinfo.csv", True, True)
Set installer = CreateObject("WindowsInstaller.Installer")

output.writeline ("Product Code,Product Name,Product Version,Local Package")

On Error Resume Next ' we ignore all errors

For Each product In installer.ProductsEx("", "", 7)
   productcode = product.ProductCode
   name = product.InstallProperty("ProductName")
   version=product.InstallProperty("VersionString")

   local=product.InstallProperty("LocalPackage")

   output.writeline (productcode & ", " & name & ", " & version & ", " & local)
Next

output.Close

Подобные ответы :

...