Оригинальный инсталлятор JDAS-Setup-2.83.exe от производителя имел целый ряд недостатков (китайский язык интерфейса по умолчанию, отсутствие возможности выбрать папку для установки и т.д.)

С помощью утилиты innounp.exe есть возможность распаковать оригинальный инсталлятор для сборки нового:

C:\temp\>innounp.exe -x JDAS-Setup-2.83.exe


В извлеченном файле JDASCON.XML задается язык интерфейса программы и некоторые метрические единицы измерения:

<?xml version="1.0" encoding="utf-8"?>

<Configuration>

 
<Language>Russian</Language>
 
<MetricUnit>
 
<ITEM>Atm</ITEM>
 
<ITEM>g/cc</ITEM>
 
<ITEM>L/min</ITEM>
 
<ITEM>m3</ITEM>
 
....

В папку C:\temp\{app}\Templates можно собрать все текущие шаблоны для различных цементировочных агрегатов и вообще любую дополнительную информацию. В корневую папку программы скопировать справку на русском языке JDAS_RU.PDF (переименовывать файл необходимости нет - если интерфейс на русском языке, то справка вызывается из программы без проблем)


Кроме того, по окончании распаковки утилита создает скрипт, который может быть модифицирован

  • Решено изменять GUID для каждой версии программы JDAS

    Это позволит устанавливать несколько версий JDAS на компьютере. Меняются последние три знака заводского GUID на версию программы (в данном случае, 283 - см. листинг)

  • Решено предоставить пользователю выбор директории для установки

    По умолчанию: DefaultDirName=D:\{#MyAppName}-{#MyAppVersion}

  • По завершении установки для запускаемого файла автоматически устанавливается бит "Запуск от имени Администратора"

    SetElevationBit('{group}\{#MyAppName}.lnk')

Листинг JDAS-Setup-2.83_v1.2.iss (скачать)


; Script generated by the Inno Setup Script Wizard.

; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "JDAS"
#define MyAppVersion "2.83"
#define MySetupVersion "1.2"
#define MyAppPublisher "Yantai Jereh Petroleum Equipment & Technologies Co.,LTD"
#define MyAppURL "https://www.jereh-pe.com/"
#define MyAppSupportURL "http://bsd235.ru"
#define MyAppExeName "JDAS.exe"

[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.)
;--------------------------------------------------------------------------
; ЗАВОДСКОЙ GUID
; AppId={{91079267-21C1-4BF6-A726-52A12C4B21B2}
;
; МОДИФИЦИРОВАННЫЙ: ПОСЛЕДНИЕ 3 ЗНАКА = ВЕРСИЯ ПРОГРАММЫ JDAS
AppId= {{91079267-21C1-4BF6-A726-52A12C4B2283}
;--------------------------------------------------------------------------
SetupLogging= no
AppName= {#MyAppName}
AppVersion= {#MyAppVersion}
;AppVerName= {#MyAppName} {#MyAppVersion}
AppPublisher= {#MyAppPublisher}
AppPublisherURL= {#MyAppURL}
AppSupportURL= {#MyAppSupportURL}
;LicenseFile= {app}\license.txt"
InfoAfterFile= "#_info_after.txt"
DefaultDirName= D:\{#MyAppName} - {#MyAppVersion}
DefaultGroupName= {#MyAppName} - {#MyAppVersion}
; Uncomment the following line to run in non administrative install mode (install for current user only.)

;PrivilegesRequired= lowest
OutputDir= .
OutputBaseFilename= {#MyAppName} - Setup - {#MyAppVersion}_v{#MySetupVersion}
SetupIconFile= ..\JDAS-2_MAINICON.ico
Compression= lzma
SolidCompression= yes
WizardStyle= modern

[Languages]

Name: "english";MessagesFile: "compiler:Default.isl"
Name: "russian";MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]

;Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "desktopicon";Description: "{cm:CreateDesktopIcon}";GroupDescription: "{cm:AdditionalIcons}"

[Files]

; NOTE: Don't use "Flags: ignoreversion" on any shared system files
Source: "{app}\{#MyAppExeName}";DestDir: "{app}";Flags: ignoreversion
Source: "{app}\*";DestDir: "{app}";Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]

Name: "{group}\{#MyAppName}";Filename: "{app}\{#MyAppExeName}";AfterInstall: SetElevationBit('{group}\{#MyAppName}.lnk')
Name: "{group}\JDASHelp";Filename: "{app}\JDAS_RU.pdf"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}";Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}-{#MyAppVersion}";Filename: "{app}\{#MyAppExeName}";
Tasks: desktopicon;AfterInstall: SetElevationBit('{commondesktop}\{#MyAppName}-{#MyAppVersion}.lnk')

[Run]

Filename: "{app}\{#MyAppExeName}";Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}";
Flags: nowait postinstall skipifsilent runascurrentuser

[Code]

; https://stackoverflow.com/questions/16978917/how-to-set-run-as-administrator-on-a-file-using-inno-setup
procedure SetElevationBit(Filename: string);
var
 Buffer: string;
 Stream: TStream;
begin
 Filename := ExpandConstant(Filename);
 Log('Setting elevation bit for ' + Filename);
 

Stream := TFileStream.Create(FileName, fmOpenReadWrite);

 try
  Stream.Seek(21, soFromBeginning);
  SetLength(Buffer, 1);
  Stream.ReadBuffer(Buffer, 1);
  Buffer[1] := Chr(Ord(Buffer[1]) or $20);
  Stream.Seek(-1, soFromCurrent);
  Stream.WriteBuffer(Buffer, 1);
 finally
  Stream.Free;
 end;
end;

 


Microsoft Windows 10x64 LTSB [Version 10.0.14393]: Fri Oct 20 19:40:12 MSK 2023