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

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 06-06-2020
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:

Показать/скрыть: Ссылки на примеры скриптов:

Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;

  • RegExporter - Бесплатная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.3.0 [17.01.2015] - Скачать;



Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Скрипты Inno Setup. Помощь и советы [часть 6] | Скрипты Inno Setup. Помощь и советы [часть 6].7z
Скрипты Inno Setup. Помощь и советы [часть 7] | Скрипты Inno Setup. Помощь и советы [часть 7].7z
Скрипты Inno Setup. Помощь и советы [часть 8] | Скрипты Inno Setup. Помощь и советы [часть 8].7z
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:09, 04-04-2018

 

Аватара для Nemko

Новый участник


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

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


Beavimo, думаю так:

Скрытый текст
#define NeedSHA "ad030d5606a2dcfa75ebc425a70730f23e7f07ab"

[Setup]
AppName=My Application
AppVersion=1.5
CreateAppDir=no

[code]
function InitializeSetup: Boolean;
var
FileName: PAnsiChar;
begin
FileName:=ExpandConstant('{reg:HKLM\SOFTWARE\Code, PATH_APPLICATION}')+'\Test.exe';
if not FileExists(FileName) then begin
MsgBox('Установка Прекращена' #13#13 'Установите сначала Программу!', mbCriticalError, MB_OK);
Result:=False;
end else begin
if (GetSHA1OFFile(FileName) = Lowercase('{#NeedSHA}')) then Result:=MsgBox('Программа уже Установлена' #13#13 'Продолжить Установить?', mbInformation, MB_YESNO) = IDYES
else Result:=True;
end;
end;

Если нужно скипнуть готовность
#define NeedSHA "ad030d5606a2dcfa75ebc425a70730f23e7f07ab"

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
var
StartImstall: Boolean;

function InitializeSetup: Boolean;
var
FileName: PAnsiChar;
begin
FileName:=ExpandConstant('{reg:HKLM\SOFTWARE\Code, PATH_APPLICATION}')+'\Test.exe';
if not FileExists(FileName) then begin
MsgBox('Установка Прекращена' #13#13 'Установите сначала Программу!', mbCriticalError, MB_OK);
Result:=False;
end else begin
if (GetSHA1OFFile(FileName) = Lowercase('{#NeedSHA}')) then Result:=MsgBox('Программа уже Установлена' #13#13 'Продолжить Установить?', mbInformation, MB_YESNO) = IDYES
else begin
StartImstall:=True; Result:=StartImstall;
end;
end;
end;

procedure InitializeWizard;
begin
WizardForm.Show; //без этой строчки не фунциклирует
end;

function ShouldSkipPage(CurPageID: Integer): Boolean;
begin
case CurPageID of
wpReady,wpInstalling,wpFinished: Result:=False; // если надо, можно пропустить все страницы
else Result:=True;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if (CurPageID = wpReady) and StartImstall then WizardForm.NextButton.OnClick(nil);
end;

Последний раз редактировалось Nemko, 11-01-2020 в 21:59. Причина: Решил дополнить + орфография

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:09, 11-01-2020 | #441



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

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


Ветеран


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

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


Цитата Nordek:
Всё куда проще »
Это в чём?

Отправлено: 22:20, 11-01-2020 | #442


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


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

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


Nemko, а как склеить два разных CODE???
Code
Код: Выделить весь код
function InitializeSetup(): Boolean;
var
FileName: PAnsiChar;
begin
FileName:=ExpandConstant('{reg:HKLM\SOFTWARE\Code,PATH_APPLICATION}') +'\Test.exe';
if not FileExists(FileName) then begin
MsgBox('Установка Прекращена', mbCriticalError, MB_OK);
Result:=False;
end 
else begin
if (GetSHA1OFFile(FileName) = Lowercase('ad030d5606a2dcfa75ebc425a70730f23e7f07ab')) then 
Result:=MsgBox('Программа уже Установлена' #13#13 'Продолжить Установить?', mbInformation, MB_YESNO) = IDYES
else 
Result:=True;
end
end;

+
Code

// Подключаем внешнюю библиотеку:
#include "FileVersion.iss"
Код: Выделить весь код
function InitializeSetup(): Boolean;
var FileName: String; CurrentVersion, MinVersion: TFileVersion; begin

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

// Имя файла:
FileName := ExpandConstant('{reg:HKLM\SOFTWARE\Code,PATH_APPLICATION}') +'\Test.exe';
	
if Not FileExists(FileName) then begin
MsgBox('Установите Программу:', 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\Code,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;

сама библиотека тут

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


Отправлено: 22:45, 11-01-2020 | #443


Аватара для Nemko

Новый участник


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

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


Beavimo, держите, модуль FileVersion.iss нужно класть рядом:
Скрытый текст
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={sd}\My Application

[Modules]
#include "FileVersion.iss"

[*Code]
function InitializeSetup: Boolean;
var
  FileName: PAnsiChar;
  CurrentVersion, MinVersion: TFileVersion;
begin
  FileVersionSetI(MinVersion, 1, 3, 0, 0);
  FileName:=ExpandConstant('{reg:HKLM\SOFTWARE\Code,PATH_APPLICATION}')+'\Test.exe';
  if not FileExists(FileName) then begin
    MsgBox('Установка прекращена.'+#13+'Отсутствует файл программы.', mbCriticalError, MB_OK);
    Result:=False;
  end else begin
    FileVersionSetF(CurrentVersion, FileName);
    case FileVersionCompare(CurrentVersion, MinVersion) of
      -1: begin
        MsgBox ('Установка прекращена!'+#13+'Версия установленной программы: '+FileVersionToStr(CurrentVersion)+#13+'Минимальная версия для обновления: '+FileVersionToStr(MinVersion), mbCriticalError, MB_OK);
        Result:=False;
      end;
      0: begin
        if (GetSHA1OFFile(FileName)=Lowercase('ad030d5606a2dcfa75ebc425a70730f23e7f07ab')) then Result:=MsgBox('Программа уже установлена!'+#13+'Продолжить установку?', mbInformation, MB_YESNO) = IDYES
        else Result:=True;
      end;
      1: begin
        MsgBox('Установка прекращена!'+#13+'Версия установленной программы: '+FileVersionToStr(CurrentVersion)+#13+'Максимальная версия для обновления: '+FileVersionToStr(MinVersion), mbCriticalError, MB_OK);
        Result:=False;
      end;
    end
  end;
end;

Последний раз редактировалось Nemko, 12-01-2020 в 12:47. Причина: Люблю править ошибки

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:45, 12-01-2020 | #444


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


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

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


Nemko,
Спасибо братюня.... Как думаешь с чего стоить начать изучать программирование? Если начать с Паскаля потом на С+ или сразу с С+?
Просто я самоучка, и метод у меня всегда с конца, я буду сравнивать примеры дабы понять смысл, а уже потом полезу в документацию, потому как значения меня пугают, а так если пойму суть как оно работает тогда зацеп пойдет, так вот собствинно дилема в том что суть языков Паскаль и С+ одна, токо значение разные, или принцыпи работы разные?
А чуть не забыл! Дело в том что в своем примере, я мого задавать порог минимальной и максимальной версии, а тут банально устанавливается, только на заданую версию.

Последний раз редактировалось Beavimo, 12-01-2020 в 16:56.


Отправлено: 16:28, 12-01-2020 | #445


Ветеран


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

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


Цитата Beavimo:
с чего стоить начать изучать программирование? »
С ассемблера. Потом и C++ пойдёт лучше.

Отправлено: 16:41, 12-01-2020 | #446


Аватара для Nemko

Новый участник


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

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


Beavimo, теперь FileVersion.iss можно выкинуть в урну, он не нужен, плюс прикрутил проверку на соответствие PE-формату (типа если открывать не .exe). Так же диапазон версий настраивается в начале, хеш там же.
Скрытый текст
Код: Выделить весь код
#define AppHash "ad030d5606a2dcfa75ebc425a70730f23e7f07ab"; хэш
#define AppFile "Test.exe"; имя файла
#define MinVers "1.0.0.0"; минимальная версия
#define MaxVers "1.4.0.0"; максимальная

[Setup]
AppName=My Application
AppVersion=1.5
CreateAppDir=no

[CustomMessages]
Error_01=Отсутствует файл {#AppFile}.
Error_02=Минимальная версия для обновления: {#MinVers},%nТекущая версия:
Error_03=Максимальная версия для обновления: {#MaxVers},%nТекущая версия:
Error_04=Файл {#AppFile} не соответствует PE-формату.
Information_01=Программа уже установлена!%nПродолжить установку?

[*Code]
#define A = (Defined UNICODE) ? "W" : "A"

const
  DONT_RESOLVE_DLL_REFERENCES = $1;
  LOAD_LIBRARY_AS_DATAFILE    = $2;

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';

function copy_Int(s: String): Integer;
var
  i: Integer;
  tmpS: String;
begin
  for i:=1 to Length(s) do if StrToInt(s[i])<>-1 then tmpS:=tmpS+s[i];
  if StrToInt(tmpS)<>-1 then Result:=StrToInt(tmpS);
end;

function Compare(aFile: PAnsiChar; aHash, aMinVers, aMaxVers: String): Boolean;
var
  CurrentVersion: String;
begin
  if not FileExists(aFile) then begin
    MsgBox(CustomMessage('Error_01'), mbCriticalError, MB_OK);
    Result:=False;
  end else begin
    if LoadLibraryEx(aFile, 0, LOAD_LIBRARY_AS_DATAFILE+DONT_RESOLVE_DLL_REFERENCES)=0 then begin
      MsgBox(CustomMessage('Error_04'), mbCriticalError, MB_OK);
      Exit;
    end;
    GetVersionNumbersString(aFile, CurrentVersion);
    if (copy_Int(CurrentVersion)<=copy_Int('{#MaxVers}')) and (copy_Int(CurrentVersion)>=copy_Int('{#MinVers}')) then begin
      if (GetSHA1OFFile(aFile)=Lowercase('{#AppHash}')) then Result:=MsgBox(CustomMessage('Information_01'), mbInformation, MB_YESNO) = IDYES
      else Result:=True;
  end else begin
    if (copy_Int(CurrentVersion)<copy_Int('{#MinVers}')) then MsgBox(CustomMessage('Error_02')+' '+CurrentVersion+'.', mbCriticalError, MB_OK)
    else MsgBox(CustomMessage('Error_03')+' '+CurrentVersion+'.', mbCriticalError, MB_OK);
    Result:=False;
  end;
 end;
end;

function InitializeSetup: Boolean;
begin
  Result:=Compare(ExpandConstant('{reg:HKLM\SOFTWARE\Code, PATH_APPLICATION}'+'\{#AppFile}'), '{#AppHash}', '{#MinVers}', '{#MaxVers}');
end;


P.S.: на счет языков программирования, решайте сами, но ИМХО лучше (проще) забить на это дело и пойти проветритьса на улицу.

Последний раз редактировалось Nemko, 12-01-2020 в 19:30. Причина: Я неграмотная дурачина


Отправлено: 19:28, 12-01-2020 | #447


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

Ветеран


Contributor


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

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


Цитата Nemko:
теперь FileVersion.iss можно выкинуть в урну, он не нужен »
Nemko, ваш код сдохнет на проверке версии 111.222.333.444 и скажет, что в 1.4.0.10 > 1.5.0.0 нет ничего страшного.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:36, 13-01-2020 | #448


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


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

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


Nemko, код кривой полюбому.... если у файла Test.exe атрибут только чтение начинается бред, никакие флаги не помогают.

Отправлено: 07:53, 14-01-2020 | #449


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


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

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


Вот так все робит

code
Код: Выделить весь код
function InitializeSetup(): Boolean;
var FileName: String; CurrentVersion, MinVersion, MaxVersion: TFileVersion; begin

FileVersionSetI(MinVersion, 1,1,0,0);
FileName := ExpandConstant('{reg:HKLM\SOFTWARE\Code,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(MaxVersion, 1,5,0,0);
FileName := ExpandConstant('{reg:HKLM\SOFTWARE\Code,PATH_APPLICATION}') +'\Test.exe';
	
FileVersionSetF(CurrentVersion, FileName);
if FileVersionCompare(CurrentVersion, MaxVersion) < 1 then
Result := True else 
begin MsgBox('Установка Прекращена!' #13#13 'Версия Установленной Программы: ' +FileVersionToStr(CurrentVersion) +#13#13 'Максимальная Версия для Обновления: ' +FileVersionToStr(MaxVersion), mbCriticalError, MB_OK);
Result := False; Exit;
end;

begin if (GetSHA1OFFile(FileName) = Lowercase('AD030D5606A2DCFA75EBC425A70730F23E7F07AB')) then 
Result:=MsgBox('Обновление уже установлено:' #13#13 'Все равно установить?', mbInformation, MB_YESNO) = IDYES;
end;
end;

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


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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 7] El Sanchez Автоматическая установка приложений 2499 02-02-2015 08:59
Скрипты Inno Setup. Помощь и советы [часть 6] El Sanchez Автоматическая установка приложений 2494 10-03-2014 11:51
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58




 
Переход