Exteor/script/ExteorSetup_x86.iss

205 lines
8.4 KiB
Plaintext
Raw Normal View History

2024-06-07 20:30:06 +03:00
#define ExteorName 'Экстеор 4.9'
#define ExteorEXE 'Exteor.exe'
#define Platform 'x86'
#define UpdateURL 'https://drive.google.com/open?id=1IHlMMwaYlAUBRSxU1RU_hXM5mFU9-oyK&usp=drive_fs'
#define ExteorVersion() GetVersionNumbersString('..\bin\' + Platform + '\Exteor.exe')
#define ConceptDomain 'CONCEPT'
#define ExteorAppID '{EB3E39CA-7B66-42B3-8688-FE56D4BB0B23}'
#define PythonVer '3.12.2'
#define PythonRedist 'python-' + PythonVer + '.exe'
#define PythonDownload 'https://www.python.org/ftp/python/' + PythonVer + '/' + PythonRedist
#define VSRedist 'VC_redist.' + Platform + '.exe'
#define VSDownload 'https://aka.ms/vs/17/release/' + VSRedist
#define RK_Python3 'SOFTWARE\Python\PythonCore\3.12-32\InstallPath'
#define RK_PyPath 'PyPath312_32'
#define RK_VCRedistr 'SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\' + Platform
#define RK_Exteor 'SOFTWARE\CIHT Concept\Экстеор 4.9'
#define RK_ExteorUninstall 'SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{EB3E39CA-7B66-42B3-8688-FE56D4BB0B23}_is1'
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId = {{#ExteorAppID}
AppName = {#ExteorName}
AppVersion = {#ExteorVersion}
AppVerName = {#ExteorName}
VersionInfoVersion = {#ExteorVersion}
AppPublisher = НП ЦИВТ КОНЦЕПТ
AppPublisherURL = http://www.acconcept.ru/
AppSupportURL = bugreport@acconcept.ru
AppUpdatesURL = {#UpdateURL}
DefaultDirName = {autopf64}\CIHT Concept\{#ExteorName}
DefaultGroupName = {#ExteorName}
LicenseFile = ..\distr\app\Документация\Лицензионное соглашение.rtf
SetupIconFile = ..\resource\ExteorApp.ico
SourceDir = ..\distr
OutputDir = ..\bin\{#Platform}
OutputBaseFilename = ExteorSetup
AllowNoIcons = yes
ChangesAssociations = yes
UninstallDisplayIcon={app}\{#ExteorEXE}
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Tasks]
Name: desktopicon; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"
Name: quicklaunchicon; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "..\bin\x64\Exteor.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "app\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
Source: "..\distr\app\DejaVu Sans.ttf"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\script\installDependencies.bat"; DestDir: {tmp}; Flags: deleteafterinstall
2024-06-07 20:30:06 +03:00
[Icons]
Name: "{group}\{#ExteorName}"; Filename: "{app}\{#ExteorEXE}"
Name: "{group}\{cm:UninstallProgram,{#ExteorName}}"; Filename: "{uninstallexe}"
Name: "{autodesktop}\{#ExteorName}"; Filename: "{app}\{#ExteorEXE}"; Tasks: desktopicon
Name: "{autodesktop}\Экстеор - Текущая версия"; Filename: "{app}\Экстеор - Текущая версия.lnk"; Tasks: desktopicon; Check: IsConceptDomain
Name: "{autoappdata}\Microsoft\Internet Explorer\Quick Launch\{#ExteorName}"; Filename: "{app}\{#ExteorEXE}"; WorkingDir: {app}; Tasks: quicklaunchicon
[CustomMessages]
russian.NewerVersionExists = Более поздняя версия {#ExteorName} уже установлена. %n%nУстанавливаемая версия: {#ExteorVersion}%nТекущая версия:
russian.SameVersionExists = На компьютере уже установлен {#ExteorName} версия {#ExteorVersion}.%n%nХотите переустановить программу?
russian.ReadMe = Ознакомиться с ReadMe
russian.CppRedist = Установка Visual C++ Redistributable...
russian.PythonInstall = Установка Python 3.9...
[Registry]
Root: HKCR; Subkey: ".oss"; ValueType: string; ValueName: ""; ValueData: "OSS File"; Flags: uninsdeletevalue
Root: HKCR; Subkey: "OSS File"; ValueType: string; ValueName: ""; ValueData: "Операционная схема синтеза"; Flags: uninsdeletekey
Root: HKCR; Subkey: "OSS File\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\Exteor.exe,3"
Root: HKCR; Subkey: "OSS File\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\Exteor.EXE"" ""%1"""
Root: HKCR; Subkey: ".rsm"; ValueType: string; ValueName: ""; ValueData: "RSM File"; Flags: uninsdeletevalue
Root: HKCR; Subkey: "RSM File"; ValueType: string; ValueName: ""; ValueData: "Модель РС-формы"; Flags: uninsdeletekey
Root: HKCR; Subkey: "RSM File\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\Exteor.exe,2"
Root: HKCR; Subkey: "RSM File\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\Exteor.EXE"" ""%1"""
Root: HKCR; Subkey: ".trs"; ValueType: string; ValueName: ""; ValueData: "TRS File"; Flags: uninsdeletevalue
Root: HKCR; Subkey: "TRS File"; ValueType: string; ValueName: ""; ValueData: "Файл РС-формы КС"; Flags: uninsdeletekey
Root: HKCR; Subkey: "TRS File\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\Exteor.exe,1"
Root: HKCR; Subkey: "TRS File\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\Exteor.EXE"" ""%1"""
[Run]
Filename: "{app}\{#ExteorEXE}"; Description: "{cm:LaunchProgram,{#StringChange(ExteorName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
Filename: "{app}\Документация\README.rtf"; Description: "{cm:ReadMe}"; Flags: nowait postinstall skipifsilent unchecked shellexec
Filename: "{tmp}\{#VSRedist}"; Parameters: "/install /quiet /NORESTART"; StatusMsg: {cm:CppRedist}; Check: VCRedistNeedsInstall()
Filename: "{tmp}\{#PythonRedist}"; Parameters: "/quiet InstallAllUsers=1 PrependPath=1 Include_test=0"; StatusMsg: {cm:PythonInstall}; Check: PythonNeedsInstall()
Filename: "{tmp}\installDependencies.bat"; Parameters: """{code:PythonPath}"""
2024-06-07 20:30:06 +03:00
[Code]
function IsPythonMissing: Boolean; forward;
function GetPythonInstallPath: String; forward;
function VCRedistNeedsInstall: Boolean; forward;
function GetExteorInstalledVersion: String; forward;
function DownloadFile(url_from: String; fileName: String): Boolean; forward;
function InitializeSetup: Boolean;
var
installedVersion: String;
comparison: Integer;
begin
installedVersion := GetExteorInstalledVersion
if installedVersion = '' then begin
Result := True
exit
end;
comparison := CompareText(installedVersion,'{#ExteorVersion}')
if comparison = 0 then
Result := MsgBox(ExpandConstant('{cm:SameVersionExists}'), mbConfirmation, MB_YESNO) = IDYES
else begin
Result := comparison <= 0
if not Result then
MsgBox(ExpandConstant('{cm:NewerVersionExists}') + installedVersion, mbInformation, MB_OK);
end
end;
function GetExteorInstalledVersion: String;
begin
if not RegQueryStringValue(HKEY_LOCAL_MACHINE,'{#RK_ExteorUninstall}', 'DisplayVersion', Result) then
Result := ''
end;
function IsConceptDomain: Boolean;
begin
Result := GetEnv('UserDomain') = '{#ConceptDomain}'
end;
function PythonNeedsInstall: Boolean;
begin
Result := IsPythonMissing;
if Result then
Result := DownloadFile('{#PythonDownload}', '{#PythonRedist}')
end;
function PythonRegistryExists: Boolean;
begin
Result := RegValueExists(HKEY_LOCAL_MACHINE, '{#RK_Python3}', '');
end;
function GetPythonInstallPath: String;
begin
Result := '';
if not PythonRegistryExists then
RegQueryStringValue(HKEY_LOCAL_MACHINE, '{#RK_Python3}', '', Result);
end;
function IsPythonMissing: Boolean;
var
python: String;
begin
python := GetPythonInstallPath;
Result := python = '';
if not Result then
Result := not FileExists(python + 'python312.dll') or not FileExists(python + 'Scripts\pip.exe');
end;
function VCRedistNeedsInstall(): Boolean;
begin
Result := not RegValueExists(HKEY_LOCAL_MACHINE, '{#RK_VCRedistr}', 'Version');
if Result then
Result := DownloadFile('{#VSDownload}', '{#VSRedist}')
end;
function DownloadFile(url_from: String; fileName: String): Boolean;
begin
try
DownloadTemporaryFile(url_from, fileName, '', nil);
Result := True;
except
Log(GetExceptionMessage);
Result := False;
end;
end;
function PythonPath(dummyValue: String): String;
begin
Result := GetPythonInstallPath
end;
procedure DeinitializeSetup();
var
python: String;
destination: String;
begin
python := GetPythonInstallPath + 'python312.dll';
destination := ExpandConstant('{app}\python312.dll')
if FileExists(python) then
FileCopy(python, destination, False);
end;