Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Пользователь


Сообщения: 91
Благодарности: 7

Профиль | Сайт | Отправить PM | Цитировать


Цитата 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", пожалуйста!

Отправлено: 17:37, 16-01-2012 | #630