Цитата Rostlv:
как проверить версию .Net Framework при установке программы »
|
уже отвечал на похожий вопрос...
Пример
Код:
; определение версии установленного .Net Framework
[Setup]
AppName=NetFramework
AppVerName=NetFramework
DefaultDirName={pf}\NetFramework
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes
VersionInfoCopyright=Serega
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Code]
const
MinNetFrameWork = 'v4.0'; // минимальная версия NetFrameWork
// Возможные версии = 'v1.0', 'v1.1', 'v2.0', 'v3.0', 'v3.5', 'v4.0'
var
url: string;
procedure GetUrlNetFrameWork(ver: string);
begin
// страница загрузок http://www.microsoft.com/downloads/results.aspx?pocId=&freetext=Framework&DisplayLang=ru
case ver of
// по этой ссылке v1.1, т.к. ссылку на v1.0, я не нашёл... раритет... ;)
'v1.0': url := 'http://download.microsoft.com/download/0/8/6/086e7824-ddad-45c0-b765-721e5e28e4c5/dotnetfx.exe';
'v1.1': url := 'http://download.microsoft.com/download/0/8/6/086e7824-ddad-45c0-b765-721e5e28e4c5/dotnetfx.exe';
'v2.0': url := 'http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe';
'v3.0': url := 'http://download.microsoft.com/download/4/d/a/4da3a5fa-ee6a-42b8-8bfa-ea5c4a458a7d/dotnetfx3setup.exe';
'v3.5': url := 'http://download.microsoft.com/download/7/0/3/703455ee-a747-4cc8-bd3e-98a615c3aedb/dotNetFx35setup.exe';
'v4.0': url := 'http://download.microsoft.com/download/1/B/E/1BE39E79-7E39-46A3-96FF-047F95396215/dotNetFx40_Full_setup.exe';
else
url := 'http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe';
end;
end;
function CompareMinVer(const ver: string): Boolean;
var
min_ver: string;
begin
Result := False;
min_ver := MinNetFrameWork;
if (Length(min_ver) > 2) and (Length(ver) > 2) then
if (min_ver[2] > #47) and (min_ver[2] < #58) and (ver[2] > #47) and (ver[2] < #58) then
Result := ver[2] > min_ver[2];
end;
function DetectInstallNetFrameWork: Boolean;
var
VerNetFrameWorkInstalled: TArrayOfString;
i: Integer;
begin
Result := False;
if RegGetSubkeyNames(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP', VerNetFrameWorkInstalled) then
case CompareMinVer(VerNetFrameWorkInstalled[0]) of
True : Result := True;
False:
for i := 0 to GetArrayLength(VerNetFrameWorkInstalled)-1 do
if Pos(MinNetFrameWork, VerNetFrameWorkInstalled[i]) > 0 then
begin
Result := True;
Break;
end;
end;
end;
function SearchNetFrameWork: Boolean;
var
ErrorCode: Integer;
begin
Result := DetectInstallNetFrameWork;
if not Result then
if MsgBox('Для этой программы требуется установленный .NET Framework не ниже ' + MinNetFrameWork + '. ' +
'Пожалуйста загрузите и установите .NET Framework и запустите установку снова. ' +
'Вы хотите загрузить .NET Framework сейчас?', mbConfirmation, MB_YESNO) = idYes then
begin
GetUrlNetFrameWork(MinNetFrameWork);
ShellExec('open', url, '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;
end;
function InitializeSetup: Boolean;
begin
Result := SearchNetFrameWork;
end;
Всё что вы хотите, всё это реализуемо, только если вы заставите свою запускаемую программу отвечать, насколько она процентов выполнилась...
Если это не задано автором программы, то вам это никогда не получиться, отображать реальный процент.
Но как говорится если очень сильно хочится...
1. Вариант:
Берём распакованный размер программы и в момент установки, сверяем размеры папок и уже от этого увеличиваем прогрессбар.
2. Вариант:
Просто задаём прогрессбару стиль, такой же как у прогрессбара при установке IE, т.е. нет реального процента, а полоска бегает и пользователь видит, что программа не зависла.