Свободное общение

Aron

Мимокрокодил
А почему тогда другие файлы дают скачивать? Так бы и писали, что ограничение действует на некоторые файлы.
Начинающим любителям, вроде меня, которые не занимаются этим професионально, никогда не получить статус "Пользователи", из-за нехватки знаний и времени.
 

tihiy_don

Старожил
А почему тогда другие файлы дают скачивать? Так бы и писали, что ограничение действует на некоторые файлы.
Начинающим любителям, вроде меня, которые не занимаются этим професионально, никогда не получить статус "Пользователи", из-за нехватки знаний и времени.
Получить... Я получил помогая другим пользователям и решая некоторые проблемы с участниками форума. Либо возьми да купи за символическую сумму в чём проблема? Нехватка времени твоя личная проблема, других не интересующая. Тут участники форума более чем адекватные, РЕАЛЬНО помогающие тем кто правильно задаёт свой вопрос. На личном опыте это говорю.
 

Andreo Fadio

Ветеран
@dixen18, что-то не верится чтобы не смог перенести код в процедуру и добавить чекбокс для исполнения ее.
 

dixen18

Ветеран
@Andreo Fadio, К сожалению в кодинге для IS несилен..Увы.
А вы для чего это написали? Помощи я от вас не увидел в данном топике) Просто написать ради того чтоб написать? Я так тоже могу)
 

YURSHAT

Тех. админ
Администратор
Привет. Кто знает как проверить наличие в системе .net framework 5.0?
Если для Inno, то есть встроенная функция IsDotNetInstalled.
Инка, в этой функции, ищет по ключу
Код:
SOFTWARE\Microsoft\NET Framework Setup\NDP\
ЗЫ. У меня на 7-ке вообще нет такой ветки как
Код:
HKEY_LOCAL_MACHINE\SOFTWARE\dotnet
 

sergey3695

Ветеран
Модератор
@Andreo Fadio,
открываем репозиторий ищем функцию...
https://github.com/jrsoftware/issrc...f2bce1bbd8a11195040525460/Projects/DotNet.pas
смотрим код, видим что просматривается реестр
HKEY_LOCAL_MACHINE SOFTWARE\Microsoft\NET Framework Setup\NDP\
вот по функции ниже ищется нужная версия. если есть путь в реестре SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.5 то стоит net45 и так все ветки смотрит с малой версии по старшенству. думаю ничего сложного, но мне лень 🙃.
code_language.pascal:
  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;
 

Nemko

Дилетант
Модератор
Хамик, раз пошла такая "пьянка" и тема "Свободная", нашел на просторах такой код:
Код:
[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;
 

sergey3695

Ветеран
Модератор
Написал по простому такой код:
code_language.pascal:
[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;
И так сойдет 😆 (наверное)
 

Timick

Старожил
Ну и я вставлю свои 5 копеек)
Код:
[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;
Кому не лень и есть какая - нибудь виртуалка с WinXP или Win7 - просьба тестануть на работоспособность - немного смущает net20
 

sergey3695

Ветеран
Модератор
@Sergei1981,есть
и
ogg можно обработать перед запаковкой любым софтом.
 

tihiy_don

Старожил
Ребят, может кто сталкивался с проблемой: инсталлятор выдаёт 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
 

SBalykov

Старожил
Ребят, может кто сталкивался с проблемой: инсталлятор выдаёт 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
Уменьшите память для распаковки
if ISDoneInit(ExpandConstant('{src}\data.inf'), $F222, Comps1, Comps2, Comps3, MainForm.Handle, 8, @ProgressCallback)
 
Сверху