Старожил
Сообщения: 352
Благодарности: 193
|
Профиль
|
Отправить PM
| Цитировать
1. Beavimo, Вместо упрощения и минификации лучше выносить блоки кода в отдельные файлы и подключать их через #include. Потом проще будет править ошибки и даже просто разбираться в своём же коде спустя некоторое время.
В качестве примера:
основной скрипт
Код:
[Setup]
AppName=testApp
AppVersion=0.1
DefaultDirName={tmp}\testApp
OutputDir=.
OutputBaseFileName=testApp
PrivilegesRequired=lowest
CreateAppDir=no
Uninstallable=no
; Подключаем внешнюю библиотеку:
#include "FileVersion.iss"
[code]
function InitializeSetup(): Boolean;
var
FileName: String;
CurrentVersion, MinVersion: TFileVersion; // объявляем переменные
begin
// Задаём требуемую версию:
FileVersionSetI(MinVersion, 5, 80, 0, 0);
// или так:
FileVersionSetS(MinVersion, '5.80.0.0');
// Имя файла:
FileName := ExpandConstant('{src}') + '\test.exe';
if Not FileExists(FileName) then begin
MsgBox('Установка Прекращена:'#13#13 + 'Файл `' + ExtractFileName(FileName) + '` не найден', mbCriticalError, MB_OK);
Result := False;
Exit;
end;
// Файл существует, считываем версию:
FileVersionSetF(CurrentVersion, FileName);
// Сравниваем и решаем что делать:
if FileVersionCompare(CurrentVersion, MinVersion) > -1 then
Result := True
else begin
MsgBox('Установка Прекращена:' \
+ #13#13'Версия файла `' + ExtractFileName(FileName) + '`: ' + FileVersionToStr(CurrentVersion) \
+ #13#13'Требуется версия как минимум: ' + FileVersionToStr(MinVersion) \
, mbCriticalError, MB_OK);
Result := False;
end;
end;
подключаемый модуль
Файл FileVersion.iss (разместить рядом с основным скриптом):
Код:
; FileVersion library version 0.1
;
;
; Usage:
; // Outside [code] section of .iss:
; #include "FileVersion.iss" // add this library to your .iss
;
; // Under `var` variable declaration block on [code] section of .iss:
; Version: TFileVersion; // declare variable `Version`
;
; // Set Version:
; FileVersionSetS(Version, STRING) // set Version from string STRING ('1.2.3.4')
; FileVersionSetI(Version, N1, N2, N3, N4) // set Version from numbers N1, N2, N3, N4 (N1.N2.N3.N4)
; FileVersionSetS(Version, FILE) // set Version from file FILE
;
; // Use Version:
; FileVersionToStr(Version) // return 'x.x.x.x' string representation of Version
; FileVersionCompare(Version1, Version2) // return:
; // -1 if (Version1 < Version2)
; // 0 if (Version1 = Version2)
; // 1 if (Version1 > Version2)
;
[code]
type
TFileVersion = array[1..4] of Integer;
// Internal function
procedure FileVersionExtractNumber(var VersionString: String; var VersionNumber: Integer);
var
DotPosition: Integer;
begin
DotPosition := Pos('.', VersionString);
if DotPosition > 0 then begin
VersionNumber := StrToInt(Copy(VersionString, 1, DotPosition - 1));
VersionString := Copy(VersionString, DotPosition + 1, 99);
end
else begin
VersionNumber := StrToInt(VersionString);
VersionString := '';
end;
end;
// Set TFileVersion from integers
procedure FileVersionSetI(var Version: TFileVersion; v1, v2, v3, v4: Integer);
begin
Version[1] := v1;
Version[2] := v2;
Version[3] := v3;
Version[4] := v4;
end;
// Set TFileVersion from string
procedure FileVersionSetS(var Version: TFileVersion; VersionString: String);
var
i: Integer;
begin
for i := 1 to 4 do
FileVersionExtractNumber(VersionString, Version[i]);
end;
// Set TFileVersion from file
procedure FileVersionSetF(var Version: TFileVersion; FileName: String);
var
VersionString: String;
begin
GetVersionNumbersString(FileName, VersionString);
FileVersionSetS(Version, VersionString);
end;
// Compare TFileVersions
// Return -1 if (CurrentVersion < CompareVersion)
// Return 0 if (CurrentVersion = CompareVersion)
// Return 1 if (CurrentVersion > CompareVersion)
function FileVersionCompare(CurrentVersion, CompareVersion: TFileVersion): Integer;
var
i: Integer;
begin
for i := 1 to 4 do
if CurrentVersion[i] < CompareVersion[i] then begin
Result := -1;
Exit;
end
else if CurrentVersion[i] > CompareVersion[i] then begin
Result := 1;
Exit;
end;
Result := 0;
end;
// Return "x.x.x.x" string representation of TFileVersion
function FileVersionToStr(Version: TFileVersion): String;
var
i: Integer;
begin
Result := IntToStr(Version[1]);
for i := 2 to 4 do
Result := Result + '.' + IntToStr(Version[i]);
end;
// Test procedure
procedure FileVersionTestFileAgainstString(FileName, Version: String);
var
CurrentVersion, MinVersion: TFileVersion;
CompareResult: Integer;
begin
FileVersionSetF(CurrentVersion, FileName);
FileVersionSetS(MinVersion, Version);
MsgBox('Тест файла: `' + ExtractFileName(FileName) + '`: ' \
+ #13#13'Версия файла: '#9 + FileVersionToStr(CurrentVersion) \
+ #13#13'Сравнить с: '#9 + FileVersionToStr(MinVersion) \
+ #13#13'Результат: '#9 + IntToStr(FileVersionCompare(CurrentVersion, MinVersion)) \
, mbInformation, MB_OK);
end;
В виде файлов можно скачать здесь.
2.
Цитата Beavimo:
Когда компилируется файл.exe, в его описании всегда в конце приписка Setup, можна както от нее избавится, или написать чот своё? »
|
Код:
[Setup]
OutputBaseFileName=ИмяФайла ; будет скомпилировано в `ИмяФайла.exe`
VersionInfoDescription=МоёОписание ; установить Описание (FileDescription) в `МоёОписание`
|