Cześć, słuchajcie czy aby obsłużyć dodaj/usuń programy w delphi wystarczy odpowiedni wpis w rejestrze? Mam taką procedurę, która dodaje wpis w rejestrze i wszystko jest ok:
procedure dodaj;
var
Registry: TRegistry;
begin
Registry := TRegistry.Create;
try
Registry.RootKey := HKEY_LOCAL_MACHINE;
Registry.CreateKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa_programu\');
Registry.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa_programu\', True);
Registry.WriteString('DisplayIcon', 'Lokalizacja_deinstalatora, 0');
Registry.WriteString('DisplayName', 'Nazwa_programu');
Registry.WriteString('DisplayVersion', 'wersja');
Registry.WriteString('InstallLocation', 'Lokalizacja_programu');
Registry.WriteString('UninstallString', '"Lokalizacja_deinstalatora"');
Registry.WriteInteger('EstimatedSize', Rozmiar_w_bajtach);
Registry.WriteInteger('NoModify', 1);
Registry.WriteInteger('NoRepair', 1);
Registry.CloseKey;
except
Error_code := 4;
...
end;
Registry.Free;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
Ale mam też taką do usuwania i już nie jest ok, po prostu niekiedy nie usuwa klucza, pomimo, że do programu dodany jest manifest, który wymusza tryb admina. W dodatku polecenie SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil); w Windows Vista i 7 odświeża tylko listę po odinstalowaniu, natomiast nie odświeża tego paska na dole z informacjami. Kod do usuwania:
procedure usun;
var
Registry: TRegistry;
begin
try
Registry := TRegistry.Create;
Registry.RootKey := HKEY_LOCAL_MACHINE;
Registry.DeleteKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Nazwa_programu\');
Registry.CloseKey;
finally
Registry.Free;
end;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
Ktoś jeszcze wie coś więcej na temat dodaj/usuń programy i jak odświeżyć ten pasek informacyjny na dole okna w Win Vista i 7?