WINAPI - uninstall

0

na ofrmie jest button
po jego kliknieciu ma sie odinstalwoac proram
tak jak po kliknieciu usun w dodaj/usun programy

jak to z robic jakia fiunkcje z winapi wywolac czy moze cos inengo

0

Blech.. Po prostu musisz uruchomic program odinstalowujący, który sie znajduje przeważnie w folderze głównynm tego czegoś, co chcesz usunąć. Jak nie wiesz, jak uruchamiać programy, zobacz w FAQ... :)

0

Witam
Chyba nie ma funkcji WinApi, która to za Ciebie zrobi. Rzecz sprowadza sie do dwóch etapów:

  1. Trzeba poszukać odpowiedniego wpisu w rejestrze Windows
    Wpisy dotyczące zainstalowanych programów znajdują się w:
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall
    Gdy już znajdziesz odpowieni klucz to odczytujesz wartość QuietUninstallString
    (dla deinstalcji cichej - może nie istnieć) lub UninstallString (dla deinstalcji normalnej)
  2. Uruchamiasz np. za pomocą ShelExecute deinstalator (nazwę deinstalatora i
    prametry zawiera odczytana wcześniej wartość.
    Pozdrawiam
0

lzuik
ale jak pobrac wartosc klucza

uninstall string jesli nie znam wczesniejszego klucza
zapisanego np ciaglem liter i cyfr

a znam wartosc np klucza publisher

0

Witam

soki1981 napisał(a)

lzuik
ale jak pobrac wartosc klucza

uninstall string jesli nie znam wczesniejszego klucza
zapisanego np ciaglem liter i cyfr

a znam wartosc np klucza publisher

Można napisać sobie np. taką funkcję:

type
  TAppInfo = record
    DisplayName: string;
    UninstallString: string;
    QuietDisplayName: string;
    QuietUninstallString: string;
  end;


//Do uses dodaj Registry
function GetUninstallInfoByAppName(var AppInfo: TAppInfo): Boolean;
var
  Reg: TRegistry;
  KeyNamesList: TStringList;
  i: integer;
begin
  result:= False;
  Reg:= TRegistry.Create;
  KeyNamesList:= TStringList.Create;
  try
    Reg.RootKey:= HKEY_LOCAL_MACHINE;
    Reg.OpenKeyReadOnly('\Software\Microsoft\Windows\CurrentVersion\Uninstall');
    Reg.GetKeyNames(KeyNamesList);
    Reg.CloseKey;
    for i:=0 to KeyNamesList.Count - 1 do
    begin
      Reg.OpenKeyReadOnly('\Software\Microsoft\Windows\CurrentVersion\Uninstall\'
             + KeyNamesList[i]);
      if Reg.ValueExists('DisplayName')then
      begin
        if lstrcmpi(PChar(Reg.ReadString('DisplayName')),
                         PChar(AppInfo.DisplayName)) = 0 then
        begin
          if Reg.ValueExists('UninstallString') then
          begin
            AppInfo.UninstallString:= Reg.ReadString('UninstallString');
            result:= True;
          end;
        end;
      end;
      if Reg.ValueExists('QuietDisplayName')then
      begin
        if lstrcmpi(PChar(Reg.ReadString('QuietDisplayName')),
                    PChar(AppInfo.QuietDisplayName)) = 0 then
        begin
          if Reg.ValueExists('QuietUninstallString') then
          begin
            AppInfo.QuietUninstallString:= Reg.ReadString('QuietUninstallString');
            result:= True;
          end;
        end;
      end;
      Reg.CloseKey;
      if result = True then
        break;
    end;
  finally
    KeyNamesList.Clear;
    KeyNamesList.Free;
    Reg.Free;
  end;
end;

A to masz przykład użycia:

var
  AppInfo: TAppInfo;
begin
  AppInfo.DisplayName:= 'FTP Now'; //Tu wpisz nazwę programu
  AppInfo.UninstallString:= ''; //Tu zostanie zwrócona ścieżka i ew. parametry deinstalcji
  AppInfo.QuietDisplayName:= 'FTP Now'; //Tu wpisz nazwę programu
  AppInfo.QuietUninstallString:= ''; //Tu zostanie zwrócona ścieżka i ew. parametry deinstalcji cichej jeżeli przewidziano taką możliwość
    if GetUninstallInfoByAppName(AppInfo) then
  begin
    if Length(AppInfo.UninstallString) > 0 then
      ShowMessage(AppInfo.DisplayName + #13#10 + AppInfo.UninstallString)
    else
      ShowMessage(AppInfo.QuietDisplayName + #13#10 + AppInfo.QuietUninstallString)
  end
  else
    ShowMessage('Nie znaleziono aplikacji')
end;

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1