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

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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.2.0 [23.09.2014] - Скачать;



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

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

Отправлено: 11:48, 10-03-2014

 

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


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

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


Всем привет, как сделать так, чтобы установка продолжалась в том случае если в папку куда устанавливаешь есть файл WorldOfTanks.exe. Т.е. Если в папке куда устанавливаешь нет файла WorldOfTanks.exe, то выскакивает окно, что сюда установить компоненты нельзя.

Заранее спасибо!

Отправлено: 12:16, 10-03-2014 | #2



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

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


Аватара для Mailchik

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


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

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


Farser21,
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  case CurPageID of
    wpSelectDir:
      if not FileExists(ExpandConstant('{app}\WorldOfTanks.exe')) then begin
        MsgBox('Сюда установить компоненты нельзя!', mbError, MB_OK);
        Result := False;
      end;
  end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:31, 10-03-2014 | #3


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


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

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


Mailchik, спасибо работает. Но есть одна проблема. Когда я выбираю папку без файла WorldOfTanks.exe, выскакивает окно, я нажимаю ок. Потом оно сразу перекидывает меня уже на следующую страницу выбора компонентов. Можно сделать, чтобы при нажатие ок на окошке, оставалось на данной странице?

Возможно я неправильно совместил?
Как правильно соединить это?
читать дальше »
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result:= true;

case CurPageID of
wpSelectDir:
begin
if FileExists(ExpandConstant('{app}')+'\WorldOfTanks.exe') then begin
if FileVersion(ExpandConstant('{app}')+'\WorldOfTanks.exe') < '0.9.0' then begin
MsgBoxEx(WizardForm.Handle, 'Моды не будут работать на данной версии игры! Моды предназначены для версии патча 0.9.0 ', 'Моды не подходят у данному патчу World of Tanks', MB_OK or MB_ICONWARNING, 0, 0);
Result:= false;
end;
end;
end;
end;
end;

читать дальше »
function NextButtonClick(CurPageID: Integer): Boolean;
begin
Result := True;
case CurPageID of
wpSelectDir:
if not FileExists(ExpandConstant('{app}\WorldOfTanks.exe')) then begin
MsgBox('Сюда установить компоненты нельзя!', mbError, MB_OK);
Result := False;
end;
end;
end;

Последний раз редактировалось Farser21, 10-03-2014 в 14:16.


Отправлено: 14:05, 10-03-2014 | #4


Аватара для R.i.m.s.k.y.

Ветеран


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

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


есть такая функция сравнения версий
Код: Выделить весь код
function CompareVersion(VerMStoCompare, VerLStoCompare: Cardinal; const FileName2: string): Integer;
{ Данная функция сравнивает версии файлов указанных в FileName1 и FileName2.
  Возвращаемые значения:
    -2: если не смогли прочитать версию любого из файлов;
    -1: FileName1 > FileName2;
     0: FileName1 = FileName2;
     1: FileName1 < FileName2;
     FileName1 = передаваемые числа версий для сравнения с файлом FileName2, условия теже:
     -1: файл "старый"
      0: версии равны
      1: файл новее}
     
var
  VerMS1, VerLS1, VerMS2, VerLS2: Cardinal;
  fMS1, fLS1, fMS2, fLS2: Extended;
begin
  Result := -2; VerMS1 := VerMStoCompare; VerLS1 := VerLStoCompare;
  if GetVersionNumbers(FileName2, VerMS2, VerLS2)
     //and GetVersionNumbers(FileName2, VerMS2, VerLS2)
     then
    begin
      fMS1 := StrToFloat(IntToStr(VerMS1 shr 16) + '.' + IntToStr(VerMS1 and $FFFF));
      fLS1 := StrToFloat(IntToStr(VerLS1 shr 16) + '.' + IntToStr(VerLS1 and $FFFF));
      fMS2 := StrToFloat(IntToStr(VerMS2 shr 16) + '.' + IntToStr(VerMS2 and $FFFF));
      fLS2 := StrToFloat(IntToStr(VerLS2 shr 16) + '.' + IntToStr(VerLS2 and $FFFF));
      case fMS1 = fMS2 of
        True:
          case fLS1 = fLS2 of
            True : Result := 0;
            False:
              case fLS1 > fLS2 of
                True : Result := -1;
                False: Result := 1;
              end;
          end;
        False:
          case fMS1 > fMS2 of
            True : Result := -1;
            False: Result := 1;
          end;
      end;
    end;
//    MsgBox(FileName2 + #13#10 +
//           'VerMS1 = ' + IntToStr(VerMS1) + ' VerLS1 = ' + IntToStr(VerLS1) + #13#10 +
//           'VerMS2 = ' + IntToStr(VerMS2) + ' VerLS2 = ' + IntToStr(VerLS2) + #13#10 +
//           IntToSTR(Result), mbInformation, MB_OK);
end;
в ней ошибка: версия 1,0,0,6 будет БОЛЬШЕ чем 1,0,0,20
Подскажите, пожалуйста, как исправить

______________________

Farser21, прятать надо не под спойлер, а под тег code
Код: Выделить весь код
function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;
  case CurPageID of
  wpSelectDir:
    if not FileExists(ExpandConstant('{app}\WorldOfTanks.exe')) then begin
      MsgBox('Сюда установить компоненты нельзя!', mbError, MB_OK);
      Result := False;
   end; //if
   if FileExists(ExpandConstant('{app}')+'\WorldOfTanks.exe') then begin
     if FileVersion(ExpandConstant('{app}')+'\WorldOfTanks.exe') < '0.9.0' then begin
     MsgBoxEx(WizardForm.Handle, 'Моды не будут работать на данной версии игры! Моды предназначены для версии патча 0.9.0 ', 'Моды не подходят у данному патчу World of Tanks', MB_OK or MB_ICONWARNING, 0, 0);
    Result:= false;
   end;end;//if
end;//case
end;
кстати когда я пропустил момент что инно научился сравнивать текстовые переменные знаками неравенства?

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Последний раз редактировалось R.i.m.s.k.y., 10-03-2014 в 14:54.

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

Отправлено: 14:45, 10-03-2014 | #5


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


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

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


R.i.m.s.k.y., спасибо. Все работает.

Отправлено: 15:04, 10-03-2014 | #6


Аватара для R.i.m.s.k.y.

Ветеран


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

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


Господа состоятельные кроты, помогите разобраться:

А) пользователь user запускает windows, приходит одмин и запускает установщик от себя - admin
Кто CurrentUser и OriginalUser в терминах Inno? (runasoriginaluser & runascurentuser)

Б) unins.exe понимает переменные вида {src}? т.е. если программа установлена в C:\program files\prog и там же лежит деинсталлятор, созданный инно в процессе установки unins000.exe, можно проверить наличие файла C:\program files\prog\file.txt по ExpandConstant('{src}\prog\file.txt') в процессе удаления программы?

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Последний раз редактировалось R.i.m.s.k.y., 10-03-2014 в 15:46.


Отправлено: 15:34, 10-03-2014 | #7


SHVtYW4=


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

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


Вложения
Тип файла: 7z ITDCT.7z
(283.6 Kb, 93 просмотров)

Архив содержит:
ITDownloader + Rus
ITCallback
ITTray

-------
09a468a9b4293cd82adf6d6c60a9da82 | Tm9yZGVr
В связи со сменой железа и переходом на LInux с полным отказом от Windows - посещение на форуме будет редким.

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

Отправлено: 16:00, 10-03-2014 | #8


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


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

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


Добрый день всем.

Можно ли разделить секцию [Tasks] на 2 странички? У меня там сейчас 2 независимые группы exclusive опций. После добавления новых вариантов в одну из групп они перестали помещаться на одну страничку без скроллбара.
Видел в архиве этой темы пример кода по созданию своей странички с чекбоксом и сохранению его состояния в переменной кода. Но остается непонятным как активировать выбранный вариант в группе опций.
Может есть какой-нибудь другой способ разделить группы по страничкам?

Farser21, R.i.m.s.k.y., для сравнения версий я написал себе вот такой велосипед:
Код: Выделить весь код
type
  TVersionInfo = record
    Major, Minor, Release, Build: WORD;
  end;

function GetFileVersion(const FileName: string): TVersionInfo;
var
  VerMS, VerLS: Cardinal;
begin
  if GetVersionNumbers(FileName, VerMS, VerLS) then
  begin
    Result.Major    := VerMS shr 16;
    Result.Minor    := VerMS and $FFFF;
    Result.Release  := VerLS shr 16;
    Result.Build    := VerLS and $FFFF;
  end
  else
  begin
    Result.Major    := 0;
    Result.Minor    := 0;
    Result.Release  := 0;
    Result.Build    := 0;
  end;
end;

function GetInt(var Str: String): Integer;
var
  DotPos: Integer;
begin
  Result := 0;
  DotPos := Pos('.', Str);
  if DotPos > 0 then
  begin
    Result := StrToIntDef(Copy(Str, 1, DotPos - 1), 0);
    Str := Copy(Str, DotPos + 1, Length(Str) - DotPos);
  end
  else
  begin
    Result := StrToIntDef(Str, 0);
    Str := '';
  end;
end;

function StrToFileVer(const FileVerStr: String): TVersionInfo;
var
  LocalStr: String;
begin
  LocalStr := FileVerStr;

  Result.Major    := GetInt(LocalStr);
  Result.Minor    := GetInt(LocalStr);
  Result.Release  := GetInt(LocalStr);
  Result.Build    := GetInt(LocalStr);
end;

function CompareVer(Ver1, Ver2: TVersionInfo): Integer;
// Ver1 > Ver2 ====> result > 0
// Ver1 = Ver2 ====> result = 0
// Ver1 < Ver2 ====> result < 0
begin
  Result := Integer(Ver1.Major) - Integer(Ver2.Major);
  if Result = 0 then
  begin
    Result := Integer(Ver1.Minor) - Integer(Ver2.Minor);
    if Result = 0 then
    begin
      Result := Integer(Ver1.Release) - Integer(Ver2.Release);
      if Result = 0 then
      begin
        Result := Integer(Ver1.Build) - Integer(Ver2.Build);
      end;
    end;
  end;
end;

function InitializeSetup(): Boolean;
var
  BSVer, UpdateVer, MinAppVer: TVersionInfo;
begin
// Проверка на совместимость установленной версии с этим апдейтом
  BSVer := GetFileVersion('MyPath\MyApp.exe');
  UpdateVer := StrToFileVer(ExpandConstant('{#MyAppVersion}'));
  MinAppVer := StrToFileVer(ExpandConstant('{#MinAppVersionForUpdate}'));
  Result := CompareVer(MinAppVer, BSVer) <= 0;
  if not Result then
  begin
    MsgBox(Format(ExpandConstant('{cm:MyAppIsTooOld}'), [BSVer.Major, BSVer.Minor, BSVer.Release, BSVer.Build, MinAppVer.Major, MinAppVer.Minor, MinAppVer.Release, MinAppVer.Build]), mbError, MB_OK);
    Exit;
  end;
  Result := CompareVer(UpdateVer, BSVer) >= 0;
  if not Result then
  begin
    MsgBox(Format(ExpandConstant('{cm:MyAppIsNewer}'), [BSVer.Major, BSVer.Minor, BSVer.Release, BSVer.Build]), mbError, MB_OK);
    Exit;
  end;
// ===============================================================
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:06, 10-03-2014 | #9


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

Ветеран


Contributor


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

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


Цитата R.i.m.s.k.y.:
кстати когда я пропустил момент что инно научился сравнивать текстовые переменные знаками неравенства? »
R.i.m.s.k.y., сравнение строк как в Delphi:
Цитата:
Strings are compared according to the ordinal values that make up the characters that make up the string. Character types are treated as strings of length 1.
Цитата R.i.m.s.k.y.:
в ней ошибка: версия 1,0,0,6 будет БОЛЬШЕ чем 1,0,0,20
Подскажите, пожалуйста, как исправить »
R.i.m.s.k.y., дополнить каждый токен версии лидирующими нулями, потом строки можно сравнивать:
читать дальше »

Код: Выделить весь код
////////////////////////////////////////////////////
function FormatVersion(const szVer: String): String;
var
    i: Integer;
begin
    with TStringList.Create do
    try
        StringChangeEx(szVer, '.', ',', True);
        CommaText := szVer;
        for i := 0 to Count-1 do Strings[i] := Padz(Strings[i], 5);
        Result := CommaText;
        StringChangeEx(Result, ',', '.', True);
    finally
        Free;
    end;
end;

/////////////////////////////
procedure InitializeWizard();
begin
    if FormatVersion('10.0.0.6') < FormatVersion('10.0.0.20') then
        MsgBox('True', mbInformation, MB_OK) else MsgBox('False', mbInformation, MB_OK);
end;

Цитата R.i.m.s.k.y.:
А) пользователь user запускает windows, приходит одмин и запускает установщик от себя - admin
Кто CurrentUser и OriginalUser в терминах Inno? (runasoriginaluser & runascurentuser) »
R.i.m.s.k.y., admin.
Цитата R.i.m.s.k.y.:
Б) unins.exe понимает переменные вида {src}? т.е. если программа установлена в C:\program files\prog и там же лежит деинсталлятор, созданный инно в процессе установки unins000.exe, можно проверить наличие файла C:\program files\prog\file.txt по ExpandConstant('{src}\prog\file.txt') в процессе удаления программы? »
R.i.m.s.k.y., {src} - нет, {app} - да.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:32, 10-03-2014 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34




 
Переход