Цитата El Sanchez:
TROY Diamond, искать надо по значению ключа DisplayName. Пример (ищем Inno Setup QuickStart Pack, чтобы удалить)
|
Спасибо Вам большое!!!
Подскажите, пожалуйста, а как добавить в этот код несколько вариантов названия приложения:
читать дальше »
Код:

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;
В Вашем примере ТОЛЬКО ОДИН ВАРИАНТ: "Inno Setup QuickStart Pack", а если приложение будет называться как-нибудь по-другому?
Например, "Inno Setup QuickStart Pack v." или "Inno Setup QuickStart Pack (Сборка такая-то...)" "Inno Setup QuickStart Pack от Васи Пупкина..." и т.п.
Куда и как записать все возможные варианты названия этого приложения?
Мне нужно, чтобы при запуске моего установщика, находилось это же приложение, - если оно было установлено, как чужими, так и моим инсталлятором. КАК БЫ ОНО НЕ НАЗЫВАЛОСЬ (Все варианты названий, я напишу... Вы главное скажите куда и как)!!!
Дайте, кто-нибудь полный скрипт с использованием значения "AppMutex", пожалуйста!