[setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}
OutputDir=.
[Languages]
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"
[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(DisplayName), Lowercase(Param)) > 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('AutoCad');
end;