Получить... Я получил помогая другим пользователям и решая некоторые проблемы с участниками форума. Либо возьми да купи за символическую сумму в чём проблема? Нехватка времени твоя личная проблема, других не интересующая. Тут участники форума более чем адекватные, РЕАЛЬНО помогающие тем кто правильно задаёт свой вопрос. На личном опыте это говорю.А почему тогда другие файлы дают скачивать? Так бы и писали, что ограничение действует на некоторые файлы.
Начинающим любителям, вроде меня, которые не занимаются этим професионально, никогда не получить статус "Пользователи", из-за нехватки знаний и времени.
Через реестрПривет. Кто знает как проверить наличие в системе .net framework 5.0?
HKEY_LOCAL_MACHINE\SOFTWARE\dotnet\Setup\InstalledVersions\Setup\InstalledVersions
Это на какой винде? У меня на Win10x64 такого ключа нет, но есть такойЧерез реестр
HKEY_LOCAL_MACHINE\SOFTWARE\dotnet\Setup\InstalledVersions\Setup\InstalledVersions
HKEY_LOCAL_MACHINE\SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost
Если для Inno, то есть встроенная функция IsDotNetInstalled.Привет. Кто знает как проверить наличие в системе .net framework 5.0?
SOFTWARE\Microsoft\NET Framework Setup\NDP\
HKEY_LOCAL_MACHINE\SOFTWARE\dotnet
Немного напутал когда писаль путь, все верно.Это на какой винде? У меня на Win10x64 такого ключа нет, но есть такой
Код:HKEY_LOCAL_MACHINE\SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost
HKEY_LOCAL_MACHINE\SOFTWARE\dotnet\Setup\InstalledVersions\x64\sharedhost
она встроена для 6.0.4 и выше, на китайцах явно воять самому придется.Если для Inno, то есть встроенная функция IsDotNetInstalled.
function GetVersionString(const Version: TDotNetVersion): String;
begin
case Version of
net11: Result := 'v1.1';
net20: Result := 'v2.0';
net30: Result := 'v3.0';
net35: Result := 'v3.5';
net4Client: Result := 'v4\Client';
net4Full: Result := 'v4\Full';
net45: Result := 'v4.5';
net451: Result := 'v4.5.1';
net452: Result := 'v4.5.2';
net46: Result := 'v4.6';
net461: Result := 'v4.6.1';
net462: Result := 'v4.6.2';
net47: Result := 'v4.7';
net471: Result := 'v4.7.1';
net472: Result := 'v4.7.2';
net48: Result := 'v4.8';
else
InternalError('IsDotNetDetected: Invalid Version');
end;
end;
[Setup]
AppName=My Application
AppVersion=1.5
CreateAppDir=no
[*Code]
type
//
// Enumeration used to specify a .NET framework version
//
TDotNetFramework = (
DotNet_v11_4322, //.NET Framework 1.1
DotNet_v20_50727, //.NET Framework 2.0
DotNet_v30, //.NET Framework 3.0
DotNet_v35, //.NET Framework 3.5
DotNet_v4_Client, //.NET Framework 4.0 Client Profile
DotNet_v4_Full, //.NET Framework 4.0 Full Installation
DotNet_v45); //.NET Framework 4.5
//Parameters:
// Version - Required .NET Framework version
// ServicePack - Required service pack level (0: None, 1: SP1, 2: SP2 etc.)
//
function IsDotNetInstalled(Version: TDotNetFramework; ServicePack: Cardinal): Boolean;
var
KeyName: String;
Success: Boolean;
InstallFlag,
ReleaseVer,
ServiceCount: Cardinal;
begin
//Registry path for the requested .NET Version
KeyName := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\';
case Version of
DotNet_v11_4322: KeyName:=KeyName + 'v1.1.4322';
DotNet_v20_50727: KeyName:=KeyName + 'v2.0.50727';
DotNet_v30: KeyName:=KeyName + 'v3.0';
DotNet_v35: KeyName:=KeyName + 'v3.5';
DotNet_v4_Client: KeyName:=KeyName + 'v4\Client';
DotNet_v4_Full: KeyName:=KeyName + 'v4\Full';
DotNet_v45: KeyName:=KeyName + 'v4\Full';
end;
// .NET 3.0 uses "InstallSuccess" key in subkey Setup
if (Version = DotNet_v30) then
Success:=RegQueryDWordValue(HKLM, KeyName + '\Setup', 'InstallSuccess', InstallFlag) else
Success:=RegQueryDWordValue(HKLM, KeyName, 'Install', InstallFlag);
// .NET 4.0/4.5 uses "Servicing" key instead of "SP"
if (Version = DotNet_v4_Client) or (Version = DotNet_v4_Full) or (Version = DotNet_v45) then
Success:=Success and RegQueryDWordValue(HKLM, KeyName, 'Servicing', ServiceCount) else
Success:=Success and RegQueryDWordValue(HKLM, KeyName, 'SP', ServiceCount);
// .NET 4.5 is distinguished from .NET 4.0 by the Release key
if (Version = DotNet_v45) then begin
Success:=Success and RegQueryDWordValue(HKLM, KeyName, 'Release', ReleaseVer);
Success:=Success and (ReleaseVer >= 378389);
end;
Result:=Success and (InstallFlag = 1) and (ServiceCount >= ServicePack);
end;
procedure InitializeWizard;
begin
WizardForm.OuterNotebook.Hide;
with WizardForm.WelcomeLabel2 do begin
Parent:=WizardForm;
//
Caption:='NET Framework 2.0 = = ';
if IsDotNetInstalled(DotNet_v20_50727, 0) then Caption:=Caption + 'True' else Caption:=Caption + 'False';
//
Caption:=Caption + #13 +'NET Framework 3.0 = ';
if IsDotNetInstalled(DotNet_v30, 0) then Caption:=Caption + 'True' else Caption:=Caption + 'False';
//
Caption:=Caption + #13 +'NET Framework 4.0 Client Profile = ';
if IsDotNetInstalled(DotNet_v4_Client, 0) then Caption:=Caption + 'True' else Caption:=Caption + 'False';
//
Caption:=Caption + #13 +'NET Framework 4.0 Full = ';
if IsDotNetInstalled(DotNet_v4_Full, 0) then Caption:=Caption + 'True' else Caption:=Caption + 'False';
end;
end;
[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
Uninstallable=no
CreateUninstallRegKey=no
OutputDir=.
[Code]
function IsDotNetRegKeyExists(KeyName, net: string): String;
begin
if RegKeyExists(HKEY_LOCAL_MACHINE, KeyName + net) then
result:= net;
end;
function IsDotNetInstalled(): String;
var
KeyName, NetVer: String;
begin
NetVer:= '';
//Registry path for the requested .NET Version
KeyName := 'SOFTWARE\Microsoft\NET Framework Setup\NDP\';
NetVer:= IsDotNetRegKeyExists(KeyName, 'v1.0');
NetVer:= IsDotNetRegKeyExists(KeyName,'v2.0');
NetVer:= IsDotNetRegKeyExists(KeyName,'v3.0');
NetVer:= IsDotNetRegKeyExists(KeyName,'v3.5');
NetVer:= IsDotNetRegKeyExists(KeyName,'v4.0');
NetVer:= IsDotNetRegKeyExists(KeyName,'v4.5');
NetVer:= IsDotNetRegKeyExists(KeyName,'v4.5.1');
NetVer:= IsDotNetRegKeyExists(KeyName,'v4.5.2');
NetVer:= IsDotNetRegKeyExists(KeyName,'v4.6');
NetVer:= IsDotNetRegKeyExists(KeyName,'v4.6.1');
NetVer:= IsDotNetRegKeyExists(KeyName,'v4.6.2');
NetVer:= IsDotNetRegKeyExists(KeyName,'v4.7');
NetVer:= IsDotNetRegKeyExists(KeyName,'v4.7.1');
NetVer:= IsDotNetRegKeyExists(KeyName,'v4.7.2');
NetVer:= IsDotNetRegKeyExists(KeyName,'v4.8');
if NetVer = '' then
NetVer:= 'IsDotNetDetected: Invalid Version';
Result:= NetVer;
end;
procedure InitializeWizard;
begin
MsgBox(IsDotNetInstalled(), mbInformation, MB_OK);
end;
[Setup]
AppName =Test
AppVerName =Test
DefaultDirName =Test
OutputBaseFilename =Setup
ArchitecturesInstallIn64BitMode=x64
[Code]
type
TDotNetVersion = (net20, net30, net35, net45, net451, net452, net46, net461, net462, net47, net471, net472, net48);
function GetVersionString(const Version: TDotNetVersion): String;
begin
case Version of
net20: Result := 'v2.0.50727';
net30: Result := 'v3.0';
net35: Result := 'v3.5';
net45: Result := 'v4.5';
net451: Result := 'v4.5.1';
net452: Result := 'v4.5.2';
net46: Result := 'v4.6';
net461: Result := 'v4.6.1';
net462: Result := 'v4.6.2';
net47: Result := 'v4.7';
net471: Result := 'v4.7.1';
net472: Result := 'v4.7.2';
net48: Result := 'v4.8';
else
Result := 'IsDotNetDetected: Invalid Version';
end;
end;
function GetReleaseCode(const Version: TDotNetVersion): Cardinal;
begin
case Version of
net45: Result := 378389;
net451: Result := 378675;
net452: Result := 379893;
net46: Result := 393295;
net461: Result := 394254;
net462: Result := 394254;
net47: Result := 460798;
net471: Result := 461308;
net472: Result := 461808;
net48: Result := 528040;
else
Result := -1;
end;
end;
function IsDotNetInstalled(const MinVersion: TDotNetVersion): Boolean;
var
ResValueFor45Plus: Cardinal;
begin
// Если нужно проверить версию НИЖЕ 4 - смотрим по наличию пути, если иначе - то по релиз-коду
if pos('v4', GetVersionString(MinVersion)) <> 1 then
Result := RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\' + GetVersionString(MinVersion))
else
begin
RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full', 'Release', ResValueFor45Plus);
Result := ResValueFor45Plus >= GetReleaseCode(MinVersion);
end
end;
function InitializeSetup(): Boolean;
begin
Result := IsDotNetInstalled(net20);
if not Result then
SuppressibleMsgBox(FmtMessage(SetupMessage(msgWinVersionTooLowError), ['.NET Framework', '4.6.2']), mbCriticalError, MB_OK, IDOK)
else
SuppressibleMsgBox('Успех!', mbInformation, MB_OK, IDOK);
end;
[External compressor:xprecomp]
header = 0
default = :c32mb,t1:zlib,lz4,zstd,lzo
packcmd = xtool.exe e:precomp{:option} - - <stdin> <stdout>
unpackcmd = xtool.exe d:precomp:t75p - - <stdin> <stdout>
[External compressor:srep]
header = 0
packcmd = srep {options} -a1 -m5f -l512 $$arcdatafile$$.tmp $$arcpackedfile$$.tmp
unpackcmd = srep -d -s <stdin> <stdout>
[External compressor:lolz]
header = 0
packcmd = lolz_x64.exe -mtt1 -mt8 -mtb128 -d128m -tt1 -fba0 -mc128 -dtd1 -dtw1 $$arcdatafile$$.tmp $$arcpackedfile$$.tmp
unpackcmd = cls-lolzx_x64.exe $$arcpackedfile$$.tmp $$arcdatafile$$.tmp
Уменьшите память для распаковкиРебят, может кто сталкивался с проблемой: инсталлятор выдаёт Unarc.dll код ошибки 12. Файлы, на которых ошибка сжаты цепочкой xtool+srep+lolz. На моём пк всё нормально, а на ноутбуке жены такая ошибка всегда падает. У неё всего 2 гига оперативы.
Код:[External compressor:xprecomp] header = 0 default = :c32mb,t1:zlib,lz4,zstd,lzo packcmd = xtool.exe e:precomp{:option} - - <stdin> <stdout> unpackcmd = xtool.exe d:precomp:t75p - - <stdin> <stdout> [External compressor:srep] header = 0 packcmd = srep {options} -a1 -m5f -l512 $$arcdatafile$$.tmp $$arcpackedfile$$.tmp unpackcmd = srep -d -s <stdin> <stdout> [External compressor:lolz] header = 0 packcmd = lolz_x64.exe -mtt1 -mt8 -mtb128 -d128m -tt1 -fba0 -mc128 -dtd1 -dtw1 $$arcdatafile$$.tmp $$arcpackedfile$$.tmp unpackcmd = cls-lolzx_x64.exe $$arcpackedfile$$.tmp $$arcdatafile$$.tmp