Скачать программу Установка и удаление программ (исходники на 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 не пустая, то добавляем параметры в списки: имя ключа, название программы, командная строка
Как полностью удалить программу
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;
Основная часть на этом завершена. Теперь осталось добавить несколько мелочей для повышения удобства при работе с программой:
- Выделите кнопку «Обновить» и на вкладке Events Инспектора объектов, напротив события OnShow из раскрывающегося списка выберите процедуру FormShow.
- Таким же образом для события OnDblClick ListBox’a выберите процедуру Button1Click. Теперь при двойном щелчке мыши по выбранной программе, для неё запустится Uninstall.
- Для события 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