Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2009, 00:09   #1
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию Деинсталляция программы при помощи Делфи.

Все привет. Собственно ситуация. Получаю я список установленных программ на компьютере и заношу их в 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('Software\Microsoft\Windows\CurrentVersion\Uninstall',
            False)=True then GetKeyNames(MyList);
            CloseKey;

            for i:=0 to MyList.Count-1 do
               begin
               RootKey:=HKEY_LOCAL_MACHINE;
               OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall\'+
               MyList[i], False);
               Str:=ReadString('DisplayName');
               if Str<>'' then
               ListBox1.Items.Add(ReadString('DisplayName'));
               CloseKey;
               end;
              end;
А вот терь вопрос, как мене удалить программу с компа, которая была выбрана в ListBox?(Например - произвести удаление так, как удаляют при помощи Установка/Удаление программ)
Может быть функция для этого есть какая то?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 17.07.2009, 02:32   #2
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Ну для начала побробывать запустить деинсталлятор который есть почти в каждом комплекте, он кстати наверняка прописан в реестре. Или уже просто узнаем путь проги и ищем файл с шаблоном *uninstall* и тд и запускаем его
Если нет - самому все это делать, удалять файлы, чистить реестр.
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 17.07.2009, 03:51   #3
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Там рядом с параметром DisplayName лежит параметр UninstallString
Black Fregat вне форума Ответить с цитированием
Старый 17.07.2009, 03:52   #4
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

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

Код:
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('Software\Microsoft\Windows\CurrentVersion\Uninstall',
   False)=True then GetKeyNames(List);
   for i := 0 to List.Count -1 do begin
   OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall\'
   + 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;
uberchel вне форума Ответить с цитированием
Старый 17.07.2009, 12:07   #5
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 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('Software\Microsoft\Windows\CurrentVersion\Uninstall',
   False)=True then GetKeyNames(List);
   for i := 0 to List.Count -1 do begin
   OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall\'
   + 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;
Может у кого-то есть какие-то идеи исправить это.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Иморт данных из SQL в Excel при помощи QueryTable VBS, Иморт данных из SQL в Excel при помощи QueryTable Valdocco Microsoft Office Excel 1 16.07.2009 21:50
Проблема при открытии базы при помощи ADO SlavaSH БД в Delphi 21 30.06.2009 16:51
Очень прошу помощи в составлении программы. heavenboy Паскаль, Turbo Pascal, PascalABC.NET 0 04.12.2008 20:09
Прошу помощи в написании программы на языке СИ. PontiyPilat Общие вопросы C/C++ 0 12.10.2008 20:22
Прошу помощи в делфи sergeyfsd Помощь студентам 5 23.05.2008 20:39