Ветеран
Сообщения: 1264
Благодарности: 1024
|
Профиль
|
Отправить PM
| Цитировать
Цитата TROY Diamond:
Мне нужно, чтобы мой установщик при запуске находил уже ранее установленное приложение, НЕ только моим, НО и другими установщиками »
|
TROY Diamond, искать надо по значению ключа DisplayName. Пример (ищем Inno Setup QuickStart Pack, чтобы удалить):
читать дальше »
Код:
[code]
function argv(Param: String): TArrayOfString;
begin
SetArrayLength(Result, 2);
case Param[1] of
'"': begin
Result[0] := Copy(Param, 2, Pos('.exe', Lowercase(Param))+2);
Result[1] := RemoveQuotes(Trim(Copy(Param, Length(Result[0])+3, Length(Param))));
end;
else
begin
Result[0] := Copy(Param, 1, Pos('.exe', Lowercase(Param))+3);
Result[1] := RemoveQuotes(Trim(Copy(Param, Length(Result[0])+1, Length(Param))));
end;
end;
end;
function GetInstalledProgramm(Param: String): Boolean;
var
Names, cl: TArrayOfString;
i, ResultCode: Integer;
DisplayName, UninstallString: String;
begin
if RegGetSubkeyNames(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall', Names) then for i := 0 to GetArrayLength(Names)-1 do
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + Names[i], 'DisplayName', DisplayName);
if Pos(Lowercase(Param), Lowercase(DisplayName)) > 0 then
begin
Result := True;
if MsgBox('Программа установки обнаружила уже установленную программу ' + DisplayName + '.'#13#10'Вы желаете предварительно удалить ее?', mbInformation, MB_YESNO) = idYes then
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + Names[i], 'UninstallString', UninstallString) then
begin
cl := argv(UninstallString);
if not Exec(cl[0], cl[1], '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then
MsgBox('Ошибка удаления.'#13#10'' + SysErrorMessage(ResultCode) + '.'#13#10'Вероятно, деинсталлятор был перемещен, удален или переименован.', mbError, MB_OK);
end;
end;
Break;
end;
end;
end;
procedure InitializeWizard();
begin
GetInstalledProgramm('Inno Setup QuickStart Pack');
end;
|
Отправлено: 00:11, 01-01-2012
|