Delphi как удалить программу

Скачать программу Установка и удаление программ (исходники на Delphi + exe)

В Панели управления Windows находится апплет «Установка и удаление программ». Название говорит само за себя: с помощью этого апплета мы удаляем и устанавливаем программы. Давайте посмотрим, как он работает. При загрузке апплет читает все ключи из раздела реестра HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionUninstall (именно в этот раздел прописываются сведения об разинсталлировании программ).

Из каждого ключа читается параметр DisplayName (для системных приложений – QuietDisplayName) и отображается его значение. Если пользователь нажал «Добавить/удалить. «, то из параметра UninstallString считывается и выполняется командная строка.

А теперь реализуем нечто подобное в Delphi, но с некоторыми отличиями: добавим возможность удаления сведений о программе из реестра (если она была удалена «вручную») и удаления компонентов Windows (в «Удаление и установка программ» для этого нужно перейти на закладку «Установка Windows»).

Delphi самоудаление программы

Создайте новый проект и разместите на форме три кнопки (TButton) и ListBox: TListBox как показано на рисунке 1:

В разделе Var несколько глобальных переменных:

var
Reg: TRegistry; //для работы с реестром
PathList: TStrings; //командные строки
DirList: TStrings; //»отфильтрованные» ключи реестра

Для события формы OnShow запишите процедуру:
procedure TForm1.FormShow(Sender: TObject);
var
i: Integer;
//список ключей раздела /Uninstall
StrList: TStrings;
a, b: String;
begin
//создаем объекты для хранения строк
StrList := TStringList.Create;
//очищаем ListBox
ListBox1.Clear;
//создаем объект для работы с реестром
reg := TRegistry.Create;
//будем работать в разделе реестра HKEY_LOCAL_MACHINE
reg.RootKey := Windows.HKEY_LOCAL_MACHINE;
//открываем нужный ключ реестра
reg.OpenKey(‘SoftwareMicrosoftWindowsCurrentVersionUninstall’, False);
//получаем все подразделы этого ключа
reg.GetKeyNames(StrList);
for i := 0 to StrList.Count — 1 do
begin
reg.CloseKey;
//перебираем все подразделы
reg.OpenKey(‘SoftwareMicrosoftWindowsCurrentVersionUninstall’+strlist[i], False);
//читаем из каждого раздела параметр DisplayName
a := reg.ReadString(‘DisplayName’);
//если а — пустая строка, то читаем параметр QuietDisplayName
if (a = ») then
a := reg.ReadString(‘QuietDisplayName’);
//если a снова пуста, то записываем в нее имя подраздела
if (a = ») then
a := StrList[i];
//читаем командную строку для запуска Uninstall
b := reg.ReadString(‘UninstallString’);
//если b — пустая строка, то читаем параметр QuietUninstallString
if (b = ») then
b := reg.ReadString(‘QuietUninstallString’);
//если строка b не пустая, то добавляем параметры в списки: имя ключа, название программы, командная строка

Читайте также:
Пример тестирования на программу 1 3

Как полностью удалить программу


if (b <> ») then
begin
ListBox1.Items.Add(a);
PathList.Add(b);
DirList.Add(StrList[i]);
end;
end;
//уничтожаем объект reg
reg.Free;
end;

При показе формы в ListBox’е отобразятся доступные для удаленияустановки программы. Теперь для кнопки «Удалить программу» запишите процедуру для события OnClick:

procedure TForm1.Button1Click(Sender: TObject);
var
si: TStartupInfo;
p: TProcessinformation;
//командная строка
exe: String;
begin
//если в ListBox’e выделена строка, то продолжаем
if (ListBox1.ItemIndex = -1) then
exit;
//получаем командную строку для выбранного элемента
exe := PathList.Strings[ListBox1.ItemIndex];
//сворачиваем окно нашей программы, запускаем командную строку,
//дожидаемся завершения удаленияустановки приложения и восстанавливаем окно нашей программы
FillChar( Si, SizeOf(Si), 0);
with Si do
begin
cb := SizeOf(Si);
dwFlags := startf_UseShowWindow;
wShowWindow := 4;
end;
Application.Minimize;
Createprocess(nil,pchar(copy(exe, pos(‘;’,exe)+1, length(exe))), nil, nil, false,
Create_default_error_mode, nil, nil, si, p);
Waitforsingleobject(p.hProcess, infinite);
Application.Restore;
//обновляем данные об установкеудалении программ
Form1.OnShow(Self);
end;

Событие OnClick кнопки «Удалить из списка»:
procedure TForm1.Button2Click(Sender: TObject);
var
Dir: String; //имя ключа
begin
//если в ListBox’e выбран какой-нибудь элемент, то продолжаем
if (ListBox1.ItemIndex = -1) then
exit;
//получаем имя ключа, который нужно удалить
Dir := DirList[ListBox1.ItemIndex];
//удаляем нужный ключ
reg := TRegistry.Create;
reg.RootKey := Windows.HKEY_LOCAL_MACHINE;
reg.OpenKey(‘SoftwareMicrosoftWindowsCurrentVersionUninstall’, False);
reg.DeleteKey(Dir);
reg.Free;
//удаляем из ListBox’a выбранный элемент
ListBox1.Items.Delete(ListBox1.ItemIndex);
end;

Основная часть на этом завершена. Теперь осталось добавить несколько мелочей для повышения удобства при работе с программой:

  1. Выделите кнопку «Обновить» и на вкладке Events Инспектора объектов, напротив события OnShow из раскрывающегося списка выберите процедуру FormShow.
  2. Таким же образом для события OnDblClick ListBox’a выберите процедуру Button1Click. Теперь при двойном щелчке мыши по выбранной программе, для неё запустится Uninstall.
  3. Для события OnKeyPress ListBox’a запишите процедуру:
    procedure TForm1.ListBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin
    //если нажата клавиша Delete, то удаляем информацию о выбранной программе из реестра
    if (Key = VK_DELETE) then
    Button2.OnClick(self);
    end;

Действия при создании и закрытии формы:
procedure TForm1.FormCreate(Sender: TObject);
begin
//создаем объекты для хранения строк
DirList := TStringList.Create;
PathList := TStringList.Create;
end;

Читайте также:
Как пишется правильно программа

procedure TForm1.FormDestroy(Sender: TObject);
begin
DirList.Free;
PathList.Free;
end;

    Вот и всё. Предложения по поводу тем следующих статей этого цикла присылайте мне по E-mail.
    Новое в Delphi FAQ:
    Как скачать файл из Интернета?
    Как открыть ссылку в текущем окне IE?

Источник: subscribe.ru

Delphi как удалить программу

Все привет. Собственно ситуация. Получаю я список установленных программ на компьютере и заношу их в ListBox. Делаю это я вот так (код в инете нашел):

var MyRegistry: TRegistry; i: Integer; Str: string; begin MyRegistry:=TRegistry.Create; MyList:=TStringList.Create; with MyRegistry do begin RootKey:=HKEY_LOCAL_MACHINE; if OpenKey(‘SoftwareMicrosoftWindowsCurrentVersionUninstall’, False)=True then GetKeyNames(MyList); CloseKey; for i:=0 to MyList.Count-1 do begin RootKey:=HKEY_LOCAL_MACHINE; OpenKey(‘SoftwareMicrosoftWindowsCurrentVersionUninstall’+ MyList[i], False); Str:=ReadString(‘DisplayName’); if Str<>» then ListBox1.Items.Add(ReadString(‘DisplayName’)); CloseKey; end; end;

А вот терь вопрос, как мене удалить программу с компа, которая была выбрана в ListBox?(Например — произвести удаление так, как удаляют при помощи Установка/Удаление программ)
Может быть функция для этого есть какая то?

Будь проще и люди к тебе потянутся
Капсула от спама
Форумчанин
Регистрация: 04.03.2008
Сообщений: 779

Ну для начала побробывать запустить деинсталлятор который есть почти в каждом комплекте, он кстати наверняка прописан в реестре. Или уже просто узнаем путь проги и ищем файл с шаблоном *uninstall* и тд и запускаем его
Если нет — самому все это делать, удалять файлы, чистить реестр.

Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru — бесплатный файловый хостинг

Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
Там рядом с параметром DisplayName лежит параметр UninstallString

Участник клуба
Регистрация: 19.01.2009
Сообщений: 1,442

Вот, чуть переделал )

procedure TForm1.FormCreate(Sender: TObject); var i : Integer; str: string; Reg : TRegistry; List : TStringList; begin Reg := TRegistry.Create; List := TStringList.Create; with Reg do begin RootKey := HKEY_LOCAL_MACHINE; if OpenKey(‘SoftwareMicrosoftWindowsCurrentVersionUninstall’, False)=True then GetKeyNames(List); for i := 0 to List.Count -1 do begin OpenKey(‘SoftwareMicrosoftWindowsCurrentVersionUninstall’ + List[i], False); Str:= ReadString(‘DisplayName’); if Str<>» then ListBox1.Items.Add(ReadString(‘DisplayName’)); ListBox2.items.Add(ReadString(‘UninstallString’)); CloseKey; end; Reg.Free; List.Free; end; end;
Применение:
procedure TForm1.ListBox1DblClick(Sender: TObject); begin WinExec(PcHar(ListBox2.Items[ListBox1.ItemIndex]),SW_NORMAL); end;
Software Developer
Регистрация: 19.12.2008
Сообщений: 2,070

Читайте также:
Программа клиент тк инструкция по применению

Спасибо. Только есть одно но — параметр UninstallString для некоторых программ пустой. Из-за этого происходит удаление не той программы.
Вот попытался переделать не много код uberchel, но все равно, при выборе программы удаляет не ее, а какую то другую.

procedure TForm1.Button1Click(Sender: TObject); var i : Integer; str, str1: string; Reg : TRegistry; List : TStringList; begin Reg := TRegistry.Create; List := TStringList.Create; with Reg do begin RootKey := HKEY_LOCAL_MACHINE; if OpenKey(‘SoftwareMicrosoftWindowsCurrentVersionUninstall’, False)=True then GetKeyNames(List); for i := 0 to List.Count -1 do begin OpenKey(‘SoftwareMicrosoftWindowsCurrentVersionUninstall’ + List[i], False); Str:= ReadString(‘DisplayName’); if Str = » then str:= ReadString(‘QuietDisplayName’); //if str = » then //str := List[i]; if str <> » then ListBox1.Items.Add(str); str1:= ReadString(‘UninstallString’); if str1 = » then str1:= ReadString(‘QuietUninstallString’); if str1 <> » then ListBox2.Items.Add(str1); CloseKey; end; Reg.Free; List.Free; end;
Может у кого-то есть какие-то идеи исправить это.
Будь проще и люди к тебе потянутся

Источник: www.programmersforum.ru

Delphi как удалить программу

Не хочу для этого программы использовать — не умею ими пользоваться. Недавно установил программу по скрытию папок и у меня сбой произошёл.
Хочу скрыть Delphi из Установка и удаление программ средствами самого Office.
Хотелось бы всё-таки узнать, почему другие программы удаётся скрыть, изменив свойства ключей, приведенных мной выше, а вот Delphi такой особенный.

Всё скрыл. По всем ключам прошёлся, содержащим название программы и исчезло.

В этой ветке удалил свойство ProductName
HKEY_CLASSES_ROOTInstallerProducts350362271D058 954592015DE465EC415

———- Добавлено в 08:49 ———- Предыдущее сообщение было написано в 08:34 ———-

А это как ключики из Реестра удалите через Поиск, так сразу и исчезнет и в Удалении программ

да ты был прав, надо было и по другим ключам пройтись. Только ты когда даёшь советы по удалению ключей, сначала пиши: сначала экспортируйте ключ, а потом его удаляйте. И зачем ключи удалять? Можно же их свойства менять.

Источник: pchelpforum.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru