Привет всем. Ситуация: на компьютере установлено приложение, нужно каким-то образом запустить его удаление\изменение через стандартный msi-деинсталлер. Я так понял, нужно получить список программ (который в Установке и удалении) и получить некий id проги(вроде какое-то длинное значение из реестра), и запустить деинсталлер с этим id и параметрами. Проблема в том, как найти нужное.. точное название программы вбить не удастся, т.к. могут быть разные версии (отражаются в названии), но можно опознавать по фрагменту. Через что пытаться вообще?
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Ходишь по всем подпапкам, и оттуда вытягиваешь DisplayName и UninstallString. Как только нашел нужное имя - просто выполняешь строку деинсталляции.
А может быть так, что там не всё? У меня в "Установке-удалении" мнооого всего, а в той ветке около 20 ключей..
Именно в HKLM? Должно быть всё... Если программа корректно выполняет требования MS. Вот согласно этим требованиям каждая программа, устанавливающаяся на компьютер, должна обеспечить занесение в реестр (в ту самую ветку, которую я обозначил выше) информации о себе (см. тут: http://msdn.microsoft.com/en-us/library/ms954376.aspx, пункт 6). Поскольку не все это делают - ты и получаешь то, что получаешь: не все программы фигурируют в списке "Установка/Удаление".
Но вообще-то MS говорит, что даже WMI + Win32_Product не дает гарантированного списка всех приложений, для получения всего, что можно Uninstall-ить, они рекомендуют как раз http://technet.microsoft.com/en-us/library/ee692772.aspx#EBAA , то есть ту самую ветку реестра...
А можно пример хоть одного приложения, которое есть в списке "Установка/Удаление", но его нет в реестре? И это, проверить никак нельзя, будет оно удаляться, если его выбрать? А то, может, у тебя там пустышки, которые от предыдущих неправильных анинстоллов?
Например KIS, цивильное вроде приложение.. Которые без названий, с цифровыми значениями - проверял, не его.
Хмм, интересно, а на вирте с XP нашёлся.. На севене из "Установки" деинсталлер запускается.
Win7 случайно не 64-битная? Тогда тебе надо еще HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall проверять. Кстати, куст HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall под Win7 тоже может содержать полезную информацию.
В WinXP всё то, что в Семерке размазано по трем веткам, хранится в одной...
Ого себе.. да, 64-битная. А на 32-битной семерке не так? И ещё, если прога на моей машине пишется в HKCU, то это значит, что на другой машине она тоже именно туда запишется? Или может в другие размазанные ветки случайным образом запилиться..
Спасибо, помогло всё) Эхх сколько же я таких тонкостей упускаю..(