Изменение инсталлятов - убрали Full pack - теперь standardpack включает автоматическое скачивание версии .NET если это необходимо

This commit is contained in:
Mikhalkovich Stanislav 2020-04-16 20:10:58 +03:00
parent fcf04d7c99
commit 0e4e812835
17 changed files with 450 additions and 59 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "6";
public const string Build = "2";
public const string Revision = "2403";
public const string Revision = "2414";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=6
%REVISION%=2403
%COREVERSION%=2
%REVISION%=2414
%MINOR%=6
%MAJOR%=3

View file

@ -1 +1 @@
3.6.2.2403
3.6.2.2414

View file

@ -5,26 +5,23 @@
SectionGroup "Microsoft .NET Framework" _DOTNET
Section "Microsoft .NET Framework 4.0" Framework
SectionIn 1 2
; IfFileExists "$WINDIR\Microsoft.NET\Framework\v2.0.50727\System.dll" +3 0
; MessageBox MB_YESNO "Для работы компилятора необходима платформа Microsoft .NET версии 2.0 либо выше. Установить платформу Microsoft .NET Framework 2.0?" IDYES insalldotnet
; Goto notinsalldotnet
; Goto dotnetinstalled
IfFileExists "$WINDIR\Microsoft.NET\Framework\v4.0.30319\System.dll" 0 +2
;ReadRegDWORD $1 HKLM "Software\Microsoft\NET Framework Setup\NDP\v2.0.50727" "SP"
;IntCmp $1 2 dotnetinstalled installdotnet dotnetinstalled
Goto dotnetinstalled
installdotnet:
SetOutPath "$INSTDIR"
File "DotNet40\${WindowsInstallerPath}"
ExecWait '"$INSTDIR\${WindowsInstallerPath}" /Quiet /Norestart'
Delete "$INSTDIR\${WindowsInstallerPath}"
File "DotNet40\${DotNet}"
ExecWait '"$INSTDIR\${DotNet}" /Q'
Delete "$INSTDIR\${DotNet}"
Goto exit
dotnetinstalled:
;MessageBox MB_OK "Платформа Microsoft .NET версии 4.0 уже установлена на этом компьютере."
exit:
!insertmacro CheckNetFramework 40Full
; IfFileExists "$WINDIR\Microsoft.NET\Framework\v4.0.30319\System.dll" 0 +2
; ;ReadRegDWORD $1 HKLM "Software\Microsoft\NET Framework Setup\NDP\v2.0.50727" "SP"
; ;IntCmp $1 2 dotnetinstalled installdotnet dotnetinstalled
; Goto dotnetinstalled
; installdotnet:
; SetOutPath "$INSTDIR"
; File "DotNet40\${WindowsInstallerPath}"
; ExecWait '"$INSTDIR\${WindowsInstallerPath}" /Quiet /Norestart'
; Delete "$INSTDIR\${WindowsInstallerPath}"
; File "DotNet40\${DotNet}"
; ExecWait '"$INSTDIR\${DotNet}" /Q'
; Delete "$INSTDIR\${DotNet}"
; Goto exit
; dotnetinstalled:
; ;MessageBox MB_OK "Платформа Microsoft .NET версии 4.0 уже установлена на этом компьютере."
; exit:
SectionEnd
Section "Russian Language Pack" LangPack
SectionIn 1

View file

@ -3,19 +3,20 @@
SectionGroup "Microsoft .NET Framework" _DOTNET
Section "Microsoft .NET Framework 4.7" Framework
SectionIn 1 2
IfFileExists "$WINDIR\Microsoft.NET\Framework\v4.0.30319\System.dll" 0 +2
ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Release"
IntCmp $1 460805 dotnetinstalled installdotnet dotnetinstalled
Goto dotnetinstalled
installdotnet:
SetOutPath "$INSTDIR"
File "DotNet471\${DotNet}"
ExecWait '"$INSTDIR\${DotNet}" /Q'
Delete "$INSTDIR\${DotNet}"
Goto exit
dotnetinstalled:
;MessageBox MB_OK "Платформа Microsoft .NET версии 4.0 уже установлена на этом компьютере."
exit:
!insertmacro CheckNetFramework 471
; IfFileExists "$WINDIR\Microsoft.NET\Framework\v4.0.30319\System.dll" 0 +2
; ReadRegDWORD $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Release"
; IntCmp $1 460805 dotnetinstalled installdotnet dotnetinstalled
; Goto dotnetinstalled
; installdotnet:
; SetOutPath "$INSTDIR"
; File "DotNet471\${DotNet}"
; ExecWait '"$INSTDIR\${DotNet}" /Q'
; Delete "$INSTDIR\${DotNet}"
; Goto exit
; dotnetinstalled:
; ;MessageBox MB_OK "Платформа Microsoft .NET версии 4.7.1 уже установлена на этом компьютере."
; exit:
SectionEnd
Section "Framework Class Library Help" FrameworkHelp
SectionIn 1

View file

@ -71,7 +71,7 @@
StrCpy $dotNetReadableVersion${FrameworkVersion} "1.0"
${EndIf}
DetailPrint "Checking .NET Framework version..."
DetailPrint "Проверка версии .NET Framework..."
Push $0
Push $1
@ -87,48 +87,48 @@
${If} $0 == "false"
${OrIf} $0 == "f" ; if script is compiled in ANSI mode then we get only an "f" https://github.com/ReVolly/NsisDotNetChecker/issues/4
DetailPrint ".NET Framework $dotNetReadableVersion${FrameworkVersion} not found, download is required for program to run."
DetailPrint ".NET Framework $dotNetReadableVersion${FrameworkVersion} не найдена, требуется установить перед инсталляцией PascalABC.NET."
Goto NoDotNET${FrameworkVersion}
${Else}
DetailPrint ".NET Framework $dotNetReadableVersion${FrameworkVersion} found, no need to install."
DetailPrint ".NET Framework $dotNetReadableVersion${FrameworkVersion} найдена, нет необходимости инсталлировать."
Goto NewDotNET${FrameworkVersion}
${EndIf}
NoDotNET${FrameworkVersion}:
MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION \
".NET Framework not installed. Required version: $dotNetReadableVersion${FrameworkVersion}.$\nDownload .NET Framework $dotNetReadableVersion${FrameworkVersion} from microsoft.com?" \
".NET Framework не установлена. Требуемая версия: $dotNetReadableVersion${FrameworkVersion}.$\nЗагрузить .NET Framework $dotNetReadableVersion${FrameworkVersion} с microsoft.com?" \
/SD IDYES IDYES DownloadDotNET${FrameworkVersion} IDNO NewDotNET${FrameworkVersion}
goto GiveUpDotNET${FrameworkVersion} ;IDCANCEL
DownloadDotNET${FrameworkVersion}:
DetailPrint "Beginning download of .NET Framework $dotNetReadableVersion${FrameworkVersion}."
DetailPrint "Начало скачивания .NET Framework $dotNetReadableVersion${FrameworkVersion}."
NSISDL::download $dotNetUrl${FrameworkVersion} "$TEMP\dotnetfx.exe"
DetailPrint "Completed download."
DetailPrint "Скачивание окончено."
Pop $0
${If} $0 == "cancel"
MessageBox MB_YESNO|MB_ICONEXCLAMATION \
"Download canceled. Continue Installation?" \
"Скачивание отменено. Продолжить инсталляцию?" \
IDYES NewDotNET${FrameworkVersion} IDNO GiveUpDotNET${FrameworkVersion}
${ElseIf} $0 != "success"
MessageBox MB_YESNO|MB_ICONEXCLAMATION \
"Download failed:$\n$0$\n$\nContinue Installation?" \
"Скачивание завершилось неудачей:$\n$0$\n$\nПродолжить инсталляцию?" \
IDYES NewDotNET${FrameworkVersion} IDNO GiveUpDotNET${FrameworkVersion}
${EndIf}
DetailPrint "Pausing installation while downloaded .NET Framework installer runs."
DetailPrint "Пауза инсталляции PascalABC.NET пока запущен инсталлятор .NET Framework."
ExecWait '$TEMP\dotnetfx.exe /q /c:"install /q"'
DetailPrint "Completed .NET Framework install/update. Removing .NET Framework installer."
DetailPrint "Завершена инсталляция .NET Framework. Удаляется .NET Framework инсталлятор."
Delete "$TEMP\dotnetfx.exe"
DetailPrint ".NET Framework installer removed."
DetailPrint ".NET Framework инсталлятор удалён."
goto NewDotNet${FrameworkVersion}
GiveUpDotNET${FrameworkVersion}:
Abort "Installation canceled by user."
Abort "Инсталляция прервана пользователем."
NewDotNET${FrameworkVersion}:
DetailPrint "Proceeding with remainder of installation."
DetailPrint "Переход к оставшейся части установки."
Pop $7
Pop $6
Pop $5

View file

@ -1,6 +1,8 @@
SetCompressor /SOLID lzma
OutFile "..\Release\PascalABCNETSetup.exe"
!include PascalABCNET_head.nsh
!include DotNetChecker.nsh
!include DotNet47.nsh
!include PascalABCNET_sections.nsh
!include PascalABCNET_end.nsh
!include "nsProcess.nsh"

View file

@ -1,6 +1,7 @@
SetCompressor bzip2
SetCompressor /SOLID lzma
OutFile "..\Release\PascalABCNETWithDotNetSetup.exe"
!include PascalABCNET_head.nsh
!include DotNetChecker.nsh
!include DotNet47.nsh
;!include DotNetHelp.nsh
!include PascalABCNET_sections.nsh

View file

@ -1,6 +1,7 @@
SetCompressor bzip2
SetCompressor /SOLID lzma
OutFile "..\Release\PascalABCNETWithDotNet40Setup.exe"
!include PascalABCNET_head.nsh
!include DotNetChecker.nsh
!include DotNet40.nsh
;!include DotNetHelp.nsh
!include PascalABCNET_sections.nsh

View file

@ -1,5 +1,6 @@
"..\utils\NSIS\Unicode\makensis.exe" PascalABCNETMini.nsi
"..\utils\NSIS\Unicode\makensis.exe" PascalABCNETStandart.nsi
"..\utils\NSIS\Unicode\makensis.exe" PascalABCNETWithDotNet.nsi
copy ..\Release\PascalABCNETSetup.exe ..\Release\PascalABCNETWithDotNetSetup.exe
rem "..\utils\NSIS\Unicode\makensis.exe" PascalABCNETWithDotNet.nsi
PascalABCNETConsoleZIP.bat
PascalABCNETMonoZIP.bat
rem PascalABCNETMonoZIP.bat

View file

@ -1 +1 @@
!define VERSION '3.6.2.2403'
!define VERSION '3.6.2.2414'

View file

@ -15,7 +15,7 @@
ABCDatabases,BlockFileOfT,Controls,
OpenCL, OpenCLABC,
OpenGL, OpenGLABC,
BBCMicroBit
BBCMicroBit, School, SF
;
begin

View file

@ -132,6 +132,8 @@
File ..\bin\Lib\OpenCLABC.pcu
File ..\bin\Lib\OpenGL.pcu
File ..\bin\Lib\OpenGLABC.pcu
File ..\bin\Lib\School.pcu
File ..\bin\Lib\SF.pcu
File ..\bin\Lib\PABCRtl.dll
File ..\bin\Lib\HelixToolkit.Wpf.dll
@ -198,6 +200,9 @@
${AddFile} "OpenCLABC.pcu"
${AddFile} "OpenGL.pcu"
${AddFile} "OpenGLABC.pcu"
${AddFile} "School.pcu"
${AddFile} "SF.pcu"
${AddFile} "PABCRtl.dll"
${AddFile} "HelixToolkit.Wpf.dll"
${AddFile} "HelixToolkit.dll"
@ -274,6 +279,9 @@
File ..\bin\Lib\OpenCLABC.pas
File ..\bin\Lib\OpenGL.pas
File ..\bin\Lib\OpenGLABC.pas
File ..\bin\Lib\School.pas
File ..\bin\Lib\SF.pas
File ..\bin\Lib\__RedirectIOMode.vb
File ..\bin\Lib\VBSystem.vb
@ -336,6 +344,9 @@
${AddFile} "OpenCLABC.pas"
${AddFile} "OpenGL.pas"
${AddFile} "OpenGLABC.pas"
${AddFile} "School.pas"
${AddFile} "SF.pas"
${AddFile} "__RedirectIOMode.vb"
${AddFile} "VBSystem.vb"

View file

@ -17,7 +17,7 @@
File "..\bin\samples.pct"
File "..\bin\school.pct"
File "..\bin\Pause.exe"
File "..\bin\nuget.exe"
;File "..\bin\nuget.exe"
File "..\bin\FormatterOptions.ini"
File "..\bin\ProgrammRunner.exe"
File "..\bin\pabcworknet.ini"
@ -39,7 +39,7 @@
${AddFile} "samples.pct"
${AddFile} "school.pct"
${AddFile} "Pause.exe"
${AddFile} "nuget.exe"
;${AddFile} "nuget.exe"
${AddFile} "FormatterOptions.ini"
${AddFile} "ProgrammRunner.exe"

View file

@ -1,5 +1,5 @@
begin
var a := 2 + if true then 2 else 3;
Print(if true then 2 else 3 + if true then 2 else 3);
var b := 2 * if true then 2 else 3;
var c := 2 < if true then 2 else 3;
end.

Binary file not shown.

377
bin/Lib/School.pas Normal file
View file

@ -0,0 +1,377 @@
unit School;
interface
/// Перевод десятичного числа в двоичную систему счисления
function Bin(x: int64): string;
/// Перевод десятичного числа в двоичную систему счисления
function Bin(x: BigInteger): string;
/// Перевод десятичного числа в восьмеричную систему счисления
function Oct(x: int64): string;
/// Перевод десятичного числа в восьмеричную систему счисления
function Oct(x: BigInteger): string;
/// Перевод десятичного числа в шестнадцатиричную систему счисления
function Hex(x: int64): string;
/// Перевод десятичного числа в шестнадцатиричную систему счисления
function Hex(x: BigInteger): string;
/// Перевод из системы по основанию base [2..36] в десятичную
function Dec(s: string; base: integer): int64;
/// Перевод из системы по основанию base [2..36] в десятичную
function DecBig(s: string; base: integer): BigInteger;
/// Возвращает кортеж из минимума и максимума последовательности s
function MinMax(s: sequence of int64): (int64, int64);
/// Возвращает кортеж из минимума и максимума последовательности s
function MinMax(s: sequence of integer): (integer, integer);
/// Ввозвращает НОД и НОК пары чисел
function НОДНОК(a, b: int64): (int64, int64);
/// Разложение числа на простые множители
function Factorize(n: int64): array of int64;
/// Рразложение числа на простые множители
function Factorize(n: integer): array of integer;
/// Простые числа на интервале [2;n]
function Primes(n: integer): array of integer;
/// Первые n простых чисел
function FirstPrimes(n: integer): array of integer;
/// Возвращает массив, содержащий цифры числа
function Digits(n: int64): array of integer;
implementation
type
School_BadCharInString = class(Exception)
end;
School_InvalidBase = class(Exception)
end;
{$region Bin}
function Bin(x: int64): string;
begin
x := Abs(x);
var r := '';
while x >= 2 do
(r, x) := (x mod 2 + r, x Shr 1);
Result := x + r
end;
function Bin(x: BigInteger): string;
begin
x := Abs(x);
var r := '';
while x >= 2 do
(r, x) := (byte(x mod 2) + r, x div 2);
Result := byte(x) + r
end;
{$region}
{$region Oct}
function Oct(x: int64): string;
begin
x := Abs(x);
var r := '';
while x >= 8 do
(r, x) := (x mod 8 + r, x Shr 3);
Result := x + r
end;
function Oct(x: BigInteger): string;
begin
x := Abs(x);
var r := '';
while x >= 8 do
(r, x) := (byte(x mod 8) + r, x div 8);
Result := byte(x) + r
end;
{$region}
{$region Hex}
function Hex(x: int64): string;
begin
x := Abs(x);
var s := '0123456789ABCDEF';
var r := '';
while x >= 16 do
(r, x) := (s[x mod 16 + 1] + r, x Shr 4);
Result := s[x + 1] + r
end;
function Hex(x: BigInteger): string;
begin
x := Abs(x);
var s := '0123456789ABCDEF';
var r := '';
while x >= 16 do
(r, x) := (s[byte(x mod 16) + 1] + r, x div 16);
Result := s[byte(x) + 1] + r
end;
{$region}
{$region Dec}
function Dec(s: string; base: integer): int64;
begin
if not (base in 2..36) then
raise new School_InvalidBase
($'ToDecimal: Недопустимое основание {base}');
var sb := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
s := s.ToUpper;
var r := s.Except(sb[:base + 1]).JoinToString;
if r.Length > 0 then
raise new School_BadCharInString
($'ToDecimal: Недопустимый символ "{r}" в строке {s}');
var (pa, p) := (BigInteger.One, BigInteger.Zero);
foreach var c in s.Reverse do
begin
var i := Pos(c, sb) - 1;
p += pa * i;
pa *= base
end;
Result := int64(p)
end;
function DecBig(s: string; base: integer): BigInteger;
begin
if not (base in 2..36) then
raise new School_InvalidBase
($'ToDecimal: Недопустимое основание {base}');
var sb := '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
s := s.ToUpper;
var r := s.Except(sb[:base + 1]).JoinToString;
if r.Length > 0 then
raise new School_BadCharInString
($'ToDecimal: Недопустимый символ "{r}" в строке {s}');
var pa := BigInteger.One;
Result := BigInteger.Zero;
foreach var c in s.Reverse do
begin
var i := Pos(c, sb) - 1;
Result += pa * i;
pa *= base
end
end;
{$region}
{$region MinMax}
/// Возвращает кортеж из минимума и максимума последовательности s
function MinMax(s: sequence of int64): (int64, int64);
begin
var (min, max) := (int64.MaxValue, int64.MinValue);
foreach var m in s do
if m < min then
min := m
else if m > max then
max := m;
Result := (min, max)
end;
/// Возвращает кортеж из минимума и максимума последовательности s
function MinMax(s: sequence of integer): (integer, integer);
begin
var (min, max) := (integer.MaxValue, integer.MinValue);
foreach var m in s do
if m < min then
min := m
else if m > max then
max := m;
Result := (min, max)
end;
/// Возвращает кортеж из минимума и максимума последовательности
function MinMax(Self: sequence of int64): (int64, int64); extensionmethod :=
MinMax(Self);
/// Возвращает кортеж из минимума и максимума последовательности
function MinMax(Self: sequence of integer): (integer, integer);
extensionmethod := MinMax(Self);
{$region}
{$region НОДНОК}
/// Возвращает НОД и НОК пары чисел
function НОДНОК(a, b: int64): (int64, int64);
begin
(a, b) := (Abs(a), Abs(b));
var (a1, b1) := (a, b);
while b <> 0 do
(a, b) := (b, a mod b);
Result := (a, a1 div a * b1)
end;
{$region}
{$region Factorize}
/// Разложение числа на простые множители
function Factorize(n: int64): array of int64;
begin
n := Abs(n);
var i: int64 := 2;
var L := new List<int64>;
while i * i <= n do
if n mod i = 0 then
begin
L.Add(i);
n := n div i;
if n < i then
break
end
else
i += i = 2 ? 1 : 2;
if n > 1 then
L.Add(n);
Result := L.ToArray
end;
/// Разложение числа на простые множители
function Factorize(n: integer): array of integer;
begin
n := Abs(n);
var i := 2;
var L := new List<integer>;
while i * i <= n do
if n mod i = 0 then
begin
L.Add(i);
n := n div i;
if n < i then
break
end
else
i += i = 2 ? 1 : 2;
if n > 1 then
L.Add(n);
Result := L.ToArray
end;
/// разложение числа на простые множители
function Factorize(Self: int64): array of int64; extensionmethod :=
Factorize(Self);
/// Разложение числа на простые множители
function Factorize(Self: integer): array of integer; extensionmethod :=
Factorize(Self);
{$region}
{$region Primes}
/// Простые числа на интервале [2;n]
function Primes(n: integer): array of integer;
// Модифицированное решето Эратосфена на [2;n]
begin
var Mas := ArrFill(n, True);
var i := 2;
while i * i <= n do
begin
if Mas[i-1] then
begin
var k := i*i;
while k <= n do
begin
Mas[k-1] := False;
k += i
end
end;
Inc(i)
end;
n := Mas.Count(t -> t);
Result := new integer[n-1];
i := 0;
for var j := 1 to Mas.High do
if Mas[j] then
begin
Result[i] := j+1;
Inc(i)
end
end;
/// Первые n простых чисел
function FirstPrimes(n: integer): array of integer;
// Модифицированное решето Эратосфена
begin
var n1 := Trunc(Exp((Ln(n)+1.088)/0.8832));
var Mas := ArrFill(n1, True);
var i := 2;
while i * i <= n1 do
begin
if Mas[i-1] then
begin
var k := i*i;
while k <= n1 do
begin
Mas[k-1] := False;
k += i
end
end;
Inc(i)
end;
//n := Mas.Count(t -> t);
Result := new integer[n];
i := 0;
for var j := 1 to Mas.High do
if Mas[j] then
begin
Result[i] := j+1;
Inc(i);
if i = n then
break
end
end;
{$region}
{$region Digits}
/// Возвращает массив, содержащий цифры числа
function Digits(n: int64): array of integer;
begin
var St := new Stack<integer>;
n := Abs(n);
if n = 0 then
Result := Arr(0)
else
begin
while n > 0 do
begin
St.Push(n mod 10);
n := n div 10
end;
Result := St.ToArray
end
end;
/// Возвращает массив, содержащий цифры числа
function Digits(Self: integer): array of integer;
extensionmethod := Digits(Self);
/// возвращает массив, содержащий цифры числа
function Digits(Self: int64): array of integer;
extensionmethod := Digits(Self);
{$region}
end.