Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Inno Setup. Прочие вопросы

Ответить
Настройки темы
Inno Setup. Прочие вопросы

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: El Sanchez
Дата: 30-03-2023

Внимание!!!
Данная тема не предназначена для обсуждения скриптов! Для этого создана отдельная тема!

Скрипты Inno Setup. Помощь и советы





Описание

Inno Setup - это бесплатный инсталлятор для программ Windows. Впервые появился в 1997 году, Inno Setup сегодня, конкурирует и даже превосходит многие коммерческие инсталляторы по возможностям и стабильности.

Основные достоинства:
  • Поддержка всех версий Windows используемых сегодня: Windows 10, Windows 8, Windows Server 2012, Windows 7, Windows Server 2008 R2, Windows Vista, Windows Server 2008, Windows XP, Windows Server 2003 и Windows 2000 (независимо от пакета обновлений);
  • Обширная поддержка инсталляций 64-битных приложений на 64-битных выпусках Windows. Также поддерживает x64-разрядные процессоры. (При использовании процессоров Itanium необходимо установить Service Pack);
  • Поддержка создания одного файла EXE, что облегчает установку вашей программы через сеть. Также поддерживается разбивка на диски;
  • Стандартный стиль интерфейса мастера Windows 2000/XP;
  • Настраиваемые типы установки, например: Полная (Full), Компактная (Compact), Выборочная (Custom);
  • Возможность создания деинсталлятора;
  • Установка файлов:
    Включает интегрированную поддержку сжатия файлов (bzip2 и 7-Zip LZMA/LZMA2). Инсталлятор может сравнивать версии файлов, заменять загруженные в память файлы, ведет подсчет общедоступных файлов, регистрирует DLL/OCX и библиотеки типов, устанавливает шрифты;
  • Создание ярлыков, включая меню Пуск и на Рабочем столе;
  • Работа с системным реестром и файлами *.ini;
  • Имеет встроенную поддержку скриптов на Паскале;
  • Поддерживает создание инсталляторов на различных языках;
  • Поддержкивает пароли и шифрование инсталляторов;
  • Поддерживается тихая установка и тихая деинсталляция, с помощью ключей командной строки;
  • Доступен полный исходный код (Borland Delphi 2.0-5.0 и 2009).

Основной бесплатный конкурент - NSIS.

Последняя стабильная версия - 6.2.2 [15.02.2023]. История версий.
Официальные сборки Inno Setup 6.2.2:
Редакторы iss-скриптов:
  • Расширенная версия Inno Setup от Restools

    Сайт: http://restools.hanzify.org/
    Скачать:Рекомендуется к применению из-за огромного количества компонентов, функций и процедур, удобного интерфейса, наличия отладчика и Form Designer. Собран на основе исходников Inno Setup 5.5.1.
    Инструкция по установке

    Инструкция по установке:
    1. Установите ispack-5.5.1.exe или ispack-5.5.1-unicode.exe (5.5.1 - номер официальной версии Inno Setup для последующего обновления расширенной версией);
    2. Скачайте Inno Setup Compiler, распакуйте;
    3. Из одноимённой папки, в соответствии с установленной версией (ANSI или Unicode), скопируйте два файла (Compil32.exe, Templates.dat) в каталог Inno Setup (по умолчанию: C:\Program Files\Inno Setup 5\). Появится сообщение с подтверждением о замене файла, нажимаем 'Да'.
      Примечание: если у вас Unicode версия, то дополнительно примените твик реестра (файл CourierNew.reg) из папки UnicodeFontLink и перезагрузите компьютер.
    4. Скачайте Inno ISCmplr Setup, распакуйте;
    5. Из одноимённой папки, в соответствии с установленной версией (InnoSetup_ANSI или InnoSetup_Unicode), из подпапки FullVCL скопируйте все файлы в каталог Inno Setup (по умолчанию: C:\Program Files\Inno Setup 5\). Появится сообщение с подтверждением о замене файла, нажимаем 'Да'.

  • Inno Script Studio от Kymoto Solutions

    Сайт: https://www.kymoto.org/
    Скачать: Inno Script Studio v2.5.1 [28.11.2020]
    Inno Script Studio является новым, интуитивно понятным, графическим интерфейсом для создания и компиляции скриптов Inno Setup.
Дополнительно



Распаковщики/декомпиляторы инсталляторов Inno Setup

Параметры командной строки инсталлятора (ссылка)

Отправлено: 00:25, 24-08-2009

 

Старожил


Сообщения: 352
Благодарности: 192

Профиль | Отправить 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) в `МоёОписание`
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:56, 08-01-2020 | #591



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить PM | Цитировать


iglezz, братюня ну ты и дал стране угля поборол даже такую версию 4,49,1,356.....

Отправлено: 17:16, 08-01-2020 | #592


Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить PM | Цитировать


iglezz Немножко уменьшил код, и добавил функцию проверки максимальной версии, на которую можна установить свой апдейт, мож кому пригодится. Работает з доп. модулем и подключением через функцыю #include тыць
Файл FileVersion.iss (разместить рядом с основным скриптом), и в скрипте подключить етот файл #include "FileVersion.iss"
Вот сам скрипт
Code

#include "FileVersion.iss"

[code]
function InitializeSetup(): Boolean;
var FileName: String; CurrentVersion, MinVersion: TFileVersion; begin

// Задаём минимальную требуемую версию:
FileVersionSetI(MinVersion, 1,3,0,0);

FileName := ExpandConstant('{reg:HKLM\SOFTWARE\Test,PATH_APPLICATION}') +'\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 'Версия Установленной Программы: ' +FileVersionToStr(CurrentVersion) +#13#13 'Нужна Минимум: ' +FileVersionToStr(MinVersion), mbCriticalError, MB_OK);
Result := False; Exit;
end;

// Задаём Максимальную требуемую версию:
FileVersionSetI(MinVersion, 1,3,0,0);

FileName := ExpandConstant('{reg:HKLM\SOFTWARE\Test,PATH_APPLICATION}') +'\Test.exe';

FileVersionSetF(CurrentVersion, FileName);

if FileVersionCompare(CurrentVersion, MinVersion) < 1 then
Result := True
else begin
MsgBox('Установка Прекращена:' #13#13 'Версия Установленной Программы: ' +FileVersionToStr(CurrentVersion) +#13#13 'Нужна Максимум: ' +FileVersionToStr(MinVersion), mbCriticalError, MB_OK);
Result := False; Exit;
end;
end;


Счас назрел новый вопрос, я правда еще мало интересовался им, но навсяк спрошу мож кто знает ответ, перед установкой нуна сверить хешсумму SHA-1 установленного уже файла Test.exe, с хеш устанавлимоего мною файла Test.exe (я могу и зарания вбить значение хеш SHA-1 устанавлимоего Test.exe для проверки), и в случае 1=1 вывести сообщение Програма уже установлена Хотите установить (ДА\НЕТ)

Чот сочинил но пока безрезультатно
Code

function GetSHA1OfUnicodeString(const S: String): String;
var
SHA1: String;
begin
SHA1 := GetSHA1OfUnicodeString('reg:HKLM\SOFTWARE\Code,PATH_APPLICATION}\Test.exe');
if SHA1 = '9ab696a37604d665dc97134dbee44cfe70451b1a' then
begin
end
else
MsgBox('программа уже установлена' #13#13 'продлить установку', mbCriticalError, MB_YESNO);
Result:= False;
end;
end;

Последний раз редактировалось Beavimo, 09-01-2020 в 22:49.


Отправлено: 15:59, 09-01-2020 | #593


Старожил


Сообщения: 352
Благодарности: 192

Профиль | Отправить PM | Цитировать


Beavimo,
GetSHA1OfUnicodeString служит для получения хэша строки, что и отображено в названии функции, для файла надо использовать GetSHA1OfFile

Отправлено: 00:57, 10-01-2020 | #594


Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить PM | Цитировать


iglezz, всеравно ничерта у меня не получается, инсталятор всьо время ругается, я методом перебора пробую чот сочинить, а понять как оно работает не могу, ети все (if, if not, then, begin, else, var, и другие)
code

[code]
function GetSHA1OfFile(const S: String): String;
var SHA1: String;
begin
SHA1 := GetSHA1OfFile('{reg:HKLM\SOFTWARE\Code,PATH_APPLICATION}') +'\Test.exe';
if SHA1 = '9ab696a37604d665dc97134dbee44cfe70451b1a' then
begin
Result:= True;
end
else
begin
MsgBox('что делать?', mbCriticalError, MB_OK);
Result:= False;
end;
end;

тут два варианта, или не компилируется, или устанавливается без проверки хеш сум.... может поможеш разобратся.

Последний раз редактировалось Beavimo, 10-01-2020 в 14:02.


Отправлено: 13:56, 10-01-2020 | #595


Старожил


Сообщения: 352
Благодарности: 192

Профиль | Отправить PM | Цитировать


Beavimo, "это не шахматы,здесь думать надо" © древнючий баян

Вот рабочий пример (требует для сборки файл test.exe в папке рядом со iss-скриптом):
Скрытый текст
Код: Выделить весь код
; записываем в MySHA1 значение хеша из нужного файла на стадии компиляции
#define MySHA1 GetSHA1OfFile(SourcePath + '\test.exe')

[Setup]
AppName=testSHA1
OutputBaseFileName=testSHA1
AppVersion=0.1
DefaultDirName={tmp}\testApp
OutputDir=.
PrivilegesRequired=lowest
CreateAppDir=no

[Files]
Source: "test.exe"; DestDir: "{app}"

[code]

function InitializeSetup(): Boolean;
var
	FileName: String;
	SHA1: String;
begin
	// Берём файл в целевом каталоге:
	FileName := ExpandConstant('{src}') + '\test.exe';
	// Здесь пропущена проверка на FileExists
	// Считаем его хеш:
	SHA1 := GetSHA1OfFile(FileName);
	
	// Делаем сверку:
	if SHA1 = '{#MySHA1}' then
		MsgBox('OK!', mbInformation, MB_OK)
	else
		MsgBox('SAD :(', mbCriticalError, MB_OK);
	
	Result := False
end;

Цитата Beavimo:
я методом перебора пробую чот сочинить, а понять как оно работает не могу, ети все (if, if not, then, begin, else, var, и другие) »
Учебник по Паскалю и вечер-два помогут понять, как оно работает, тут совсем базовые вещи используются.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:49, 10-01-2020 | #596


Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить PM | Цитировать


iglezz,
code

function InitializeSetup(): Boolean;
var
FileName: String;
SHA1: String;
begin
// Берём файл в целевом каталоге:
FileName := ExpandConstant('{reg:HKLM\SOFTWARE\Code,PATH_APPLICATION}') +'\Test.exe';
// Здесь пропущена проверка на FileExists
// Считаем его хеш:
SHA1 := GetSHA1OfFile(FileName);

// Делаем сверку:
if SHA1 = '{#MySHA1}' then
MsgBox('Программа уже Установлена.' #13#13 'Установить все равно!', mbInformation, MB_YesNo)
else
Result := False
end;


Пример работает, но програма не устанавливается, а нужно чтоб она уставливалась всегда без сообщений, а когда хеш равны выводилось смс (ДА\НЕТ), и только если пользователь нажмет (НЕТ) тогда прекратить установку. Извини что я так бузю, хочу понять как оно работает, но самому никак, нужна муза, а ты для меня как учитель (Спасибо)...

Отправлено: 18:26, 10-01-2020 | #597


Старожил


Сообщения: 352
Благодарности: 192

Профиль | Отправить PM | Цитировать


Beavimo, Отписал в личку

Дальнейшее обсуждение скриптов стоит перенести в тему Скрипты Inno Setup. Помощь и советы [часть 9], а то мы что-то отвлеклись....

Отправлено: 19:24, 10-01-2020 | #598


Пользователь


Сообщения: 62
Благодарности: 0

Профиль | Отправить PM | Цитировать


iglezz, понял

iglezz,
Чот не могу отправить тебе в личку смс.
Извиняюсь а где можно тестировать ети примери, есть какаянить среда?
Скрытый текст

Uses crt;
Var
a,b,v,t,u,i : Integer;
begin
Writeln ('Введите первую пару чисел:');
Write ('Первое число:');
Readln (a);
Write ('Второе число:');
Readln (b);
v:=a+b;
Writeln ('Введите вторую пару чисел:');
Write ('Первое число:');
Readln (t);
Write ('Второе число:');
Readln (u);
i:=t+u;
if (v=i) then Writeln ('Они равны.');
if (v>i) then Writeln ('Сумма первой пары чисел больше суммы второй.');
if (v<i) then Writeln ('Сумма второй пары чисел больше суммы второй.');
end.

чтобы сразу наглядно видить результат?

Отправлено: 19:30, 10-01-2020 | #599


Старожил


Сообщения: 352
Благодарности: 192

Профиль | Отправить PM | Цитировать


Beavimo, Это сюда - Программирование и базы данных

Личку чистить надо, тогда будет отправляться -- лимит сообщений

Скачай и установи http://pascalabc.net
Потом прекращаем здесь оффтопить

Последний раз редактировалось iglezz, 10-01-2020 в 20:14.


Отправлено: 19:48, 10-01-2020 | #600



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Inno Setup. Прочие вопросы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Утилиты - [addon] Inno Setup CrOsP Наборы обновлений для Windows XP/2003/Windows 7 33 11-05-2011 16:03
Inno Setup 5.3.6 OSZone Software Новости программного обеспечения 0 15-11-2009 17:30
[архив] Inno Setup .:[все вопросы]:. Mchik Автоматическая установка приложений 1329 23-08-2009 20:13
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход