Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с "Установка и удаление"
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Unconnected
Привет всем. Ситуация: на компьютере установлено приложение, нужно каким-то образом запустить его удаление\изменение через стандартный msi-деинсталлер. Я так понял, нужно получить список программ (который в Установке и удалении) и получить некий id проги(вроде какое-то длинное значение из реестра), и запустить деинсталлер с этим id и параметрами. Проблема в том, как найти нужное.. точное название программы вбить не удастся, т.к. могут быть разные версии (отражаются в названии), но можно опознавать по фрагменту. Через что пытаться вообще?
IUnknown
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Ходишь по всем подпапкам, и оттуда вытягиваешь DisplayName и UninstallString. Как только нашел нужное имя - просто выполняешь строку деинсталляции.
Unconnected
А может быть так, что там не всё? У меня в "Установке-удалении" мнооого всего, а в той ветке около 20 ключей..
IUnknown
Именно в HKLM? Должно быть всё... Если программа корректно выполняет требования MS. Вот согласно этим требованиям каждая программа, устанавливающаяся на компьютер, должна обеспечить занесение в реестр (в ту самую ветку, которую я обозначил выше) информации о себе (см. тут: MSDN : Summary of Install/Uninstall Requirements, пункт 6). Поскольку не все это делают - ты и получаешь то, что получаешь: не все программы фигурируют в списке "Установка/Удаление".

Но вообще-то MS говорит, что даже WMI + Win32_Product не дает гарантированного списка всех приложений, для получения всего, что можно Uninstall-ить, они рекомендуют как раз http://technet.microsoft.com/en-us/library...92772.aspx#EBAA , то есть ту самую ветку реестра...

А можно пример хоть одного приложения, которое есть в списке "Установка/Удаление", но его нет в реестре? И это, проверить никак нельзя, будет оно удаляться, если его выбрать? А то, может, у тебя там пустышки, которые от предыдущих неправильных анинстоллов?
Unconnected
Например KIS, цивильное вроде приложение.. Которые без названий, с цифровыми значениями - проверял, не его.
Хмм, интересно, а на вирте с XP нашёлся.. На севене из "Установки" деинсталлер запускается.
IUnknown
Win7 случайно не 64-битная? Тогда тебе надо еще HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall проверять. Кстати, куст HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall под Win7 тоже может содержать полезную информацию.

В WinXP всё то, что в Семерке размазано по трем веткам, хранится в одной...
Unconnected
Ого себе.. да, 64-битная. А на 32-битной семерке не так? blink.gif И ещё, если прога на моей машине пишется в HKCU, то это значит, что на другой машине она тоже именно туда запишется? Или может в другие размазанные ветки случайным образом запилиться..
IUnknown
Цитата
А на 32-битной семерке не так?
Нет, не так. Если ты устанавливаешь 32-битное приложение на 32-битную ОС, оно занесет (я надеюсь) данные о себе в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall, ибо сложно себе представить, что антивирус будет ставиться для одного пользователя, а не для всех.
Цитата
если прога на моей машине пишется в HKCU, то это значит, что на другой машине она тоже именно туда запишется?
Вообще-то в грамотно написанном приложении должен учитываться тип установки. Если выбрано "установить только для текущего пользователя" - то оно пишет в HKCU. Если "для всех пользователей" - то в HKLM. Ну, а если нет возможности выбора типа установки - то скорее всего подразумевается только один тип всегда, и если у тебя записалось в HKCU, то скорее всего и на других машинах будет так же.
Unconnected
Спасибо, помогло всё) Эхх сколько же я таких тонкостей упускаю..(
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.