Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Автоматическая установка приложений (http://forum.oszone.net/forumdisplay.php?f=61)
-   -   Скрипты Inno Setup. Помощь и советы [часть 7] (http://forum.oszone.net/showthread.php?t=278998)

El Sanchez 10-03-2014 11:48 2321469

Скрипты Inno Setup. Помощь и советы [часть 7]
 
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
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]

Farser21 10-03-2014 12:16 2321477

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

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

Mailchik 10-03-2014 13:31 2321500

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;


Farser21 10-03-2014 14:05 2321509

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;

R.i.m.s.k.y. 10-03-2014 14:45 2321519

есть такая функция сравнения версий
Код:

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;

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

Farser21 10-03-2014 15:04 2321527

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

R.i.m.s.k.y. 10-03-2014 15:34 2321537

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

А) пользователь 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') в процессе удаления программы?

Nordek 10-03-2014 16:00 2321551

Вложений: 1
Архив содержит:
ITDownloader + Rus
ITCallback
ITTray

kot-da-vinci 10-03-2014 18:06 2321626

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

Можно ли разделить секцию [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;


El Sanchez 10-03-2014 19:32 2321696

Цитата:

Цитата 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} - да.

Farser21 10-03-2014 20:08 2321724

Всем привет, как сделать слайды на странице установки? И как добавить другой более красивый прогресс бар или изменить?

Вот мой скрипт, заранее спасибо за ответы.

http://rghost.ru/52965051

Serega 10-03-2014 20:29 2321737

Цитата:

Цитата R.i.m.s.k.y.
в ней ошибка: версия 1,0,0,6 будет БОЛЬШЕ чем 1,0,0,20 »

В ней нет ошибки, просто перед тем как сравнивать, версии нужно привести к одному виду.
Цитата:

Цитата El Sanchez
дополнить каждый токен версии лидирующими нулями, потом строки можно сравнивать »

Красиво придумал, краткость сестра таланта :good:
Цитата:

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

Цитата:

Цитата El Sanchez
admin. »

Извиняюсь, но чуть дополню:
CurrentUser-admin
OriginalUser-пользователь user

Цитата:

Цитата El Sanchez
{src} - нет, {app} - да. »

Все константы прописываются жёстко в момент инсталляции, т.е. {app} или {src} будут прописаны для деинсталлятора в одном виде C:\program files\prog\.

Mat_y 11-03-2014 09:41 2321918

Вопрос.
В справке есть такие вещи:
читать дальше »
Код:

/LOADINF="filename"
Указывает инсталлятору загрузить параметры установки из указанного файла после проверки командной строки. Этот файл может быть подготовлен с помощью '/SAVEINF=' command.

Не забудьте ставить кавычки при использовании имен, содержащих пробелы.

/SAVEINF="filename"
Указывает инсталлятору сохранять параметры установки в указанный файл.

Не забудьте ставить кавычки при использовании имен, содержащих пробелы.



Так вот... я что-то не могу понять... это можно как-то в CODE прописать при компиляции или же это только для запуска файла из ком. строки?

R.i.m.s.k.y. 11-03-2014 10:10 2321926

Mat_y, для запуска установщика из комстроки
впрочем я частенько делал установщик в установщике: основной установщик компилировал и вкладывал как программу во внешний установщик который уже запускал внутренний с нужными параметрами

R.i.m.s.k.y. 11-03-2014 12:04 2321987

Serega, El Sanchez, curuninstallstepchange ругается на невозможность вызова ExecAsOriginalUser
что не есть хорошо т.к. удаление производится от одмина а вычистить HKCU нужно пользователю
Фокус с HKU\SID не пройдет тк только программа, запускаемая из под ExecAsOriginalUser с соответствующим параметром знает чего нужно вычищать пользователю
Как обойти невозможность вызова ExecAsOriginalUser в curuninstallstepchange?

Dodakaedr 11-03-2014 12:08 2321990

Ребята подскажите как запретить программе доступ к интернету в inno?

R.i.m.s.k.y. 11-03-2014 12:13 2321991

Dodakaedr, общий вопрос - общий ответ: настройку программы запрета хождения в нэт применить на этапе установки программы

Serega 11-03-2014 12:32 2321999

Цитата:

Цитата R.i.m.s.k.y.
тк только программа, запускаемая из под ExecAsOriginalUser знает чего нужно вычищать пользователю
Как обойти сие? »

Вижу только один путь, поднимаете пользователю права, производите чистку и затем главное не забудьте понизить их.

R.i.m.s.k.y. 11-03-2014 12:38 2322000

Цитата:

Цитата Serega
Вижу только один путь, поднимаете пользователю права, »

а) как? пример кода?
б) можно ли через runas user password prog params ? имя пользователя и SID уже знаю

kot-da-vinci 11-03-2014 12:41 2322002

Цитата:

Цитата Serega
Цитата:

Цитата El Sanchez
дополнить каждый токен версии лидирующими нулями, потом строки можно сравнивать

Красиво придумал, краткость сестра таланта »

А если в версии будет 3 или 4 цифры?

Ivan_009 11-03-2014 12:42 2322003

Цитата:

Цитата Farser21
как добавить другой более красивый прогресс бар или изменить »

Так: http://rghost.ru/52977599

kot-da-vinci 11-03-2014 12:44 2322004

Таки как разделить секцию [Tasks] на 2 странички? »

R.i.m.s.k.y. 11-03-2014 13:03 2322011

kot-da-vinci, правильный ответ - создание custom page и перенос на нее части галок
примеров куча в шапке и прошлых темах
у меня под рукой нет

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

R.i.m.s.k.y. 11-03-2014 13:52 2322032

Цитата:

Цитата kot-da-vinci
Но остается непонятным как активировать выбранный вариант в группе опций. »

не понял ты имеешь ввиду как сделать элемент неактивным/активным в зависимости от выбора?

kot-da-vinci 11-03-2014 14:20 2322045

R.i.m.s.k.y., нет. Я имел ввиду как ативировать выбранный вариант таска.
Например:
Код:

[Files]
Source: "MyDll1.dll"; DestDir: "{app}"; Flags: ignoreversion; Tasks: BV5030
Source: "MyDll2.dll"; DestDir: "{app}"; Flags: ignoreversion; Tasks: BV6045
Source: "MyDll3.dll"; DestDir: "{app}"; Flags: ignoreversion; Tasks: BV6080

[Tasks]
Name: "BV5030"; Description: "5030"; GroupDescription: "{cm:SelectScanerModel}"; Flags: exclusive
Name: "BV6045"; Description: "6045"; GroupDescription: "{cm:SelectScanerModel}"; Flags: exclusive unchecked
Name: "BV6080"; Description: "6080"; GroupDescription: "{cm:SelectScanerModel}"; Flags: exclusive unchecked

Выбрал пользователь на моей страничке вариант 6080. Что дальше? Как сообщить инсталятору, что нужно активировать таск BV6080, а не BV5030?

P.S.: Вот ссылка на пример создания своей странички.

R.i.m.s.k.y. 11-03-2014 14:37 2322053

Цитата:

Цитата kot-da-vinci
Как сообщить инсталятору, что нужно активировать таск BV6080, а не BV5030? »

писать процедуру обработки кликов
под рукой нет, позже

R.i.m.s.k.y. 11-03-2014 14:54 2322058

Цитата:

Цитата El Sanchez
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. »

т.е. при сравнении 1,0,0,6 будет > чем 1,0,0,20?
Цитата:

Цитата El Sanchez
дополнить каждый токен версии лидирующими нулями, потом строки можно сравнивать: »

вот это сильная магия, ни строчки не понял кроме замены зпт на тчк и обратно

Dinvin4ester 11-03-2014 17:43 2322144

Ребята привет.Ошибка такого типа - http://i58.fastpic.ru/big/2014/0311/...20fd403c17.jpg.
Скрипт - http://sendfile.su/952086 и еще не показывает прогресс бар ,можно тоже сделать ее,а то я не использую сторонние архиваторы,только средствами инно.
Спасибо.

Farser21 11-03-2014 18:10 2322153

Ivan_009, спасибо попробую!

nik1967 11-03-2014 19:37 2322196

Цитата:

Цитата R.i.m.s.k.y.
т.е. при сравнении 1,0,0,6 будет > чем 1,0,0,20? »

Хе, работает(не не будет)
Код:

[Setup]
AppName=Game
AppVersion=Game_v1
DefaultDirName={pf}\Games
DefaultGroupName=Games
OutputDir=.

[ code]
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;

function FileVersion(const FilePath: String): String;
var
  oFS: Variant;
begin
  oFS:= CreateOleObject('Scripting.FileSystemObject');
    try
      Result:= oFS.GetFileVersion(FilePath);
    except
  end;
end;
 
function InitializeSetup: Boolean;
begin
  if FormatVersion(FileVersion(ExpandConstant('{src}')+'\simple1.exe')) < FormatVersion('1.0.0.20') then
    MsgBox('True', mbInformation, MB_OK) else MsgBox('False', mbInformation, MB_OK);
    Result:= false;
end;


Farser21 11-03-2014 20:15 2322221

Цитата:

Цитата Farser21
Всем привет, как сделать слайды на странице установки?
Вот мой скрипт, заранее спасибо за ответы.
http://rghost.ru/52965051 »


R.i.m.s.k.y. 11-03-2014 20:21 2322224

какого лешего
Код:

---------------------------
Ошибка компиляции
---------------------------
Строка 794:

Column 10:

Invalid prototype for 'GetOriginalSID'
---------------------------
ОК 
---------------------------

Код:

function GetOriginalSID(): String;
begin
  result := get_Original_SID;
end;

пример вызова
Код:

[Registry]
Root: HKU; SubKey: {code:getOriginalSID}\Software; ValueType: string; ValueName: Path; ValueData: {app}\; Flags: uninsdeletekeyifempty uninsdeletevalue noerror


R.i.m.s.k.y. 11-03-2014 21:17 2322250

Цитата:

Цитата kot-da-vinci
Как сообщить инсталятору, что нужно активировать таск BV6080, а не BV5030? »

я вот так отслеживаю, условия в TasksCheck сам пропишешь
Код:

procedure TasksCheck();
var
  Item: Integer;
begin
  if ( check_for_haali ) then begin
    Item := WizardForm.TasksList.Items.IndexOf(ExpandConstant('{cm:Haali}')); if (Item >= 0) then begin WizardForm.TasksList.Checked[item] := True; if WizardForm.TasksList.ItemIndex = Item then WizardForm.TasksList.Checked[item] := True; end;
  end;
end;

procedure TasksListClickCheck(Sender: TObject);
begin
  TasksCheck;
end;

procedure InitializeWizard();
  WizardForm.TasksList.OnClickCheck := @TasksListClickCheck;
end;


nik1967 11-03-2014 21:53 2322266

Цитата:

Цитата Farser21
Всем привет, как сделать слайды на странице установки?
Вот мой скрипт, заранее спасибо за ответы.
http://rghost.ru/52965051 » »

Воспользоваться библиотекой isSlideShow v1.02 [16.05.2010] от ExpeditorR.
Пожалуйста.

Ivan_009 11-03-2014 22:32 2322280

Цитата:

Цитата Farser21
Всем привет, как сделать слайды на странице установки »

Держи: http://rghost.ru/52992147

Dinvin4ester 11-03-2014 22:40 2322286

А мне ребят поможетe? С музыкой проблему решил,прогресс бара нет.

R.i.m.s.k.y. 11-03-2014 22:44 2322287

имеем двух пользователей: user и admin
система под пользователем, запуск от админа
запись в реестре происходит куда надо: при запуске от админа - в HKCU пользователя
Но вот при деинсталляция при запуске от админа/пользователя ключи удалаются HKCU у админа
Код:

[Registry]
Root: HKU; SubKey: {code:getOriginalSID}\Software; ValueType: string; ValueName: Path; ValueData: {app}\; Flags: uninsdeletekeyifempty uninsdeletevalue noerror

http://forum.oszone.net/post-2319623.html#post2319623
#define A = (Defined UNICODE) ? "W" : "A"
const
    WTS_CURRENT_SERVER_HANDLE = 0;
    WTS_CURRENT_SESSION = (-1);
    WTSUserName = 5;

function WTSQuerySessionInformation(hServer: THandle; SessionId, WTSInfoClass: DWORD; var ppBuffer: Longint; var pBytesReturned: DWORD): BOOL; external 'WTSQuerySessionInformation{#A}@wtsapi32.dll stdcall';
procedure WTSFreeMemory(pMemory: Longint); external 'WTSFreeMemory@wtsapi32.dll stdcall';

///////////////////////////////////////////////////////
function GetLoggedOnUser(const IsSID: Boolean): String;
var
    i: Integer;
    aNames: TArrayOfString;
    dwLength: DWORD;
    lpBuffer: Longint;
begin
    if not RegGetSubkeyNames(HKLM, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList', aNames) then Exit;
    try
        if not WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSUserName, lpBuffer, dwLength) then Exit;
        Result := CastIntegerToString(lpBuffer);
        if IsSID then for i := 0 to GetArrayLength(aNames)-1 do if Pos(Lowercase(Result), LowerCase(ExpandConstant(Format('{reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%s,ProfileImagePath|}', [aNames[i]])))) > 0 then
        begin
            Result := aNames[i];
            Break;
        end;
    finally
        WTSFreeMemory(lpBuffer);
    end;
end;

function getOriginalSID:string
begin
result := GetLoggedOnUser(True);
end;


Farser21 11-03-2014 22:47 2322288

Цитата:

Цитата Ivan_009

Все работает, но после завершения установки вот такое окно:


Пользовался exemple3.iss

Ivan_009 11-03-2014 22:53 2322291

Farser21, Добавь:

Код:

KillTimer(0, TimerID);
Сюда:

Код:

if CurPageID=wpFinished then
  begin
 
 //Сюда
 
  DeinitializeSlideShow;
  WizardForm.ProgressGauge.visible:=false;
  end;
end;

Цитата:

Цитата Dinvin4ester
А мне ребят поможетe? С музыкой проблему решил,прогресс бара нет »

Dinvin4ester, В смысле какого прогресс бара и где уточни...

Farser21 11-03-2014 23:15 2322304

Ivan_009, спасибо помогло. Но когда решил добавить это в свой установщик то вот такая ошибка появилась.

El Sanchez 11-03-2014 23:23 2322308

Цитата:

Цитата Serega
Извиняюсь, но чуть дополню:
CurrentUser-admin
OriginalUser-пользователь user »

Serega, нет, не так. Действие runascurrentuser/runasoriginaluser, Exec/ExecAsOriginalUser, ShellExec/ShellExecAsOriginalUser различно только при соблюдении следующих условий одновременно: 1) система от Vista и выше; 2) UAC включен; 3) PrivilegesRequired=none; 4) запуск установщика произведен пользователем из группы Администраторов. Запуск будет произведен с повышением прав, поэтому для пользователя admin из группы Администраторов CurrentUser - admin with full administrator access token, OriginalUser - admin with standart user access token.
Цитата:

Цитата Serega
Все константы прописываются жёстко в момент инсталляции, т.е. {app} или {src} будут прописаны для деинсталлятора в одном виде C:\program files\prog\. »

Serega, {src} доступна только инсталлятору, деинсталлятору она по барабану, т.к. ему незачем знать, где лежит инсталлятор. {app} читается из лога.
Цитата:

Цитата kot-da-vinci
А если в версии будет 3 или 4 цифры? »

kot-da-vinci, лидирующих нулей будет 2 и 1 соответственно.

Dinvin4ester 11-03-2014 23:23 2322311

Ivan_009,
Прогресс установки . Вообще его нет,установка идет,а сколько процентов не видно.

Ivan_009 11-03-2014 23:32 2322316

Farser21, Скрипт покажи и что именно ты там добавил...

Цитата:

Цитата Dinvin4ester
Прогресс установки . Вообще его нет,установка идет,а сколько процентов не видно »

Вот пример как добавить проценты установки на страницу инсталляции: http://rghost.ru/52993654

Farser21 12-03-2014 00:01 2322331

Ivan_009, http://rghost.ru/52994242
Вот скрипт

То, что я добавил я выделил.
А точнее сделал так:

//////
то что добавил
//////

Ivan_009 12-03-2014 00:11 2322339

Farser21, Зачем ты добавил KillTimer(0, TimerID);

Код:

//Сюда
 If CurPageID=wpInstalling then
  begin
  KillTimer(0, TimerID);

Я ведь сказал,что надо вот сюда:

Код:

if CurPageID=wpFinished then
  begin
  KillTimer(0, TimerID);


Farser21 12-03-2014 00:22 2322342

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

Ivan_009 12-03-2014 00:34 2322345

Farser21, Скрипт с файлами дай я посмотрю так непонятно...

Farser21 12-03-2014 00:47 2322350

Ivan_009, http://rghost.ru/private/52995152/a8...4ab63e089672ee

Ivan_009 12-03-2014 01:07 2322358

Farser21, Пробуй: http://rghost.ru/52995444

Farser21 12-03-2014 01:23 2322363

Ivan_009, спасибо огромное все просто супер)

Dinvin4ester 12-03-2014 01:53 2322371

Ivan_009,
Ошибка - http://i33.fastpic.ru/big/2014/0312/...174bf4c032.jpg .Не получается.

Farser21 12-03-2014 02:01 2322373

Ivan_009, все действительно просто чудесно. Но после завершения установки компонентов, выскакивает вот такое.

Скриншот под спойлером


Вот еще скриншот

saurn 12-03-2014 03:15 2322384

Farser21, Вдаватся в подробности не буду, но, не верно:
Код:

ShowImage(piclist.strings[CurrentPicture - 0], 0);
Надо так:
Код:

ShowImage(piclist.strings[CurrentPicture - 1], 1);
P.S.
Последняя цифра в строке отвечает за выбор эффекта. В isSlideShow нет эффекта под номером 0. Для отключения эффектов перехода нужно установить параметр Animate в False:
Код:

InitializeSlideShow(WizardForm.Handle, 0, 0, scaleX(501), ScaleY(314), False, 2);

Farser21 12-03-2014 13:01 2322531

saurn, спасибо.

Dodakaedr 12-03-2014 16:16 2322645

Подскажите, пожалуйста, зачем в этом коде {break}? Что он означает?
Код:

ValueData: 993818a33af6063ed67c2e53eb226f4db24987114d98be2000413df99c725d3e{break}{break};

saurn 12-03-2014 17:03 2322666

Цитата:

Цитата Dodakaedr
Подскажите, пожалуйста, зачем в этом коде {break}? Что он означает? »

Оператор. Прерывает цикл.

Ivan_009 12-03-2014 18:48 2322687

Цитата:

Цитата Farser21
все действительно просто чудесно. Но после завершения установки компонентов, выскакивает вот такое. »

Вот попробуй переделанный пример isSlideShow v1.03 [03.05.2011] от ExpeditorR без лишних телодвижений...

http://rghost.ru/53009283

Serega 12-03-2014 20:06 2322721

Цитата:

Цитата R.i.m.s.k.y.
а) как? пример кода? »

Вы меня не поняли. Заходите под админом, поднимаете права нужного вам пользователя. Заходите от имени пользователя и производите установку без дополнительных заморочек в скрипте, потом понижаете пользователю права. Программно конечно можно повысить пользователю права, но на Inno такого не сделаешь, только если писать отдельную dll'ку для этого.
Цитата:

Цитата R.i.m.s.k.y.
Но вот при деинсталляция при запуске от админа/пользователя ключи удалаются HKCU у админа »

Интересно конечно, в приведённом коде должно удаляться правильно... Как вариант, попробуйте добавлять и удалять ключи через секцию [code]
Цитата:

Цитата El Sanchez
нет, не так. Действие runascurrentuser/runasoriginaluser, Exec/ExecAsOriginalUser, ShellExec/ShellExecAsOriginalUser различно только при соблюдении следующих условий одновременно: 1) система от Vista и выше; 2) UAC включен; 3) PrivilegesRequired=none; 4) запуск установщика произведен пользователем из группы Администраторов. Запуск будет произведен с повышением прав, поэтому для пользователя admin из группы Администраторов CurrentUser - admin with full administrator access token, OriginalUser - admin with standart user access token. »

Согласен, извиняюсь, что ввёл в заблуждение. Полезно всё-таки заглядывать, хоть иногда, в "Справку", постоянно можно найти что-то новое.

Dinvin4ester 13-03-2014 04:32 2322845

РЕбята помогите дебилу плиз. Не получается прикрутить прогресс бар.

Ivan_009 13-03-2014 09:30 2322886

Цитата:

Цитата Dinvin4ester
РЕбята помогите дебилу плиз. Не получается прикрутить прогресс бар »

Прикручивай : http://rghost.ru/53021819 :spiteful:

Dinvin4ester 13-03-2014 13:57 2323001

Ivan_009,
В том то и дело что уже прикручен,но для распаковки арк и т.д.Если убрать,то его не видно,пустая строка.

saurn 13-03-2014 16:46 2323087

Dinvin4ester, потому что родной прогресс бар при этом остается скрытым:
Код:

if CurStep = ssInstall then begin
    WizardForm.ProgressGauge.Hide;
...


Dinvin4ester 13-03-2014 20:56 2323199

saurn,
А как открыть ?

Ivan_009 13-03-2014 23:05 2323231

Цитата:

Цитата Dinvin4ester
А как открыть »

Dinvin4ester, Удали строчку:

Код:

WizardForm.ProgressGauge.Hide;

legik2003 13-03-2014 23:26 2323247

подскажите а можно ли в инсталляторе сделать 2-а ComponentsList и что бы каждый из них работал самостоятельно

Dinvin4ester 14-03-2014 02:00 2323318

Ivan_009,
Убрал,но все-равно его не видно.

saurn 14-03-2014 02:17 2323325

Dinvin4ester, скрипт давайте(с минимальным набором файлов)

Цитата:

Цитата legik2003
подскажите а можно ли в инсталляторе сделать 2-а ComponentsList и что бы каждый из них работал самостоятельно »

Можно, но без автоматизма, все действия нужно будет описывать руками, методом использования CheckListBox в расширенной версии. Пример использования есть среди стандартных примеров расширенной версии.

Dinvin4ester 14-03-2014 10:19 2323421

saurn,
http://sendfile.su/952086 и если не сложно сделать так , что бы музыка не играла сразу при запуске инсталла.

Ivan_009 14-03-2014 12:07 2323475

Как сделать следующее,чтобы при ошибке или отмене установки прогресс в прогресс баре шел назад:

Типа как тут: http://rghost.ru/private/53046196/a9...acd29a39eb84c9

legik2003 15-03-2014 11:00 2323793

Цитата:

Цитата saurn
Можно, но без автоматизма, все действия нужно будет описывать руками, методом использования CheckListBox в расширенной версии. Пример использования есть среди стандартных примеров расширенной версии. »

А вы не могли бы скинуть пример, просто у меня ссылка
Цитата:

Цитата El Sanchez
Inno Setup Scripting 5.1 - руководство по расширенным возможностям Inno Setup от Kindly; »

не открывается

Dodakaedr 16-03-2014 16:14 2324352

Как осуществить проверку наличия файла в выбранной пользователем папке, но не при запуске инсталятора (не в системе)?
Мне надо для русификатора, чтобы проверялось наличие файла в папке которую выбрал пользователь, если он имеется то установка продолжалась, а если его нету то сообщалось об этом и установка прерывалась.

kot-da-vinci 17-03-2014 11:22 2324726

Как в коде использовать константы стандартных сообщений? Второй день не могу нагуглить :)
Создал свою страничку, хочу видеть там стандартные заголовки. В инсталляции используется несколько языков, по этому нужно использовать именно константы.
Код:

  ScanerTypePage:= CreateInputOptionPage(wpSelectTasks,
    'Caption',    //  Сюда нужно как-то вставить константу с MessageID "WizardSelectTasks"
    'Description',
    'SubCaption',
    True, False);


kot-da-vinci 17-03-2014 12:22 2324750

Нагуглил :)
Код:

ScanerTypePage:= CreateInputOptionPage(wpSelectTasks,
    SetupMessage(msgWizardSelectTasks),    //  Сюда вставим константу с MessageID "WizardSelectTasks"
    'Description',
    'SubCaption',
    True, False);


Tixo 17-03-2014 19:36 2324980

ребят как сделать кликабельное лого в углу?
смотрел пару вариантов, прикручивал, но не шло) мб делал что-то не так, а мб есть другие варианты данного?

Ivan_009 17-03-2014 20:34 2324999

Цитата:

Цитата Tixo
ребят как сделать кликабельное лого в углу »

Tixo, Пример: http://rghost.ru/53132970

legik2003 18-03-2014 13:26 2325196

Подскажите пожалуйста, как сделать выбор компонентов установки через checkbox, что бы программа инсталировала те фаилы которые будут указаны флажками checkbox. (Интересует не через стандартную SelectComponentsPage а именно отдельными checkbox)

Shkutu 18-03-2014 14:13 2325217

Dodakaedr, честно говоря не очень понятно, что значит
Цитата:

Цитата Dodakaedr
не при запуске инсталятора (не в системе)? »

Но то, что Вам надо, можно сделать например так
читать дальше »
[code]
Код:

var found: boolean;

procedure NextButtonClick (CurPageID: integer): boolean;
begin
 if CurPageID=wpSelectDir then
 begin
  if not FileExists(AddBackslash(WizardForm.DirEdit.text) + 'File_To_Find.exe') then
  begin
    found:=false;
    result:=false;
    MsgBox('Отсутствует файл "File_To_Find.exe". Установка будет прервана!', MBinformation, mb_OK)
    WizardForm.Close;
  end
  else
    begin
    found:=true;
    result:=true;
    end;
 end     
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  if ((CurPageID= wpSelectDir )and (not found)) then
  begin
  cancel:=true;
  confirm:=false;
  end;
end;



legik2003, а чем вам стандартная SelectComponentsPage не нравится? там те же чекбоксы для выбора компонентов и в последствии установка именно выбранных

TryRooM 18-03-2014 15:26 2325246

legik2003,
checkbox
http://rghost.ru/53149351

Dodakaedr 18-03-2014 17:13 2325300

TryRooM, как добавить chekbox на страничку SelectProgramGroupPage c функцией не создать папку с ярлыка?

Dodakaedr 18-03-2014 17:31 2325310

А есть программа для inno setup создавать свои формы (странички)?

Shkutu 19-03-2014 11:34 2325613

Цитата:

Цитата Dodakaedr
как добавить chekbox на страничку SelectProgramGroupPage c функцией не создать папку »

Код:

[Setup]
AllowNoIcons=yes


Dodakaedr 19-03-2014 14:03 2325714

Shkutu, как его переместить вверх?

Dodakaedr 19-03-2014 15:19 2325756

Как сделать чтобы на страничке FinishedPage невозможно было снимать галочку?

Shkutu 19-03-2014 16:34 2325776

Цитата:

Цитата Dodakaedr
как его переместить вверх »

Честно говоря, не очень поняла, куда вверх :) Ну например так
Код:

procedure InitializeWizard();
begin
 WizardForm.NoIconsCheck.top:=WizardForm.GroupEdit.top + WizardForm.GroupEdit.height +  ScaleY(15);
end;

Цитата:

Цитата Dodakaedr
на страничке FinishedPage невозможно было снимать галочку »

Это которая про запуск приложений? Можно так
читать дальше »

Код:

procedure CurPageChanged(CurPageID: Integer);
begin
 case CurPageID of   
 wpFinished:
  begin
    if (WizardForm.RunList.Items.count<>0) then
      WizardForm.RunList.ItemEnabled[0]:=false;
  end;
end;


Ivan_009 19-03-2014 18:16 2325824

У кого имеется PSD исходник этих кнопок инсталлятора поделитесь пожалуйста...
http://rghost.ru/53181955

Dodakaedr 19-03-2014 23:55 2326011

Как использовать скины? Никак не могу понять.

Ivan_009 20-03-2014 00:05 2326014

Цитата:

Цитата Dodakaedr
Как использовать скины »

Dodakaedr, Вот: http://forum.ru-board.com/topic.cgi?...&limit=1&m=8#1

Dodakaedr 20-03-2014 09:27 2326090

Поделитесь у кого есть программой Inno Setup Form Designer

vint56 20-03-2014 10:57 2326113

Dodakaedr установи InnoUltra там есть Расширенная версия от китайских собратьев ResTools либо Form Designer

Dodakaedr 20-03-2014 11:45 2326137

Нужна помощь: код для скина

читать дальше »
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp
[Files]
Source: "ISSkinEx.cjstyles"; DestDir: {tmp}; Flags: dontcopy
Source: "ISSkin.dll"; DestDir: {tmp}; Flags: dontcopy
[code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:ISSkin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:ISSkin.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('ISSkinEx.cjstyles');
LoadSkin(ExpandConstant('{tmp}\ISSkinEx.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
UnloadSkin();
end;


Вроде все верно, но почему-то выскакивает ошибка

Файл ISSkin.dll находится в корне программы.

vint56 20-03-2014 12:31 2326158

Dodakaedr пример
http://rghost.ru/53198788

Dinvin4ester 20-03-2014 19:24 2326310

Ребята ,а мне не поможете ?

Stealthmax 20-03-2014 20:39 2326332

Люди добрые, подскажите, почему не обрабатывается код, в частности не происходит переименование заголовка формы, а кнопка в том же куске кода переименовывается.
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = TypeInstall.ID then
  begin
    WizardForm.Caption:=ExpandConstant('{cm:TypeInstall}');
    //Изменить описание кнопки Далее для конкретной страницы
    WizardForm.NextButton.Caption := ExpandConstant('{cm:Install}');
  end;
  if CurPageID = AdditionallyPage.ID then
  begin
    WizardForm.Caption:=ExpandConstant('{cm:Labels}');
  end;
end;

И ещё такой вопрос: как запустить установку после выбора CheckBox и RadioButton в списке, если стандартные диалоговые окна отключены, т.е. полностью все окна кастомные, часть компонентов из них перенесены на новые окна. Хотя бы пример какой-то дайте, если не затруднит. Не могу понять как "прикрутить" запуск установки исходя из вышеизложенного.

saurn 20-03-2014 21:44 2326382

Цитата:

Цитата Stealthmax
почему не обрабатывается код, в частности не происходит переименование заголовка формы »

Работает.
читать дальше »
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DisableWelcomePage=yes
OutputDir={#SourcePath}


[Code]
const
   
PAGES_COUNT = 3;

var
   
pageArray: array of TWizardPage;


procedure CreateCustomPages(const AfterID, Count: Integer; out ResultArray: array of TWizardPage);
var
   
i, Len: Integer;
begin
   
Len := GetArrayLength(ResultArray);
    SetArrayLength(ResultArray, Len + Count);

    for i := Len + Count - 1 downto Len do
     
ResultArray[i] := CreateCustomPage(AfterID, #0, #0);
end;


procedure ModifyCustomPages();
var
   
Len: Integer;
begin
   
Len := GetArrayLength(pageArray);
   
    with pageArray[0] do
    begin
       
Caption := 'Первая страница';
        Description := 'Description';
    end;

    with pageArray[1] do
    begin
       
Caption := 'Вторая страница';
        Description := 'Description';
    end;

    with pageArray[Len - 1] do
    begin
       
Caption := 'Третья страница';
        Description := 'Description';
    end;
end;


procedure CurPageChanged(CurPageID: Integer);
var
   
Len: Integer;
begin
   
Len := GetArrayLength(pageArray);

    WizardForm.Caption := SetupMessage(msgSetupWindowTitle);

    case PageFromID(CurPageID) of
       
pageArray[0]: WizardForm.Caption := 'Первая страница';
        pageArray[1]: WizardForm.Caption := 'Вторая страница';
        pageArray[Len - 1]: WizardForm.Caption := 'Третья страница';
    end;
end;


procedure InitializeWizard();
begin
   
CreateCustomPages(wpWelcome, PAGES_COUNT, pageArray);
    ModifyCustomPages();
end;



Цитата:

Цитата Stealthmax
как запустить установку после выбора CheckBox »

Например:
Код:

if CheckBox.Checked then нужное действие

Dodakaedr 20-03-2014 21:52 2326387

vint56, что не так? Таже ошибка выскакивает... Чисто твой скрипт работает.
читать дальше »

#define IncludeFiles "InstallFiles"
#define Skin
#ifdef Skin
#define Styles "ISSkinEx.cjstyles"
#endif

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[Files]
#ifdef Skin
#ifdef UNICODE
Source: {#IncludeFiles}\U\ISSkin.dll; Flags: dontcopy
#else
Source: {#IncludeFiles}\ISSkin.dll; Flags: dontcopy
#endif
Source: {#IncludeFiles}\{#Styles}; Flags: dontcopy
#endif



[code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:ISSkin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:ISSkin.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('ISSkinEx.cjstyles');
LoadSkin(ExpandConstant('{tmp}\ISSkinEx.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
UnloadSkin();
end;

vint56 20-03-2014 22:23 2326411

Dodakaedr ISSkin.dll нету во временном каталоге
читать дальше »
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[Files]
Source: "Tiger.cjstyles"; Flags: dontcopy
Source: "ISSkin.dll";Flags: dontcopy

[code]
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:ISSkin.dll stdcall';
procedure UnloadSkin();
external 'UnloadSkin@files:ISSkin.dll stdcall';

function InitializeSetup(): Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\Tiger.cjstyles')) then ExtractTemporaryFile('Tiger.cjstyles');
if not FileExists(ExpandConstant('{tmp}\ISSkin.dll')) then ExtractTemporaryFile('ISSkin.dll');
LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
Result := True;
end;

procedure DeinitializeSetup();
begin
UnloadSkin();
end;

Dodakaedr 20-03-2014 22:46 2326430

vint56, не помогает.

Shkutu 21-03-2014 13:09 2326624

Приветствую!
Подскажите плиз, есть ли в инно функция, с помощью которой можно узнать, почему не отработала предыдущая функция типа FileCopy? Ну т е что-то, аналогичное SysErrorMessage(ResultCode), но для функций, которые просто возвращают true/false без всякого ResultCode

Ivan_009 21-03-2014 14:35 2326660

Как на отдельный чекбокс наложить картинку bmp или только на компонент лист можно...
Заранее спасибо...

Gnom_aka_Lexander 21-03-2014 20:06 2326794

Ivan_009, шапку лень почитать?
Создание кастомного чекбокса - пример скрипта для создания своего чекбокса, всего 12 состояний, (ссылка на сообщение);

Serega 21-03-2014 20:32 2326803

Цитата:

Цитата Shkutu
но для функций, которые просто возвращают true/false без всякого ResultCode »

Код:

if not FileCopy(...) then
  MsgBox(SysErrorMessage(GetLastError), mbInformation, MB_OK);

GetLastError, прочитать о ней можно здесь http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
В инно, объявляется в скрипте так:
function GetLastError: DWORD; external 'GetLastError@kernel32.dll stdcall';

Ivan_009 21-03-2014 22:10 2326841

При использовании скина как сделать,чтобы при выходе инсталл плавно закрывался без дополнительной формы аеро ( на Win7)...

Dodakaedr 22-03-2014 00:31 2326897

как сделать чтобы ярлыки создавались либо для всех пользователей, либо для текущего?

Dodakaedr 23-03-2014 20:13 2327514

Взял пример из справки программы:
читать дальше »
Код:

[Files]
Source: "{src}\*.exe"; DestDir: {app}; BeforeInstall: ChangeCaption('Откиньтесь на спинку кресла и наслаждайтесь!')
Source: "{src}\*.dll"; DestDir: {app}; BeforeInstall: ChangeCaption('Не забудьте зарегистрироваться')

[Cоde]
procedure ChangeCaption(str: string);
begin
WizardForm.StatusLabel.Caption:= str;
end;


В итоге у меня получилось
читать дальше »
Код:

[Files]
Source: "regcode.ini"; DestDir: "{pf}\r"; BeforeInstall: "CreateBackup ChangeCaption('Регистрация программы')"; Flags: ignoreversion
Source: "Settings.ini"; DestDir: "{pf}\r"; BeforeInstall: "CreateBackup ChangeCaption('Установка настроек')"; Flags: ignoreversion

[Cоde]
procedure ChangeCaption(str: string);
begin
WizardForm.StatusLabel.Caption:= str;
end;


но при компиляции выдает
Как это исправить?

И еще такой вопрос: как создать checkbox c текстом "Зарегистрировать" на странице выбора папки (SelectDirPage) чтобы если отмечен, то при установки устанавливался файл regcode.ini если не отмечен то не устанавливался?

Ivan_009 23-03-2014 20:32 2327530

Покажите пожалуйста пример слайд шоу через ботву.

TryRooM 23-03-2014 21:07 2327548

Dodakaedr,
checkbox c текстом
http://rghost.ru/53291369

Habetdin 23-03-2014 21:40 2327565

Цитата:

Цитата Dodakaedr
Как это исправить? »

Можно вызывать CreateBackup внутри функции ChangeCaption. Кстати, в полном коде («В итоге у меня получилось») не видно реализации функции CreateBackup.
Либо сделать отдельную функцию, которая вызовет и CreateBackup, и ChangeCaption.

Dodakaedr 23-03-2014 22:26 2327593

Цитата:

Цитата Habetdin
Либо сделать отдельную функцию, которая вызовет и CreateBackup, и ChangeCaption. »

можете это в коде показать?
Реализация функции CreateBackup
читать дальше »
Код:

procedure CreateBackup;
var
srcFile, destFile: string;
begin
srcFile:= ExpandConstant(CurrentFileName);
destFile:= srcFile + '.bak';
DeleteFile(destFile);
RenameFile(srcFile, destFile);
end;

procedure RestoreBackup(backupDir: string);
var
srcFile, destFile: string;
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: string;
begin
APath := AddBackslash(backupDir);
FindResult := FindFirst(APath + '*.bak', FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
srcFile:= APath + FSR.Name;
destFile:= Copy(srcFile, 0, Length(srcFile)-4);
DeleteFile(destFile);
RenameFile(srcFile, destFile);
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
{Recursion} RestoreBackup(APath + DSR.Name);
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
RestoreBackup(ExpandConstant('{app}'))
end;
end;


Habetdin 24-03-2014 00:10 2327661

Dodakaedr, ок, просто хотел уточнить параметры CreateBackup. Раз их нет, то и будем вызывать без них :) Как я писал выше, самый легкий способ - сделать так:
Код:

procedure ChangeCaption(str: string);
begin
  CreateBackup();
  WizardForm.StatusLabel.Caption:= str;
end;

И убрать CreateBackup из BeforeInstall.
P.S.: ChangeCaption в [Code] должен быть объявлен позже, чем CreateBackup.

Цитата:

Цитата Dodakaedr
В смысле нет »

Реализация != параметр, у CreateBackup нет входных параметров.

Dodakaedr 24-03-2014 07:55 2327761

Цитата:

Цитата Habetdin
хотел уточнить параметры CreateBackup. Раз их нет »

Спасибо! Заработал.

habib2302 24-03-2014 15:58 2327931

доброе время суток. я делаю репак winrar и как вы знаете что у него есть ранее созданный деинсталлятор. я не знаю как вам объяснить, но попробую. Как сделать так, чтобы вместо деинсталлятора который создает inno использовался деинсталлятор от winrar?

Код:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinRAR_is1]
"UninstallString"="\"C:\\Program Files\\WinRAR\\Uninstall.exe\""
"UninstallDataFile"="C:\\Program Files\\WinRAR\\Uninstall.lst"
"QuietUninstallString"="\"C:\\Program Files\\WinRAR\\Uninstall.exe\" /s"


Ivan_009 24-03-2014 18:11 2327977

Как сделать слайд шоу через ботву не по процентам а с интервалом времени...

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

ChVL 24-03-2014 18:12 2327978

Необходимо добавить свою папку в папку {sys}\DriverStore\FileRepository.
Система не пускает: выдаёт ошибку 5 - отказано в доступе.
В секции [Setup] строка PrivilegesRequired=admin имеется, в строке Source есть Flags: restartreplace.

Как решить эту проблему?
_______________________________________________

habib2302
А в лоб? Не? - Не делать деинсталлятор Inno, а скопировать в папку оригинальные Uninstall.exe и Uninstall.lst. При этом можно внести необходимые изменения в Uninstall.lst.
В своих репаках давно так делаю.

Ivan_009 24-03-2014 19:26 2328014

Как настроить показ слайдов попорядку а не вслучайном порядке.
И настроить распаковку слайдов в Temp а не рядом с инсталлом вот скрипт...

http://rghost.ru/53315612

Благодарю за помощь...

Ivan_009 26-03-2014 12:59 2328798

Как тут прописать чтобы из папки Temp брались изображения...

Код:

InitSlideshow(ExpandConstant('{src}\Database'),'.jpg',3000,0,0,798,543);

nik1967 26-03-2014 13:21 2328808

Цитата:

Цитата Ivan_009
Как тут прописать чтобы из папки Temp брались изображения... »

А если немного подумать и почитать справку? В данном случае - Константы
{src}
Папка, в которой находится инсталлятор.
{tmp}
Временная папка. Это не значение переменной среды TEMP пользователя. Это папка, где создаются временные файлы инсталлятора ("C:\WINDOWS\TEMP\IS-xxxxx.tmp"). Все файлы и папки удаляются из папки Temp после завершения установки приложения.

Ivan_009 26-03-2014 13:55 2328824

nik1967, Спасибо большое :up . Глянь пожалуйста скрипт почему то слайд-шоу не работает наверное таймера не хватает даже не знаю...

http://rghost.ru/53363940

nik1967 26-03-2014 15:33 2328887

Ivan_009, http://rghost.ru/53366454

А это без доп. библиотек, но на .bmp - голимый дефулт (SlideShow) (рекомендую использовать UNICODE версию InnoSetup)

Ivan_009 26-03-2014 17:24 2328919

nik1967, Спасибо большое при большое :) :up ...

Извините за :offtopic: nik1967, Кстати ты не в курсе, что на krinkels работы какие то ведутся не возможно зайти на сайт уже третий день...

nik1967 26-03-2014 17:41 2328934

Ivan_009,
читать дальше »
[25.03.2014 13:29:43] nik1967: С сайтом какие то неполадки?
[25.03.2014 13:30:16] YURSHAT: Не, обновление движка и структуры форума
Так же сорри за оффтоп.

Mat_y 26-03-2014 19:46 2328976

Привет... вопросик:
Можно ли научить инно скачивать с https ? Может *dll-ку какую можно прикрутить?
З.Ы. с http качает без проблем.

nik1967 26-03-2014 21:33 2329034

Ivan_009, кстати, вдруг если не заметил, нумерация файлов слайдшоу должна начинаться с 0 - 0.bmp, 1.bmp и так далее. Это так, на всякий случай :)

Ivan_009 26-03-2014 22:02 2329049

Цитата:

Цитата nik1967
кстати, вдруг если не заметил, нумерация файлов слайдшоу должна начинаться с 0 - 0.bmp, 1.bmp и так далее. Это так, на всякий случай »

nik1967, Ну я уже понял :) . Кстати как на финишной странице к примеру остановить показ слайд-шоу...

Dodakaedr 26-03-2014 22:50 2329085

Код:

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
 
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
 
[Run]
Filename: "{app}\MyProg"; Description: "{cm:LaunchProgram, MyProg}"; Flags: nowait postinstall skipifsilent
 
[ Code]
var
  IniCheckBox: TCheckBox;
 
procedure InitializeWizard();
begin
  IniCheckBox:= TCheckBox.Create(WizardForm);
  IniCheckBox.Left:= WizardForm.RunList.Left + 4;
  IniCheckBox.Top:= WizardForm.RunList.Top + 10;
  IniCheckBox.Width:= WizardForm.RunList.Width;
  IniCheckBox.Height:= 14
  IniCheckBox.Caption:=' Изменить язык интерфейса на русский';
  IniCheckBox.Parent:= WizardForm.FinishedPage;
end;
 
procedure DeinitializeSetup();
begin
  if WizardForm.CurPageID = WpFinished then
    begin
      if IniCheckBox.Checked then
        SetIniString('Language','CurrentLanguage', 'путь к файлу\Language\Russian.ini' ,ExpandConstant('{app}\Settings.ini'))
    end;
end;

Как сделать чтобы вместо "путь к файлу" было "{pf}\My Program" (надо чтобы брался путь с {app}). Как это изменить? И желательно без чекбокса все это оформить??

nik1967 26-03-2014 22:55 2329088

Цитата:

Цитата Ivan_009
Кстати как на финишной странице к примеру остановить показ слайд-шоу... »

Использовать KillTimer и скрытие AImg - ImgSetVisibility(AImg[i],false); либо AImg[i].Hide; - но не проверял - не уверен в правильности.

Dodakaedr, ну дык
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
 
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
 
[ Code] 
procedure CurPageChanged(CurPageID: Integer);
begin
  if WizardForm.CurPageID = WpFinished then SetIniString('Language','CurrentLanguage','RU',ExpandConstant('{app}\Language\Russian.ini'));
end;


читать дальше »
Код:

Pascal Scripting: SetIniString
Prototype:
function SetIniString(const Section, Key, Value, Filename: String): Boolean;

Description:
Writes a string to an INI file.


Ivan_009 26-03-2014 23:22 2329106

nik1967, Таймер какой то не убиваемый пробовал:

Код:

ImgSetVisibility(AImg[i],false);
KillTimer(0, Timer);

на секунду отключает дальше пошло и поехало... :shot:

nik1967 26-03-2014 23:31 2329110

Ivan_009, скинь скрип с файлами - посмотрю, как будет время (можно в личку).

Dodakaedr 26-03-2014 23:37 2329115

nik1967, не то. Твой скрипт создает
Код:

[Language]
CurrentLanguage=RU

А мне нужно чтобы было так
Код:

[Language]
CurrentLanguage=C:\Program Files\ImageConverter\Language\Russian.ini

И то чтобы C:\Program Files\ImageConverter бралось з инсталятора с константы {app}

Habetdin 27-03-2014 01:35 2329155

Цитата:

Цитата Dodakaedr
Как сделать чтобы вместо "путь к файлу" было "{pf}\My Program" (надо чтобы брался путь с {app}). Как это изменить? »

По аналогии с предыдущим параметром, можно было написать:
Код:

ExpandConstant('{app}\Language\Russian.ini')
Цитата:

Цитата Dodakaedr
И желательно без чекбокса все это оформить? »

Убрать весь код, создающий чекбокс и проверяющий его значение? Получаем:
Код:

procedure DeinitializeSetup();
begin
  if WizardForm.CurPageID = WpFinished then
    begin
      SetIniString('Language', 'CurrentLanguage', ExpandConstant('{app}\Language\Russian.ini'), ExpandConstant('{app}\Settings.ini'))
    end;
end;

Хотя, правильнее, по-моему, для данной цели для этого использовать секцию [INI], а не [Code]:
Код:

[INI]
Filename: "{app}\Settings.ini"; Section: "Language"; Key: "CurrentLanguage"; String: "{app}\Language\Russian.ini"


Offtopic
Есть Components/Tasks, INI (а еще конструкторы, генерирующие все необходимое), а они пишут всё в Code, при этом не зная основ этого самого Code :(

Dodakaedr 27-03-2014 08:40 2329192

Цитата:

Цитата Habetdin
Убрать весь код, создающий чекбокс и проверяющий его значение? Получаем: »

Супер, то что нужно.

Shkutu 27-03-2014 19:32 2329453

Доброго времени суток!
Подскажите плиз, можно ли в инно поменять порядок отображения стандартных страниц? Ну т е сначала тип, а потом выбор папки для установки, например.

Serega 27-03-2014 20:55 2329475

Цитата:

Цитата Shkutu
поменять порядок отображения стандартных страниц? »

Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpSelectDir: WizardForm.SelectComponentsPage.Show;
    wpSelectComponents: WizardForm.SelectDirPage.Show;
  end;
end;


Dodakaedr 27-03-2014 23:28 2329544


Как это окошко (Информационное) можно изменить: размер, название вверху, вставить картинку в нижнею часть?

saurn 28-03-2014 05:46 2329617

Dodakaedr, никак. Это стандартный MsgBox, редактировать его нельзя, за исключением текста и набора кнопок. В шапке есть пример Создание кастомного диалогового окна, как раз под этот случай.

Dinvin4ester 28-03-2014 10:02 2329657

Ребята привет.
Скрипт - http://sendfile.su/952086 и еще не показывает прогресс бар ,можно тоже сделать ее,а то я не использую сторонние архиваторы,только пользуюсь средствами инно.
Спасибо.

Raz3r 28-03-2014 10:46 2329669

Помогите пжста. Нужно сделать два чекбокса в деинсталле на удаление файлов конфигураций программы.
Вот часть моего кода:
читать дальше »
[UninstallDelete]
Type: filesandordirs; Name: "{app}\config"
Type: filesandordirs; Name: "{app}\files"
Type: files; Name: "{app}\ts3server.sqlitedb"

[code]
var
RunProg: TCheckBox;

procedure CheckBoxChecked;
begin
if RunProg.Checked then
MsgBox('CheckBox отмечен...', mbInformation, MB_OK);
end;

procedure GreatCheckBox;
begin
RunProg:= TCheckBox.Create(WizardForm);
with RunProg do
begin
Parent := WizardForm;
Caption := 'Удалить файлы конфигураций?';
SetBounds(140,330,150,15);
Cursor:= crHand;
Checked:= True;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpFinished then GreatCheckBox;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then CheckBoxChecked;
end;


Только вот я не знаю как связать секции [UninstallDelete] и [code]

Shkutu 28-03-2014 12:59 2329712

Serega, в таком варианте работает несовсем корректно. Страницы меняются, но не меняются шапки, т е на странице с выбором папки заголовок про выбор компонентов и наоборот. И кроме того, на странице выбора компонентов по кнопке "далее" выводится диалог о папке установки (типа папка существует, точно хотите установить туда)

saurn 28-03-2014 13:25 2329720

Shkutu, есть вот такой, старый, код Доброва:
читать дальше »
Код:

[Setup]
AppName=My program
AppVerName=My program 1.5
DefaultDirName={pf}\My program
;DisableDirPage=True

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Components]
Name: WB; Description: 'Мой компьютер' - Настройки; ExtraDiskSpaceRequired: 1048576

[code]
function OnShouldSkipPage(Sender: TWizardPage): Boolean;
begin
    if WizardForm.ComponentsList.Items.Count > 0 then WizardForm.Tag:= 1; // отображаются страницы выбора папки и компонентов
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
  wpSelectDir: if WizardForm.Tag = 1 then
    begin
        WizardForm.SelectDirPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
        WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectComponents)
        WizardForm.Hint:= WizardForm.PageDescriptionLabel.Caption; // запомнить SetupMessage(msgSelectDirDesc)
        WizardForm.PageDescriptionLabel.Caption:= SetupMessage(msgSelectComponentsDesc)
    end;
  wpSelectComponents: if WizardForm.Tag = 1 then
    begin
        WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
        WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
        WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir)
        WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint // иначе вместо названия программы [name]
    end;
  end;
End;

Procedure InitializeWizard;
Begin
    PageFromID(wpSelectDir).OnShouldSkipPage:= @OnShouldSkipPage
end;


Dodakaedr 28-03-2014 17:39 2329817

saurn,
читать дальше »
Код:

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

[cоde]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif


const
  GWL_EXSTYLE = -20;
  WS_EX_APPWINDOW = $40000;
  WS_EX_TOOLWINDOW = $80;
  //SW_HIDE = 0;
  SW_NORMAL = 1;
  GWL_HWNDPARENT = -8;
  GCL_STYLE = -26;
  CS_NOCLOSE = $200;
  WM_CLOSE = $10;
//  hhkAtlTab = 101;
//  hhkAtlSpace = 102;
//  MOD_ALT = 1;
//  VK_TAB = 9;
  MB_ICONHAND = $00000010;
//  MB_ICONQUESTION = $00000020;
  MB_ICONEXCLAMATION = $00000030;
  MB_ICONASTERISK = $00000040;
  MB_USERICON = $00000080;
//  MB_ICONWARNING                = MB_ICONEXCLAMATION;
//  MB_ICONERROR                  = MB_ICONHAND;
//  MB_ICONINFORMATION            = MB_ICONASTERISK;
  MB_ICONSTOP                    = MB_ICONHAND;
   
type
  HDC = LongWord;
  HFONT = LongWord;
  HGDIOBJ = LongWord;
 
  STR_SIZE = record
    cx: Longint;
    cy: Longint;
  end;
 
  _MESSAGE_INFO = record
    hMsgLabel: HWND;
    dTimeOut: DWORD;
    dStartTime: DWORD;
    hMsgForm: HWND;
  end;
   
var
  MESSAGE_INFO: _MESSAGE_INFO;
   


//function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLong{#A}@user32.dll stdcall';
//function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLong{#A}@user32.dll stdcall';
//function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL; external 'ShowWindow@user32.dll stdcall';
function GetDC(hWnd: HWND): HDC; external 'GetDC@user32.dll stdcall';
function SelectObject(DC: HDC; p2: HGDIOBJ): HGDIOBJ; external 'SelectObject@gdi32.dll stdcall';
function GetTextExtentPoint32(DC: HDC; Str: PChar; Count: Integer; var Size: STR_SIZE): BOOL; external 'GetTextExtentPoint32{#A}@gdi32.dll stdcall';
function ReleaseDC(hWnd: HWND; hDC: HDC): Integer; external 'ReleaseDC@user32.dll stdcall';
function StrFromTimeInterval(var pszOut: Char; cchMax: UINT; dwTimeMS: DWORD; digits: Byte): Integer; external 'StrFromTimeInterval{#A}@shlwapi.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';
//function RegisterHotKey(hWnd: HWND; id: Integer; fsModifiers, vk: UINT): BOOL; external 'RegisterHotKey@user32.dll stdcall';
//function UnregisterHotKey(hWnd: HWND; id: Integer): BOOL; external 'UnregisterHotKey@user32.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function SetWindowText(hWnd: HWND; lpString: String): BOOL; external 'SetWindowText{#A}@user32.dll stdcall';
function MessageBeep(uType: UINT): BOOL; external 'MessageBeep@user32.dll stdcall';
   
function GetStrSizeInPixels(Font: TFont; Caption: String): STR_SIZE;
var
  DC: HDC;
  SaveFont: HFONT;
begin
  DC := GetDC(0);
  try
    SaveFont := SelectObject(DC, Font.Handle);
    GetTextExtentPoint32(DC, PChar(Caption), Length(Caption), Result);
    SelectObject(DC, SaveFont);
  finally
    ReleaseDC(0, DC);
  end;
end;

function TicksToTime(Ticks: DWORD): String;
var
    i: Byte;
    arr: array [0..31] of Char;
begin
    for i := 0 to StrFromTimeInterval(arr[0], sizeof(arr), Ticks, 8)-1 do Result := Result + arr[i];
end;

function CharCount(C: Char; aStr: String): Integer;
var
  i: Integer;
begin
  Result := 0;
  for i := 1 to Length(aStr) do if aStr[i] = C then Result := Result + 1;
end;

procedure ATimeOutProc;
var
  PassedTime: DWORD;
begin
  PassedTime := GetTickCount-MESSAGE_INFO.dStartTime;
  if PassedTime >= MESSAGE_INFO.dTimeOut then PostMessage(MESSAGE_INFO.hMsgForm, WM_CLOSE, 0, 0);
  SetWindowText(MESSAGE_INFO.hMsgLabel, TicksToTime(MESSAGE_INFO.dTimeOut-PassedTime));
end;

function ShowMessageEx(AText, ACaption: string; AType: UINT; AMsgTyp: TMsgBoxType; ATimeOut: Integer): Integer;
var
  MsgBoxForm: TSetupForm;
  MsgLabel: TLabel;
  Size: STR_SIZE;
  szStatus: TNewStaticText;
  ATimeOutTimer: LongWord;
begin
  MsgBoxForm := CreateCustomForm;
  with MsgBoxForm do
  begin
    Position := poScreenCenter;
    BorderStyle := bsDialog;
    Caption := ACaption;
    Color := clBtnFace;
    ShowWindow(GetWindowLong(MsgBoxForm.Handle, GWL_HWNDPARENT), SW_HIDE);
//    RegisterHotKey(Handle, hhkAtlTab, MOD_ALT, VK_TAB);
    MsgLabel := TLabel.Create(nil)
    with MsgLabel do
    begin
      AutoSize := False;
      WordWrap := True;
      Parent := MsgBoxForm;
      Caption := AText;
      Size := GetStrSizeInPixels(Font, AText);
      Left := ScaleX(16);
      Top := ScaleY(16);
      Font.Size := 10;
      if (Size.cx > 300) and (Size.cx <= 500) then
      begin
        Width := ScaleX(Size.cx);
        Height := ScaleY(Size.cy)+Size.cy*CharCount(#13,AText)+3;
      end else if (Size.cx > 500) then
      begin
        Width := ScaleX(500);
        Height := ScaleY(Size.cy*Round(Size.cx/500)+Size.cy*CharCount(#13,AText));
      end else if (Size.cx < 300) then
      begin
        Width := ScaleX(300);
        Height := (Size.cy);
      end;
    end;

    ClientWidth := MsgLabel.Width + ScaleX(30);
    ClientHeight := MsgLabel.Height + ScaleY(70);

    with TButton.Create(nil) do
    begin
      Parent := MsgBoxForm;
      SetBounds(MsgBoxForm.ClientWidth - ScaleX(90), MsgBoxForm.ClientHeight - ScaleY(35), ScaleX(71), ScaleY(25));
      Cursor := crHand;
      case AType of
        MB_OKCANCEL:
        begin
          ModalResult := mrOk;
          Caption := SetupMessage(msgButtonOK);
        end;
        MB_YESNO:
        begin
          ModalResult := mrYes;
          Caption := SetupMessage(msgButtonYes);
        end;
        MB_OK:
        begin
          ModalResult := mrOk;
          Caption := SetupMessage(msgButtonOk);
        end;
      end;
    end;

    if AType <> MB_OK then
    with TButton.Create(nil) do
    begin
      Caption := SetupMessage(msgButtonNo);
      Parent := MsgBoxForm;
      SetBounds(MsgBoxForm.ClientWidth - ScaleX(175), MsgBoxForm.ClientHeight - ScaleY(35), ScaleX(71), ScaleY(25));
      Cursor := crHand;
      case AType of
        MB_OKCANCEL:
        begin
          ModalResult := mrCancel;
          Caption := SetupMessage(msgButtonCancel);
        end;
        MB_YESNO:
        begin
          ModalResult := mrNo;
          Caption := SetupMessage(msgButtonNo);
        end;
      end;
    end;

    if ATimeOut <> 0 then
    begin
      szStatus := TNewStaticText.Create(nil);
      with szStatus do
      begin
        Parent := MsgBoxForm;
        WordWrap := True;
        SetBounds(ScaleX(16), MsgBoxForm.ClientHeight - ScaleY(25), ScaleX(71), ScaleY(25));
      end;
      MESSAGE_INFO.hMsgLabel := szStatus.Handle;
      MESSAGE_INFO.dTimeOut := ATimeOut;
      MESSAGE_INFO.dStartTime := GetTickCount;
      MESSAGE_INFO.hMsgForm := MsgBoxForm.Handle;
      ATimeOutTimer := SetTimer(0, 777, 1, CallbackAddr('ATimeOutProc'));
    end;
   
    case AMsgTyp of
      mbError: MessageBeep(MB_ICONWARNING);
      mbInformation: if not MessageBeep(MB_ICONINFORMATION) then MessageBeep(MB_ICONASTERISK);
      mbCriticalError: if not MessageBeep(MB_ICONSTOP) then MessageBeep(MB_ICONERROR);
    end;

    case AType of
      MB_OKCANCEL:
      case ShowModal of
        mrOk: Result := IDOK;
        mrCancel: Result := IDCANCEL;
        else Result := IDCANCEL;
      end;
      MB_YESNO:
      case ShowModal of
        mrYes: Result := IDYES;
        mrNo: Result := IDNO;
      else Result := IDNO;
      end;
      MB_OK:
      begin
        ShowModal;
        Result := IDOK;
      end;
    end;
    ShowWindow(GetWindowLong(MsgBoxForm.Handle, GWL_HWNDPARENT), SW_NORMAL);
    KillTimer(0, ATimeOutTimer);
//    UnregisterHotKey(Handle,hhkAtlTab);
//    UnregisterHotKey(Handle,hhkAtlSpace);
    Free;
  end;
end;


function InitializeSetup(): Boolean;
begin
  if ShowMessageEx( ' Названия архивов:' + #13#10 +
                    'hl2_update.exe' + #13#10 +
                    'hl2_ep1_update.exe' + #13#10 +
                    'hl2_ep2_update.exe' + #13#10 +
                    'portal_update.exe'
  , SetupMessage(msgErrorTitle), MB_YESNO, mbCriticalError, 7000) = IDNO then MsgBox('Cancel', mbCriticalError, MB_OK);
end;


Почему inno ultra в этом коде выдает что 'PChar' неизвестный тип (67 строка)?

vint56 28-03-2014 18:16 2329823

Dodakaedr
type
#ifdef UNICODE
#define A "W"
PChar = PAnsiChar;
#else
#define A "A"
#endif

Dodakaedr 28-03-2014 18:18 2329826

vint56, спс

Serega 28-03-2014 19:31 2329864

Цитата:

Цитата Shkutu
в таком варианте работает несовсем корректно. Страницы меняются, но не меняются шапки, т е на странице с выбором папки заголовок про выбор компонентов и наоборот. »

Тупой копи-паст я не приветствую, где же хоть немного подумать?!!! Ваш вопрос был:
Цитата:

Цитата Shkutu
можно ли в инно поменять порядок отображения стандартных страниц? »

Я именно это и показал... извините, что решил дать вам шанс лишний раз подумать...
Поверьте, только после того, как вы начнёте переделывать код под свои нужды, только тогда вы начнёте разбираться.

Dodakaedr 29-03-2014 00:14 2329991

Как добавить чекбокс в деинсталятор с функцией не удалять файл?

Mr.Evgen 29-03-2014 16:22 2330209

Здравствуйте. Как можно сделать инсталятор как на скриншоте? Может есть готовый скрипт для inno setup? Главное надо, чтобы пользователь мог выбрать между обычной и портативной версией.

Serega 29-03-2014 19:51 2330306

Цитата:

Цитата Dodakaedr
Как добавить чекбокс в деинсталятор »

Пример для расширенной версии

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
ru.CheckBoxDel=Удалить все настройки

[Dirs]
Name: {userappdata}\MyTestDir

[UninstallDelete]
Name: {userappdata}\MyTestDir; Type: filesandordirs; Check: DelUserSettings

[Code]
procedure Delay(Milliseconds: Integer); forward;

var
 
NextClick: Boolean;
  DelOptions: Boolean;
 
function DelUserSettings: Boolean;
begin
 
Result := DelOptions;
end;

procedure NextBtnClick(Sender: TObject);
begin
 
NextClick := True;
end;

procedure chkDelClick(Sender: TObject);
begin
 
DelOptions := TCheckBox(Sender).Checked;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
 
msg: string;
  NextBtn: TButton;
  chkDel: TCheckBox;
begin
  if
CurUninstallStep = usUninstall then
    try
      with
UninstallProgressForm do
        begin
         
ProgressBar.Hide;
          msg := StatusLabel.Caption;
        end;

      NextClick := False;
      NextBtn := TButton.Create(UninstallProgressForm);
      with NextBtn do
        begin
         
Parent := UninstallProgressForm;
          SetBounds(UninstallProgressForm.CancelButton.Left, UninstallProgressForm.CancelButton.Top,
            UninstallProgressForm.CancelButton.Width, UninstallProgressForm.CancelButton.Height);
          Caption := SetupMessage(msgButtonNext);
          OnClick := @NextBtnClick;
        end;

      chkDel := TCheckBox.Create(UninstallProgressForm);
      with chkDel do
        begin
         
Parent := UninstallProgressForm.InstallingPage;
          SetBounds(UninstallProgressForm.StatusLabel.Left + ScaleX(20), UninstallProgressForm.StatusLabel.Top + ScaleY(50), ScaleX(250), ScaleY(14));
          Caption := CustomMessage('CheckBoxDel');
          Checked := False;
          OnClick := @chkDelClick;
        end;

      while not NextClick do
       
Delay(500);
    finally
     
chkDel.Hide;
      NextBtn.Free;
      with UninstallProgressForm do
        begin
         
ProgressBar.Show;
          StatusLabel.Caption := msg;
        end;
    end;
end;

const
 
PM_REMOVE    = 1;
  QS_ALLINPUT  = $000000FF;
  WAIT_TIMEOUT = $00000102;

function PeekMessage(var lpMsg: TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';
function MsgWaitForMultipleObjects(nCount: DWORD; var pHandles: THandle; fWaitAll: BOOL; dwMilliseconds, dwWakeMask: DWORD): DWORD;
  external 'MsgWaitForMultipleObjects@user32.dll stdcall';
function CreateEvent(lpEventAttributes: Longint; bManualReset, bInitialState: BOOL; lpName: PChar): THandle; external 'CreateEventA@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';

procedure Application_ProcessMessages;
var
 
Msg: TMsg;
begin
  while
PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
    begin
     
TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;
end;

procedure Delay(Milliseconds: Integer);
var
 
dwTick: DWORD;
  hEvent: THandle;
begin
 
hEvent := CreateEvent(0, False, False, '');
  try
   
dwTick := GetTickCount + DWORD(Milliseconds);
    while (Milliseconds > 0) and (MsgWaitForMultipleObjects(1, hEvent, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
      begin
       
Application_ProcessMessages;
        Milliseconds := dwTick - GetTickCount;
      end;
  finally
   
CloseHandle(hEvent);
  end;
end;


Dodakaedr 29-03-2014 19:56 2330311

Serega, спасибо, но нету что-то по проще. Мне нужно чтобы не удалился только один файл если отмечен чекбокс. Inno Ultra считается расширенной?

Debugger 29-03-2014 21:13 2330326

Никак не могу понять в чем дело... Имеется такой вот код:
Код:

function CheckPSE9: Boolean;
  begin
    Result := RegKeyExists(HKLM32, 'SOFTWARE\Adobe\Photoshop Elements\9.0\PluginPath')
  end;

function CheckPSE10: Boolean;
  begin
    Result := RegKeyExists(HKLM32, 'SOFTWARE\Adobe\Photoshop Elements\10.0\PluginPath')
  end;
 
function CheckPSE11: Boolean;
  begin
    Result := RegKeyExists(HKLM32, 'SOFTWARE\Adobe\Photoshop Elements\11.0\PluginPath')
  end;

Source: c:\Alien Skin\work32\Plug-ins\Alien Skin\Blow Up 3\*; DestDir: {reg:HKLM32\SOFTWARE\Adobe\Photoshop Elements\9.0,PluginPath}\Alien Skin\Blow Up 3; Components: BlowUp3\BlowUp3PSE9; Check: "IsWin64"; Flags: recursesubdirs createallsubdirs

Source: c:\Alien Skin\work32\Plug-ins\Alien Skin\Blow Up 3\*; DestDir: {reg:HKLM32\SOFTWARE\Adobe\Photoshop Elements\10.0,PluginPath}\Alien Skin\Blow Up 3; Components: BlowUp3\BlowUp3PSE10; Check: "IsWin64"; Flags: recursesubdirs createallsubdirs

Source: c:\Alien Skin\work32\Plug-ins\Alien Skin\Blow Up 3\*; DestDir: {reg:HKLM32\SOFTWARE\Adobe\Photoshop Elements\11.0,PluginPath}\Alien Skin\Blow Up 3; Components: BlowUp3\BlowUp3PSE11; Check: "IsWin64"; Flags: recursesubdirs createallsubdirs

То есть идет проверка наличия программы, и если она есть, установка плагина в папку которая берется из реестра. Но установка проходит нормально только для Photoshop Elements 11. В случае девятого и десятого инсталлятор не может найти ключ в реестре (проверялось при помощи Process Monitor), хотя он есть, и соответственно ставит плагин на системный диск. Причем в секции кода ключ находится нормально. В чем может быть дело? Всю голову уже сломал... Единственное что приходит в голову это то, что когда я писал скрипт, то только для одиннадцатой версии строчку писал руками, а для остальных копипастил ее и потом исправлял, но не может же быть проблема из-за этого.

Serega 30-03-2014 17:11 2330624

Цитата:

Цитата Dodakaedr
нету что-то по проще. Мне нужно чтобы не удалился только один файл если отмечен чекбокс »

Проще только с сообщением
Пример

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
ru.Del=Удалить файл Справки

[Files]
Source: {#CompilerPath}\ISetup.chm; DestDir: {userappdata}; Flags: ignoreversion uninsneveruninstall

[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if
(CurUninstallStep = usUninstall) and
   
(MsgBox(CustomMessage('Del'), mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
     
DeleteFile(ExpandConstant('{userappdata}\ISetup.chm'));
end;


Цитата:

Цитата Dodakaedr
Inno Ultra считается расширенной? »

В составе Inno Ultra есть расширенная версия.

Dodakaedr 30-03-2014 17:14 2330627

Serega, спс!

Serega 30-03-2014 18:13 2330645

В PM мне написали, что указанный в шапке пример Отображение размера устанавливаемого файла работает не корректно, а именно функция BytesToReadable не работает с размерами выше мегабайта. Проверил, действительно, в новых версиях Inno, работает не правильно.
Само сообщение уже отредактировать не могу, т.к. тема в архиве, поэтому приведу исправленный вариант в этом сообщении:
Пример

Код:

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
ru.Bt=Бт
ru.Kb=Кб
ru.Mb=Мб
ru.Gb=Гб
ru.Tb=Тб
ru.Pb=Пб
ru.Eb=Эб

[Code]
var
 
ProgressLabel, SizeLabel: TLabel;

function BytesToReadable(Bytes: string; Signs: Integer): string;
{ Перевод числа в значение Бт/Кб/Мб/Гб/Тб/Пб/Эб (Signs - количество знаков после запятой)}
var
 
ABytes: Extended;
  i: Integer;
begin
 
i := 0;
  try
   
ABytes := StrToFloat(Bytes);
  except
  end
;
  while Int(ABytes) >= 1024 do
    begin
     
ABytes := ABytes/1024;
      i := i + 1;
    end;
  case i of
   
0: Result := FloatToStr(Int(ABytes)) + Padl(ExpandConstant('{cm:Bt}'), 1);                // Байт
   
1: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Kb}'), [ABytes]); // Килобайт
   
2: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Mb}'), [ABytes]); // Мегабайт
   
3: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Gb}'), [ABytes]); // Гигабайт
   
4: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Tb}'), [ABytes]); // Терабайт
    // больше Терабайта конечно не пригодится, покрайней мере в ближайшее время, но всё же...
   
5: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Pb}'), [ABytes]); // Петабайт
   
6: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Eb}'), [ABytes]); // Эксабайт
 
end;
  StringChange(Result, ',', '.');
end;

function Size64(Hi, Lo: Integer): Extended;
begin
 
Result := Lo;
  if Lo < 0 then
   
Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
  for Hi := Hi - 1 downto 0 do
   
Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
end;

function GetFileSize(const FileName: string): Extended;
var
 
FindRec: TFindRec;
begin
 
Result := 0;
  if FindFirst(FileName, FindRec) then
    try
      if
FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
       
Result := Size64(FindRec.SizeHigh, FindRec.SizeLow);
    finally
     
FindClose(FindRec);
    end;
end;

procedure Progress;
begin
  with
WizardForm.ProgressGauge do
   
ProgressLabel.Caption := IntToStr(Position*100/(Max - Min)) + '%';
  SizeLabel.Caption := BytesToReadable(FloatToStr(GetFileSize(ExpandConstant(CurrentFileName))), 1);
end;

procedure InitializeWizard();
begin
 
ProgressLabel := TLabel.Create(WizardForm);
  with WizardForm.ProgressGauge do
    begin
     
ProgressLabel.Top := Top + Height + ScaleY(8);
      ProgressLabel.Left := Left + Width/2 - ScaleX(8);
      ProgressLabel.AutoSize := True;
      ProgressLabel.Parent := WizardForm.InstallingPage;
    end;

  SizeLabel := TLabel.Create(WizardForm);
  with WizardForm.ProgressGauge do
    begin
     
SizeLabel.Top := Top + Height + ScaleY(8);
      SizeLabel.Left := Left;
      SizeLabel.AutoSize := True;
      SizeLabel.Parent := WizardForm.InstallingPage;
    end;
end;


Dinvin4ester 30-03-2014 18:53 2330658

Ребята ну помогите мне пожалуйста.

Raz3r 30-03-2014 19:28 2330669

А кто поможет мне? 2 чекбокса в uninstaller'е сделать не могу для удаления созданных программой файлов. Один для удаления папки с конфигурациями, другой для с папками файлов сервера, созданных этой же программой.
Пытался этим кодом че-то сделать, но ничего не получилось:

читать дальше »
[UninstallDelete]
Type: files; Name: "{app}\config.ini"; Check: MakeLaunchIcon
Type: files; Name: "{app}\server.ini"; Check: MakeLaunchIcon2

[code]
var
LaunchIcon, LaunchIcon2: TCheckBox;

function MakeLaunchIcon: Boolean;
begin
Result:=LaunchIcon.Checked;
end;

function MakeLaunchIcon2: Boolean;
begin
Result:=LaunchIcon2.Checked;
end;

Procedure InitializeWizard();
begin
LaunchIcon := TCheckBox.Create(WizardForm);
with LaunchIcon do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Удалить файлы конфигураций?';
Left := ScaleX(0);
Top := WizardForm.DirEdit.Top + 37;
Width := ScaleX(300);
Height := ScaleY(15);
TabOrder := 0;
Checked := True;
end;
end;
begin
LaunchIcon2 := TCheckBox.Create(WizardForm);
with LaunchIcon2 do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Удалить файлы сервера?';
Left := ScaleX(0);
Top := WizardForm.DirEdit.Top + 57;
Width := ScaleX(300);
Height := ScaleY(15);
TabOrder := 0;
Checked := True;
end;
end;
end;


И ещё отдельный вопрос есть, как записать кавычки в ValueData в секции [Registry]?
Например: Root: HKLM; Subkey: "SOFTWARE\Classes\ts3file\shell\open\command"; ValueType: string; ValueName: "@"; ValueData: "{app}\client.exe "%1""; Flags: uninsdeletekey

Dodakaedr 30-03-2014 19:32 2330670

Цитата:

Цитата Raz3r
как записать кавычки в ValueData в секции [Registry]? »

Код:

Root: HKLM; Subkey: "SOFTWARE\Classes\ts3file\shell\open\command"; ValueType: string; ValueName: "@"; ValueData: "{app}\client.exe ""%1"""; Flags: uninsdeletekey
Цитата:

Цитата Raz3r
2 чекбокса в uninstaller'е »

Посмотри здесь
http://forum.oszone.net/post-2330306-145.html

Raz3r 30-03-2014 20:14 2330676

Dodakaedr, спасибо попробую разобраться в этом кодище. Заодно можно узнать вот пишу я ValueName: "@", а мне нужна приплюснутая @, так как требуют параметры программы, есть ли разница или они одинаковые? Как вписать в Inno Setup другой вариант?

Dodakaedr 30-03-2014 20:16 2330677

Цитата:

Цитата Raz3r
приплюснутая »

это какая?

Raz3r 30-03-2014 20:21 2330680

Dodakaedr, в этом коде есть она, здесь не знаю как отобразить
http://forum.oszone.net/post-2330306-145.html

Dodakaedr 30-03-2014 20:24 2330681

Цитата:

Цитата Raz3r
здесь не знаю как отобразить »

Разницы нету

Raz3r 30-03-2014 20:25 2330683

Dodakaedr, а как её ввести то?

Dodakaedr 30-03-2014 20:26 2330685

Raz3r, так и вводи @

Цитата:

Цитата Raz3r
так как требуют параметры программы »

А не пробовал копировать?

Raz3r 30-03-2014 20:29 2330689

Цитата:

А не пробовал копировать?
Пробовал, отображается обычная @. Думал мож alt-код какой надо.

Dodakaedr 30-03-2014 20:30 2330690

Цитата:

Цитата Raz3r
Пробовал, отображается обычная @ »

Какая программа требует? Что-то я вообще не понял.....

Raz3r 30-03-2014 20:40 2330693

Dodakaedr, в реестре такой параметр есть, мне просто нужно сохранить пути реестра. TeamSpeak называется

Dodakaedr 30-03-2014 20:47 2330695

Цитата:

Цитата Raz3r
в реестре такой параметр есть »

Если вы используете inno ultra то там есть программа Converter Reg to ISS, если нет то в шапке темы она есть. Через стандартный редактор реестра извлеките вам нужный ключ и через Converter Reg to ISS конвертируйте в формат inno setup, потом запустите конвертированный файл и скопируйте уже готовый код вашего ключа.

Raz3r 30-03-2014 20:53 2330698

Dodakaedr, спасибо попробую, последний вопрос, как в
Root: HKLM; Subkey: "SOFTWARE\TeamSpeak 3 Client"; ValueType: string; ValueName: "InstallMode"; ValueData: "AllUsers"; Flags: uninsdeletekey
...указать, чтоб параметры создались именно в SOFTWARE, а не в Wow6432Node по умолчанию на 64 бит платформе?

Dodakaedr 30-03-2014 20:57 2330700

Цитата:

Цитата Raz3r
по умолчанию на 64 бит платформе? »

Попробуй так, сам лично не проверял.
Код:

Root: HKLM64; Subkey: "SOFTWARE\TeamSpeak 3 Client"; ValueType: string; ValueName: "InstallMode"; ValueData: "AllUsers"; Flags: uninsdeletekey

diman_21Ru 30-03-2014 23:25 2330731

Какие бывают типы сжатий ,заранее благодарю =)

Nordek 31-03-2014 01:53 2330765

Цитата:

Цитата diman_21Ru
Какие бывают типы сжатий »


zip
zip
; zip - сжатие / 9 - Степень сжатия (от 1 до 9)
Compression=zip/9

; Внутреннее сжатие (none, fast, normal, max или ultra )
InternalCompressLevel=ultra

; Потоки сжатия (auto, 1 или 2)
CompressionThreads=2

; Непрерывное сжатие
SolidCompression=True

Пример:
Код:

Compression=zip/9
InternalCompressLevel=ultra
CompressionThreads=2
SolidCompression=True

bzip
bzip
; bzip - сжатие / 1 - Степень сжатия (от 1 до 9)
Compression=bzip/9

; Внутреннее сжатие (none, fast, normal, max или ultra )
InternalCompressLevel=ultra

; Потоки сжатия (auto, 1 или 2)
CompressionThreads=2

; Непрерывное сжатие
SolidCompression=True

Пример:
Код:

Compression=bzip/9
InternalCompressLevel=ultra
CompressionThreads=2
SolidCompression=True

lzma
lzma
; lzma - сжатие / ultra64 - Степень сжатия (fast, normal, max, ultra и ultra64)
Compression=lzma/ultra64

; Внутреннее сжатие (none, fast, normal, max или ultra)
InternalCompressLevel=ultra

; Потоки сжатия (auto, 1 или 2)
CompressionThreads=2

; Непрерывное сжатие
SolidCompression=True

Пример:
Код:

Compression=lzma/ultra64
InternalCompressLevel=ultra
CompressionThreads=2
SolidCompression=True

lzma2
lzma2
; lzma2 - сжатие / ultra64 - Степень сжатия (fast, normal, max, ultra и ultra64)
Compression=lzma2/ultra64

; Внутреннее сжатие (none, fast, normal, max или ultra)
InternalCompressLevel=ultra

; Потоки сжатия (auto, 1 или 2)
CompressionThreads=2

; Непрерывное сжатие
SolidCompression=True

Пример:
Код:

Compression=lzma2/ultra64
InternalCompressLevel=ultra
CompressionThreads=2
SolidCompression=True

none
none
; none - без сжатия
Compression=none

; Внутреннее сжатие (none, fast, normal, max или ultra)
InternalCompressLevel=ultra

; Потоки сжатия (auto, 1 или 2)
CompressionThreads=2

; Непрерывное сжатие
SolidCompression=True

Пример:
Код:

Compression=none
InternalCompressLevel=ultra
CompressionThreads=2
SolidCompression=True



Воспользуйся программами InnoIDE, ISTool или Inno Script Studio
InnoIDE
"Проект » Настройки » Сжатие"

ISTool
"Проект » Параметры дистрибутива » Компилятор"

Inno Script Studio
"Проект » Параметры установки » Сжатие (Project » Setup Options » Compression)"

Raz3r 31-03-2014 08:34 2330796

Dodakaedr, просмотрел код, который по той ссылке. А нельзя как-нибудь попроще найти способ? Просто не понимаю как с этим кодом сделать 2 чекбокса на деинсталлер.

Dodakaedr 31-03-2014 09:36 2330813

Raz3r, мне тоже нужно было создать чекбокс и мне дали такой код, а когда я попросил попроще то ответили:
http://forum.oszone.net/post-2330624-148.html
Так что если найдете по проще, то поделитесь....

Dodakaedr 31-03-2014 10:16 2330834

Где можно посмотреть примеры реализации проверок IsWin32, IsWin64 или тому подобное. В справке читал, хочется поподробней посмотреть их реализацию?

saurn 31-03-2014 10:53 2330860

Dodakaedr, в Inno нет вшитой функции IsWin32.
Простейшее использование IsWin64 на примере установки файлов:
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=...


[Files]
;install on x64
Source: MyProg-x64.exe; DestDir: {app}; Check: IsWin64;

;install on x86
Source: MyProg.exe; DestDir: {app}; Check: not IsWin64;


diman_21Ru 31-03-2014 10:53 2330862

Можно ли реализовать о выходе новой версии и добавить уведомление в любую игру,заранее благодарю

Stealthmax 31-03-2014 11:02 2330864

Подскажите, как добавить событие для ShowButton, чтобы при нажатии выполнялось действие показать/скрыть панель и сохранялось событие чекбокса при изменении и закрытии панели.
читать дальше »
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppExeName "MyProg.exe"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
ShowLanguageDialog=no
Compression=lzma
SolidCompression=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

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

[Files]
Source: "Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

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

[_Code]
var
  SettingPanel: TPanel;
  One: TNewCheckBox;
  Two: TNewCheckBox;
  ShowButton: TNewButton;

procedure ShowButtonClick(Sender: TObject); forward;

procedure RedesignWizardForm;
begin
  { SettingPanel }
  SettingPanel := TPanel.Create(WizardForm);
  with SettingPanel do
  begin
    Name := 'SettingPanel';
    Parent := WizardForm.WelcomePage;
    Left := ScaleX(168);
    Top := ScaleY(0);
    Width := ScaleX(329);
    Height := ScaleY(314);
    Visible := False;
    Caption := '';
  end;

  { One }
  One := TNewCheckBox.Create(WizardForm);
  with One do
  begin
    Name := 'One';
    Parent := SettingPanel;
    Left := ScaleX(8);
    Top := ScaleY(24);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Checked := True;
    State := cbChecked;
    Visible := False;
  end;

  { Two }
  Two := TNewCheckBox.Create(WizardForm);
  with Two do
  begin
    Name := 'Two';
    Parent := SettingPanel;
    Left := ScaleX(8);
    Top := ScaleY(48);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Checked := True;
    State := cbChecked;
    Visible := False;
  end;

  One.TabOrder := 0;
  Two.TabOrder := 1;

  SettingPanel.TabOrder := 2;

  { ShowButton }
  ShowButton := TNewButton.Create(WizardForm);
  with ShowButton do
  begin
    Name := 'ShowButton';
    Parent := WizardForm;
    Left := ScaleX(16);
    Top := ScaleY(325);
    Width := ScaleX(75);
    Height := ScaleY(25);
    Caption := 'Show';
    OnClick := @ShowButtonClick;
  end;

  ShowButton.TabOrder := 5;
end;

procedure ShowButtonClick(Sender: TObject);
begin
  SettingPanel.Visible := True;
  One.Visible := True;
  Two.Visible := True;
  ShowButton.Caption := 'Hide';
end;


procedure InitializeWizard();
begin
  RedesignWizardForm;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpWelcome then SettingPanel.Visible := False;
end;


Nordek 31-03-2014 11:12 2330868

Цитата:

Цитата Dodakaedr
примеры реализации проверок IsWin32, IsWin64 »

Код:

[Setup]
AppName=IsWin
AppVersion=1.5
DefaultDirName={pf}\IsWin
DefaultGroupName=IsWin
OutputDir=.

[Files]
Source: MyProg32.exe; DestDir: {app}; Check: not IsWin64; Flags: ignoreversion
Source: MyProg64.exe; DestDir: {app}; Check: IsWin64; Flags: ignoreversion

[Registry]
Root: HKLM; SubKey: SOFTWARE\My Program; ValueType: string; ValueName: Install Dir; ValueData: {app}; Flags: uninsdeletekey; Check: not IsWin64
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\My Program; ValueType: string; ValueName: Install Dir; ValueData: {app}; Flags: uninsdeletekey; Check: IsWin64

[Run]
Filename: {app}; Flags: shellexec nowait postinstall; Description: Открыть папку {app}
Filename: {app}\MyProg32.exe; Description: Выполнить MyProg32; Check: not IsWin64; Flags: nowait postinstall
Filename: {app}\MyProg64.exe; Description: Выполнить MyProg64; Check: IsWin64; Flags: nowait postinstall


Код:

[Setup]
AppName=IsWin
AppVersion=1.5
DefaultDirName={pf}\IsWin
DefaultGroupName=IsWin
OutputDir=.

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl;
Name: en; MessagesFile: compiler:Languages\Russian.isl;

[CustomMessages]
ru.IsWin32=У вас 32-битная система, программа будет установлена в папку по умолчанию:
ru.IsWin64=У вас 64-битная система, программа будет установлена в папку по умолчанию:
en.IsWin32=32-bit program files reside in:
en.IsWin64=64-bit program files reside in:

[Files]
Source: MyProg32.exe; DestDir: {app}; Check: not IsWin64; Flags: ignoreversion
Source: MyProg64.exe; DestDir: {app}; Check: IsWin64; Flags: ignoreversion

[Registry]
Root: HKLM; SubKey: SOFTWARE\My Program; ValueType: string; ValueName: Install Dir; ValueData: {app}; Flags: uninsdeletekey; Check: not IsWin64
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\My Program; ValueType: string; ValueName: Install Dir; ValueData: {app}; Flags: uninsdeletekey; Check: IsWin64

[Run]
Filename: {app}; Flags: shellexec nowait postinstall; Description: Открыть папку {app}
Filename: {app}\MyProg32.exe; Description: Выполнить MyProg32; Check: not IsWin64; Flags: nowait postinstall
Filename: {app}\MyProg64.exe; Description: Выполнить MyProg64; Check: IsWin64; Flags: nowait postinstall

[Code]
function InitializeSetup: Boolean;
begin
if
IsWin64 then
MsgBox(ExpandConstant('{cm:IsWin64}') + ExpandConstant('{pf64}'), mbInformation, MB_OK)
else
MsgBox(ExpandConstant('{cm:IsWin32}') + ExpandConstant('{pf32}'), mbInformation, MB_OK);
result:=true;
end;


nik1967 31-03-2014 12:12 2330896

Stealthmax,
читать дальше »
Код:

#define MyAppName "My Program"
#define MyAppVersion "1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppExeName "MyProg.exe"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
ShowLanguageDialog=no
Compression=lzma
SolidCompression=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

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

[Files]
Source: "Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

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

[_Code]
var
  SettingPanel: TPanel;
  One: TNewCheckBox;
  Two: TNewCheckBox;
  ShowButton: TNewButton;
  FlagSB: Boolean;

procedure ShowButtonClick(Sender: TObject); forward;

procedure RedesignWizardForm;
begin
  { SettingPanel }
  SettingPanel := TPanel.Create(WizardForm);
  with SettingPanel do
  begin
    Name := 'SettingPanel';
    Parent := WizardForm.WelcomePage;
    Left := ScaleX(168);
    Top := ScaleY(0);
    Width := ScaleX(329);
    Height := ScaleY(314);
    Caption := '';
  end;

  { One }
  One := TNewCheckBox.Create(WizardForm);
  with One do
  begin
    Name := 'One';
    Parent := SettingPanel;
    Left := ScaleX(8);
    Top := ScaleY(24);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Checked := True;
    State := cbChecked;
  end;

  { Two }
  Two := TNewCheckBox.Create(WizardForm);
  with Two do
  begin
    Name := 'Two';
    Parent := SettingPanel;
    Left := ScaleX(8);
    Top := ScaleY(48);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Checked := True;
    State := cbChecked;
  end;

  One.TabOrder := 0;
  Two.TabOrder := 1;

  SettingPanel.TabOrder := 2;

  { ShowButton }
  ShowButton := TNewButton.Create(WizardForm);
  with ShowButton do
  begin
    Name := 'ShowButton';
    Parent := WizardForm;
    Left := ScaleX(16);
    Top := ScaleY(325);
    Width := ScaleX(75);
    Height := ScaleY(25);
    Caption := 'Show';
    OnClick := @ShowButtonClick;
  end;

  ShowButton.TabOrder := 5;
  FlagSB := False;
end;

procedure ShowButtonClick(Sender: TObject);
begin
  if FlagSB = False then begin
    SettingPanel.Show;
    One.Show;
    Two.Show;
    ShowButton.Caption := 'Hide';
    FlagSB := True;
  end else begin
    SettingPanel.Hide;
    One.Hide;
    Two.Hide;
    ShowButton.Caption := 'Show';
    FlagSB := False;
  end; 
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID = wpWelcome then SettingPanel.Visible := False;
end;

Немного упростил.

Цитата:

Цитата diman_21Ru
Можно ли реализовать о выходе новой версии и добавить уведомление в любую игру,заранее благодарю »

Можно, но уж очень много геммора - например, нужно для начала создать сайт для хранения обновлений версий на надёжном хосте.

diman_21Ru 31-03-2014 12:17 2330897

Можно ли как то реализовать в скрипт Лаунчер по оповещению новой версии программы

nik1967 31-03-2014 12:34 2330908

Цитата:

Цитата diman_21Ru
Можно ли как то реализовать в скрипт Лаунчер по оповещению новой версии программы »

Как ты себе это представляешь?
Цитата:

Цитата nik1967
Можно, но уж очень много геммора - например, для начала нужно создать сайт для хранения обновлений версий на надёжном хосте. »


Stealthmax 31-03-2014 12:52 2330914

Цитата:

Цитата nik1967
Немного упростил. »

Спасибо огромное, сам затупил конечно, забыл, что надо добавить значение в var.
Ещё такой вопрос: можно будет обратиться с готовым скриптом, для проверки и правки, если вдруг где-то будут ошибки? А то я давно мурыжу свой скрипт из тонн поисковых запросов google и справки по Inno. Хочу для личных нужд вывести свой и больше не возиться с написанием. На руборде неоднократно обращался, но там народ не сильно сговорчивый, никто ни разу ничего не подсказал. А здесь практически всегда кто-то чем-то поможет или хотя бы ответят, "носом ткнут".

Raz3r 31-03-2014 12:57 2330919

Какой параметр нужно ввести вместо DeleteFile(ExpandConstant('{app}\ts3server.sqlitedb')); чтобы удалить папку со всеми вложенными файлами?

Пример:
читать дальше »

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);begin
if (CurUninstallStep = usUninstall) and
(MsgBox(CustomMessage('Del'), mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
DeleteFile(ExpandConstant('{app}\ts3server.sqlitedb'));
end;

Nordek 31-03-2014 13:16 2330926

Raz3r,
Код:

[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);begin
 if
(CurUninstallStep = usUninstall) and
 
(MsgBox(CustomMessage('Del'), mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
DelTree(ExpandConstant('{app}\Test'), True, True, True);
end;


Raz3r 31-03-2014 14:10 2330942

ролрллгнлнглнг

Raz3r 31-03-2014 15:14 2330968

Разве никто не может помочь?

Habetdin 31-03-2014 16:34 2331011

Raz3r, вам же даже программа сообщила, где и в чем ошибка :)
Цитата:

Цитата Raz3r
Runtime Error at 70:165: "Unknown custome message name". »

Замените:
Код:

CustomMessage('Удалить все пользовательские настройки программы?')
на простую строку:
Код:

'Удалить все пользовательские настройки программы?'
И аналогично для второго вызова CustomMessage.

Функция CustomMessage используется для получения значений из секции [CustomMessages], например:
Код:

[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl"
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
ru.TestExample=Удалить файл?
en.TestExample=Delete file?

[Code]
// Где-то в коде...
// CustomMessage('TestExample')
// или же:
// ExpandConstant('{cm:TestExample}')


Dodakaedr 31-03-2014 17:47 2331038

Цитата:

Цитата saurn
Простейшее использование IsWin64 на примере установки файлов: »

То есть по этому примеру не нужно что-то прописывать в секции [code]?

Цитата:

Цитата Nordek
[code]
function InitializeSetup: Boolean;
begin
if IsWin64 then
MsgBox(ExpandConstant('{cm:IsWin64}') + ExpandConstant('{pf64}'), mbInformation, MB_OK)
else
MsgBox(ExpandConstant('{cm:IsWin32}') + ExpandConstant('{pf32}'), mbInformation, MB_OK);
result:=true;
end; »

Это нужно только для информирования, или какая-то еще роль здесь играет?

Dinvin4ester 31-03-2014 20:29 2331146

Ребята как убрать в скрипте распаковку исдоном?

nik1967 31-03-2014 20:52 2331157

Цитата:

Цитата Dinvin4ester
Ребята как убрать в скрипте распаковку исдоном? »

Написать самому нужный инсталлятор. ИМХО проще, чем в чужом скрипте вырезать незнамо что.

Nordek 31-03-2014 22:44 2331223

Цитата:

Цитата Dodakaedr
Это нужно только для информирования »

Да.
В Inno, проверка IsWin64 встроенная - можно даже наглядно увидеть присутствие IsWin64:
Inno Script Studio
"Вид » Секции » Файлы"
На элементе жмёшь "ПКМ (Правая кнопка мыши) » Свойства элемента (Alt+Enter)"
Затем переходишь во вкладку "Общие"
Далее, "Скрипты паскаля » Проверка:"

Dodakaedr 31-03-2014 22:45 2331225

Nordek, спс

Nordek 31-03-2014 23:28 2331239

Цитата:

Цитата Raz3r
Unknown custome message name »

Ну правильно. Ругается на то, что отсутствует CustomMessages.
Вот готовый вариант:
Код:

[CustomMessages]
DelSetUser=Удалить все пользовательские настройки программы?
DelSetServer=Удалить все файлы сервера?

[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
 if
(CurUninstallStep = usUninstall) and
 
(MsgBox(CustomMessage('DelSetUser'), mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
 
DelTree(ExpandConstant('{app}\config'), True, True, True);
begin
 if
(CurUninstallStep = usUninstall) and
 
(MsgBox(CustomMessage('DelSetServer'), mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
 
DelTree(ExpandConstant('{app}\files'), True, True, True);
 DeleteFile(ExpandConstant('{app}\ts3server.sqlitedb'));
end;
end;

в данном скрипте обрати внимание на то, что изменилось в MsgBox.

Если же хочешь прописывать в MsgBox текст, то удали то, что отметил красным:
Код:

[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
 if
(CurUninstallStep = usUninstall) and
 
(MsgBox(CustomMessage('Удалить все пользовательские настройки программы?'), mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
 
DelTree(ExpandConstant('{app}\config'), True, True, True);
begin
 if
(CurUninstallStep = usUninstall) and
 
(MsgBox(CustomMessage('Удалить все файлы сервера?'), mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
 
DelTree(ExpandConstant('{app}\files'), True, True, True);
 DeleteFile(ExpandConstant('{app}\ts3server.sqlitedb'));
end;
end;

т.е должно получиться так:
Код:

[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
 if
(CurUninstallStep = usUninstall) and
 
(MsgBox('Удалить все пользовательские настройки программы?', mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
 
DelTree(ExpandConstant('{app}\config'), True, True, True);
begin
 if
(CurUninstallStep = usUninstall) and
 
(MsgBox('Удалить все файлы сервера?', mbInformation, MB_YESNO or MB_DEFBUTTON2) = IDYES) then
 
DelTree(ExpandConstant('{app}\files'), True, True, True);
 DeleteFile(ExpandConstant('{app}\ts3server.sqlitedb'));
end;
end;


Кстати, использование [CustomMessages], позволяет задавать сообщения на других языках, например:
Код:

[Languages]
Name: en; MessagesFile: compiler:Default.isl
Name: ru; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
en.add=Add
en.del=Delete
ru.add=Добавить
ru.del=Удалить


Dodakaedr 01-04-2014 15:30 2331523

Использую Inno Ultra, в редакторе форм есть строка BorderIcons в которой можно скрыть системное меню (biSystemMenu), теперь интересует как вывести только кнопку "закрыть"?

Ivan_009 01-04-2014 22:07 2331741

Цитата:

Цитата Dodakaedr
интересует как вывести только кнопку "закрыть"? »

Dodakaedr, Пример:

Код:

function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLongA@user32.dll stdcall';
function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLongA@user32.dll stdcall';

procedure Close;
begin
  SetClassLong(Wizardform.Handle, -26, GetClassLong(Wizardform.Handle, -26) or $200);
end;

procedure InitializeWizard;
begin
  Close;
  WizardForm.Position:= poScreenCenter;
end;


Dodakaedr 01-04-2014 22:13 2331745

Цитата:

Цитата El Sanchez
SID или имя залогиненного пользователя можете узнать так:

Код:

#define A = (Defined UNICODE) ? "W" : "A"
const
    WTS_CURRENT_SERVER_HANDLE = 0;
    WTS_CURRENT_SESSION = (-1);
    WTSUserName = 5;

function WTSQuerySessionInformation(hServer: THandle; SessionId, WTSInfoClass: DWORD; var ppBuffer: Longint; var pBytesReturned: DWORD): BOOL; external 'WTSQuerySessionInformation{#A}@wtsapi32.dll stdcall';
procedure WTSFreeMemory(pMemory: Longint); external 'WTSFreeMemory@wtsapi32.dll stdcall';

///////////////////////////////////////////////////////
function GetLoggedOnUser(const IsSID: Boolean): String;
var
    i: Integer;
    aNames: TArrayOfString;
    dwLength: DWORD;
    lpBuffer: Longint;
begin
    if not RegGetSubkeyNames(HKLM, 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList', aNames) then Exit;
    try
        if not WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSUserName, lpBuffer, dwLength) then Exit;
        Result := CastIntegerToString(lpBuffer);
        if IsSID then for i := 0 to GetArrayLength(aNames)-1 do if Pos(Lowercase(Result), LowerCase(ExpandConstant(Format('{reg:HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\%s,ProfileImagePath|}', [aNames[i]])))) > 0 then
        begin
            Result := aNames[i];
            Break;
        end;
    finally
        WTSFreeMemory(lpBuffer);
    end;
end;

/////////////////////////////
procedure InitializeWizard();
begin
    MsgBox(GetLoggedOnUser(False), mbInformation, MB_OK);
    MsgBox(GetLoggedOnUser(True), mbInformation, MB_OK);
end;

Как с помощью этого кода занести ключ регистрации в HKEY_USERS\S-1-5-21-2866158627-181887668-3254620381-500\Software\TotalImageConverter...????
Код:

Root: HKU; SubKey: S-1-5-21-2866158627-181887668-3254620381-500\Software\TotalImageConverter; ValueType: string; ValueName: Key; ValueData: 0r/1GkAO/GMNgF5gip+qjw0OmwHwWCAw73h0I2eO/k6wRVs8HEWGdKK2BOVGxJvFmY3aD6pFMBveZb87Jht+hNWdqXcyekWPDvm3RstdisI6BSJy0UW8wtKQa217TKPbReCRXL38Z5YD9gyu0B68h2dV9yPzo; Flags: uninsdeletevalue uninsdeletekeyifempty
Где "S-1-5-21-2866158627-181887668-3254620381-500" SID пользователя. Или подскажите другие способы решения этой задачи.....

Цитата:

Цитата Ivan_009
Пример: »

Не работает, наверное из-за того что использую скин (XPOSX7.cjstyles). Как исправить?

Gnom_aka_Lexander 02-04-2014 08:46 2331869

Цитата:

Цитата Dodakaedr
как вывести только кнопку "закрыть"? »

так:
Код:

procedure InitializeWizard();
begin
  WizardForm.BorderIcons := [biSystemMenu];
end;

или так:
Код:

procedure InitializeWizard();
begin
  WizardForm.BorderStyle := bsDialog;
end;


Dodakaedr 02-04-2014 08:52 2331871

Gnom_aka_Lexander, и эти способы не выводят кнопку.

Gnom_aka_Lexander 02-04-2014 09:05 2331873

Dodakaedr, если ты удаляешь все кнопки, то вывести не выйдет. нужно не вместе, а вместо.

Dodakaedr 02-04-2014 09:07 2331875

Цитата:

Цитата Gnom_aka_Lexander
Код:

procedure InitializeWizard();
begin
 WizardForm.BorderStyle := bsDialog;
end;

»

Этот вариант работает если не использовать скин, а со скином как сделать?

Gnom_aka_Lexander 02-04-2014 09:09 2331876

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

Dodakaedr 02-04-2014 09:21 2331881

Цитата:

Цитата Gnom_aka_Lexander
скрипт свой с файлами залей куда-нибудь »

http://rghost.ru/53703721

Gnom_aka_Lexander 02-04-2014 09:25 2331882

Dodakaedr, у тебя в скрипте:
Код:

  with WizardForm do
  begin
    BorderIcons := [biMinimize];
    Caption := '{#MyAppName} {#MyAppVersion}';
  end;

biMinimize срабатывет только вместе с biMaximize, и как я уже писал - нужно не вместе, а вместо. В твоем случае, там должно быть не biMinimize а biSystemMenu.

Dodakaedr 02-04-2014 09:30 2331884

Цитата:

Цитата Gnom_aka_Lexander
biMinimize срабатывет только вместе с biMaximize, и как я уже писал - нужно не вместе, а вместо. В твоем случае, там должно быть не biMinimize а biSystemMenu. »

Спасибо, но это не то что хотел, при использовании biSystemMenu появляется полное системное меню, а мне нужно только кнопка закрыть, как оно срабатывает без скина.

Gnom_aka_Lexander 02-04-2014 09:35 2331885

Dodakaedr, тогда просто удали эту строчку. у тебя уже есть BorderStyle := bsDialog;, этого достаточно. и системного меню не будет, потому что его нет у диалоговых окон, как и кнопок свернуть и развернуть во весь экран.

Dodakaedr 02-04-2014 09:37 2331886

Цитата:

Цитата Gnom_aka_Lexander
тогда просто удали эту строчку. »

Спс, сработало!

R.i.m.s.k.y. 02-04-2014 09:42 2331889

В общем не так давно тут мне давали код для получения SID пользователя
почти работает, не работает в случае переименования пользователя что в доменных сетях не редкость, в таких случах в SID возвращается Username

вот рабочий код дельфи, работает и на переименованных пользователях
Код:

function LookupAccountName(lpSystemName, lpAccountName: PWideChar;
  Sid: PSID; var cbSid: DWORD; ReferencedDomainName: PWideChar;
  var cbReferencedDomainName: DWORD; var peUse: SID_NAME_USE): BOOL; stdcall; external advapi32 name 'LookupAccountNameA';
function ConvertSidToStringSid(Sid: PSID; out StringSid: PChar): BOOL; stdcall;  external 'ADVAPI32.DLL' name 'ConvertSidToStringSidA';

function GetUserSID(userName: string):string;
var
  Sid: PSID;
  cbSid: DWORD;
  cbReferencedDomainName : DWORD;
  ReferencedDomainName: string;
  peUse: SID_NAME_USE;
  Success: BOOL;
  lpSystemName : string;
  lpAccountName: string;
  StringSid : PChar;
begin
  Sid:=nil;
  cbSid := 0;
  cbReferencedDomainName := 0;

  LookupAccountName(nil, PChar(userName), nil, cbSid, nil, cbReferencedDomainName, peUse);
  if cbSid>0 then
  begin
    SetLength(ReferencedDomainName, cbReferencedDomainName);
    Sid := AllocMem(cbSid);
    Success := LookupAccountName(0, PChar(userName), Sid, cbSid, PChar(ReferencedDomainName), cbReferencedDomainName, peUse);
    if Success then
    begin
      ConvertSidToStringSid(Sid, StringSid);
      Result := string(StringSid);
    end;
    FreeMem(Sid);
  end;       
end;

тяму не хватило его интегрировать в инно
может Серега или ЭльСанчез справятся

Dodakaedr 02-04-2014 09:44 2331890

R.i.m.s.k.y., с этим можешь помочь http://forum.oszone.net/post-2331745-192.html???

R.i.m.s.k.y. 02-04-2014 09:49 2331891

Dodakaedr,
как-то так
Код:

[Registry]
Root: HKU; SubKey: {code:getOriginalSID}\Software; ValueType: string; ValueName: Path; ValueData: {app}\; Flags: uninsdeletekeyifempty uninsdeletevalue noerror

[code]
function getOriginalSID: string;
begin
result := GetUserSID('Администратор')
утвж


Dodakaedr 02-04-2014 09:50 2331892

R.i.m.s.k.y., спс. вечером попробую.

Gnom_aka_Lexander 02-04-2014 09:53 2331893

Вложений: 1
Цитата:

Цитата Dodakaedr
с этим можешь помочь »

с год назад дела длл-ку, для определения SID пользователя, на плюсах, поскольку с паскалем так и не пошло - на Win7 и старще какоето исключение выскакивало, устал искать его, в итоге плюнул. В приложении пример и добавлена секция [Registry] специально для Dodakaedr.

Dodakaedr 02-04-2014 09:55 2331895

Цитата:

Цитата Gnom_aka_Lexander
специально для Dodakaedr. »

Спс и это попробую

R.i.m.s.k.y. 02-04-2014 10:50 2331920

Gnom_aka_Lexander, проверил
система запущена от user (originaluser)
установщик - от admin (currentuser)
получил сид админа (currentuser) что неинтересно
как передавать параметром имя пользователя от которого запущена система (а не установщик) чтобы получить sid originaluser?

Gnom_aka_Lexander 02-04-2014 10:55 2331924

R.i.m.s.k.y., честно говоря, не думал, что это понадобится, чуть позже допилю.

R.i.m.s.k.y. 02-04-2014 10:57 2331926

Цитата:

Цитата Gnom_aka_Lexander
честно говоря, не думал, что это понадобится, чуть позже допилю. »

рабочий код выше
можешь брать и вставлять в длл

Gnom_aka_Lexander 02-04-2014 12:38 2331975

Вложений: 1
R.i.m.s.k.y., в нем как раз и была у меня проблема, при чем код отрабатывал, но при закрытии инсталла выскакивала ошибка, так и не нашел, где косяк у меня там, поэтому и сделал по другому.

Прицепил, должно показывать залогиненого пользователя.

R.i.m.s.k.y. 02-04-2014 13:09 2331986

Gnom_aka_Lexander, Спасибо, проверю
Но кмк оно должно на вход принимать имя пользователя, а выхлопом выдавать его sid
Независимо от состояния логина

Stealthmax 02-04-2014 13:45 2332003

Цитата:

Цитата Dodakaedr
Спасибо, но это не то что хотел, при использовании biSystemMenu появляется полное системное меню, а мне нужно только кнопка закрыть, как оно срабатывает без скина. »

Со скином и без работает:
Код:

//Убираем кнопку "Свернуть/Развернуть/Масштабирование" в окне установщика, только "Закрыть" //
const
  GWL_STYLE = -16;

  WS_MINIMIZEBOX = $20000;
  WS_MAXIMIZEBOX = $10000;

function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';

procedure InitializeWizard();
begin
  SetWindowLong(WizardForm.handle, GWL_STYLE, GetWindowLong(WizardForm.handle, GWL_STYLE)and(not WS_MINIMIZEBOX)and(not WS_MAXIMIZEBOX));
end;

Работает 100%!!!

Stealthmax 02-04-2014 14:14 2332025

Подскажите, как использовать пользовательские ключи командной строки, кроме /COMPONENTS и /TASKS, для своих функций, типа Check: бла-бла-бла? Или это не реализовано в Inno ?

R.i.m.s.k.y. 02-04-2014 14:25 2332030

Stealthmax, самому реализовывать

Код:

Function InitializeSetup: Boolean;
var i : integer;
Begin
  for i:=2 to ParamCount do begin
  if ( Pos(LowerCase('/silent'), Lowercase(ParamStr(i))) > 0 ) then isSilent := true;
  if ( Pos(LowerCase('/verysilent'), Lowercase(ParamStr(i))) > 0 ) then isSilent := true;
  end;
  if isSilent then begin
    MsgBox('Тихая установка не поддерживается', mbInformation, MB_OK);
    Result := False;
    exit;
  end;
end;


Stealthmax 02-04-2014 16:41 2332094

Цитата:

Цитата R.i.m.s.k.y.
самому реализовывать
читать дальше »
Код:

Function InitializeSetup: Boolean;
Begin
 if ( Pos(LowerCase('/silent'), Lowercase(ParamStr(i))) > 0 ) then isSilent := true;
 if ( Pos(LowerCase('/verysilent'), Lowercase(ParamStr(i))) > 0 ) then isSilent := true;
 if isSilent then begin
 MsgBox('Тихая установка не поддерживается', mbInformation, MB_OK);
 Result := False;
 exit;
 end;
end;

»

Понял и не понял одновременно. Изображу кусок скрипта.
Код:

[Files]
Source: "{port}\*"; DestDir: "{code:GetPath}"; Flags: ignoreversion createallsubdirs recursesubdirs; Check: Portable

[_Code]
function Portable: Boolean;
begin
  Result := PortableRadioButton.Checked;
end;

Каким образом создать ключ "/p" для выполнения данного условия в командной строке, то бишь скрытно?
А также: возможно ли переназначить ключ "/VERYSILENT", например, в ключ "S" без привязки к регистру?
Поиск по форуму вывел на несколько постов: 1, 2, 3. Но я реально дубовый))) Не могу склеить воедино суть сюжета. Если не затруднит, то можно наглядно в рабочем состоянии изобразить это действо?!

R.i.m.s.k.y. 02-04-2014 16:56 2332104

Код:

[Files]
Source: "{port}\*"; DestDir: "{code:GetPath}"; Flags: ignoreversion createallsubdirs recursesubdirs; Check: Portable

[Code]

var isportable : boolean;

function Portable: Boolean;
begin
  Result := PortableRadioButton.Checked or isportable;
end;

Function InitializeSetup: Boolean;
var i : integer;
Begin
  for i:=2 to ParamCount do begin
  if ( Pos(LowerCase('/p'), Lowercase(ParamStr(i))) > 0 ) then isportable := true else isportable := false;
end;//for
end;


Nordek 02-04-2014 16:58 2332107

Stealthmax, Смотри от #517 сообщения. Так же сообщение #1780

Dinvin4ester 02-04-2014 19:15 2332192

Ребята,почему долго идет процесс установки?Сжимал игру на 980 мб,а ставится как батла 4..
Вот скрипт - http://multi-up.com/964088.

leshcat 03-04-2014 03:24 2332396

Здравствуйте,

Подскажите пожалуйста, есть функция slideshow в окне инсталлятора:

Код:

#define TIME_FOR_VIEW 10

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: InnoCallback.dll; Flags: dontcopy noencryption nocompression solidbreak;
Source: .bmp; Flags: dontcopy noencryption nocompression solidbreak;

Source: D:\Games\StarCraft enGB\StarDat.mpq; DestDir: {app}

[Code
const
n=21; ///количество слайдов
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N] of byte;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function get_unique_r andom_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
For i:=1 to X do A:=A+chr(i);
B:='';
For i:=1 to X do begin
  j:=Random(Length(A)-1)+1;
  C:='';
  B:=B + A[j];
  for k:=1 to Length(A) do
  if k<>j then C:=C+A[k];
  A:=C;
end;
for i:=1 to X do Result[i]:=ord(B[i]);
end;

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
StatusMessages: TNewStaticText;
bmp: TRandNumbers;
z:byte;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#TIME_FOR_VIEW} = 0)
then begin
  SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+ inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
  if (currTime/{#TIME_FOR_VIEW} = N) then currTime:=0;
end;
end;

procedure InitializeWizard;
begin
bmp:=get_unique_random_number(N);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY (12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов ...';
for z:=2 to N do ExtractTemporaryFile('Image_ '+inttostr(bmp[z])+'.bmp');
end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageNameLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm< /FONT> .Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageNameLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;

procedure DeInitializeSetup();
begin
KillTimer(0, TimerID);
end;

Вопрос: как убрать рандом, чтобы картинки показывались последовательно?

innot20 03-04-2014 06:49 2332414

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

Ivan_009 03-04-2014 08:34 2332427

Подскажите пожалуйста как на деинсталлятор прикрутить свой шрифт для кнопок...

Пробовал так не работает... Ошибку выбивает:http://rghost.ru/53729756

Код:

var
hCancelUninstBtn: HWND;
ButtonFontU:TFont;

procedure BtnSetFontU(h :HWND; Font :Cardinal); external 'BtnSetFont@{tmp}\b2p.dll stdcall delayload';

procedure InitializeUninstallProgressForm();
begin
ButtonFontU:=TFont.Create;
with ButtonFontU do begin
Name:='Tahoma';
Size:= 8;
Style:=[];
end;

with UninstallProgressForm.CancelButton do begin   
BtnSetFontU(hCancelUninstBtn,ButtonFontU.Handle);
end;


Mat_y 03-04-2014 09:39 2332444

Если {tmp} это временная папка инсталлятора... а как обозначить временную папку Win? {%TEMP} ?

R.i.m.s.k.y. 03-04-2014 09:40 2332445

Mat_y, %temp%

Mat_y 03-04-2014 09:57 2332449

Цитата:

Цитата R.i.m.s.k.y.
Mat_y, %temp% »

Прямо так и писать?

Код:

Filename: %temp%/FileName.exe;

Gnom_aka_Lexander 03-04-2014 09:58 2332450

Mat_y, в инно это константа {%TEMP}

Mat_y 03-04-2014 10:02 2332453

Цитата:

Цитата Gnom_aka_Lexander
Mat_y, в инно это константа {%TEMP} »

Цитата:

Цитата R.i.m.s.k.y.
Mat_y, %temp% »

Хмм... обе придется пробовать :(

R.i.m.s.k.y. 03-04-2014 10:07 2332454

Mat_y, EXPANDconstant('{%temp}')

Gnom_aka_Lexander 03-04-2014 10:10 2332455

Mat_y, Из справки:
читать дальше »
Цитата:

{%NAME|DefaultValue}
Вставляет значение переменной среды.

•NAME - имя переменной среды
•DefaultValue - определяет текст, который будет вставлен в случае, если константа не существует
•Для вставки запятой, вертикальной черты ("|"), или закрывающей фигурной скобки ("}") поставьте перед ней "%-код_символа.". Замените символ символом "%", сопровождаемым его двухразрядным шестнадцатеричным кодом. Запятая - "%2c", вертикальная черта - "%7c", и закрывающая фигурная скобка - "%7d". Если Вы хотите включить символ "%", используйте "%25".
•NAME and DefaultValue могут содержать константы. Обратите внимание, что описанным выше способом закрывающая фигурная скобка задается только в случае, когда она используется сама по себе. Если же она обозначает константу, подобные изощрения не нужны.
Например:
{%COMSPEC}{%PROMPT|$P$G}

то есть по маске {%NAME} вместо NAME подставляем имя переменной винды без обрамляющих знаков процента. формат %temp% или она-же %tmp% - инно не поймет, это для командной строки самой винды.

Mat_y 03-04-2014 10:47 2332469

Я может не выспался... но никак не могу усвоить материал...
Как мне надо написать, чтобы inno распаковал фаил в temp винды? И потом оттуда выполнил [RUN]?

nik1967 03-04-2014 11:30 2332479

leshcat, выкладывал пример уже.

Ivan_009, в другом месте ответил.

Stealthmax 03-04-2014 13:09 2332519

Цитата:

Цитата R.i.m.s.k.y.
[Files]
Source: "{port}\*"; DestDir: "{code:GetPath}"; Flags: ignoreversion createallsubdirs recursesubdirs; Check: Portable
[code]
var isportable : boolean;
function Portable: Boolean;
begin
Result := PortableRadioButton.Checked or isportable;
end;
Function InitializeSetup: Boolean;
var i : integer;
Begin
for i:=2 to ParamCount do begin
if ( Pos(LowerCase('/p'), Lowercase(ParamStr(i))) > 0 ) then isportable := true else isportable := false;
Result := True;
end;//for
end; »

Почти, но кусочек был потерян, установщик возвращает False и установка не происходит в таком случае, но все равно спасибо, сам подправил, теперь работает.
И вопрос по поводу /SILENT и /VERYSILENT остается открытым. Есть ли возможность их уравнять и переназначить на один ключ "/s"? К примеру, /SILENT := /VERYSILENT := /s, ну это грубо изобразил ,но думаю смысл понятен.

R.i.m.s.k.y. 03-04-2014 13:16 2332524

Цитата:

Цитата Mat_y
Как мне надо написать, чтобы inno распаковал фаил в temp винды? И потом оттуда выполнил [RUN]? »

в секциях files и run указываешь {%temp}
в секции code - expandconstant('{%temp}')

Цитата:

Цитата Stealthmax
Почти, но кусочек был потерян, установщик возвращает False и установка не происходит в таком случае, но все равно спасибо, сам подправил, теперь работает. »

а ну да
хотя КМК это баг инно - нигде result не объявялется false
Цитата:

Цитата Stealthmax
И вопрос по поводу /SILENT и /VERYSILENT остается открытым. »

КМК - никак
я просто проверяю поданы ли на вход параметры /SILENT и /VERYSILENT и если да - отталкиваюсь от них

Stealthmax 03-04-2014 13:30 2332532

Цитата:

Цитата Nordek
Смотри от #517 сообщения. Так же сообщение #1780 »

Тоже пойдет, у меня Check'и выставлены и вариант от R.i.m.s.k.y. прекрасно отработал. Но все равно возьму на заметку и такой вариант, спасибо.)

Цитата:

Цитата R.i.m.s.k.y.
КМК - никак
я просто проверяю поданы ли на вход параметры /SILENT и /VERYSILENT и если да - отталкиваюсь от них »

А вот это случайно не относится к сути дела ? Устанавливается глобальная переменная; может это обыграть каким-то образом? Или тупо брать исходники Inno и "пилить под себя"?

R.i.m.s.k.y. 03-04-2014 14:15 2332550

Цитата:

Цитата Stealthmax
А вот это случайно не относится к сути дела ? »

WizardSilent видать недавно (сравнительно) появилась
поиск по silent в помощи такой WizardSilent не выдает
А кусок кода и метода по ссылке - объявить глобальную переменную в зависимости от параметра комстроки установщика - это я выше и написал

Stealthmax 03-04-2014 16:39 2332615

Цитата:

Цитата R.i.m.s.k.y.
WizardSilent видать недавно (сравнительно) появилась »

Как недавно? У меня в расширенной версии есть function WizardSilent: Boolean; // Returns True if Setup is running silently, False otherwise. А юзаю эту версию уже года 3 точно да и в оф.справке тоже есть упоминание. Только какой смысл от этой функции, если нет второй WizardVerySilent, которая как раз и пригодилась бы большинству. Ну раз такая пьянка пошла, что ж, буду в сорсы погружаться и конструировать.

Dodakaedr 03-04-2014 16:45 2332618

Цитата:

Цитата Stealthmax
Со скином и без работает: »

Выводит только кнопку закрыть, но и системное меню не скрывает... Это не то что нужно. Способ от Gnom_aka_Lexander подошел.

Stealthmax 03-04-2014 16:59 2332622

Цитата:

Цитата Dodakaedr
Выводит только кнопку закрыть, но и системное меню не скрывает... Это не то что нужно. Способ от Gnom_aka_Lexander подошел. »

Ну так добавь свойства Border и будет радость))). Я имел ввиду скрыть кнопки справа, а меню убирается штатными средствами, в расширенной версии можно наглядно просмотреть.

Nordek 03-04-2014 17:07 2332625

Цитата:

Цитата Stealthmax
У меня в расширенной версии есть function WizardSilent: Boolean; // Returns True if Setup is running silently, False otherwise. »

Подтверждаю, есть такое (выделил жирным):
читать дальше »
Код:

// Support functions
// Here's the list of support functions that can be called from
// within the Pascal script.

// Setup or Uninstall Info functions

function GetCmdTail: String; // Returns all command line parameters passed to Setup or Uninstall as a single String.
function ParamCount: Integer; // Returns the number of command line parameters passed to Setup or Uninstall.
function ParamStr(Index: Integer): String; // Returns the Index-th command line parameter passed to Setup or Uninstall.

function ActiveLanguage: String; // Returns the name of the active language.

function CustomMessage(const MsgName: String): String; // Returns the value of the [CustomMessages] entry with the specified name.
function FmtMessage(const S: String; const Args: array of String): String; // Formats the String S using the specified String arguments.
function SetupMessage(const ID: TSetupMessageID): String; // Returns the value of the specified message.

function WizardDirValue: String; // Returns the current contents of the edit control on the Select Destination Location page of the wizard.
function WizardGroupValue: String; // Returns the current contents of the edit control on the Select Start Menu Folder page of the wizard.
function WizardNoIcons: Boolean; // Returns the current setting of the Don't create any icons check box on the Select Start Menu Folder page of the wizard.
function WizardSetupType(const Description: Boolean): String; // Returns the name or description of the setup type selected by the user.
function WizardSelectedComponents(const Descriptions: Boolean): String; // Returns a comma-separated list of names or descriptions of the components selected by the user.
function WizardSelectedTasks(const Descriptions: Boolean): String; // Returns a comma-separated list of names or descriptions of the tasks selected by the user.
function WizardSilent: Boolean; // Returns True if Setup is running silently, False otherwise.

function IsUninstaller: Boolean;
function UninstallSilent: Boolean;

function CurrentFileName: String;

function ExpandConstant(const S: String): String;
function ExpandConstantEx(const S: String; const CustomConst, CustomValue: String): String;

function IsComponentSelected(const Components: String): Boolean;
function IsTaskSelected(const Tasks: String): Boolean;

procedure ExtractTemporaryFile(const FileName: String);
procedure ExtractTemporaryFileEx(const FileName: String; const DestDir: String);
procedure ExtractTemporaryFileToStream(const FileName: String; const Stream: TStream);
function ExtractTemporaryFileSize(const FileName: String): LongWord;
procedure ExtractTemporaryFileToBuffer(const FileName: String; Buffer: Integer);

function GetSetupPreviousData(const ValueName, DefaultValueData: String): String;
function SetSetupPreviousData(const PreviousDataKey: Integer; const ValueName, ValueData: String): Boolean;
function GetPreviousData(const ValueName, DefaultValueData: String): String;
function SetPreviousData(const PreviousDataKey: Integer; const ValueName, ValueData: String): Boolean;

function Terminated: Boolean;

function RmSessionStarted: Boolean;


Цитата:

Цитата Stealthmax

И такое есть в русской справке "Inno Setup версия 5.4.3":
Скрипты на Pascal » Встроенные функции » function WizardSilent: Boolean; »
Цитата:

Цитата Pascal Scripting: WizardSilent
Прототип:
function WizardSilent: Boolean;

Описание:
Возвращает значение True, если инсталлятор запущен в тихом режиме, в обратном случае False.


Dodakaedr 03-04-2014 17:09 2332627

Цитата:

Цитата Stealthmax
Ну так добавь свойства Border и будет радость))). »

Спс. Действительно сработало. Как теперь еще кнопку свернуть вывести?
И получается твой код нужен когда хочешь вывести только кнопку закрыть, но при этом не скрывая системное меню, а для вывода только кнопки закрыть без системного меню достаточно borderstyle :=bsdialog;

Dinvin4ester 03-04-2014 17:44 2332645

Цитата:

Цитата Dinvin4ester
Ребята,почему долго идет процесс установки?Сжимал игру на 980 мб,а ставится как батла 4..
Вот скрипт - http://multi-up.com/964088. »

Так что ребят,никто не подскажет что не так ?

audiofeel 03-04-2014 18:00 2332662

привет. кто знает пример как поставить свой курсор., на кнопки и чекбоксы поставил через ботву а на саму форму "рабочих" примеров не нашел

Ivan_009 03-04-2014 19:09 2332688

Цитата:

Цитата audiofeel
привет. кто знает пример как поставить свой курсор., на кнопки и чекбоксы поставил через ботву а на саму форму "рабочих" примеров не нашел »

audiofeel, Пример:

Код:

procedure InitializeWizard;
begin
  with WizardForm do begin
    ClientWidth:=ScaleX(650);
    ClientHeight:=ScaleY(400);
    Position:=poScreenCenter;
    OuterNotebook.Hide;
    InnerNotebook.Hide;
    Bevel.Hide;
  end;

  with WizardForm.NextButton do
  begin
    SetBounds(ScaleX(400), ScaleY(300), ScaleX(81), ScaleY(30));
    Cursor:= crHand;
  end;

  with WizardForm.BackButton do
  begin
    SetBounds(ScaleX(300), ScaleY(300), ScaleX(81), ScaleY(30));
    Cursor:= crHand;
  end;

  with WizardForm.CancelButton do
  begin
    SetBounds(ScaleX(530), ScaleY(300), ScaleX(81), ScaleY(30));
    Cursor:= crHand;
  end;
end;


innot20 03-04-2014 19:11 2332689

Цитата:

Цитата innot20
Здравствуйте, подскажите пожалуйста как менять значение конфига json, при выборе определённого компонента »


Ivan_009 03-04-2014 19:14 2332691

innot20, Жми сюда: http://forum.oszone.net/thread-278998-23.html :offtopic:

Dodakaedr 03-04-2014 19:24 2332696

Ivan_009, как задать еще и на чекбоксы на странице допольнительных задач?

Ivan_009 03-04-2014 19:38 2332707

Цитата:

Цитата Dodakaedr
как задать еще и на чекбоксы на странице допольнительных задач? »

Dodakaedr, Пример:

Код:

var
Check1, Check2, Check3: TCheckBox;
CheckLabel1, CheckLabel2, CheckLabel3: TLabel;

procedure Check1Click(Sender: TObject);
begin
Check2.Checked:= Check1.Checked; //Подставляем значение
Check3.Checked:= Check1.Checked;
Check2.Enabled:= Check1.Checked;
Check3.Enabled:= Check1.Checked;
end;

procedure InitializeWizard;
begin
Check1:= TCheckBox.Create(WizardForm);
Check1.SetBounds(20, 100, 16, 16);
Check1.Checked:=True;
Check1.OnClick:=@Check1Click
Check1.Parent:=WizardForm.SelectDirPage;
Check1.Cursor:= crHand;

CheckLabel1:= TLabel.Create(WizardForm)
CheckLabel1.SetBounds(37, 100, 100, 20);
CheckLabel1.Transparent:=True;
CheckLabel1.Caption:='Доп. програмное обеспечение';
CheckLabel1.Parent:=WizardForm.SelectDirPage;

Check2:= TCheckBox.Create(WizardForm);
Check2.SetBounds(40, 130, 16, 16);
Check2.Checked:=True;
Check2.Parent:=WizardForm.SelectDirPage;
Check2.Cursor:= crHand;

CheckLabel2:= TLabel.Create(WizardForm)
CheckLabel2.SetBounds(57, 130, 100, 20);
CheckLabel2.Transparent:=True;
CheckLabel2.Caption:='Обновить DirectX';
CheckLabel2.Parent:=WizardForm.SelectDirPage;

Check3:= TCheckBox.Create(WizardForm);
Check3.SetBounds(40, 160, 16, 16);
Check3.Checked:=True;
Check3.Parent:=WizardForm.SelectDirPage;
Check3.Cursor:= crHand;

CheckLabel3:= TLabel.Create(WizardForm)
CheckLabel3.SetBounds(57, 160, 100, 20);
CheckLabel3.Transparent:=True;
CheckLabel3.Caption:='Еще что-нибудь';
CheckLabel3.Parent:=WizardForm.SelectDirPage;

end;


Dodakaedr 03-04-2014 19:41 2332709

Ivan_009, код будет работать если чекбоксы выводятся через секцию tasks?

Ivan_009 03-04-2014 19:46 2332711

Цитата:

Цитата Dodakaedr
код будет работать если чекбоксы выводятся через секцию tasks »

Dodakaedr, Окей:

Пример:

Цитата:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive;
Name: text\eng; Description: Английский; Flags: exclusive;
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive;
Name: voice\eng; Description: Английский; Flags: exclusive;

[Tasks]
Name: DirectX; Description: Microsoft DirectX;
Name: VCRedist; Description: Microsoft VCRedist;

Name: DesktopIcon; Description: Ярлык На Рабочем Столе;
Name: StartMenuIcon; Description: Ярлык В Меню Пуск;

[code]
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID =wpSelectComponents) then
Result:= True;
end;

procedure RedesignWizardForm;
begin
WizardForm.ComponentsList.Parent := WizardForm.SelectTasksPage;
WizardForm.ComponentsList.SetBounds(ScaleX(0),ScaleY(37),ScaleX(207),ScaleY(192));
WizardForm.ComponentsList.Cursor:= crHand;

WizardForm.TasksList.SetBounds(ScaleX(210),ScaleY( 37),ScaleX(207),ScaleY(192));
WizardForm.TasksList.BorderStyle := bsSingle;
WizardForm.TasksList.Cursor:= crHand;
WizardForm.TasksList.Color := clWhite;
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
end;

Dodakaedr 03-04-2014 19:48 2332713

Ivan_009, супер:)

Stealthmax 03-04-2014 20:11 2332725

Цитата:

Цитата Dodakaedr
Спс. Действительно сработало. Как теперь еще кнопку свернуть вывести? »

А вот здесь ты не одинок). Таких желающих много. Вариантов 2, я использую скин, поэтому особо не парюсь, но если скин не устраивает, то милости прошу в гости к Johny777, ну а второй вариант- это скин. Других решений не встречал. Много кто изгалялся над этой проблемой))).

Dodakaedr 03-04-2014 20:17 2332727

Цитата:

Цитата Stealthmax
я использую скин »

Интересно! Можешь показать?

Ivan_009 03-04-2014 20:21 2332730

Цитата:

Цитата Dodakaedr
Интересно! Можешь показать »

Dodakaedr, Вот пример: http://rghost.ru/53745223

Dodakaedr 03-04-2014 20:25 2332733

Ivan_009, попробую к своему инсталу это прикрутить)))

Dodakaedr 03-04-2014 20:57 2332753

Ivan_009, Stealthmax, жаль что не ко всем скинам это подходит..

audiofeel 03-04-2014 21:13 2332763

Ivan_009,
да, это я знаю, я имел ввиду "свой" курсор - то есть 'cursor.cur'
через = function LoadCursorFromFile(FileName: String): Cardinal; external 'LoadCursorFromFileA@user32 stdcall';
на кнопки делал так = BtnSetCursor(CancelButton,LoadCursorFromFile(ExpandConstant('{tmp}\cursor2.cur')));
а на саму форму как, ????

Ivan_009 03-04-2014 21:44 2332781

audiofeel, Короче не мучайся вот пример... :)

Цитата:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
RawDataResource=MyCursor:cursor.ani

[code]
function LoadCursorFromFile(FileName: String): Cardinal;
external 'LoadCursorFromFileA@user32 stdcall';

const
MyCursor = 101;
RT_RCDATA = 10;

var
hcur: Cardinal;
ResStream: TResourceStream;

procedure InitializeWizard;
begin
with WizardForm do begin
ClientWidth:=ScaleX(650);
ClientHeight:=ScaleY(400);
Position:=poScreenCenter;
OuterNotebook.Hide;
InnerNotebook.Hide;
Bevel.Hide;
Cursor := MyCursor;
end;

ResStream := TResourceStream.Create(HInstance, '_IS_MYCURSOR', RT_RCDATA);
try
ResStream.SaveToFile(ExpandConstant('{tmp}\cursor.ani'));
hcur := LoadCursorFromFile(ExpandConstant('{tmp}\cursor.ani'));
Screen.Cursors[MyCursor] := hcur;
finally
ResStream.Free;
end;

with WizardForm.NextButton do
begin
SetBounds(ScaleX(400), ScaleY(300), ScaleX(81), ScaleY(30));
Cursor := MyCursor;
end;

with WizardForm.BackButton do
begin
SetBounds(ScaleX(300), ScaleY(300), ScaleX(81), ScaleY(30));
Cursor := MyCursor;
end;

with WizardForm.CancelButton do
begin
SetBounds(ScaleX(530), ScaleY(300), ScaleX(81), ScaleY(30));
Cursor := MyCursor;
end;
end;

procedure DeinitializeSetup();
begin
DeleteObject(hcur);
end;

На форму и кнопки...

Рядом кинь сам курсор cursor.ani

audiofeel 03-04-2014 22:19 2332794

Ivan_009,
Цитата:

Цитата Ivan_009
audiofeel, Короче не мучайся вот пример... »

:unsure:

я по другому не много делал - вроде работает = http://rghost.ru/53748629

читать дальше »
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
SolidCompression=yes
Compression=lzma/ultra
OutputDir=Output

[Files]
Source: cursor.ani; Flags: dontcopy

[code]
function LoadCursorFromFile(FileName: String): Cardinal; external 'LoadCursorFromFile{#A}@user32 stdcall';
function DeleteObject(p1: Longword): BOOL; external 'DeleteObject@gdi32.dll stdcall';

const
MyCursor = 101;

var
hcur: Cardinal;

function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\cursor.ani')) then ExtractTemporaryFile('cursor.ani');
Result := True;
end;

procedure InitializeWizard();
begin
with WizardForm do begin
Cursor := MyCursor;
end;
hcur := LoadCursorFromFile(ExpandConstant('{tmp}\cursor.ani'));
Screen.Cursors[MyCursor] := hcur;
end;

procedure DeinitializeSetup();
begin
DeleteObject(hcur);
end;

Ivan_009 03-04-2014 22:26 2332798

Цитата:

Цитата audiofeel
я по другому не много делал - вроде работает »

Можно и так... :)

Только я забыл в конце дописать:

Код:

procedure DeinitializeSetup();
begin
DeleteObject(hcur);
end;


Nordek 03-04-2014 23:48 2332828

Цитата:

Цитата Ivan_009
Только я забыл в конце дописать: »

И не только.

audiofeel 04-04-2014 07:29 2332870

привет всем, вот в этом примере реализовано слайд шоу, через ботву, без b2p.dll, то есть файлы для слайд шоу берутся из {src} . как его прикрутить к новой ботве, из буфера не получится наверное файлы брать, но хотя бы из папки темп = http://rghost.ru/53755419

nik1967 04-04-2014 08:23 2332877

audiofeel, http://forum.oszone.net/post-2328887.html#post2328887

innot20 04-04-2014 09:27 2332891

Привет всем, подскажите как менять конфиг json при выборе определённого компонента

R.i.m.s.k.y. 04-04-2014 09:40 2332896

innot20, ты спамер? если в третий раз не ответили - значит никто не знает

Dodakaedr 04-04-2014 10:22 2332906

Подскажите CLSID и TypeLib в реестре для контекстного меню (файл .dll) генерируется установщиком или изначально задается конкретный номер???
читать дальше »
Код:

[Registry]
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{280CFDE1-1354-4431-92F3-03073BA593FB}; ValueType: string; ValueData: TotalConverter Context Menu Shell Extension; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{280CFDE1-1354-4431-92F3-03073BA593FB}\InprocServer32; ValueType: string; ValueData: {app}\axTotalConverter.dll; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{280CFDE1-1354-4431-92F3-03073BA593FB}\InprocServer32; ValueType: string; ValueName: ThreadingModel; ValueData: Apartment; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{280CFDE1-1354-4431-92F3-03073BA593FB}\ProgID; ValueType: string; ValueData: axTotalConverter.TotalConverter; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{280CFDE1-1354-4431-92F3-03073BA593FB}\TypeLib; ValueType: string; ValueData: {{14DAD0B3-1F8E-411C-997D-51426AC9DCB5}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\CLSID\{{280CFDE1-1354-4431-92F3-03073BA593FB}\Version; ValueType: string; ValueData: 1.0; Flags: uninsdeletevalue uninsdeletekeyifempty

Root: HKLM; SubKey: SOFTWARE\Classes\TypeLib\{{14DAD0B3-1F8E-411C-997D-51426AC9DCB5}; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\TypeLib\{{14DAD0B3-1F8E-411C-997D-51426AC9DCB5}\1.0; ValueType: string; ValueData: axImageConverter Library; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\TypeLib\{{14DAD0B3-1F8E-411C-997D-51426AC9DCB5}\1.0\0; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\TypeLib\{{14DAD0B3-1F8E-411C-997D-51426AC9DCB5}\1.0\0\win32; ValueType: string; ValueData: {app}\axTotalConverter.dll; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\TypeLib\{{14DAD0B3-1F8E-411C-997D-51426AC9DCB5}\1.0\FLAGS; ValueType: string; ValueData: 0; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Classes\TypeLib\{{14DAD0B3-1F8E-411C-997D-51426AC9DCB5}\1.0\HELPDIR; ValueType: string; ValueData: {app}\; Flags: uninsdeletevalue uninsdeletekeyifempty


lis5131 04-04-2014 11:18 2332930

Всем привет - прошу вас помочь мне. А то что то у меня не выходит.

У меня возникла мысль добавить вперед страницу (скажем с своим лого). Но она добавляется только 2-ой. Когда же я пытаюсь перенести все надписи на вторую (мою) страницу - инсталятор говорит - ТАКОЕ НЕ ВОЗМОЖНО ВСЕ ЗАБЛОКИРОВАНО.
Помогите мне добавить лого в начало установки. Либо картинкой горящей 5 секунд. Либо добавить страницу(свою пустую) в начало самого инсталера.
Суть такая должно быть сначала лого, а потом начаться установка.

El Sanchez 04-04-2014 16:29 2333045

Цитата:

Цитата Dodakaedr
Подскажите CLSID и TypeLib в реестре для контекстного меню (файл .dll) генерируется установщиком или изначально задается конкретный номер??? »

Все представленные записи появляются после регистрации библиотеки. Просто для этой dll-ки в секции Files допишите флаг regserver.

Ivan_009 04-04-2014 17:42 2333087

Цитата:

Цитата lis5131
Суть такая должно быть сначала лого, а потом начаться установка »

lis5131, Если ты про сплеш заставку то вот пример: http://rghost.ru/53765924

lis5131 04-04-2014 21:07 2333185

Ivan_009, да - то что надо.
Цитата:

[Files]
Source: "isgsg.dll"; Flags: "DontCopy";
Source: "Splash.png"; Flags: "DontCopy";

[code]
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer);
external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard;
begin
ExtractTemporaryFile('Splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.png',{#SplS},{#SplR},{#SplE},0,2 55,False,$FFFFFF,10);
end;
Source: "isgsg.dll"; Flags: "DontCopy"; - а длл где брать?
или если у меня работает значит она подключена?
Inno setup v5.4.2 Ultra Полная версия

Все. Торможу. Спасибо большое за подсказку или совет, ну и за скрипт.

Dodakaedr 04-04-2014 21:47 2333202

Цитата:

Цитата El Sanchez
Все представленные записи появляются после регистрации библиотеки. Просто для этой dll-ки в секции Files допишите флаг regserver. »

А что ей еще может быть нужно, потому что контекстное меню не появляется и после установки перезапускается проводник, а dll-ка висит в процессе Explore.exe???

Dodakaedr 04-04-2014 23:30 2333263

Цитата:

Цитата Ivan_009
Если ты про сплеш заставку »

А она точно рабочая??? У меня сплэш не появляется. Inno Ultra.
Разобрался. Использовал issplash.dll

audiofeel 04-04-2014 23:51 2333268

Dodakaedr,
Цитата:

Цитата Dodakaedr
А что ей еще может быть нужно, »

попробуй добавить вот это

[Setup]
ChangesAssociations=true
ChangesEnvironment=true
-----------------------------------
ChangesAssociations-изменяет связи
ChangesEnvironment-изменяет переменные

Dodakaedr 04-04-2014 23:57 2333270

Цитата:

Цитата audiofeel
попробуй добавить вот это »

не помогает

audiofeel 05-04-2014 00:06 2333278

Цитата:

Цитата Dodakaedr
не помогает »

-------------------------------
[Setup]
SetupLogging=true
ChangesAssociations=true
RestartIfNeededByRun=false
TimeStampsInUTC=true
ChangesEnvironment=true
[Files]
Flags: regserver regtypelib

Dodakaedr 05-04-2014 00:22 2333284

audiofeel, Спасибо, но уже сам разобрался. Оказалось нужно было с особенным параметром запускать программу после установки (запуск должен быть обязательным). Осталось узнать как её запустить с настройками выбора языка, а то в программе нету такой функции, она как-то при первом запуске появляется в оригинале.

Nordek 05-04-2014 03:54 2333318

Цитата:

Цитата lis5131
Source: "isgsg.dll"; Flags: "DontCopy"; - а длл где брать? »

А разве в папке Splash, рядом со скриптом Example.iss и картинкой Splash.png её нет?
Я увидел isgsg.dll.

Не сомневался я что вы не проявите свою внимательность, а стоило бы:
Прокрутите колёсиком мыши от себя на столько, на сколько это возможно - пока не упрётесь в первое сообщение т.е в шапку темы.

Кликать кнопкой мыши (Левой кнопкой мыши (по умолчанию) для правши или правой кнопкой мыши для левши (для левшей - это уже зависит от настройки конфигурации мыши - т.е в настройках мыши, ставили вы ли ранее галочку "Обменять назначение кнопок" в конфигурации кнопок.))

Кликните: Показать/скрыть: Дополнительные программы для Inno Setup:
Далее найдите:
Цитата:

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

забираем
isgsg_1.1.0.62.7z
кликните ссылку isgsg_1.1.0.62.7z
после того как кликните isgsg_1.1.0.62.7z, вас перенаправит на rusfolder
находясь на rusfolder, будут зелёные циферки а напротив окошко
введите указанные на картинке цифры в окошке напротив и нажмите "скачать"
после того как нажмёте "скачать", вас перенаправит на следующую страницу
Далее на странице найдите "Ссылка для скачивания файла:" (длинная такая) - кликните на неё, после начнётся скачивание файла isgsg_1.1.0.62.7z размером в 571КБ
после того как скачаете, файл isgsg_1.1.0.62.7z распакуйте архиватором 7-Zip
после распаковки увидите файл isgsg.exe - это и есть Inno Setup GameScript Generator
И добавляйте им - заставку, фоновые рисунки и фоновую музыку в разных комбинациях.
Достаточно подробно?
Такими не сложными действиями - может за одно свою лень убьёте.
Прямых ссылок на программу не будет (а то ещё не хватало себе карму испортить).

Stealthmax 05-04-2014 14:39 2333417

Цитата:

Цитата Dodakaedr
Интересно! Можешь показать? »

Показываю).
1. Проект VCL Styles
2. Установщик с библиотекой; можешь просто распаковать в папку и использовать редактор без установки, dll-ка там же.
3. Рабочий пример
Продублирую, может кому-то интересно будет
Код:

//*********************** Подключаем скин ***************************//
#define A = (Defined UNICODE) ? "W" : "A"
// Импорт  функции LoadVCLStyle из VclStylesInno.DLL
procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyle{#A}@files:VclStylesInno.dll stdcall'; // для Unicode и Ansi
// Импорт  функции UnLoadVCLStyles из VclStylesInno.DLL
procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@files:VclStylesInno.dll stdcall';

function InitializeSetup(): Boolean;
begin
  Result := True;
  //******** извлечение скина********************//
  ExtractTemporaryFile('CharcoalDarkSlate.vsf');
  //*********** подключение скина **************//
  LoadVCLStyle(ExpandConstant('{tmp}\CharcoalDarkSlate.vsf'));
end;

//****** Действие для кнопки Закрыть 'X', не работает по умолчанию со скином **********//
const
  SC_CLOSE = 61536;
var
  OldProc: Longint;

function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProc{#A}@user32.dll stdcall delayload';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall delayload';
// вызов процедуры закрытия
procedure ExitProcess(exitCode:integer); external 'ExitProcess@kernel32.dll stdcall';

function FProc(h: hwnd; Msg, wParam, lParam: Longint): Longint;
begin
  if (Msg = $0112) then
  begin
    if (wParam = SC_CLOSE) then
    begin {действие при нажатии крестика}
    // параметр процедуры закрытия процесса, в данном случае без подтверждения
    ExitProcess(0);
    // также можно добавить сообщение при нажатии
      //MsgBox('вы нажали крестик', mbInformation, MB_OK);
      wParam := 0;
    end;
  end;
  Result := CallWindowProc(OldProc, h, Msg, wParam, lParam);
end;

procedure InitializeWizard();
begin
  OldProc := SetWindowLong(WizardForm.Handle, -4, CallbackAddr('FProc')); // хэндл окна, требуется для закрытия
end;

//**** Закрытие установщика и выгрузка подключенных библиотек ***********//
procedure DeinitializeSetup();
begin
  SetWindowLong(WizardForm.Handle, -4, OldProc);// хэндл окна
  UnLoadVCLStyles; //Выгружаем скин
end;


4. Как выглядит Файл 112154

P.S. Проверено на Unicode и Ansi версиях, пример-вложение перезалил, чтобы вопросов не возникало

Farser21 05-04-2014 14:51 2333424

Всем привет возник такой вопрос. У меня на странице компонентов: окно компонентов и окно для показа изображение при наведении на компонент. Внизу остается немного места, собственно как сделать небольшое окно на странице компонентов на котором бы отображался текст когда наводишь на компонент. Идентично так как и с картинками. Т.е. пользователь наводит на компонент и видит окно в котором есть небольшое описание к данному компоненту. Заранее спасибо за ответ!

Ivan_009 05-04-2014 15:05 2333432

Stealthmax, Проект VCL Styles ,Использовать только Юникод версию Inno Setup на Анси ошибку выбивает...

Че за дела... :(

Stealthmax 05-04-2014 15:19 2333439

Цитата:

Цитата Farser21
Идентично так как и с картинками. Т.е. пользователь наводит на компонент и видит окно в котором есть небольшое описание к данному компоненту. »

Ну в принципе, если просто описание компонента, в виде подсказки, то это параметр Hint.
Код:

// в данном случае при наведении курсора на странице wpWelcome на само привествие выводится описание компонента
begin
  with WizardForm.WelcomeLabel1 do
  begin
    Hint := 'Это установка программы на ваш ПК';
    ParentShowHint := False;
    ShowHint := True;
  end;

Если требуется выводить в отдельное окно с использованием Memo, то там чуток побольше будет.

Цитата:

Цитата Ivan_009
Проект VCL Styles ,Использовать только Юникод версию Inno Setup на Анси ошибку выбивает... »

Дружище, так есть же поиск для этого). Исправь на LoadVCLStyleA
Почитай, если будет время

Ivan_009 05-04-2014 15:35 2333448

Цитата:

Цитата Stealthmax
Исправь на LoadVCLStyleA »

Исправил: http://rghost.ru/53788577

Farser21 05-04-2014 15:43 2333453

Цитата:

Цитата Stealthmax
Если требуется выводить в отдельное окно с использованием Memo, то там чуток побольше будет. »

Нужно именно в отдельное окно. Чтобы только в этом окне появлялся текст. Не могли бы вы скинуть образец? Заранее спасибо.

Stealthmax 05-04-2014 15:45 2333455

Цитата:

Цитата Ivan_009
Исправил »

Сейчас протестирую на Ansi версии и выдам точнее, что не так.
Попробуй так и отпишись, чтобы другие не наступили на грабли, допишу исправление. У меня запустилось на обеих версиях Unicode и Ansi
Код:

#ifdef UNICODE
  #define A "W"
  #define S "U"
#else
  #define A "A"
  #define S "A"
#endif
//*********************** Подключаем скин ***************************//
procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyle{#A}@files:VclStylesInno.dll stdcall';


Ivan_009 05-04-2014 16:55 2333485

Stealthmax, Не работает это аналог этому:

Цитата:

Цитата Stealthmax
Исправь на LoadVCLStyleA »


Nordek 05-04-2014 16:56 2333487

Цитата:

Цитата Stealthmax
1. Проект VCL Styles »

Когда я смотрел проект VCLStyle - кривой был, сейчас смотрю поправили.


Цитата:

Цитата Stealthmax
P.S. Пример для Unicode версии, для Ansi исправить LoadVCLStyleA »

Для обоих версий:
Код:

#define A = (Defined UNICODE) ? "W" : "A"

[Code]
//*********************** Подключаем скин ***************************//
// Импорт  функции LoadVCLStyle из VclStylesInno.DLL
procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyle{#A}@files:VclStylesInno.dll stdcall';
// Импорт  функции UnLoadVCLStyles из VclStylesInno.DLL
procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@files:VclStylesInno.dll stdcall';

function InitializeSetup(): Boolean;
begin
 
Result := True;
  //******** извлечение скина********************//
 
ExtractTemporaryFile('CharcoalDarkSlate.vsf');
  //*********** подключение скина **************//
 
LoadVCLStyle(ExpandConstant('{tmp}\CharcoalDarkSlate.vsf'));
end;

//**** Закрытие установщика и выгрузка подключенных библиотек ***********//
procedure DeinitializeSetup();
begin
 
UnLoadVCLStyles; //Выгружаем скин
end;


Ivan_009 05-04-2014 17:02 2333490

Цитата:

Цитата Nordek
Когда я смотрел проект VCLStyle - кривой был, сейчас смотрю поправили. »

Nordek,Собственно ни чего не поправили на Анси версии тупит... :(

Stealthmax 05-04-2014 17:03 2333491

Цитата:

Цитата Nordek
Когда я смотрел проект VCLStyle - кривой был, сейчас смотрю поправили. »

Я сейчас сам раздуплился кое-как, оказывается обновление ещё было, я пропустил. Спасибо, за поддержку, а то как белка в колесе, на троих разрываюсь))).

Цитата:

Цитата Ivan_009
Собственно ни чего не поправили на Анси версии тупит... »

Ничего не тупит, я ж написал проверь и напиши мне сразу. Если ты мою качал библиотеку, то обнови с сайта. У меня была 1.2.1.2, а новее 1.2.1.3.
И посмотри исправления в прошлом посте от Nordek или в моем(внес правку). Все работает без нареканий.
P.S. Для тебя персонально перезалью пример в том же посте.

Nordek 05-04-2014 17:18 2333503

Цитата:

Цитата Ivan_009
Собственно ни чего не поправили на Анси версии тупит... »

У меня нормально работает, на обеих версиях. Установлен InnoSetup как Ansi версия - по умолчанию, так и Unicode версия Inno.
А ошибка при ПКМ в VCL Styles версии 1.0.5.3 была, в VCL Styles версии 1.2.1.3 нет.

Ivan_009 05-04-2014 17:23 2333505

Stealthmax, Где скины можно качнуть не подскажешь... :)

Nordek 05-04-2014 17:24 2333506

Сейчас заметил редактор скинов добавили VclStyleDesigner и просмотрщик VclStyleTest

audiofeel 05-04-2014 17:35 2333511

Цитата:

Цитата Stealthmax
Ничего не тупит, »

кнопка =выход не робит :(

Ivan_009 05-04-2014 17:37 2333513

Nordek, Интересно почему вверху крестик неактивен на инсталле не заметил случаем... :biggrin:
Установку отменить можно лишь кнопкой отмены... :beta:

Stealthmax 05-04-2014 17:38 2333514

Цитата:

Цитата Ivan_009
Где скины можно качнуть не подскажешь... »

А ты скачал установщик со страницы проекта? Мой пост читал? Внимательно?
Установи программу или распакуй её программой UniversalExtraxtor и там увидишь папку Styles, в ней все скины доступные + сам редактор скинов + демо для просмотра скинов.

Цитата:

Цитата Ivan_009
Интересно почему вверху крестик неактивен на инсталле не заметил случаем... »

Закрывай, пробуй
Код:

//****************************** Закрытие без подтверждений *******************//
#define A = (Defined UNICODE) ? "W" : "A"
const
  SC_CLOSE = 61536;
var
  OldProc: Longint;

function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProc{#A}@user32.dll stdcall delayload';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall delayload';
// вызов процедуры закрытия
procedure ExitProcess(exitCode:integer); external 'ExitProcess@kernel32.dll stdcall';

function FProc(h: hwnd; Msg, wParam, lParam: Longint): Longint;
begin
  if (Msg = $0112) then
  begin
    if (wParam = SC_CLOSE) then
    begin {действие при нажатии крестика}
    // параметр процедуры закрытия процесса
    ExitProcess(0);
    // также можно добавить сообщение при нажатии
      //MsgBox('вы нажали крестик', mbInformation, MB_OK);
      wParam := 0;
    end;
  end;
  Result := CallWindowProc(OldProc, h, Msg, wParam, lParam);
end;

procedure InitializeWizard();
begin
  OldProc := SetWindowLong(WizardForm.Handle, -4, CallbackAddr('FProc'));
end;
procedure DeinitializeSetup();
begin
  SetWindowLong(WizardForm.Handle, -4, OldProc);
end;


Ivan_009 05-04-2014 18:05 2333526

Stealthmax, А как,чтобы подверждение было чет не допер... :(

Nordek 05-04-2014 18:11 2333532

Цитата:

Цитата Ivan_009
Где скины »

Небольшая коллекция лежит в "C:\Program Files\The Road To Delphi\VCL Styles Inno\Styles"

Как всегда, что-то не так. В VclStyleTest при попытке перейти к Data Controls - выдаёт сообщение "Error loading MIDAS.DLL".
Прикрепляю.
Бибилиотеку MIDAS.DLL положить рядом с VclStyleTest (C:\Program Files\The Road To Delphi\VCL Styles Inno);
Или установка:
Код:

COPY midas.dll "%Windir%\System32" /Y
regsvr32 /S "%Windir%\system32\midas.dll"

удаление:
Код:

regsvr32 /U /S "%Windir%\system32\midas.dll"
DEL "%Windir%\system32\midas.dll" /S /Q

Цитата:

Цитата Ivan_009
не заметил случаем... »

Сейчас да, заметил.
Использую в инсталляторах:
Код:

[Code]
procedure InitializeWizard();
begin
 
WizardForm.BorderIcons := [];
end;


audiofeel 05-04-2014 18:24 2333537

версия = 1.2.1.2 "крестик" работает :yes:

Stealthmax 05-04-2014 18:32 2333541

Цитата:

Цитата Ivan_009
А как,чтобы подверждение было чет не допер. »

Код:

function FProc(h: hwnd; Msg, wParam, lParam: Longint): Longint;
begin
  if (Msg = $0112) then
  begin
    if (wParam = SC_CLOSE) then
    begin {действие при нажатии крестика}
    // параметр процедуры закрытия процесса
  if MsgBox('Прекратить установку и закрыть?', mbConfirmation, MB_YESNO) = idYes then // подтверждение закрытия
    ExitProcess(0);
    // также можно добавить сообщение при нажатии
      //MsgBox('вы нажали крестик', mbInformation, MB_OK);
      wParam := 0;
    end;
  end;
  Result := CallWindowProc(OldProc, h, Msg, wParam, lParam);
end;


Farser21 05-04-2014 18:34 2333543

Цитата:

Цитата Stealthmax
Если требуется выводить в отдельное окно с использованием Memo, то там чуток побольше будет. »

Нужно именно в отдельное окно. Чтобы только в этом окне появлялся текст. Не могли бы вы скинуть образец? Заранее спасибо.

Stealthmax 05-04-2014 18:36 2333544

Цитата:

Цитата Nordek
Как всегда, что-то не так. В VclStyleTest при попытке перейти к Data Controls - выдаёт сообщение "Error loading MIDAS.DLL". »

Я кинул библиотеку и ноу проблем-с

Ivan_009 05-04-2014 18:37 2333545

Кстати в обзоре папок ползунок не робит...

http://rghost.ru/53794582

Stealthmax 05-04-2014 18:49 2333548

Цитата:

Цитата Farser21
Нужно именно в отдельное окно. Чтобы только в этом окне появлялся текст. Не могли бы вы скинуть образец? »

Пример
Код:

{ RedesignWizardFormBegin } // Не удалять эту строку!
// Не изменять эту секцию. Она создана автоматически.
var
  HintMemo: TNewMemo;
  ComponentRadioButton: TNewRadioButton;
  ComponentRadioButton2: TNewRadioButton;

procedure WizardBitmapImageMouseMove(Sender: TObject; Shift: TShiftState; X: Integer; Y: Integer); forward;
procedure WizardBitmapImageMouseLeave(Sender: TObject); forward;
procedure ComponentRadioButtonClick(Sender: TObject); forward;
procedure ComponentRadioButtonMouseMove(Sender: TObject; Shift: TShiftState; X: Integer; Y: Integer); forward;
procedure ComponentRadioButton2Click(Sender: TObject); forward;
procedure ComponentRadioButton2MouseMove(Sender: TObject; Shift: TShiftState; X: Integer; Y: Integer); forward;

procedure RedesignWizardForm;
begin
  with WizardForm.WizardBitmapImage do
  begin
    OnMouseMove := @WizardBitmapImageMouseMove;
    OnMouseLeave := @WizardBitmapImageMouseLeave;
  end;

  with WizardForm.WelcomeLabel1 do
  begin
    Hint := 'Это установка программы на ваш ПК';
    ParentShowHint := False;
    ShowHint := True;
  end;

  { HintMemo }
  HintMemo := TNewMemo.Create(WizardForm);
  with HintMemo do
  begin
    Name := 'HintMemo';
    Parent := WizardForm.WelcomePage;
    Left := ScaleX(344);
    Top := ScaleY(192);
    Width := ScaleX(145);
    Height := ScaleY(105);
    Lines.Text := 'HintMemo';
    ReadOnly := True;
  end;

  { ComponentRadioButton }
  ComponentRadioButton := TNewRadioButton.Create(WizardForm);
  with ComponentRadioButton do
  begin
    Name := 'ComponentRadioButton';
    Parent := WizardForm.WelcomePage;
    Left := ScaleX(176);
    Top := ScaleY(192);
    Width := ScaleX(113);
    Height := ScaleY(17);
    Caption := 'Компонент1';
    Checked := True;
    TabStop := True;
    OnClick := @ComponentRadioButtonClick;
    OnMouseMove := @ComponentRadioButtonMouseMove;
  end;

  { ComponentRadioButton2 }
  ComponentRadioButton2 := TNewRadioButton.Create(WizardForm);
  with ComponentRadioButton2 do
  begin
    Name := 'ComponentRadioButton2';
    Parent := WizardForm.WelcomePage;
    Left := ScaleX(176);
    Top := ScaleY(216);
    Width := ScaleX(113);
    Height := ScaleY(17);
    Caption := 'Компонент 2';
    OnClick := @ComponentRadioButton2Click;
    OnMouseMove := @ComponentRadioButton2MouseMove;
  end;

  HintMemo.TabOrder := 2;
  ComponentRadioButton.TabOrder := 3;
  ComponentRadioButton2.TabOrder := 4;

{ ReservationBegin }
  // Вы можете добавить ваш код здесь.

{ ReservationEnd }
end;
// Не изменять эту секцию. Она создана автоматически.
{ RedesignWizardFormEnd } // Не удалять эту строку!

procedure WizardBitmapImageMouseLeave(Sender: TObject);
begin
  HintMemo.Lines.Text := '';// убрали курсор мыши с изображения
end;

procedure WizardBitmapImageMouseMove(Sender: TObject; Shift: TShiftState; X: Integer; Y: Integer);
begin
  HintMemo.Lines.Text := 'Посетить сайт или разместить свою рекламу'; //навели на изображение
end;

procedure ComponentRadioButton2MouseMove(Sender: TObject; Shift: TShiftState; X: Integer; Y: Integer);
begin
  HintMemo.Lines.Text := 'Компонент 2 будет установлен на ПК, а также другие библиотеки'; //навели на Компонент 2
end;

procedure ComponentRadioButtonMouseMove(Sender: TObject; Shift: TShiftState; X: Integer; Y: Integer);
begin
  HintMemo.Lines.Text := 'Компонент 1 будет установлен на ПК'; // навели на Компонент 1
end;

procedure ComponentRadioButton2Click(Sender: TObject);
begin
  HintMemo.Lines.Text := 'Компонент 2 будет установлен на ПК, а также другие библиотеки'; // выбор Компонента 2
end;

procedure ComponentRadioButtonClick(Sender: TObject);
begin
  HintMemo.Lines.Text := 'Компонент 1 будет установлен на ПК'; // выбор Компонента 1
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
  HintMemo.Lines.Text := ''; // очищаем перед запуском элемент Memo
end;

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D0030109504000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038F010D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544269746D6170496D6167651157697A6172644269746D6170496D6167650B4F6E4D6F7573654D6F7665071A57697A6172644269746D6170496D6167654D6F7573654D6F76650C4F6E4D6F7573654C65617665071B57697A6172644269746D6170496D6167654D6F7573654C656176650000F10E544E6577537461746963546578740D57656C636F6D654C6162656C310448696E74143D000000D0ADD182D0BE20D183D181D182D0B0D0BDD0BED0B2D0BAD0B020D0BFD180D0BED0B3D180D0B0D0BCD0BCD18B20D0BDD0B020D0B2D0B0D18820D09FD09A0E506172656E7453686F7748696E74080853686F7748696E7409000008544E65774D656D6F0848696E744D656D6F044C65667403580103546F7003C0000557696474680391000648656967687402690D4C696E65732E537472696E677301060848696E744D656D6F0008526561644F6E6C7909085461624F72646572020200000F544E6577526164696F427574746F6E14436F6D706F6E656E74526164696F427574746F6E044C65667403B00003546F7003C00005576964746802710648656967687402110743617074696F6E1413000000D09AD0BED0BCD0BFD0BED0BDD0B5D0BDD1823107436865636B656409085461624F7264657202030754616253746F7009074F6E436C69636B0719436F6D706F6E656E74526164696F427574746F6E436C69636B0B4F6E4D6F7573654D6F7665071D436F6D706F6E656E74526164696F427574746F6E4D6F7573654D6F766500000F544E6577526164696F427574746F6E15436F6D706F6E656E74526164696F427574746F6E32044C65667403B00003546F7003D80005576964746802710648656967687402110743617074696F6E1414000000D09AD0BED0BCD0BFD0BED0BDD0B5D0BDD1822032085461624F726465720204074F6E436C69636B071A436F6D706F6E656E74526164696F427574746F6E32436C69636B0B4F6E4D6F7573654D6F7665071E436F6D706F6E656E74526164696F427574746F6E324D6F7573654D6F7665000000F110544E65774E6F7465626F6F6B5061676509496E6E6572506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167651453656C656374436F6D706F6E656E7473506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED00000000000000


Чтобы было нагляднее и понятнее, открой этот код в расширенной версии Inno ResTools и увидишь что и куда, я специально оставил секцию ISFormDesigner, дабы сам посмотрел.
Можно убрать действия для курсора мыши, чтобы не переполнять элементы. Для компонентов увидишь события- от этого можешь отталкиваться и писать свой код.

Цитата:

Цитата Ivan_009
Кстати в обзоре папок ползунок не робит... »

Есть такое, не заметил даже. Надо разработчику скидывать баг-репорт или пилить самому).

Farser21 05-04-2014 19:37 2333559

Stealthmax, спасибо. Тут немножко не так как хотелось бы. Я пытался подстроить под себя, но не получилось.
Возможно ли сделать так?
Изображение:

Скрипт:

Ivan_009 05-04-2014 22:14 2333643

Подскажите пожалуйста если кто знает,возможно ли сделать Edit прозрачным и выделяемым...

Как здесь сделано: http://rghost.ru/53801139

Dodakaedr 05-04-2014 22:53 2333661

Подскажите, пожалуйста, можно такое создать в inno setup? (файл xml)
читать дальше »
Код:

<?xml version="1.0"?>
<!-- created by Frigate XML package -->
  <Actions />
  <Desktop Language="Russian" TreeWidth="185" LastVersionCheck="41711" RunCount="2" ShowQuest="True" LastFun="0" ShowFun="True" Path="C:\Users\Администратор\Desktop" Converter="Images" Filter="All suitable files (*.bmp,*.jpg,*.jpeg,*.ico,*.tif,*.tiff,*.png,*.wmf,*.emf,*.pcx,*.tga,*.gif,*.dcx,*.pxm,*.ppm,*.pbm,*.pgm,*.pxm,*.j2k,*.jp2,*.jpc,*.j2c,*.jpe,*.fax,*.g3n,*.g3f,*.dib,*.rle,*.targa,*.vda,*.thm,*.icb,*.vst,*.win,*.wdp,*.hdp,*.crw,*.cr2,*.dng,*.nef,*.raw,*.raf,*.x3f,*.orf,*.srf,*.mrw,*.dcr,*.bay,*.pef,*.arw,*.rw2,*.psd,*.pdd,*.pcd,*.cut,*.dcm,*.dicom,*.avs,*.cin,*.dot,*.dpx,*.fits,*.fpx,*.hdf,*.mat,*.miff,*.mtv,*.palm,*.pict,*.pix,*.pwp,*.rla,*.sgi,*.sun,*.svg,*.ttf,*.vicar,*.viff,*.xbm,*.xcf,*.xpm,*.wmz,*.emz)" view_hidden="False" >
    <MainForm Maximize="True" />
    <CmdHelpDialog Maximize="False" Rect="[194,0,892,1040]" />
  </Desktop>


nik1967 05-04-2014 23:37 2333681

Цитата:

Цитата Ivan_009
Подскажите пожалуйста если кто знает,возможно ли сделать Edit прозрачным и выделяемым... »

Прозрачным и выделяемым - не знаю как. Просто прозрачным - знаю.

Ivan_009 05-04-2014 23:51 2333683

Цитата:

Цитата nik1967
Просто прозрачным - знаю »

nik1967, Ну это я тоже, через ботву да... :)

sergey3695 06-04-2014 10:18 2333736

Ivan_009, у меня что ли видел? или нее...

Ivan_009 06-04-2014 10:49 2333747

Цитата:

Цитата sergey3695
у меня что ли видел »

Ну да, как сделал не покажешь пожалуйста... :)
А то через ботву только прозрачным можно сделать...

sergey3695 06-04-2014 12:30 2333778

Ivan_009, две формы. одна на переднем плане с вырезанием цвета, другая взади. какой прозразрачный эдит? :) Как в IsPicture короче говоря.

Ivan_009 06-04-2014 13:28 2333804

Цитата:

Цитата sergey3695
две формы. одна на переднем плане с вырезанием цвета, другая взади »

Примерчик можешь дать пожалуйста... :)

sergey3695 06-04-2014 19:51 2333971

Ivan_009, Вот (это лишь пример как бы прозр эдита) :)

Stealthmax 07-04-2014 01:20 2334105

Цитата:

Цитата Farser21
Нужно именно в отдельное окно. Чтобы только в этом окне появлялся текст. Не могли бы вы скинуть образец? »

Дополни свой скрипт на основе этого
примера
Код:

[Files]
Source: "pict1.bmp"; Flags: dontcopy; Attribs: hidden system
Source: "pict2.bmp"; Flags: dontcopy; Attribs: hidden system

[Components]
Name: "g0"; Description: "P-MOD Пакет с пряниками"; Types: full
Name: "g0\c1"; Description: "Командирская камера"; Types: full; Flags: dontinheritcheck
Name: "g0\c2"; Description: "Отключение озеленения в снайперском прицеле"; Types: full; Flags: dontinheritcheck
Name: "g0\c3"; Description: "Блокировать смену прицелов (NoScroll)"; Types: full; Flags: dontinheritcheck
Name: "g0\c4"; Description: "Динамическая камера"; Types: full; Flags: dontinheritcheck
Name: "g0\c4\c5"; Description: "Покачивание отключено полностью"; Flags: exclusive
Name: "g0\c4\c6"; Description: "Отключено только покачивание прицела"; Flags: exclusive
Name: "g0\c7"; Description: "Увеличить время работы Лампочки"; Types: full; Flags: dontinheritcheck
Name: "g0\c7\c8"; Description: "2 секунды"; Flags: exclusive
Name: "g0\c7\c9"; Description: "5 секунд"; Flags: exclusive
Name: "g0\c7\c10"; Description: "10 секунд"; Flags: exclusive
Name: "g0\c11"; Description: "Информация об вашем респауне на экране загрузки"; Types: full; Flags: dontinheritcheck
Name: "g0\c12"; Description: "Эффекты камеры во время боя"; Types: full; Flags: dontinheritcheck
Name: "g0\c12\c13"; Description: "Инерция камеры"; Flags: exclusive
Name: "g0\c12\c14"; Description: "Красная вспышка когда враг попадает по вам"; Flags: exclusive
Name: "g0\c12\c15"; Description: "Тряска камеры когда враг попадает по вам"; Flags: exclusive
Name: "g0\c12\c16"; Description: "Включить все 3 функции"; Flags: exclusive
Name: "g0\c17"; Description: "Стандартная кратность прицела"; Types: full; Flags: dontinheritcheck
Name: "g0\c18"; Description: "Быстрая смена оборудования"; Types: full; Flags: dontinheritcheck
Name: "g0\c19"; Description: "Горизонтальная стабилизация"; Types: full; Flags: dontinheritcheck
Name: "g0\c19\c20"; Description: "На всех технике"; Flags: exclusive
Name: "g0\c19\c21"; Description: "На всей технике кроме ПТ"; Flags: exclusive
Name: "g0\c22"; Description: "Окно входа в игру"; Types: full; Flags: dontinheritcheck
Name: "g0\c22\c23"; Description: "Отключение автовыбора сервера"; Flags: exclusive
Name: "g0\c22\c24"; Description: "Отключение проигрывания стартового ролика"; Flags: exclusive
Name: "g0\c22\c25"; Description: "Включить обе функции"; Flags: exclusive
Name: "g0\c26"; Description: "Отдаление камеры при старте боя и после уничтожения танка"; Types: full; Flags: dontinheritcheck
Name: "g0\c27"; Description: "Ручной тормоз на ПТ-САУ"; Types: full; Flags: dontinheritcheck
Name: "g0\c27\c28"; Description: "Полное отключение тормоза"; Flags: exclusive
Name: "g0\c27\c29"; Description: "Только открепление камеры"; Flags: exclusive
Name: "g0\c30"; Description: "Свободная камера в реплеях"; Types: full; Flags: dontinheritcheck

[Languages]
Name: "English"; MessagesFile: "compiler:Default.isl"
Name: "Russian"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
Russian.Component1=Описание компонента 1 и изображение выше
Russian.Component2=Описание компонента 2 и изображение выше

[_Code]
var
  ComponentBitmapImage: TBitmapImage;
  DescritionText: TNewStaticText;

procedure RedesignWizardForm;
begin
  { ComponentBitmapImage }
  ComponentBitmapImage := TBitmapImage.Create(WizardForm);
  with ComponentBitmapImage do
  begin
    Name := 'ComponentBitmapImage';
    Parent := WizardForm.SelectComponentsPage;
    Left := ScaleX(200);
    Top := ScaleY(50);
    Width := ScaleX(210);
    Height := ScaleY(89);
  end;

  with WizardForm.ComponentsList do
  begin
    Width := ScaleX(193);
  end;

  with WizardForm.TypesCombo do
  begin
    Width := ScaleX(193);
  end;

  { DescritionText }
  DescritionText := TNewStaticText.Create(WizardForm);
  with DescritionText do
  begin
    Name := 'DescritionText';
    Parent := WizardForm.SelectComponentsPage;
    AutoSize := False;
    WordWrap := True;
    Caption := '';
    Left := ScaleX(200);
    Top := ScaleY(144);
    Width := ScaleX(210);
    Height := ScaleY(61);
  end;

  DescritionText.TabOrder := 4;
end;

procedure OnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
begin
    if Index = 1 then // элемент списка компонентов, т.е. к примеру их 31, значит по аналогии и остальные
    begin
    ComponentBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\pict2.bmp'));//выводим изображении при наведении
    DescritionText.Caption := CustomMessage('Component2');//выводим текст при наведении
    end;
    if Index = 0 then
    begin
    ComponentBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\pict1.bmp'));
    DescritionText.Caption := CustomMessage('Component1');
    end;
end;

procedure OnMouseLeave(Sender: TObject); //убираем курсор мыши, действия
begin
  DescritionText.Caption := 'Наведите указатель мыши на компонент, чтобы увидеть его описание.';//вывод текста при потере фокуса, т.е. убрали курсор мыши
  //DescritionText.Caption := ''; //если убираем текст, то при потере фокуса получаем пустое окно описания, расскомментировать при необходимости
  ComponentBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\pict1.bmp'));//выводим изображение по умолчанию
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
  WizardForm.ComponentsList.OnItemMouseMove := @OnItemMouseMove; // инициализация процедуры при наведении курсора мыши
  WizardForm.ComponentsList.OnMouseLeave := @OnMouseLeave;// инициализация процедуры при потери фокуса мыши
  ComponentBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\pict1.bmp')); //изображение по умолчанию
  DescritionText.Caption := 'Наведите указатель мыши на компонент, чтобы увидеть его описание.';//описание по умолчанию
end;

function InitializeSetup(): Boolean;
begin
  Result := True;
  ExtractTemporaryFile('pict1.bmp');
  ExtractTemporaryFile('pict1.bmp');
end;

P.S. Skillet "Comatose" пойдет, давно их не слушал.

И упрощение для удобства за помощью sergey3695, за что отдельное спасибо:
Код:

procedure OnItemMouseMove(Sender: TObject; X, Y: Integer; Index: Integer; Area: TItemArea);
begin
//выводим картинку и описание, процедуры детальнее указаны в примере выше, упрощение самой конструкции наведения куросора мыши
    case Index of
    0: begin ComponentBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\pict1.bmp')); DescritionText.Caption := CustomMessage('Component1'); end;
    1: begin DescritionText.Caption := CustomMessage('Component2'); ComponentBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\pict2.bmp')); end
  else
    DescritionText.Caption := 'Наведите указатель мыши на компонент, чтобы увидеть его описание.';
  end;
end;


sergey3695 07-04-2014 11:09 2334164

Stealthmax,
Код:

  0: begin
DescritionText.Caption := CustomMessage('Component1'); ComponentBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\pict1.bmp'));
end;

может как-то так все таки,а не в кепшен совать,ведь это текст лейбла. (код не проверял, кусок за кусок :) (собирать-то влом))

diman_21Ru 07-04-2014 12:21 2334179

Stealthmax, а можно ли какой то более легкий способ на описание компонента , т.к некоторые обозначения есть уже

Stealthmax 07-04-2014 13:34 2334202

Цитата:

Цитата sergey3695
может как-то так все таки,а не в кепшен совать,ведь это текст лейбла. »

Молодца! Да, так пашет, сам что-то не допер такой вариант. Текст Label? А он случаем не в Caption указывается? Или может другое свойство есть? По-моему, нового там ничего не было.
Цитата:

Цитата diman_21Ru
можно ли какой то более легкий способ на описание компонента , т.к некоторые обозначения есть уже »

Надо подключиться к спутнику, экстрасенсов вызвать, связи с ними нет. Открываешь редактор Inno Restools и видишь там справа окно свойств элементов и делаешь то, что нужно, потом выкладываешь здесь и указываешь что хотелось бы и что не получилось. Вывести описание на странице wpSelectComponentsPage без добавления новых элементов можно в WizardForm.SelectComponentsLabel.Caption := 'бла-бла-бла', положение и размеры там же.
По поводу некоторых обозначений. Я дал пример, который не подразумевает использовать в первозданном виде, меняй названия элементов как угодно, повторюсь, это всего лишь пример.

sergey3695 07-04-2014 15:17 2334255

Stealthmax, мда... я же написал текст лейбла. (поясняю как ты и написал в кепшане указывается текст, но так как я посчитал что DescritionText это лейбл,то написал текст лейбла (кепшан относится к лейблу)) :)

diman_21Ru 07-04-2014 15:46 2334271

sergey3695, мего запутано (

Stealthmax 07-04-2014 16:04 2334289

Цитата:

Цитата sergey3695
(кепшан относится к лейблу)) »

C какого такого перепуга? TNewStaticText имеет параметр Caption, также как и Label, а вот в Memo, к примеру, будет уже Lines. Там вроде все прекрасно видно в начале скрипта. Можно выбрать любой элемент, на свой вкус. Я взял элементарный. :ok:
Цитата:

Цитата sergey3695
но так как я посчитал что DescritionText это лейбл »

А вот здесь я оставил метку, XXXText в конце, чтобы было понятно, что это не Label, но все равно сути это не меняет. Так что я малость не понимаю о чем ты в принципе. А если не Caption, то куда ты текст собираешься выводить? Короче, оффтоп полный пошел. Лучше в личку пиши такие моменты, чтобы не плодить тут такие посты с обсуждением параметров элементов из справки Inno.

sergey3695 07-04-2014 16:13 2334295

Stealthmax, ну да забей короче...

Ivan_009 07-04-2014 16:42 2334310

Покажите пример пожалуйста если у кого имеется, на отображение сколько распаковано файлов...

Как тут: http://rghost.ru/53844067

Dodakaedr 07-04-2014 17:01 2334320

Как исправить эту ошибку? Скрипт с Ultimate Test Black.7z в шапке...

Farser21 07-04-2014 17:08 2334325

Stealthmax, спасибо большое все просто супер. Как я понял на этом примере который вы мне скинули не только описание компонентов а еще и изображение? Т.е. мне убрать мой скрипт на показ изображений к компонентом?

Dodakaedr 07-04-2014 17:22 2334333

Вложений: 1
По исправлял появилась следующая....
Я так понимаю что все дело в unicode?

saurn 07-04-2014 17:24 2334334

Dodakaedr, в описании ошибки кроется ее причина: "Не хватает знака ";" в строке 118". И таких ошибок, дальше по скрипту, будет тьма, так как юникодовая инно не допускает отсутствия точки с запятой, и после логической скобки end в особенности.

PRAVIY 07-04-2014 19:20 2334391

Здравствуйте, совсем недавно начал изучать тему создания репаков.
При создании и оформлении своего первого инсталятора сталкнулся со следующей ошибкой.

После компиляции установочник не желает открываться, высвечивая статус "не отвечает". Долго пытался разобраться в чём дело, в итоге понял что конфликт идёт с частью скрипта отвечающем за всплывающее png изображение перед запуском установочника и с частью отвечающей за кликабельный логотип.
Примечательно то что этот же самый скрипт прекрасно компелируется и без проблем запускается если в [Files] вместо всей папки игры запаковать "пустышку" из нескольких файлов.
Уже кучу гайдов перерыл, решения так и не нашёл. Буду благодарен если кто сможет помочь разобраться.


Вот собственно сам скрипт:
читать дальше »

[Setup]
DiskSpanning=true
DiskSliceSize=1457664000
AppName=DOOM 3 - COOP
AppVerName=Doom 3 - Coop
AppPublisherURL=http://Coop-Land.ru/rookovodstva/356-rukovodstvo-zapuska-Doom-3-po-seti.html
AppSupportURL=http://Coop-Land.ru/rookovodstva/356-rukovodstvo-zapuska-Doom-3-po-seti.html
AppUpdatesURL=http://Coop-Land.ru/rookovodstva/356-rukovodstvo-zapuska-Doom-3-po-seti.html
DefaultDirName=Games\DOOM 3 - COOP
DefaultGroupName=DOOM 3 - COOP
AllowNoIcons=yes
OutputDir=D:\GAMES\SETUP\Созданные репаки
OutputBaseFilename=DOOM 3 - COOP
SetupIconFile=D:\GAMES\DOOM 3\lms4\Doom 3 Coop.ico
Compression=lzma/ultra64
SolidCompression=true
WizardImageFile=PIC\Fon.bmp
WizardSmallImageFile=PIC\Shapka.bmp
InternalCompressLevel=ultra64

[Languages]
Name: russian; MessagesFile: compiler:Default.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: D:\GAMES\DOOM 3\LMS4\LMS4.bat; DestDir: {app}\LMS4; Flags: ignoreversion
;Source: D:\GAMES\DOOM 3\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: PIC\logo.bmp; Flags: dontcopy
Source: DLL\CallbackCtrl.dll; Flags: dontcopy
Source: PIC\splash.png; Flags: dontcopy
Source: DLL\isgsg.dll; Flags: dontcopy

[Icons]
Name: {group}\DOOM 3 - COOP; Filename: {app}\LMS4\LMS4.bat; WorkingDir: {app}\LMS4; IconFileName: {app}\LMS4\Doom 3 Coop.ico
Name: {group}\{cm:UninstallProgram,DOOM 3 - COOP}; Filename: {uninstallexe}
Name: {commondesktop}\DOOM 3 - COOP; Filename: {app}\LMS4\LMS4.bat; WorkingDir: {app}\LMS4; IconFileName: {app}\LMS4\Doom 3 Coop.ico; Comment: "Запустить кооперативный режим Doom 3"; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\DOOM 3 - COOP; Filename: {app}\LMS4\LMS4.bat; Tasks: quicklaunchicon

[Registry]
Root: HKLM; SubKey: SOFTWARE\id\Doom 3; ValueType: string; ValueName: CDKEY; ValueData: {app}; Flags: uninsdeletekey

[CustomMessages]
russian.Error2=Установка %nDoom 3 Coop Mod %nне завершена.
russian.Error3=%nВо время установки произошла ошибка, пожалуйста отключите сторонние программы и повторите попытку установки.%n%n%nНажмите «Завершить», чтобы выйти.
russian.WelcomeLabel1= Программа установит игру Doom 3 Coop Mod на Ваш компьютер.
russian.WelcomeLabel2= Нажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти.
russian.FinisLabel1=Игра %nDoom 3 Coop Mod%n установлена на Ваш компьютер.

[code]
var
PageNameLabel, PageDescriptionLabel, WelcomeLabel1,WelcomeLabel2,FLabel1, FLabel2, WLabel1, WLabel2, WelcomeLabel4,FinishedHeadingLabel, FinishedHeadingLabel1,WelcomeLabel3: TLabel;

/////////////////////////////// ФОНОВОЕ ИЗОБРАЖЕНИЕ ///////////////////////////////
procedure WizardImage();
begin
WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);

WelcomeLabel1:= TLabel.Create(WizardForm);
WelcomeLabel1.Left := ScaleX(149);
WelcomeLabel1.Top := ScaleY(119);
WelcomeLabel1.Width := ScaleX(205);
WelcomeLabel1.Height := ScaleY(219);
WelcomeLabel1.AutoSize := False;
WelcomeLabel1.WordWrap := True;
WelcomeLabel1.Alignment := taCenter;
WelcomeLabel1.Font.Size := 12;
WelcomeLabel1.Font.Color:= clblack;
WelcomeLabel1.Font.Style:= [fsBold]
WelcomeLabel1.Font.Name:= 'Georgia'
WelcomeLabel1.ShowAccelChar := False;
WelcomeLabel1.Caption :=ExpandConstant('{cm:WelcomeLabel1}');
WelcomeLabel1.Transparent := True;
WelcomeLabel1.Parent := WizardForm.WelcomePage;

WLabel1 := TLabel.Create(WizardForm);
WLabel1.Left := ScaleX(148);
WLabel1.Top := ScaleY(118);
WLabel1.Width := ScaleX(205);
WLabel1.Height := ScaleY(219);
WLabel1.AutoSize := False;
WLabel1.WordWrap := True;
WLabel1.Alignment := taCenter;
WLabel1.Font.Size := 12;
WLabel1.Font.Color:= clwhite;
WLabel1.Font.Style:= [fsBold]
WLabel1.Font.Name:= 'Georgia'
WLabel1.ShowAccelChar := False;
WLabel1.Caption :=ExpandConstant('{cm:WelcomeLabel1}');
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.WelcomePage;

WelcomeLabel2:= TLabel.Create(WizardForm);
WelcomeLabel2.Left := ScaleX(149);
WelcomeLabel2.Top := ScaleY(184);
WelcomeLabel2.Width := ScaleX(210);
WelcomeLabel2.Height := ScaleY(234);
WelcomeLabel2.AutoSize := False;
WelcomeLabel2.WordWrap := True;
WelcomeLabel2.Alignment := taCenter;
WelcomeLabel2.Font.Size := 12;
WelcomeLabel2.Font.Color:= clblack;
WelcomeLabel2.Font.Style:= [fsBold]
WelcomeLabel2.Font.Name:= 'Georgia'
WelcomeLabel2.ShowAccelChar := False;
WelcomeLabel2.Caption :=ExpandConstant('{cm:WelcomeLabel2}');
WelcomeLabel2.Transparent := True;
WelcomeLabel2.Parent := WizardForm.WelcomePage;

WLabel2 :=TLabel.Create(WizardForm);
WLabel2.Left := ScaleX(148);
WLabel2.Top := ScaleY(183);
WLabel2.Width := ScaleX(210);
WLabel2.Height := ScaleY(234);
WLabel2.AutoSize := False;
WLabel2.WordWrap := True;
WLabel2.Alignment := taCenter;
WLabel2.Font.Size := 12;
WLabel2.Font.Style:= [fsBold]
WLabel2.Font.Color:= clwhite;
WLabel2.Font.Name:= 'Georgia'
WLabel2.ShowAccelChar := False;
WLabel2.Caption := ExpandConstant('{cm:WelcomeLabel2}');
WLabel2.Transparent := True;
WLabel2.Parent := WizardForm.WelcomePage;

FinishedHeadingLabel:= TLabel.Create(WizardForm);
FinishedHeadingLabel.Left := ScaleX(99);
FinishedHeadingLabel.Top := ScaleY(117);
FinishedHeadingLabel.Width := ScaleX(308);
FinishedHeadingLabel.Height := ScaleY(100);
FinishedHeadingLabel.AutoSize := False;
FinishedHeadingLabel.WordWrap := True;
FinishedHeadingLabel.Alignment := taCenter;
FinishedHeadingLabel.Font.Size := 12;
FinishedHeadingLabel.Font.Color:= clblack;
FinishedHeadingLabel.Font.Style:= [fsBold]
FinishedHeadingLabel.Font.Name:= 'Georgia'
FinishedHeadingLabel.ShowAccelChar := False;
FinishedHeadingLabel.Caption :=ExpandConstant('{cm:FinisLabel1}');
FinishedHeadingLabel.Transparent := True;
FinishedHeadingLabel.Parent := WizardForm.FinishedPage;

FLabel1 := TLabel.Create(WizardForm);
FLabel1.Left := ScaleX(98);
FLabel1.Top := ScaleY(116);
FLabel1.Width := ScaleX(308);
FLabel1.Height := ScaleY(100);
FLabel1.AutoSize := False;
FLabel1.Alignment := taCenter;
FLabel1.WordWrap := True;
FLabel1.Font.Size := 12;
FLabel1.Font.Name := 'Georgia'
FLabel1.Font.Color:= clwhite;
FLabel1.Font.Style:= [fsBold]
FLabel1.ShowAccelChar := False;
FLabel1.Caption := ExpandConstant('{cm:FinisLabel1}');
FLabel1.Transparent := True;
FLabel1.Parent := WizardForm.FinishedPage;

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;

WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
end;
/////////////////////////////////////////Ф.И.///////////////////////////////////////////



///////////////////////////////// ИЗОБРАЖЕНИЕ ШАПКИ ////////////////////////////////////
procedure WizardSmallImage();
begin
WizardForm.WizardSmallBitmapImage.SetBounds(ScaleX(0), ScaleY(0), WizardForm.MainPanel.Width, WizardForm.MainPanel.Height);

PageNameLabel:= TLabel.Create(WizardForm)
with WizardForm.PageNameLabel do
PageNameLabel.SetBounds(Left, Top, Width, Height);
PageNameLabel.Transparent:= True;
PageNameLabel.Font:= WizardForm.PageNameLabel.Font;
PageNameLabel.Font.Color:= clblack;
PageNameLabel.Parent:= WizardForm.MainPanel;

PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left:= WizardForm.PageDescriptionLabel.Left-12;
Top:= WizardForm.PageDescriptionLabel.Top;
Height:= WizardForm.PageDescriptionLabel.Height;
Width:= ScaleX(280);
AutoSize:= False;
WordWrap:= True;
Font.Name:= WizardForm.PageDescriptionLabel.Font.Name;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;

WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
end;
/////////////////////////////////////////И.Ш.///////////////////////////////////////////



////////////////////////////////// ВСПЛЫВАЮЩЕЕ ЛОГО ////////////////////////////////////
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure Splash();
begin
ExtractTemporaryFile('Splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);
end;
/////////////////////////////////////////В.Л.///////////////////////////////////////////



////////////////////////////////// КЛИКАБЕЛЬНОЕ ЛОГО ///////////////////////////////////
procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
ShellExec('', 'http://Coop-Land.ru/rookovodstva/356-rukovodstvo-zapuska-Doom-3-po-seti.html', '' , '', SW_SHOW, ewNoWait, ResCode)
end;

procedure Logo();
var
BtnPanel: TPanel;
BtnImage: TBitmapImage;
begin
ExtractTemporaryFile('logo.bmp')

BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=20
Top:=325
Width:=192
Height:=26
Cursor:=crHand
OnClick:=@logoOnClick
Parent:=WizardForm
end
BtnImage:=TBitmapImage.Create(WizardForm)
with BtnImage do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\logo.bmp')
Parent:=BtnPanel
end
end;
/////////////////////////////////////////К.Л.///////////////////////////////////////////



procedure InitializeWizard;
begin
Splash();
Logo();
WizardImage();
WizardSmallImage();
WizardForm.CancelButton.BringToFront;
end;


Ivan_009 07-04-2014 19:26 2334397

Цитата:

Цитата PRAVIY
Вот собственно сам скрипт: »

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

PRAVIY 07-04-2014 19:40 2334408

Цитата:

Цитата Ivan_009
PRAVIY, С файлами залей скрипт куда нибудь гляну, а то методом подбора в лом весь вечер файлы подбирать... »

Не вопрос, вот версия с файлами "пустышками" http://yadi.sk/d/EzleIIsiLyHpC, если надо будет могу и с самой игрой залить.

vint56 07-04-2014 19:41 2334409

PRAVIY Сначало временые файлы а потом все остальное
[Files]
Source: PIC\logo.bmp; Flags: dontcopy
Source: DLL\CallbackCtrl.dll; Flags: dontcopy
Source: PIC\splash.png; Flags: dontcopy
Source: DLL\isgsg.dll; Flags: dontcopy
Source: D:\GAMES\DOOM 3\LMS4\LMS4.bat; DestDir: {app}\LMS4; Flags: ignoreversion
;Source: D:\GAMES\DOOM 3\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

Ivan_009 07-04-2014 19:53 2334420

Цитата:

Цитата vint56
Сначало временые файлы а потом все остальное »

Собственно vint56, ты меня опередил... :)
PRAVIY, Вот пробуй: http://rghost.ru/53849516

PRAVIY 07-04-2014 19:58 2334423

Цитата:

Цитата vint56
PRAVIY Сначало временые файлы а потом все остальное »

Цитата:

Цитата Ivan_009
PRAVIY, Вот пробуй: http://rghost.ru/53849516 »

Блин ребята огромное вам человеческое спасибо! Скомпилировал всё работает. Всё гениальное как всегда просто :-)

Nordek 07-04-2014 20:26 2334438

PRAVIY, Кстати, если понадобится вдруг переместить папку "Скрипт репака Doom 3" в другое место - то Inno, например файл LMS4.bat уже не найдёт.
Поэтому, замени D:\GAMES
Код:

Source: D:\GAMES\DOOM 3\LMS4\LMS4.bat; DestDir: {app}\LMS4; Flags: ignoreversion
на ".." т.е:
Код:

Source: ..\DOOM 3\LMS4\LMS4.bat; DestDir: {app}\LMS4; Flags: ignoreversion

Stealthmax 07-04-2014 21:04 2334459

Цитата:

Цитата Farser21
Как я понял на этом примере который вы мне скинули не только описание компонентов а еще и изображение? Т.е. мне убрать мой скрипт на показ изображений к компонентом? »

На свой выбор, я в примере совместил и то и другое, можешь просто убрать в моем вывод изображения и оставить только описание. Там ничего сложного.

diman_21Ru 08-04-2014 14:11 2334733

Как можно реализовать неоновые кнопки

Ivan_009 08-04-2014 15:55 2334768

Цитата:

Цитата diman_21Ru
Как можно реализовать неоновые кнопки »

diman_21Ru, Через ботву что ли да? :whitevoid:

diman_21Ru 08-04-2014 16:05 2334781

Ivan_009, да

Ivan_009 08-04-2014 16:09 2334788

Цитата:

Цитата diman_21Ru
да »

Вот:http://rghost.ru/53880667

diman_21Ru 08-04-2014 16:37 2334824

Ivan_009, спасибо

audiofeel 08-04-2014 17:31 2334853

привет всем, а как "повесить" свой курсор и свой " Click.wav" и "WFEnter.wav" на
"BASS_CreateOnOffButton(WizardForm, '{tmp}\MusicButton.png', ............."
может просто отказаться от BASS и использовать function sndPlaySound

Ivan_009 08-04-2014 18:59 2334898

Цитата:

Цитата audiofeel
привет всем, а как "повесить" свой курсор и свой " Click.wav" и "WFEnter.wav" на
"BASS_CreateOnOffButton(WizardForm, '{tmp}\MusicButton.png', ............."
может просто отказаться от BASS и использовать function sndPlaySound »

audiofeel, Наверное как на обычную кнопку наложенную через ботву...

Так:

Код:

BtnSetCursor(BASS_OnOffBtn,LoadCursorFromFile(ExpandConstant('{tmp}\cursor.ani')))

Dodakaedr 08-04-2014 19:21 2334919

Как в примере из шапки в "Отображение процентов при (де)инсталляции" сделать показ процентов при инсталляции? Проверял при инсталляции не отображается
читать дальше »
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[Files]
Source: {fonts}\*; DestDir: {app}; Flags: external

[code ]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
    WM_USER = $0400;
    PBM_SETPOS = WM_USER+2;
    GWL_WNDPROC = -4;


type
    LPARAM = Integer;
    WPARAM = Integer;
    LRESULT = Integer;
    TFNWndProc = Integer;


function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';
function SetWindowText(hWnd: HWND; lpString: String): BOOL; external 'SetWindowText{#A}@user32.dll stdcall';

var
    OldProgressBarProc: Longint;

function ProgressBarProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
    if Msg = PBM_SETPOS then with WizardForm do SetWindowText( StatusLabel.Handle, Format('%s'#32'%s', [SetupMessage(msgStatusExtractFiles), FormatFloat('0.#0 %', (ProgressGauge.Position*100)/ProgressGauge.Max)]) );

    Result := CallWindowProc(OldProgressBarProc, hWnd, Msg, wParam, lParam);
end;

procedure InitializeWizard();
begin
    OldProgressBarProc := SetWindowLong(WizardForm.ProgressGauge.Handle, GWL_WNDPROC, CallbackAddr('ProgressBarProc'));
end;

procedure DeinitializeSetup();
begin
    SetWindowlong(WizardForm.ProgressGauge.Handle, GWL_WNDPROC, OldProgressBarProc);
end;

/////////////////////////////// Uninstall //////////////////////////////////


function UninstallProgressBarProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
    if Msg = PBM_SETPOS then with UninstallProgressForm do SetWindowText( StatusLabel.Handle, Format('%s'#32'%s', [FmtMessage(SetupMessage(msgStatusUninstalling), ['{#SetupSetting("AppName")}']), FormatFloat('0.#0 %', (ProgressBar.Position*100)/ProgressBar.Max)]) );

    Result := CallWindowProc(OldProgressBarProc, hWnd, Msg, wParam, lParam);
end;

procedure UninstallFormOnHide(Sender: TObject);
begin
    SetWindowlong(TUninstallProgressForm(Sender).ProgressBar.Handle, GWL_WNDPROC, OldProgressBarProc);
end;

procedure InitializeUninstallProgressForm();
begin
    OldProgressBarProc := SetWindowLong(UninstallProgressForm.ProgressBar.Handle, GWL_WNDPROC, CallbackAddr('UninstallProgressBarProc'));
    UninstallProgressForm.OnHide := @UninstallFormOnHide;
end;


diman_21Ru 08-04-2014 19:21 2334920

Ivan_009,

Ivan_009 08-04-2014 19:30 2334930

Dodakaedr, Пример:http://rghost.ru/53888337

diman_21Ru, Добавь:

Код:

var
  ButtonFont: TFont;


diman_21Ru 08-04-2014 19:30 2334931

Ivan_009, не помогло ссылается и на неё с ошибкой

Dodakaedr 08-04-2014 19:32 2334933

Цитата:

Цитата Ivan_009
Пример »

спс, но мне надо чтобы и при деинсталляции отображение процентов сохранилось...

Ivan_009 08-04-2014 19:40 2334940

Dodakaedr, Не знаю у меня все нормально отображается, брал пример из шапки...
Может и за Юникодной версии Inno Setup...

diman_21Ru, Дай скрипт в личку гляну...

audiofeel 08-04-2014 19:49 2334948

Цитата:

Цитата Ivan_009
Наверное как на обычную кнопку наложенную через ботву... »

кнопка "делается" в модуле BASS.ISS

Ivan_009 08-04-2014 19:55 2334951

Цитата:

Цитата audiofeel
кнопка "делается" в модуле BASS.ISS »

Пример: http://rghost.ru/53889498

audiofeel 08-04-2014 20:32 2334980

Ivan_009, теперь Duplicat identifer 'LOADCURSORFROMFILE'
может можно просто переименовать какую нибудь из них ??

diman_21Ru 08-04-2014 20:32 2334981

Ivan_009, не получяеться чтоли мой скрипт ?

Dodakaedr 08-04-2014 20:32 2334982

Цитата:

Цитата Ivan_009
Может и за Юникодной версии Inno Setup... »

Проверил и в Ansi тоже самое.

Цитата:

Цитата audiofeel
теперь Duplicat identifer 'LOADCURSORFROMFILE' »

идет дублирование, сравни их и если они идентичны то удали одну, если нет то соедини удаляя идентичны строки

audiofeel 08-04-2014 20:58 2335003

Цитата:

Цитата Dodakaedr
идет дублирование, сравни их и если они идентичны то удали одну, если нет то соедини удаляя идентичны строки »

удалил из BASS_MODULE.ISS - function LoadCursorFromFile (они одинаковые), и переместил - BtnSetCursor(BASS_OnOffBtn,LoadCursorFromFile(ExpandConstant('{tmp}\cursor2.cur'))) на - procedure InitializeWizard;
вроде работает
так правильно ???

Dodakaedr 08-04-2014 21:28 2335021

Цитата:

Цитата audiofeel
так правильно ??? »

Не знаю, смотри сам получилось ли то что ты хотел.....но посмотрев на скрипт BASS_MODULE.ISS то достаточно было удалить
функцию function LoadCursorFromFile(FileName: String): Cardinal; external 'LoadCursorFromFileA@user32 stdcall';.
Ты переместил BtnSetCursor(BASS_OnOffBtn,LoadCursorFromFile(ExpandConstant('{tmp}\cursor.ani'))) з procedure BASS_CreateOnOffButton(Parent: TWinControl; Image: String; Left, Top, Width, Height, ShadowWidth: Integer);????

audiofeel 08-04-2014 21:49 2335043

Dodakaedr,
да не совсем

вобщем вот это в "главном" скрипте
procedure InitializeWizard;
begin
.............................
BASS_Init('{tmp}\Music.ogg');
BASS_CreateOnOffButton(WizardForm, '{tmp}\MusicButton.png', ScaleX(690), ScaleY(20), ScaleX(24), ScaleY(24), 4);
BtnSetCursor(BASS_OnOffBtn,LoadCursorFromFile(ExpandConstant('{tmp}\cursor2.cur')))
а вот это осталось в модуле BASS
BASS_OnOffBtn:= BtnCreate(Parent.Handle, ScaleX(Left), ScaleY(Top), ScaleX(Width), ScaleY(Height), ExpandConstant(Image), ShadowWidth, False)

Dodakaedr 08-04-2014 21:51 2335045

Цитата:

Цитата audiofeel
да не совсем »

Если работает так как тебе нужно значить правильно...

Dodakaedr 09-04-2014 11:59 2335242

Имеется картинка формата .png с прозрачным фоном, как теперь сохранить эту прозрачность для сплеша?

Nordek 09-04-2014 17:44 2335374

Цитата:

Цитата Dodakaedr
Имеется картинка формата .png с прозрачным фоном, как теперь сохранить эту прозрачность для сплеша? »

Не понятно. Так вроде и так прозрачно.

Dodakaedr 09-04-2014 17:52 2335380

Цитата:

Цитата Nordek
Не понятно. Так вроде и так прозрачно. »

Я делал через issplash.dll то там прозрачность вырезается и устанавливается фон, сейчас попробую из твоего примера...

Попробовал: сплеш вообще не появляется. В Ansi работает, как добиться этого в Unicode?

saurn 09-04-2014 21:19 2335469

Цитата:

Цитата Dodakaedr
В Ansi работает, как добиться этого в Unicode? »

Код:

procedure ShowSplashScreen(p1:HWND;p2:AnsiString;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

diman_21Ru 09-04-2014 22:39 2335520

Как можно прикрутить Button кнопки если уже имеется музыка , заранее спасибо

TryRooM 10-04-2014 00:26 2335579

diman_21Ru,
http://rghost.ru/53930424

diman_21Ru 10-04-2014 10:06 2335653

TryRooM,

Gnom_aka_Lexander 10-04-2014 10:10 2335655

diman_21Ru, во первых скрин отличается от предоставленого скрипта, в скрипте этой грубейшей ошибки нет. у тебя блок создания SizeLabel почему-то вне какой-либо функции, и плюс еще завершен лишним end.

diman_21Ru 10-04-2014 10:16 2335660

Gnom_aka_Lexander, Это не лишняя end , ошибка выходит как не крути (

Gnom_aka_Lexander 10-04-2014 10:20 2335662

diman_21Ru, эта лишняя end уже не играет роли, потому что главная ошибка выше нее, блок создания SizeLabel вне какой-либо функции или процедуры. и этого блока нет в скрипте, который тебе предоставлен, и сам по себе грубых ошибок, ведущих к неработоспособности кода не имеет.

TryRooM 10-04-2014 10:31 2335669

diman_21Ru,
Скрипт который я дал рабочий, у тебя ошибка возникла по другой причине. Неправильно , или не туда интегрировал, как тебе написали выше.

Nordek 10-04-2014 12:12 2335705

Цитата:

Цитата diman_21Ru
ошибка2.png »

Только что скомпилировал скрипт - ошибки нет!

Цитата:

Цитата diman_21Ru
Это не лишняя end »

А я бы сказал что по скрину видно то, что под BASS_CreateOnOffButton(WizardForm, '{tmp}\MusicButton.png', 20, 320, 36, 36, 4) //Создаем кнопку вкл/выкл лишняя end; - понять можно по разному (даже если окажется тупостью) - скрипта не видно всего. А дальше, сам виноват что картинками закидываешь.

Ivan_009 10-04-2014 12:29 2335709

Цитата:

Цитата diman_21Ru
Это не лишняя end , ошибка выходит как не крути ( »

diman_21Ru, Читай справку по Inno Setup, все левые вопросы сами собой отпадут... :read:

Nordek 10-04-2014 13:01 2335717

Цитата:

Цитата diman_21Ru
ошибка выходит как не крути ( »

Вот пример.
diman_21Ru, Мистер, у меня нет подобных примеров для теста что вы привели на скрине - да оно мне и нафиг ненужно. Больше скажу - оно никому не нужно кроме вас самого. Если хотите чтоб вам подсказали - будьте так добры предоставлять как можно больше информации. Нет - тогда сами.
Вот, представьте: пришлось найти похожий пример чтоб наглядно показать. Вроде видно - или нет?
Тут проблема одна: Лень, руки и мозги.

PRAVIY 10-04-2014 14:16 2335742

Ребят а как прописать в скрипте так чтобы при создании ярлыка на рабочем столе в нём также прописывались дополнительные задачи (как например запуск модификации или пропуск вступительных заставок и тд)

Конкретно в моём случае цель сделать чтоб в свойствах ярлыка в графе "Объект" прописывалось так:

"C:\GAMES\Half-Life\hl.exe" -game decay

Если же просто в скрипте прописать {app}\hl.exe -game Decay; то в ярлыке в итоге ставится "C:\GAMES\Half-Life\hl.exe -game decay" (акцент на кавычках)
И в таком случае ярлык вообще не видит файл. :(

Gnom_aka_Lexander 10-04-2014 14:20 2335745

PRAVIY, справка, Секция [Icons], параметры:
Цитата:

Parameters
Параметры командной строки для ярлыка. Могут содержать константы

Например:
Parameters: "/play filename.mid"

PRAVIY 10-04-2014 15:31 2335786

Цитата:

Цитата Gnom_aka_Lexander
справка, Секция [Icons], параметры:
Цитата:
Parameters
Параметры командной строки для ярлыка. Могут содержать константы
Например:
Parameters: "/play filename.mid" »

Благодарю.

Nordek 11-04-2014 10:08 2336153

Цитата:

Цитата PRAVIY
Конкретно в моём случае цель сделать чтоб в свойствах ярлыка в графе "Объект" прописывалось так:
"C:\GAMES\Half-Life\hl.exe" -game decay »

Inno Script Studio » Иконки
далее:

Mat_y 11-04-2014 14:01 2336245

Подскажите, пожалуйста, что нужно написать, чтобы секции [INI]

Код:

Filename: {app}\filename.ini; Section: new; Key: date; String: ??????????????
Что нужно написать в String, чтобы туда записалась дата установки?

Shkutu 11-04-2014 14:45 2336265

Mat_y, можно так
Код:

[Ini]
Filename: {app}\filename.ini; Section: new; Key: date; String:{code:GetDate}

[Codе]
function(param:string):string;
begin
 result:=GetDateTimeString('ddddd', #0, #0);
end;


Dinvin4ester 11-04-2014 15:27 2336289

Ребята,что там в RUN дописать надо чтоб было по выбору чекбокса дополнительное ПО.
Сам скрипт - http://sendfile.su/966524

Dodakaedr 11-04-2014 15:29 2336290

Подскажите как создать ярлыки в секции [code] через чекбоксы на странице выбора папки установки (SelectDirPage)? Нужно два чекбокса для ярлыка на рабочем столе и в меню пуск.... Стандартные секции не нужны.

Цитата:

Цитата Dinvin4ester
Ребята,что там в RUN дописать надо чтоб было по выбору чекбокса дополнительное ПО. »

Вот так пойдет?
Код:

[Run]
Filename: {app}\Soft\dxwebsetup.exe; WorkingDir: {app}\Soft;  Flags: postinstall waituntilterminated;


Dinvin4ester 11-04-2014 15:41 2336299

Dodakaedr,
Там в скрипте я это и добавил,но оно ставится автоматом ,короче без выбора после установки игры.

Dodakaedr 11-04-2014 15:46 2336303

Dinvin4ester, Попробуй так Flags: postinstall nowait skipifsilent
Удали waituntilterminated

Dinvin4ester 11-04-2014 16:13 2336312

Dodakaedr,
Сделал все что вы сказали ,но нету выбора,вот такое http://i58.fastpic.ru/big/2014/0411/...2a84c0d12d.jpg

Shkutu 11-04-2014 16:56 2336325

Dinvin4ester, а вам в какой момент чекбокс нужен (на скрине не слишком понятно, какая страница отображается)?
Флаг postinstall покажет чекбокс, когда установка уже будет завершена (на странице wpFinished). Если нужен чекбокс до начала установки, то кроме секции [Run] нужна еще секция [Tasks].
Код:

[Tasks]
Name: "dxwebsetup"; Description: "dxwebsetup"; Flags: unchecked

[Run]
Filename: {app}\Soft\dxwebsetup.exe; WorkingDir: {app}\Soft;  Flags: waituntilterminated skipifsilent; Tasks: dxwebsetup


Dinvin4ester 11-04-2014 17:02 2336329

Shkutu,
Ага,чекбокс нужен до начала установки,чтобы можно было снять его ,точнее убрать или поставить галку.Щас попробовал ваш способ ,осталось также как и было . Получается уже чистый лист http://i58.fastpic.ru/big/2014/0411/...f4434ce6a5.jpg , а мне хотелось туда впихнуть.

TryRooM 11-04-2014 17:23 2336339

Dinvin4ester, http://rghost.ru/53991057

Dinvin4ester 11-04-2014 17:40 2336348

TryRooM,
Спасибо,попробую.

Dodakaedr 11-04-2014 20:28 2336435

возможно создать check для секции Run? Что-то типа этого:
Код:

[Run]
Filename: "{tmp}\script.vbs"; Parameters: """{app}\{#MyAppExeName}"""; Check: CheckPin; Flags: shellexec skipifsilent;


saurn 11-04-2014 21:01 2336440

Цитата:

Цитата Dodakaedr
возможно создать check для секции Run »

Самопальный чекбокс и чековая функция:
читать дальше »
Код:

[Code]
var
 
CheckBoxPin: TCheckBox;


function CheckPin(): Boolean;
begin
    if
CheckBoxPin <> nil then
     
Result := CheckBoxPin.Checked;
end;


procedure CheckBoxPinCreate();
begin
   
CheckBoxPin := nil;

    if (GetWindowsVersion >= $06010000) then
      begin
         
CheckBoxPin := TCheckBox.Create(nil);
          with CheckBoxPin do
          begin
             
Parent := WizardForm.SelectDirPage;
              SetBounds(WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top div 2, WizardForm.DirEdit.Width, ScaleY(17))
              Caption := 'Закрепить ярлык на панели задач Windows';
          end;
      end;
end;


procedure InitializeWizard();
begin
   
CheckBoxPinCreate();
end;


procedure CurPageChanged(const CurPageID: Integer); //Debug
begin
    case
CurPageID of
       
10: if CheckPin <> False then WizardForm.Caption := 'True';
    end;
end;


Можно и при помощи тасков.

Dodakaedr 11-04-2014 21:07 2336442

Цитата:

Цитата saurn
Можно и при помощи тасков. »

Можно тоже примерчик???

saurn 11-04-2014 21:26 2336445

Цитата:

Цитата Dodakaedr
Можно тоже примерчик??? »

Код:

[Tasks]
Name: CheckPin; Description: Закрепить ярлык на панели задач Windows; Flags: unchecked; MinVersion: 0,6.1


[Run]
Filename: "{tmp}\script.vbs"; Parameters: """{app}\{#MyAppExeName}"""; Tasks: CheckPin; Flags: shellexec skipifsilent;


Dodakaedr 11-04-2014 21:26 2336446

При отмеченном чекбоксе после успешной установки выбивает ошибку что файл сценария не найден(( Как исправить?

Цитата:

Цитата saurn
Код:

[Tasks]
Name: CheckPin; Description: Закрепить ярлык на панели задач Windows; Flags: unchecked; MinVersion: 0,6.1
[Run]
Filename: "{tmp}\script.vbs"; Parameters: """{app}\{#MyAppExeName}"""; Tasks: CheckPin; Flags: shellexec skipifsilent;

»

Спасибо, но такое не подходит....

saurn 11-04-2014 21:42 2336457

Цитата:

Цитата Dodakaedr
выбивает ошибку что файл сценария не найден(( Как исправить? »

Ну, как бы, элементарно: указать компилятору в секции файлов, где этот сценарий находится и извлекать оный во временную папку:
Код:

[Files]
Source:script.vbs; DestDir: {tmp}; Flags: deleteafterinstall;


Dodakaedr 11-04-2014 21:44 2336459

Цитата:

Цитата saurn
Ну, как бы, элементароно: указать компилятору в секции файлов, где этот сценарий находится и извлекать оный во временную папку: »

У меня так и прописано.

TryRooM 11-04-2014 22:30 2336476

Dodakaedr, http://rghost.ru/54002757

Dodakaedr 11-04-2014 22:31 2336478

TryRooM, нет, нужно через секцию code

TryRooM 11-04-2014 22:46 2336484

Dodakaedr, http://rghost.ru/54003620

Dodakaedr 11-04-2014 22:56 2336492

TryRooM, тоже самое..... ошибка.

Цитата:

Цитата Dodakaedr
При отмеченном чекбоксе после успешной установки выбивает ошибку что файл сценария не найден(( Как исправить? »


TryRooM 11-04-2014 23:03 2336497

Dodakaedr, Скинь скрипт, посмотрю.

Dodakaedr 11-04-2014 23:04 2336498

TryRooM, сейчас немного доработаю и скину

TryRooM 11-04-2014 23:28 2336510

Dodakaedr,
закоментируй DisableFinishedPage=yes

Dodakaedr 11-04-2014 23:30 2336512

Цитата:

Цитата TryRooM
закоментируй DisableFinishedPage=yes »

Сделать видимой?

TryRooM 11-04-2014 23:41 2336520

Dodakaedr, http://rghost.ru/54006194 пример от vit56 картинки
закоментируй и заработает vbs

Dodakaedr 11-04-2014 23:43 2336521

Цитата:

Цитата TryRooM
пример от vit56 картинки
закоментируй и заработает vbs »

Спасибо, но страница финишна мне не нужна.....

TryRooM 12-04-2014 00:48 2336537

Dodakaedr, http://rghost.ru/54007600
по такому принципу, она будет , но её можно отключить и vbs будет работать.

Dodakaedr 12-04-2014 07:02 2336609

TryRooM, а как еще и installing page можно скрыть?

TryRooM 12-04-2014 07:20 2336611

Dodakaedr, http://rghost.ru/54016893

Dodakaedr 12-04-2014 11:44 2336668

TryRooM, Не скрывает(((

TryRooM 12-04-2014 12:54 2336706

Dodakaedr, http://rghost.ru/54026093

Dodakaedr 12-04-2014 14:55 2336759

TryRooM, тоже не идет( Ничто не может скрыть страницу InstallingPage (процесс установки)...

TryRooM 12-04-2014 15:56 2336794

Dodakaedr,
из справки
SILENT, /VERYSILENT
Установка в ускоренном или очень ускоренном режиме. При установке в ускоренном режиме окно мастера и фоновое окно мастера не отображаются, отображается только окно прогресса. При очень ускоренной установке окно прогресса тоже не отображается. Остальная установка проходит как обычно - отображаются сообщения об ошибках в ходе установки, страница приветствия (если ее отображение не отменено директивой DisableStartupPrompt или параметром '/SP-' командной строки).

Dodakaedr 12-04-2014 16:50 2336836

Цитата:

Цитата TryRooM
из справки
SILENT, /VERYSILENT
Установка в ускоренном или очень ускоренном режиме. При установке в ускоренном режиме окно мастера и фоновое окно мастера не отображаются, отображается только окно прогресса. При очень ускоренной установке окно прогресса тоже не отображается. Остальная установка проходит как обычно - отображаются сообщения об ошибках в ходе установки, страница приветствия (если ее отображение не отменено директивой DisableStartupPrompt или параметром '/SP-' командной строки). »

Значить никак???

saurn 12-04-2014 19:11 2336946

Цитата:

Цитата Dodakaedr
Значить никак??? »

Поигратся с ShowWindow. Другого способа не знаю
читать дальше »
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=...
DisableFinishedPage=yes
DisableReadyPage=yes


[Files]
Source: {win}\Fonts\*; DestDir: {app}; Flags: external overwritereadonly ignoreversion;

[Code]
const
    BM_CLICK = $00F5;


function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL; external 'ShowWindow@user32.dll stdcall';


procedure CurPageChanged(CurPageID: Integer);
begin
    case CurPageID of
        11:
        begin
            ShowWindow(WizardForm.Handle, SW_HIDE);
            PostMessage(WizardForm.NextButton.Handle, BM_CLICK, 0, 0);
        end;
    end;
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
    case CurStep of
        ssDone: MsgBoxEx(Application.Handle, 'Завершено.', #0, $00000000 + $00000030, 0, 0);
    end;
end;


Dodakaedr 12-04-2014 19:30 2336957

Цитата:

Цитата saurn
Поигратся с ShowWindow. Другого способа не знаю »

Вот это уже лучше. Спасибо!

Mr.Evgen 12-04-2014 20:39 2336996

Ребят! А чем можно создать формы? inno setup form designer не работает под windows 8.

diman_21Ru 12-04-2014 21:33 2337016

Можно ли реализовать видео ролик при запуске установщика чтобы ролик был посередине установщика,а затем пропадал , заранее спасибо

Ivan_009 12-04-2014 21:41 2337019

Цитата:

Цитата diman_21Ru
Можно ли реализовать видео ролик при запуске установщика чтобы ролик был посередине установщика,а затем пропадал , заранее спасибо »

diman_21Ru, Пример ISVideo...

http://rghost.ru/54045880

Dodakaedr 12-04-2014 22:06 2337032

Подскажите, пожалуйста, в чем может быть проблема. При использовании ботвы при запуске появляется два раза подряд такая ошибка и она же при переходе на страницу готовности (ReadyPage).

Dodakaedr 12-04-2014 22:08 2337036

Вложений: 1
Скрипт

Dinvin4ester 13-04-2014 13:37 2337279

Ребята,помогите сделать процентный прогресс бар,поставил простой,но как-то не нравится.Что дописать нужно ?
Cкрипт - http://sendfile.su/967241.

vint56 13-04-2014 15:26 2337337

Dodakaedr у тебя нету Component.ID: страницы потому и ошибка
// ShowComponents(CurPageID);

Dodakaedr 13-04-2014 15:29 2337339

vint56, Спс. Вроде все норм стало))

Dodakaedr 13-04-2014 18:30 2337435

Как теперь вывести картинку png на WizardForm при использовании библиотеки IsWin7?
пробовал так, не видно:
Код:

ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\Logo.png'),ScaleX(24),ScaleY(327),ScaleX(150),ScaleY(25),True,True);
  ImgApplyChanges(WizardForm.Handle);

Все уже не надо...

Dodakaedr 14-04-2014 21:09 2338041

Ivan_009, У вас получилось то что хотели?

Dinvin4ester 15-04-2014 09:05 2338237

Так никто не поможет составить процентный прогресс бар ?

audiofeel 16-04-2014 07:55 2338703

привет всем, как "замедлить" анимацию кнопок на ботве ?? при наведении указателя и тд.

innot20 16-04-2014 13:01 2338846

Как с помощью Inno Setup скачать архив с сервера для определённого компонента

Shkutu 16-04-2014 13:28 2338867

Всем доброго времени суток!
Подскажите плиз, что за компонент выводит сообщение FinishedHeadingLabel ("Завершение мастера установки")?

Mailchik 16-04-2014 14:24 2338908

Shkutu, WizardForm.FinishedHeadingLabel

diman_21Ru 16-04-2014 15:36 2338947

Всем привет как можно при установке мод-пака чтобы шрифты в модах устанавливались напрямик в папку Windows /Fonts

audiofeel 16-04-2014 16:59 2338982

Цитата:

Цитата diman_21Ru
Всем привет как можно при установке мод-пака чтобы шрифты в модах устанавливались напрямик в папку Windows /Fonts »

так не пробовал ??
[Files]
Source: Fonts\calibrili.ttf; DestDir: {fonts}; Flags: onlyifdoesntexist uninsneveruninstall; FontInstall: Calibri Light Italic

как изменить размер шрифта для одной кнопки, (ботва) а не для всех ???

Shift85 16-04-2014 17:21 2338992

Цитата:

Цитата audiofeel
как изменить размер шрифта для одной кнопки, (ботва) а не для всех ??? »

audiofeel, Можно для каждой кнопки сделать так:

Код:

var
  ButtonFont1: TFont;
  ButtonFont2: TFont;
  ButtonFont3: TFont;

procedure BtnSetFont1(h :HWND; Font :Cardinal); external 'BtnSetFont@{tmp}\b2p.dll stdcall delayload';
procedure BtnSetFont2(h :HWND; Font :Cardinal); external 'BtnSetFont@{tmp}\b2p.dll stdcall delayload';
procedure BtnSetFont3(h :HWND; Font :Cardinal); external 'BtnSetFont@{tmp}\b2p.dll stdcall delayload';

ButtonFont1:=TFont.Create;
with ButtonFont1 do begin
  Name:='Tahoma';
  Size:= 9;
  Style:=[];
end;

ButtonFont2:=TFont.Create;
with ButtonFont2 do begin
  Name:='Georgia';
  Size:= 9;
  Style:=[];
end;

ButtonFont3:=TFont.Create;
with ButtonFont3 do begin
  Name:='Arial';
  Size:= 9;
  Style:=[];
end;


with WizardForm.CancelButton do begin
  BtnSetFont1(hCancelBtn,ButtonFont1.Handle);
end;

with WizardForm.NextButton do begin
  BtnSetFont2(hNextBtn,ButtonFont2.Handle);
end;

with WizardForm.BackButton do begin
  BtnSetFont3(hBackBtn,ButtonFont3.Handle);
end;

procedure DeinitializeSetup;
begin
  ButtonFont1.Free;
  ButtonFont2.Free;
  ButtonFont3.Free;
end;


diman_21Ru 16-04-2014 17:56 2339011

audiofeel, Короче вот как я сделал :

Name: Fonts;Description:Fonts; Types: full compact custom; Flags: fixed
Source:"Fonts\*"; DestDir: {Fonts};Components:Fonts; Flags: onlyifdoesntexist uninsneveruninstall; FontInstall: Calibri Light Italic

установщик видит папку но не распаковывает не куда , что не так , заранее спасибо =)

habib2302 16-04-2014 18:21 2339021

diman_21Ru, может попробовать запустить с правами админа?

Stealthmax 16-04-2014 18:51 2339034

Приветствую всех! Проблема образовалась, не могу сам разобраться, подскажите в чем глюк?!
Код:

function InitializeSetup(): Boolean;
var
  ResultCode: Integer;  // Содержит код ошибки
  GetPath: String;              // Путь к программе
  Message : integer;
  oldVer: string;
begin
  if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Sandboxie','UninstallString', GetPath) // Получаем путь к программе
  then begin
  GetPath := RemoveQuotes(GetPath);
  RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Sandboxie','DisplayVersion', oldVer);
    Message := MsgBox('Найдена установленная версия {#MyAppName} '+oldVer+'! Удалить?', mbConfirmation, MB_YESNO);// Выводим сообщение
    if Message = IDYES then
    Exec('taskkill', '/f /im {#MyAppExeName}', '', SW_HIDE, ewWaitUntilTerminated, ResultCode);
    Exec(GetPath, '', '', SW_SHOW,ewWaitUntilTerminated, ResultCode);
    Result := True  // Установка программы будет продолжена
    end
end;

Определяет версию в реестре и выводит диалог удаления предыдущей, но удаление не происходит.
В реестре прописано:
Код:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Sandboxie
"UninstallString"="C:\Windows\Installer\SandboxieInstall64.exe" /remove


habib2302 16-04-2014 19:44 2339067

Stealthmax,
Код:

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

[code  ]

function UninstallMyApp(): Boolean;
var
    Buff: String;
    i: Integer;
begin
    Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
    if not Result then Result := not FileExists(RemoveQuotes(Buff));
    if not Result then if MsgBox('Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?', mbError, MB_YESNO) = IDYES then
    try
        Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
    finally
        Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
        if not Result then MsgBox('Удаление завершилось неудачей, бывай!', mbError, MB_OK);
    end;
end;



function InitializeSetup(): Boolean;
begin
    Result := UninstallMyApp();
end;


Stealthmax 16-04-2014 19:45 2339068

Цитата:

Цитата habib2302
у меня есть похожый код »

Аналогично не запускает удаление. Данный код работает для Inno, т.к. и мой код работал для удаления предыдущей версии на Inno других программ.
Тут непонятная проблема с извлечением строки реестра, которая идет с параметром "UninstallString"="C:\Windows\Installer\SandboxieInstall64.exe" /remove, а для Inno по аналогии идет просто "UninstallString"=C:\Program Files\MyApp_is1\unins000.exe, т.е. при вызове Exec('Path','/SILENT','') подставляем дополнительный параметр и все прекрасно работает. Скорей всего это и есть загвоздка. Не знаю как это обойти, получается что извлекает строку, но как-то не так её выполняет. При вызове из обычной командной строки данного фрагмента тоже все нормально, запускает стандартное удаление.

habib2302 16-04-2014 21:19 2339102

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

Скрипт
Код:

; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "Display Driver Uninstaller"
#define MyAppVersion "12.6.3"
#define MyAppURL "http://anonym.to/?http://www.wagnardmobile.com/DDU/"
#define MyAppExeName "Display Driver Uninstaller.exe"
#include "WinTB.iss"
#include "botva2.iss"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=true
OutputBaseFilename={#MyAppName} {#MyAppVersion} RePack (& Portable) by Xabib
SetupIconFile=ico.ico
Compression=lzma/Ultra64
SolidCompression=true
InternalCompressLevel=Ultra64
DiskSpanning=false
DiskSliceSize=736000000
ShowLanguageDialog=yes
SlicesPerDisk=4
UninstallDisplayIcon={app}\ico.ico
RawDataResource=Botva:botva2.dll|b2p:b2p.dll|Logo:logo.png|bPic:bPic.png|LiPic:LiPic.png|aPic:aPic.png
AppModifyPath={app}
VersionInfoProductName={#MyAppName}
DirExistsWarning=no
AppendDefaultDirName=false
AppendDefaultGroupName=false
DisableReadyPage=true
AppID={#MyAppName}
VersionInfoDescription={#MyAppName} RePack by Xabib
AppCopyright=Xabib © 2014
VersionInfoVersion={#MyAppVersion}
VersionInfoProductVersion={#MyAppVersion}
VersionInfoCopyright=Xabib © 2014
DisableFinishedPage=false
UninstallDisplayName={#MyAppName}
ComponentsListTVStyle=true
ShowComponentSizes=false
Uninstallable=not IsComponentSelected('DDU\Portable')
DisableProgramGroupPage=yes
CreateUninstallRegKey=not IsComponentSelected('DDU\Portable')

[Languages]
Name: "Russian"; MessagesFile: "Russian.isl"

[Types]
Name: full; Description: Полная установка; Flags: iscustom

[Tasks]
Name: icons; Description: {cm:AdditionalIcons}; Components: DDU\instal;
Name: icons\desktop; Description: {cm:CreateDesktopIcon}; Components: DDU\instal;
Name: icons\group; Description: {cm:CreateGroupIcon}; Components: DDU\instal;
Name: icons\quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; OnlyBelowVersion: 0,6.1; Components: DDU\instal;
Name: icons\taskbaricon; Description: {cm:CreateQuickLaunchIcon}; MinVersion: 0.0,6.1.7600; Components: DDU\instal; Flags: unchecked;

[Components]
Name: DDU; Description: {#MyAppName}; Flags: fixed disablenouninstallwarning; Types: full;
Name: DDU\instal; Description: Установить {#MyAppName}; Flags: exclusive disablenouninstallwarning
Name: DDU\Portable; Description: Распаковать {#MyAppName}; Flags: exclusive disablenouninstallwarning

[Files]
;Файлы распаковываемые в папку с игрой. Необходимы для деинсталлятора;
Source: WinTB.dll; Flags: dontcopy;
Source: ico.ico; DestDir: {app}; Flags: ignoreversion
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов
Source: {app}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs;

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: DDU\instal; Tasks: icons\group; IconFilename: {app}\ico.ico;
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; Components: DDU\instal; Tasks: icons\group; IconFilename: {app}\ico.ico;
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}; Components: DDU\instal; Tasks: icons\group;
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: DDU\instal; Tasks: icons\desktop; IconFilename: {app}\ico.ico;
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: {app}\{#MyAppExeName}; Components: DDU\instal; Tasks: icons\quicklaunchicon; IconFilename: {app}\ico.ico;

[Run]
Filename: {app}\{#MyAppExeName}; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait skipifsilent PostInstall Unchecked;

[  Code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
///////////////////////////////////Относится к лого и изображениям мастера
  RT_RCDATA            = 10;
LOAD_LIBRARY_AS_DATAFILE = $2;

var
///////////////////////////////////Лого и изображения
 lPLogo, bPicHandle, bPicHandle2, lPicHandle: THandle;
 BtnImage: TBitmapImage;
///////////////////////////////////////////
 iInitialize: Boolean;


///////////////////////////////////Ресурсы(относится к лого и изображениям мастера)
function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
  lResStream: TResourceStream;
begin
  lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
  try
    lResStream.SaveToFile(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  finally
  lResStream.Free;
  Result := FileExists(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  end;
end;

function OnShouldSkipPage(Sender: TWizardPage): Boolean;
begin
    if WizardForm.ComponentsList.Items.Count > 0 then WizardForm.Tag:= 1; // отображаются страницы выбора папки и компонентов
end;

procedure InitializeWizard;
begin
PageFromID(wpSelectDir).OnShouldSkipPage:= @OnShouldSkipPage
  with WizardForm do
  begin

///////////////////////////////////Логотип и изображения мастера
    iInitialize := True;
    if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
    begin
///////////////////////////////////Изображения
      bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
      WizardBitmapImage.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(WelcomePage.Handle);

      bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
      WizardBitmapImage2.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(FinishedPage.Handle);

      lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
      WizardSmallBitmapImage.Hide;
      DiskSpaceLabel.Hide;
      ComponentsDiskSpaceLabel.Hide;
      ImgSetVisibility(lPicHandle, True);
      ImgApplyChanges(MainPanel.Handle);
////////////////////////////////////////////

///////////////////////////////////Логотип

      lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
      ImgApplyChanges(WizardForm.Handle);
    end;

///////////////////////////////////WinTB
    ExtractTemporaryFile('WinTB.dll');
    SetTaskBarProgressValue(0, 60);
    SetTaskBarProgressState(0, TBPF_ERROR);
    TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
//////////////////////////////////////

    with TLabel.Create(WizardForm) do
    begin
      Parent:=WizardForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
    end;
  end;
end;

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryExA@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Byte; nBufferMax: Integer): Integer; external 'LoadStringA@user32.dll stdcall';
function PinToTaskbarWin7(Filename: String): Boolean;
var
hInst: THandle;
buf: array [0..255] of byte;
i: byte;
strVerb, s: String;
objShell, colverbs: Variant;
begin
if not FileExists(Filename) then Exit;
if (GetWindowsVersion shr 24 = 6) and ((GetWindowsVersion shr 16) and $FF = 1) then
begin
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
for i := 0 to LoadString(hInst, 5386, buf[0], 255)-1 do strVerb := strVerb + Chr(Buf[i]);
FreeDLL(hInst);
try
objShell := CreateOleObject('Shell.Application');
except
ShowExceptionMessage;
Exit;
end;
colVerbs := objShell.Namespace(ExtractFileDir(Filename)).ParseName(ExtractFileName(Filename)).Verbs;
for i := colVerbs.Count downto 1 do if colVerbs.Item[i].Name = strVerb then
begin
colVerbs.Item[i].DoIt;
Result := True;
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
res:Integer;
s,s1:string;
begin
If CurStep=ssPostInstall
then
begin
s1:=ExpandConstant('{app}');
Exec(s, '-y -o"'+ s1 + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);

if (CurStep = ssPostInstall) and IsTaskSelected('icons\taskbaricon') then PinToTaskbarWin7(ExpandConstant('{app}\{#MyAppExeName}'))
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
  wpSelectTasks:
    if IsComponentSelected('DDU\instal') then
  begin
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
  wpSelectDir: if WizardForm.Tag = 1 then

  begin
    WizardForm.SelectDirPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
    WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectComponents);
    WizardForm.Hint:= WizardForm.PageDescriptionLabel.Caption; // запомнить SetupMessage(msgSelectDirDesc)
    WizardForm.PageDescriptionLabel.Caption:= SetupMessage(msgSelectComponentsDesc);
  end;
  wpSelectComponents: if WizardForm.Tag = 1 then
  begin
    WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
    WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
    WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir);
    WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint; // иначе вместо названия программы [name]
    if IsComponentSelected('DDU\instal') then
  begin
    WizardForm.DirEdit.Text :=(ExpandConstant('{#SetupSetting("DefaultDirName")}'))
  end else
      if IsComponentSelected('DDU\Portable') then
  begin
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Portable'
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
  end;
 end;
end;



procedure DeinitializeSetup();
begin
  if iInitialize then
  begin
    gdipShutdown;
    TaskBarDestroy;
  end;
end;

procedure InitializeUninstallProgressForm;
begin
  with UninstallProgressForm do
    begin
///////////////////////////////////Логотип и изображения мастера
      if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_LIPIC', 'LIPic.png') then
      begin
///////////////////////////////////Изображения
        lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
        WizardSmallBitmapImage.Hide;
        ImgSetVisibility(lPicHandle, True);
        ImgApplyChanges(MainPanel.Handle);

///////////////////////////////////Логотип
        lPLogo:= ImgLoad(UninstallProgressForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
        ImgApplyChanges(UninstallProgressForm.Handle);
      end;

    with TLabel.Create(nil) do
    begin
      Parent:=UninstallProgressForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
    end;
  end;
end;

procedure DeinitializeUninstall();
begin
  gdipShutdown;
end;





и как сделать установку по пути из реестра т.е
Код:

DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,InstallLocation|{pf}\My Program}
потому что у меня этот код не работает т.е вместо пути из реестра показывает др путь {pf}\My Program}

habib2302 16-04-2014 22:34 2339140

с утра до вечера ни одного ответа на мое сообщение

saurn 16-04-2014 22:51 2339148

Цитата:

Цитата habib2302
если отказаться от удаления программы нажав "нет", то появляется ошибка »

читать дальше »
Код:

procedure InitializeUninstallProgressForm;
begin
  with UninstallProgressForm do
    begin
      iInitialize = True;
///////////////////////////////////Логотип и изображения мастера
      if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_LIPIC', 'LIPic.png') then
      begin
///////////////////////////////////Изображения
        lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
        WizardSmallBitmapImage.Hide;
        ImgSetVisibility(lPicHandle, True);
        ImgApplyChanges(MainPanel.Handle);

///////////////////////////////////Логотип
        lPLogo:= ImgLoad(UninstallProgressForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
        ImgApplyChanges(UninstallProgressForm.Handle);
      end;

    with TLabel.Create(nil) do
    begin
      Parent:=UninstallProgressForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
    end;
  end;
end;

procedure DeinitializeUninstall();
begin
  if iInitialize then gdipShutdown;
end;


Цитата:

Цитата habib2302
потому что у меня этот код не работает т.е вместо пути из реестра показывает др путь {pf}\My Program} »

Вот это:
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID") }_is1,InstallLocation|{pf}\My Program}
Работает по следующему принципу:
DefaultDirName={Если запись в реестре не найдена|Берем путь отсюда}
Вывод напрашивается сам собой: записи в реестре нет, или указана она здесь не верно.

-----------------------------------------------------------------------------------------
Цитата:

Цитата habib2302
с утра до вечера ни одного ответа на мое сообщение »

Наверное потому что люди на форуме не живут, нет?

diman_21Ru 16-04-2014 23:00 2339153

Парни почему при распаковки установщика не все шрифты ставятся , какова причина .

Nordek 17-04-2014 01:58 2339203

Цитата:

Цитата Stealthmax
Аналогично не запускает удаление. »

Проверял, запускает удаление:

читать дальше »
Здесь обрати внимание на {#MyAppName}:
Код:

#define MyAppName "Sandboxie"
#define AppVerName "My Program"
#define MyAppExeName "MyProg.exe"

[Setup]
AppName={#MyAppName}
AppVersion=1.5
AppVerName={#AppVerName}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=.

[Files]
Source: compiler:Examples\{#MyAppExeName}; DestDir: {app}; Flags: ignoreversion

[Code]
function UninstallMyApp(): Boolean;
var
   
Buff: String;
    i: Integer;
begin
   
Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_is1', 'UninstallString', Buff );
    if not Result then Result := not FileExists(RemoveQuotes(Buff));
    if not Result then if MsgBox('Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?', mbError, MB_YESNO) = IDYES then
    try
       
Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
    finally
       
Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_is1', 'UninstallString', Buff );
        if not Result then MsgBox('Удаление завершилось неудачей, бывай!', mbError, MB_OK);
    end;
end;

function InitializeSetup(): Boolean;
begin
   
Result := UninstallMyApp();
end;

а здесь на {#SetupSetting("AppID")}:

Код:

#define MyAppName "My Program"
#define MyAppExeName "MyProg.exe"

[Setup]
AppId=Sandboxie
AppName={#MyAppName}
AppVersion=1.5
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputDir=.

[Files]
Source: compiler:Examples\{#MyAppExeName}; DestDir: {app}; Flags: ignoreversion

[Code]
function UninstallMyApp(): Boolean;
var
   
Buff: String;
    i: Integer;
begin
   
Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
    if not Result then Result := not FileExists(RemoveQuotes(Buff));
    if not Result then if MsgBox('Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?', mbError, MB_YESNO) = IDYES then
    try
       
Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
    finally
       
Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
        if not Result then MsgBox('Удаление завершилось неудачей, бывай!', mbError, MB_OK);
    end;
end;

function InitializeSetup(): Boolean;
begin
   
Result := UninstallMyApp();
end;

Кстати, если установлено через инсталлятор Inno, то создаётся в реестре ключ вида:
Код:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Sandboxie_is1
это значит что он отличен от
Код:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Sandboxie

audiofeel 17-04-2014 06:33 2339218

Цитата:

Цитата diman_21Ru
установщик видит папку но не распаковывает не куда , что не так , заранее спасибо »

я вроде понял что тебе нужно установить шрифты,
читать дальше »

; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "Моя программа"
#define MyAppVersion "1.5"
#define MyAppPublisher "Моя компания, Inc."
#define MyAppURL "http://www.сайт.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppId={{CF96A237-9697-4D02-BB1B-84FA94A8FE44}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=true
ChangesAssociations=true
ChangesEnvironment=true

[Languages]
Name: english; MessagesFile: compiler:Languages\English.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
Source: C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов
Source: TTF\Aniron.ttf; DestDir: {fonts}; Flags: onlyifdoesntexist uninsneveruninstall; FontInstall: Aniron
Source: TTF\ProtoSans56.otf; DestDir: {fonts}; Flags: onlyifdoesntexist uninsneveruninstall fontisnttruetype; FontInstall: Proto Sans 56

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: quicklaunchicon

[Run]
Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}; Flags: nowait postinstall skipifsilent unchecked



в этом скрипте устанавливаются два шрифта "Aniron" - это "TrueType"
и "Proto Sans 56" - этот шрифт не "TrueType"
после установки их видит Word и блокнот и они появляются в системной папке "шрифты", а также все записи в реестре


http://rghost.ru/54285090

diman_21Ru 17-04-2014 10:06 2339263

audiofeel, Немного не то , Короче вот как я сделал :

Name: Fonts;Description:Fonts; Types: full compact custom; Flags: fixed
Source:"Fonts\*"; DestDir: {Fonts};Components:Fonts; Flags: onlyifdoesntexist uninsneveruninstall; FontInstall: Calibri Light Italic

установщик ставит как надо шрифты но не все почему ?

audiofeel 17-04-2014 10:27 2339282

Цитата:

Цитата diman_21Ru
Короче вот как я сделал : »

нужно для каждого шрифта повторять строку, и после "FontInstall:" указывать свой шрифт, а в примере у тебя указан "Calibri Light Italic", если его нет в папке "Source:"Fonts" то он и не установится, звездочку та убери и не поленись и пропиши все шрифты, название указывай не по названию файла шрифта а так как на самом деле называется шрифт (это можно просмотреть "запустив" шрифт

diman_21Ru 17-04-2014 10:32 2339288

audiofeel, т.е я как понял сразу написав тока папку он так не определит , попытаюсь каждую тогда вписать

audiofeel 17-04-2014 10:34 2339292

diman_21Ru,
Source:"папка где лежат шрифты\твой шрифт1.ttf"; DestDir: {Fonts};Components:Fonts; Flags: onlyifdoesntexist uninsneveruninstall; FontInstall: название шрифта1

Source:"папка где лежат шрифты\твой шрифт2.ttf"; DestDir: {Fonts};Components:Fonts; Flags: onlyifdoesntexist uninsneveruninstall; FontInstall: название шрифта2

diman_21Ru 17-04-2014 10:36 2339294

audiofeel, вот гораздо удобнее ) спасибо

Dodakaedr 17-04-2014 13:13 2339390

Можно одному элементу присвоить несколько caption? Например, имеется новый StatusLabel и нужно присвоить ему две-три надписи (caption) в течении установки.

Shkutu 17-04-2014 13:26 2339401

Dodakaedr, по идее можно. Просто в каждый конкретный момент будет доступен последний присвоенный.

Dodakaedr 17-04-2014 13:29 2339404

Shkutu, Как это можно осуществить?

А есть такая функция которая задает время показа элемента?

Shkutu 17-04-2014 14:48 2339457

Dodakaedr, задавать время показа - это вряд ли. Ну или я про такое не знаю.
Вообще, если речь о каких-то действиях после установки, то это все запихивается в CurStepChanged
Код:

procedure CurStepChanged(CurStep: tSetupStep);
begin
 if (CurStep=ssPostInstall) then
 begin
  WizardForm.StatusLabel.Caption := 'Статус1';
  //что-то делаем
  WizardForm.StatusLabel.Caption := 'Статус2';
 end;
end;

А еще, если что-то запускается во время основной установки с помощью секции [Run], то там можно задавать StatusLabel с помощью параметра StatusMsg.

Dodakaedr 17-04-2014 14:55 2339461

Цитата:

Цитата Shkutu
Вообще, если речь о каких-то действиях после установки, то это все запихивается в CurStepChanged »

Я просто заменил стандартный StatusLabel своим и теперь хочу вывести на него две надписи...

Shkutu 17-04-2014 15:14 2339476

Dodakaedr, вы как-то не слишком конкретно вопросы задаете:) Т е менять статусы надо во время стандартной установки, используя не стандартный статус-лэйбл? Ну можно попробовать так например
читать дальше »
Код:

[Files]
Source: "myapp.exe"; DestDir: {app}; BeforeInstall: ChangeLabel('files')

[Registry]
Root: "HKLM"; Subkey:"Software\MyApp"; ValueType: string; ValueName: "path"; ValueData: "{app}"; BeforeInstall: ChangeLabel('reg')

[Сode]
var StatusLbl: TLabel; //новый статус-лэйбл

procedure ChangeLabel(param:string);
begin
 case param of
 'files': StatusLbl.Caption:='Копирование файлов';
 'reg': StatusLbl.Caption:='Создание записи в реестре';
end;


Dodakaedr 17-04-2014 15:22 2339483

Цитата:

Цитата Shkutu
вы как-то не слишком конкретно вопросы задаете »

Ну так я изначально так и спросил http://forum.oszone.net/post-2339390-446.html. Вариант хорош, сейчас попробую... отпишусь:)

Shkutu, а на иконки (секция [Icon]) можно такое сделать?

Dodakaedr 17-04-2014 15:53 2339507

Можно эту процедуру оформить как функция, потому что мой статус-лэйбл уже используется в процедуре? По позже вырежу сам код покажу....Не могу ничего придумать(( В оригинале намного больше файлов...
Часть кода отвечающий за статус-лэйбл:
читать дальше »
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp
DisableFinishedPage=yes
[Files]
Source: "C:\Program Files\Inno Setup 5 Ultra\Examples\MyProg.exe"; DestDir: {app};
[...code]
var
  Portable,Installer: TNewRadioButton;
function InstallerCheck: Boolean;
begin
  Result := Installer.Checked;
end;

function PortableCheck: Boolean;
begin
  Result := Portable.Checked;
end;

function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure MiniInstall;
var
  NewStatusLabel: TLabel;
    begin
with WizardForm do
    begin
    Bevel.Hide;
    Bevel1.Hide;
    MainPanel.Hide;
    AutoScroll := False;
    ClientHeight := ScaleY(85);
    ClientWidth := ScaleX (320);
    InnerNotebook.Align := alClient;
    ProgressGauge.Left := ScaleX(10);
    CancelButton.Left := ScaleX(235);
    CancelButton.Top := ScaleY(65);
    CancelButton.Height := ScaleX(17);
    CancelButton.BringToFront;
    Left:=GetSystemMetrics(16)-Width;
    Top:=GetSystemMetrics(17)-Height;
    FilenameLabel.Hide;
    StatusLabel.Hide;

    NewStatusLabel := TLabel.Create(WizardForm);
with NewStatusLabel do
    begin
      Parent := StatusLabel.Parent;
      SetBounds(90, StatusLabel.Top, StatusLabel.Width, StatusLabel.Height);

    if Installer.Checked then
  Caption:='Установка файлов...';

    if Portable.Checked then
    Caption:='Распаковка файлов...';
      end;
  end;
end;

procedure InitializeWizard();
begin
Portable := TNewRadioButton.Create(WizardForm);
  with Portable do
  begin
    Parent := WizardForm.WelcomePage;
    Left := ScaleX(314);
    Top := ScaleY(266);
    Width := ScaleX(200);
    Height := ScaleY(17);
    Caption := 'Портативная';
    end;

  Installer := TNewRadioButton.Create(WizardForm);
  with Installer do
  begin
    Parent := WizardForm.WelcomePage;
    Left := ScaleX(200);
    Top := ScaleY(266);
    Width := ScaleX(100);
    Height := ScaleY(17);
    Caption := 'Стационарная';
    Checked:=True;
  end;
  end;

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpInstalling:
begin
MiniInstall;
end;
end;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MsgBox('Приятного использования!', mbInformation, MB_OK);
end;


Dodakaedr 17-04-2014 20:43 2339683

Shkutu, Удалил свой статус-лэйбл, подставил ваш, но не знаю теперь как его вывести в процедуре MiniInstall? Если не выводить, то выбивает ошибку...Как это сделать?

Stealthmax 17-04-2014 21:12 2339699

Цитата:

Цитата Nordek
Проверял, запускает удаление »

Не вопрос, по порядку. AppID я указываю, само собой это упрощает все действия. Но в данном примере, как я разобрался, две неточности, а именно:
Код:

function UninstallMyApp(): Boolean;
var
    Buff: String;
    i: Integer;
begin
    Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}', 'UninstallString', Buff );
    if not Result then Result := not FileExists(RemoveQuotes(Buff));
    if not Result then if MsgBox('Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?', mbError, MB_YESNO) = IDYES then // если убираем эти аргументы, то диалог появляется, т.е. получается что изначально отрицаем существование ключа в реестре, а ОН ЕСТЬ))))
    try
        Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
    finally

И теперь самое интересное, о чем я выше писал, но наверно никто не понял что же не так происходит с извлекаемой строкой реестра.
А происходит следующее: указываем RemoveQuotes, т.е. убираем кавычки, а строка в реестре выглядит так: "C:\Windows\Installer\SandboxieInstall64.exe" /remove, то в итоге при выполнении получаем такой вид: C:\Windows\Installer\SandboxieInstall64.exe" /, т.е. обрезает начало и конец, и получаем явную ошибку. Пробовал играться с добавлением недостающих символов в строке, но результат снова 0.
P.S. Все, решил вопрос снимается.
Код:

Exec(ExpandConstant('{cmd}'), '/C ' + (Buff),'', SW_HIDE, ewWaitUntilTerminated, i);
Извлекаем параметр в интерпретатор командной строки, и получаем требуемый результат. Другого способа не нашел.

diman_21Ru 17-04-2014 21:24 2339707

Какой самый простой способ в установщик добавить другую мышку ,заранее спасибо.

saurn 17-04-2014 21:53 2339724

Цитата:

Цитата Stealthmax
Но в данном примере, как я разобрался, две неточности »

В данном коде неточностей нет.
---------------------------------------------------

Касательно вашего вопроса, самое просто - использовать StringChange, а после вызывать исполняемый файл через Exec с параметром /remove
Код:

[Setup]
AppName=My Program
AppVersion=1.5
AppId={{D61E0604-FA55-4DFD-8ED3-CAF85483713A}
DefaultDirName={pf}\My Program
OutputDir=...


[Code]
function InitializeSetup(): Boolean;
var
    Buff: String;
begin
    Buff := '"C:\Windows\Installer\SandboxieInstall64.exe" /remove';
    StringChange(Buff, ' /remove', '');
    MsgBox(RemoveQuotes(Buff), mbError, MB_YESNO);
end;


Stealthmax 17-04-2014 23:19 2339773

Цитата:

Цитата saurn
В данном коде неточностей нет. »

Ну как же нет неточностей, если диалог деинсталляции не появляется?! Идет проверка ключа и вызов удаления, если таковое условие соблюдается, верно? Если так, то я реально не понял как он так работает в первоначальном виде. Установщик родной Sandboxie отнюдь не Inno, а NSIS. А изменять строку- это усложнение процесса, на мой взгляд. Командная строка энергичнее справляется.
Код:

Exec(ExpandConstant('{cmd}'), '/C ' + GetPath+ ' /S','', SW_HIDE, ewWaitUntilTerminated, ResultCode);
Добавляю только параметр /S и ноу проблем-с, тихое удаление. Но за отклик, все равно спасибо, буду иметь виду такой вариант.

saurn 17-04-2014 23:39 2339783

Цитата:

Цитата Stealthmax
Ну как же нет неточностей, если диалог деинсталляции не появляется?! »

С представленным вами ключем реестра и не будет появлятся, так как инсталятор получает некорректный путь к файлу, а следовательно решает, что файла нет.
В своем первоначальном виде код работает как и надо.

Цитата:

Цитата Stealthmax
не понял как он так работает в первоначальном виде »

Result := Возвращает Да, если искомой ветки реестра нет. Если условие возвращает Да работа функции прерывается. Если Нет - переходит ко второму условию
if not Result then Result := Возвращает Да, если нет искомого файла. Обрабатывается только если первое условие вернет Нет. Если условие возвращает Да работа функции прерывается.
if not Result then if Отображает MsgBox, если условие выше возвращает Нет.
Получаем своеобразную иерархию условий - если запись в реестре существует, ищем файл, если находим, выводим сообщение с предложением удалить и при ответе Да вызываем деинсталятор.

Shkutu 18-04-2014 11:50 2339930

Dodakaedr, надо было не удалять свой лейбл и менять его на мой, а немного подумать, вообще говоря.
читать дальше »

Возвращаете свой лейбл обратно, но при этом делаете его глобальной переменной, чтобы можно было использовать не только в вашей процедуре MiniInstall (инициализацию лейбла, т е create, присвоение parent и setbounds, лучше тоже вынести из процедуры MiniInstall в процедуру InitializeWizard). А в моем примере заменяете мой лейбл на ваш.
Насчет Icons - по идее на иконки тоже можно такое повесить. Подробнее смотрите справку о параметре BerforeInstall.

Nordek 18-04-2014 15:15 2340040

Цитата:

Цитата Stealthmax
Установщик родной Sandboxie отнюдь не Inno, а NSIS. »

Если родной установщик от NSIS, то какие могут быть претензии к Inno?
Цитата:

Цитата Stealthmax
Добавляю только параметр /S и ноу проблем-с, тихое удаление. »

У NSIS "/S" и в ветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall есть такое как Sandboxie, но к Inno это отношения вообще не имеет.
У Inno "/SILENT" а в ветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall к Sandboxie дописывается хвост "_is1".

El Sanchez 18-04-2014 15:50 2340049

Цитата:

Цитата Stealthmax
Извлекаем параметр в интерпретатор командной строки, и получаем требуемый результат. Другого способа не нашел. »

Stealthmax, разделить полученную из реестра строку на путь к программе и параметры можно так:
читать дальше »

Код:

#define A = (Defined UNICODE) ? "W" : "A"
type
 
CMDLINE = record    // user defined
   
szProg: String;
    szParams: String;
  end;

procedure PathRemoveArgs(pszPath: String); external 'PathRemoveArgs{#A}@shlwapi.dll stdcall';

////////////////////////////////////////
function argv(szCLine: String): CMDLINE;
begin
 
PathRemoveArgs(szCLine);
  StringChangeEx(szCLine, #0, #13#10, True);
  with TStringList.Create do
  try
   
Text := szCLine;
    if Count > 0 then Result.szProg := Strings[0];
    if Count > 1 then Result.szParams := Strings[1];
  finally
   
Free;
  end;
end;

/////////////////////////////
procedure InitializeWizard();
var
 
szCLine: String;
  cl: CMDLINE;
begin
 
szCLine := '"C:\Windows\Inst aller\SandboxieInstall64.exe" /remove /fdfdfg -gggg "ghfhg fhg" 123';
  cl := argv(szCLine);
  MsgBox(Format('Program: %s'#13#10'Command Line: %s', [cl.szProg, cl.szParams]), mbInformation, MB_OK);
end;


ROMKA-1977 18-04-2014 18:27 2340134

Подскажите как в ISDone правильно указать пароль архива FreeArc ? Делаю как показанно в инструкции но во время распаковки вылетает ошибка:
Произошла ошибка при распаковке: Неверный пароль!
Unarc.dll вернул код ошибки: -13
ERROR: wrong password
Пароль указал тот же что и при архивации.
Пример:
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data-1.arc'), ExpandConstant('{app}\'), '', false, '1234', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;

audiofeel 18-04-2014 18:49 2340143

ROMKA-1977, Unarc.dll от фри арка ( тем чем сжимаеш) замени на тот что в скрипте

Shift85 18-04-2014 18:50 2340146

ROMKA-1977, Пакуй так:

Код:

start /wait arc.exe a -ep1 -dses --dirs -s; -lc- -di -i2 -r -p1234 -m=lzma:a1:mfbt4:d128m:fb128:mc1000:lc8 data\data-1.arc packeddata\*
Распаковка так:

Код:

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'), '', false, '1234', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
Все необходимое:http://rghost.ru/54360629

Stealthmax 19-04-2014 04:39 2340391

Цитата:

Цитата Nordek
У NSIS "/S" и в ветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall есть такое как Sandboxie, но к Inno это отношения вообще не имеет.
У Inno "/SILENT" а в ветке реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall к Sandboxie дописывается хвост "_is1". »

Ну то понятно, я делал репак программы, и нужна была проверка не предмет оригинальной установки и, допустим, наличие установки на базе Inno, так вот с Inno как раз проблем никаких, даже при обработке моего ключа для удаления в реестре вида:
Код:

RegWriteStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#MyAppName}_is1','UninstallString', ExpandConstant('{app}\{#UninstallExeName} /VERYSILENT /NORESTART /SUPPRESSMSGBOXES'));
, а с оригинальным установщиком возникла трабла, вот и всего-то. Но ещё раз спасибо всем, кто не прошел мимо и активно оказал содействие.
Нашел код для определения локали в таком формате 1049 и добавил в свой код при деинсталляции:
Код:

type
LCID = LongInt;

function GetSystemDefaultLCID() : LCID; external 'GetSystemDefaultLCID@kernel32.dll stdcall';


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  ResultCode: Integer;
begin
  if CurUninstallStep=usUninstall then
  begin
    Exec(ExpandConstant('{app}\KmdUtil.exe'),ExpandConstant(' /lang=LCID stop SbieSvc'),'',SW_HIDE,ewWaitUntilTerminated,ResultCode);
    Exec(ExpandConstant('{app}\KmdUtil.exe'),ExpandConstant(' /lang=LCID delete SbieSvc'),'',SW_HIDE,ewWaitUntilTerminated,ResultCode);
    Exec(ExpandConstant('{app}\KmdUtil.exe'),ExpandConstant(' /lang=LCID stop SbieDrv'),'',SW_HIDE,ewWaitUntilTerminated,ResultCode);
    Exec(ExpandConstant('{app}\KmdUtil.exe'),ExpandConstant(' /lang=LCID delete SbieDrv'),'',SW_HIDE,ewWaitUntilTerminated,ResultCode);   
end;
end;

Суть сводится к тому, что не требуется перезагрузка при удалении драйвера, в штатном комплекте Sandboxie идет исполняемый модуль для установки/удаления службы и драйвера, пробовал использовать sc.exe для подобного, но требуется в итоге перезагрузка. Данный вариант зарекомендовал себя отлично, т.е. прогнал 3 раза переустановку смешанную туда-сюда, все работает. Вопрос такой: правильно ли я употребил WinAPI в данном контексте? У разработчика выглядит так: {tmp}\KmdUtil.exe /lang=1049 stop SbieDrv применимо для русской локали.

Dinvin4ester 19-04-2014 09:20 2340422

Ребята как сделать процентный прогресс бар ?

audiofeel 19-04-2014 14:44 2340500

Цитата:

Цитата Dinvin4ester
Ребята как сделать процентный прогресс бар ? »

читать дальше »

[Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName={pf}\My Program

[Files]
Source: files\*; DestDir: {app}; AfterInstall: ExtLog(); Flags: recursesubdirs

[code]
var
ProgressLabel: TLabel;

procedure ExtLog();
begin
with WizardForm.ProgressGauge do begin
ProgressLabel.Caption:=IntToStr((Position-Min)/((Max - Min)/100)) + '%'
if (Position-Min)/((Max - Min)/100) > 50 then ProgressLabel.Font.Color:= clWhite
end
end;

procedure InitializeWizard;
begin
ProgressLabel:=TLabel.Create(WizardForm)
ProgressLabel.Top:= 4
ProgressLabel.Left:= 200
ProgressLabel.Caption:= '0%'
ProgressLabel.AutoSize:= True
ProgressLabel.Font.Color:= clBlue
ProgressLabel.Font.Style:= [fsBold]
ProgressLabel.Transparent:= True
ProgressLabel.Parent:= WizardForm.ProgressGauge
end;


НЕ ??

Dodakaedr 19-04-2014 17:08 2340565

Можно свои ключи для командной строки придумать в Inno?

Stealthmax 19-04-2014 17:28 2340582

Цитата:

Цитата Dodakaedr
Можно свои ключи для командной строки придумать в Inno? »

Частично, вот примеры: 1, 2, 3. По аналогии можно и другие ключи делать, поищи на форуме, а также в справке есть.

Dodakaedr 19-04-2014 17:31 2340586

Stealthmax, Как создать ключи для: Не создавать ярлык на рабочем столе, Не создавать ярлык в меню «Пуск»?

Stealthmax 19-04-2014 18:19 2340607

Цитата:

Цитата Dodakaedr
Как создать ключи для: Не создавать ярлык на рабочем столе, Не создавать ярлык в меню «Пуск»? »

Ну все по той же схеме, что в примерах выше. Либо кастомные ключи делаешь для каждого чекбокса или используешь секцию Tasks.
Код:

[Icons]
//здесь открепляем ярлыки от привязки к общей группе {group}
//{commonprograms}- общая для всех пользователей папка в меню Пуск
//{userprograms}- для отдельного пользователя в меню Пуск
Name: "{commonprograms}\{#MyAppName}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: StartMenu
Name: "{commonprograms}\{#MyAppName}\{cm:VisitSiteProduct,{#MyAppName}}"; Filename: "{#MyAppURL}"; Check: UrlMenu
Name: "{commonprograms}\{#MyAppName}\{cm:Uninstall} {#MyAppName}"; Filename: "{app}\{uninstallexe}"; Check: UninstallMenu
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: Desktop
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Check: QuickStart

[Languages]
Name: "Russian"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
Russian.VisitSiteProduct=Посетить сайт продукта
Russian.Uninstall=Удалить

[_Code]
var
  startmenu1 : boolean;

function StartMenu: Boolean;
begin
  Result := StartMenuRadioButton.Checked or startmenu1;
end;

Function InitializeSetup: Boolean;
var
  i : integer;
Begin
  for i:=2 to ParamCount do begin
  if ( Pos(LowerCase('/startmenu'), Lowercase(ParamStr(i))) > 0 ) then startmenu1 := true else startmenu1 := false; //назначаем ключ для выполнения задачи
  Result := True;
end;
end;

Если будешь использовать по отдельности для каждого ярлыка, то например, при наличием {group} будет игнорироваться состояние чекбокса, тут думаю понятно почему.
В этом примере самый простой способ. Используются ключи из справки: /TASKS="startmenu,urlmenu,uninstallicon,desktopicon,quicklaunchicon", либо так /COMPONENTS="component1,component2", чтобы не создавать /TASKS="!startmenu,!urlmenu,!uninstallicon,!desktopicon,!quicklaunchicon"- восклицательный знак перед именем задачи
Код:

[Icons]
Name: "{commonprograms}\{#MyAppName}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: startmenu
Name: "{commonprograms}\{#MyAppName}\{cm:VisitSiteProduct,{#MyAppName}}"; Filename: "{#MyAppURL}"; Tasks: urlmenu
Name: "{commonprograms}\{#MyAppName}\{cm:Uninstall} {#MyAppName}"; Filename: "{app}\{#uninstallexe}"; Tasks: uninstallicon
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}";
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}";
Name: "startmenu"; Description: "{#MyAppName}"; GroupDescription: "{cm:AdditionalIcons}";
Name: "urlmenu"; Description:"{cm:VisitSiteProduct,{#MyAppName}}"; GroupDescription: "{cm:AdditionalIcons}";
Name: "uninstallicon"; Description: "{cm:Uninstall,{#MyAppName}}"; GroupDescription: "{cm:AdditionalIcons}";

[Languages]
Name: "Russian"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
Russian.VisitSiteProduct=Посетить сайт продукта
Russian.Uninstall=Удалить
Russian.CreateDesktopIcon=Создать ярлык на рабочем столе
Russian.CreateQuickLaunchIcon=Добавить ярлык в панель Быстрого запуска


Nordek 19-04-2014 20:11 2340639

Stealthmax, Если предоставляешь код, то предоставляй рабочий вариант - чтоб за тебя никто не допиливал. Директив, CustomMessages и прочего тоже касается.
Например в Inno нет такого: {cm:Uninstall}; есть {cm:UninstallProgram,My Program}.

Stealthmax 19-04-2014 21:30 2340669

Цитата:

Цитата Nordek
Если предоставляешь код, то предоставляй рабочий вариант - чтоб за тебя никто не допиливал. Директив, CustomMessages и прочего тоже касается.
Например в Inno нет такого: {cm:Uninstall}; есть {cm:UninstallProgram,My Program}. »

Здрасти, приехали. А может сразу тогда выкладывать скрипт по заявке? Тут вроде не стол заказов, а сообщество, где обмениваются опытом. А что касаемо Russian.isl, входящего в состав Inno, то это изврат на мой взгляд, мне не нравится, правлю под себя. И самое главное: если непонятно, то личка открыта, всегда пожалуйста или же прям здесь, меня не затруднит пояснить, а в данном конкретном случае попытался помочь человеку насколько это зависело от моего времени и возможностей. Я тоже с паскалем не родился в одном месте, делюсь знаниями, сам черпаю здесь многое для себя. Здесь есть умнее меня намного, но я их стараюсь не задалбывать вопросами из области элементарного, скорее где наверняка не понимаю. Так что претензия необоснованна в мой адрес.

P.S. Извиняй, если резко выразился. Человек не понял, не получилось, сразу мне отписал, решаем в личке.

Nordek 20-04-2014 05:10 2340760

Stealthmax
Цитата:

Цитата Stealthmax
Тут вроде не стол заказов »

Но и не помойка. Данный раздел имеет тематический характер. Любой совет должен иметь содержательную информацию. Если такового не имеется - то и смысла писать нет вообще.

Цитата:

Цитата Stealthmax
А что касаемо Russian.isl, входящего в состав Inno, то это изврат на мой взгляд »

Что именно здесь:
Код:

[Setup]
AppName=My Program
AppVersion=1.5
AppPublisher=My Company, Inc.
DefaultDirName={pf}\My Program
DefaultGroupName=My Program

[Icons]
Name: {group}\My Program; Filename: {app}\MyProg.exe
Name: {group}\{cm:ProgramOnTheWeb,My Program}; Filename: http://www.example.com
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}
Name: {commondesktop}\My Program; Filename: {app}\MyProg.exe
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\My Program; Filename: {app}\MyProg.exe

находите под словом "изврат"?
Это самый простой и стандартный пример: который компилится даже в том случае, если и вовсе не имеется секции [Languages] - быть точнее:
Код:

[Languages]
Name: default; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl

Цитата:

Цитата Stealthmax
мне не нравится, правлю под себя. »

Правьте, ваше право. Но не нужно думать что все расчёсываются вашей расчёской.

Цитата:

Цитата Stealthmax
а в данном конкретном случае попытался помочь человеку »

Но нужно и наглядно показать наверно? Не понимаю как так выкладывать код не проверив. Кинуть огрызком кода который не может быть воспроизведён у другого человека - это не помощь, а создание геморроя.

Цитата:

Цитата Stealthmax
решаем в личке. »

А что в личке? Ведь выложил же в том месте, где видно - значит им может полюбопытствовать любой желающий. Если вас сильно тяготит дать полный ответ, то конечно целесообразнее было вам помочь человеку в PM, чем потом здесь оправдываться.
Представим что этот код может заинтересовать новичка (кодеру то понятно - это как семечки лузгать) - но при попытке воспроизвести этот код выдаст ошибку "[ISPP] Undeclared identifier: "MyAppName""
при исправлении, а точнее при добавлении директивы #define со значениями.
Выскочит ещё одна ошибка, например "A custom message named "VisitSiteProduct" has not been defined. (и т.п.)"
потом "Required function or procedure 'StartMenu' not found."
наконец "Unknown identifier 'StartMenuRadioButton'" (и т.п.).
и это вместо того, чтоб один раз - дать полный ответ.

Сами же напарываетесь, а потом: "Не работает" или "Дали кривой код" и т.п.

Заметь, не все понимают что половина ответов содержится в справке.

Каждый по своему понимает. Каждый по своему делает. Но результат выходит один. Не важно каким именно способом проделан результат - важно что он работает правильно и без ошибок.

Не сделали никакого вывода - "тогда Ой".

ROMKA-1977 20-04-2014 13:31 2340851

Заметил такую особенность в ISDone: на странице распаковки файлов кнопка закрытия окна не работает хотя и кликабельна. Возможно ли наложить на неё функцию кнопки "отмена распаковки" или сделать неактивной как на странице завершения установки ?

Stealthmax 20-04-2014 23:59 2341033

Цитата:

Цитата Nordek
Сами же напарываетесь, а потом: "Не работает" или "Дали кривой код" и т.п. »

Не вопрос, сейчас доделаю третий вариант с ключами и исправлю свой пост с исчерпывающими(рабочими) примерами на суд знатоков и начинающих, и надеюсь, что будет внесено в шапку.
Цитата:

Цитата Nordek
Заметь, не все понимают что половина ответов содержится в справке. »

Ну это тоже верно, все ж хотят быстро и сразу, а так не бывает.

audiofeel 21-04-2014 09:29 2341107

Цитата:

Цитата ROMKA-1977
Возможно ли наложить на неё функцию кнопки "отмена распаковки" »

http://krinkels.org/attachments/isdo...-2012-7z.1429/
ты попробуй запустить скрипт ISDone_Example2.iss, все работает!!!

Dodakaedr 21-04-2014 17:03 2341246

В скрипте используется такой msg
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
MessageBox(Application.Handle, 'Приятного использования!', '{#MyAppName}', MB_OK or $40);
end;

и он появляется когда используется тихая установка. Как сделать так чтобы только при тихой установке оно не появлялось??

Shkutu 21-04-2014 18:14 2341267

Dodakaedr, попробуйте так
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
 if CurStep = ssDone then
  if not WizardSilent then
    MessageBox(Application.Handle, 'Приятного использования!', '{#MyAppName}', MB_OK or $40);
end;


Dodakaedr 21-04-2014 18:17 2341268

Shkutu, Спасибо! Сработало.

ROMKA-1977 21-04-2014 21:55 2341331

Цитата:

Цитата audiofeel
ты попробуй запустить скрипт ISDone_Example2.iss, все работает!!! »

СПС!!! Работает!

Dodakaedr 22-04-2014 09:21 2341422

Как правильно указать препроцессору такое имя
Код:

#define MyAppName "Programmer's Notepad"
Ругается на апостроф на строке
Код:

function ShowFinishedForm(): Boolean;
var
  FinishedForm: TSetupForm;
begin
  FinishedForm := CreateCustomForm;
  FinishedForm.Position:=poScreenCenter;
  try
    FinishedForm.ClientWidth := ScaleX(310);
    FinishedForm.ClientHeight := ScaleY(133);
    FinishedForm.BorderStyle := bsSingle;
    FinishedForm.BorderIcons := [biSystemMenu];
    FinishedForm.Caption := 'Установка {#MyAppName}';
    FinishedForm.CenterInsideControl(WizardForm, False);
...........


Shkutu 22-04-2014 11:16 2341460

Dodakaedr, для экранирования кавычки нужно дублировать
Код:

#define MyAppName "Programmer''s Notepad"

Dodakaedr 22-04-2014 11:21 2341462

А ключ /DIR="x:\dirname" служить только для изменения имя папки или и для указания нового места в целом?
И можно ли создать его аналог, а то в моем скрипте не работает?

Shkutu 22-04-2014 11:52 2341482

Цитата:

Цитата Dodakaedr
служить только для изменения имя папки или и для указания нового места в целом »

Какая-то не слишком ясная формулировка, на мой вкус:)
Читаем справку: ключ /DIR="x:\dirname" перезаписывает дефолтное (то, что по умолчанию выводится на странице wpSelectDir) имя папки установки, причем этот путь должен быть полным.
Про задание своих ключей для командной строки вам уже отвечали

Dodakaedr 22-04-2014 21:41 2341710

Цитата:

Цитата Shkutu
вам уже отвечали »

Это я помню, просто не малейшего понятия не имею как его сообразить...
По идеи как-то так должно быть, правильно? Но увы не работает.
Код:

function DefaultDirParam: Boolean;
begin
  Result := Pos('/d={app}', LowerCase(GetCmdTail)) > 0;
end;


ROMKA-1977 23-04-2014 11:49 2341897

Подскажите пож. прикрутил к скрипту с ISDone_Example2 кастомнай чекбокс "Запустить приложение" на странице завершения установки. Работает всё отлично но проблема в том что при нажатии кнопки "Отмена" на финишной странице с ошибкой установки чекбокс также отображается. Как его отключить на финишной странице с ошибкой установки?

Shkutu 23-04-2014 11:52 2341899

Dodakaedr,
читать дальше »
на самом деле похоже на правду, за исключением нескольких моментов.
Во-первых, я сомневаюсь, что константу {app} тут можно использовать; она отвечает за путь, который выбрал пользователь и, как следствие, на момент запуска инсталлятора, и уж тем более в тихом режиме, не определена.
Во-вторых, если уж используете константы, то делайте это правильно. Константы для параметров командной строки разворачиваются с помощью expand
Код:

'/DIR=expand:{pf}\My Program'
Не понимаю, почему так сложно открыть справку и посмотреть, там про это тоже написано, и даже ссылку на справку вам, опять же, давали
Ну и в-третьих, просто с точки зрения обычной логики, если в выражении
Код:

Pos('/d={app}', LowerCase(GetCmdTail))
вы приводите второй параметр к нижнему регистру, то неплохо было бы делать то же самое и с первым параметром

Farser21 23-04-2014 13:39 2341951

Ребята всем привет!

Мне нужна ваша помощь. Я собираю команду модостроителей для игры World of Tanks. На данный момент я известен в сообществом данной игры под ником Farser.
Но дело не в этом сейчас я набираю команду людей в разных сферах деятельности. Так сказать для полный работы команды.
И мне нужен человек который очень хорошо разбирается в Inno Setup и поможет написать очень хороший установщик со множеством функций. К сожалению моих умений в данной программе недостаточно много.

Вот официальная тема набора в команду! Тык!

Прошу откликнутся вас на мою просьбу!

Dodakaedr 23-04-2014 15:15 2341995

Цитата:

Цитата Shkutu
для экранирования кавычки нужно дублировать »

Как апостроф вывести? Потому что дублирование и в названии программы появляется после установки (Programmer''s Notepad).

Цитата:

Цитата Shkutu
вы приводите второй параметр к нижнему регистру, то неплохо было бы делать то же самое и с первым параметром »

Типа так?
Код:

function InstallerCheckParam: Boolean;
begin
  Result := Pos(LowerCase('/d=expand:{app}'), LowerCase(GetCmdTail)) > 0;
end;


Shkutu 23-04-2014 18:19 2342098

Dodakaedr,
читать дальше »
Цитата:

Цитата Dodakaedr
Как апостроф вывести? »

Так как вы хотите, чтоб в MyAppName задефайнить с 1 апострофом, а коде их как-то вдруг сделать 2? Никак. Препроцессор заменит {#MyAppName} задефайненой строкой еще до компиляции, так что применить какое-то хитрое преобразование вроде запихивания кавычки внутрь строки не получится. Гипотетически, можно было бы переопределить MyAppName в коде, но если нет четкого видения, в какой момент какое значение будет использоваться, то лучше так не делать. Имхо, использовать для вашего кэпшна локальную переменную или custom messages гораздо проще, чем изобретать велосипед. Впрочем, может может у кого-то из форумчан есть другое мнение на этот счет и они им с вами поделятся.
Цитата:

Цитата Dodakaedr
Типа так? »

Опять же, похоже на правду. Но как я уже говорила, я не уверена, что константа {app} в данном случае будет инициализированна и как следствие, может использоваться. Но никто не мешает вам проверить:)

Dodakaedr 23-04-2014 19:04 2342117

Цитата:

Цитата Shkutu
Так как вы хотите, чтоб в MyAppName задефайнить с 1 апострофом, а коде их как-то вдруг сделать 2? »

Мне нужно чтобы один был, а он как-то через раз - то один то два. Как такое возможно?

Shkutu 23-04-2014 19:35 2342128

Dodakaedr, вы как-то невнимательно читаете, по-моему.
читать дальше »

Препроцессор перед компиляцией заменяет все ваши {#MyAppName} на ту строку, которую вы присвоили этой переменной в #define MyAppName. Если эта замена происходит где-либо, кроме секции [code], то апострофов будет 2. Если эта замена происходит в секции [code], то апостроф будет 1 (1й апостроф просто заэкранирует 2й). Использовать 1 апостроф в MyAppName, если вы хотите использовать эту переменную в коде, нельзя, потому что для компилятора это будет выглядеть так
Код:

FinishedForm.Caption := {начало переменной}'Установка Programmer'{конец переменной}{начало нового оператора}s Notepad';
Поэтому проще сделать например
Код:

FinishedForm.Caption := 'Установка Programmer''s Notepad';

Nordek 23-04-2014 21:41 2342178

Цитата:

Цитата Dodakaedr
Потому что дублирование и в названии программы появляется после установки (Programmer''s Notepad). »

Dodakaedr, Что вы к #define привязались, способов больше нет?

Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[CustomMessages]
text=Programmer's Notepad

[Code]
var
 
Text: TNewStaticText;

procedure InitializeWizard();
begin
 
Text := TNewStaticText.Create(WizardForm);
  with Text do
  begin
   
AutoSize := True;
    Parent := WizardForm;
    Caption := CustomMessage('text');
    Left := ScaleX(24);
    Top := ScaleY(328);
  end;
end;

Даже так:

Код:

[Setup]
AppName={cm:text}
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
UsePreviousLanguage=no

[Languages]
Name: default; MessagesFile: compiler:Default.isl

[CustomMessages]
text=Programmer's Notepad

[Code]
var
 
Text: TNewStaticText;

procedure InitializeWizard();
begin
 
Text := TNewStaticText.Create(WizardForm);
  with Text do
  begin
   
AutoSize := True;
    Parent := WizardForm;
    Caption := CustomMessage('text');
    Left := ScaleX(24);
    Top := ScaleY(328);
  end;
end;

Даже так:
Код:

[Setup]
AppName={cm:text}
AppVersion=1.5
DefaultDirName={pf}\{cm:text}
DefaultGroupName={cm:text}
OutputDir=.
UsePreviousLanguage=no

[Languages]
Name: default; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
default.text=Programmer's Notepad
russian.text=Блокнот программиста

[Code]
var
 
Text: TNewStaticText;

procedure InitializeWizard();
begin
 
Text := TNewStaticText.Create(WizardForm);
  with Text do
  begin
   
AutoSize := True;
    Parent := WizardForm;
    Caption := CustomMessage('text');
    Left := ScaleX(24);
    Top := ScaleY(328);
  end;
end;


Dodakaedr 23-04-2014 21:48 2342183

Цитата:

Цитата Nordek
Что вы к #define привязались, способов больше нет? »

Есть, но так удобней.

Dodakaedr 24-04-2014 08:45 2342301

Объясните пожалуйста, что-то не доходит.
читать дальше »
Цитата:

IconFilename
Имя файла иконки (расположенной в системе пользователя). Это может быть изображение с расширением .exe или .dll, содержащее иконки, или файл .ico. Если этот параметр не указан или пустой, Windows будет использовать иконку, выбранную по умолчанию.
У меня так:
Код:

[Setup]
SetupIconFile=InstallFiles\icon.ico //иконка инсталятора
UninstallDisplayIcon={uninstallexe} //иконка в "удалить или изменить программу"

Код:

[Icons]
Name: "{commonprograms}\{#MyAppName}\Удалить {#MyAppName}"; Filename: {uninstallexe}; BeforeInstall: ChangeLabel('icon'); Check: PuskCheck and PuskCheckParam; MinVersion: 0.0,5.0;

Вопрос: Почему иконка {uninstallexe} берется с инсталлятора? Я хочу сделать чтобы у инсталлятора была указанная иконка, а в деинсталляторе стандартная...

Shift85 24-04-2014 08:53 2342302

Цитата:

Цитата Dodakaedr
Я хочу сделать чтобы у инсталлятора была одна иконка, а в деинсталляторе стандартная »

Dodakaedr, Как вариант разные иконки: http://rghost.ru/54554271

Dodakaedr 24-04-2014 08:57 2342304

Shift85, мне надо чтобы иконка деинсталлятора была стандартною...

diman_21Ru 24-04-2014 09:19 2342309

Подскажите пожалуйста пример скрипта с оснащением другого курсора при запуске установщика , заранее спасибо .

Dodakaedr 24-04-2014 09:35 2342315

Вложений: 1
Цитата:

Цитата diman_21Ru
Подскажите пожалуйста пример скрипта с оснащением другого курсора при запуске установщика , заранее спасибо . »

уже обсуждалось
И еще пример:
читать дальше »
Код:

#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
SolidCompression=yes
Compression=lzma/ultra
OutputDir=Output

[Files]
Source: cursor.ani; Flags: dontcopy

[ code]
function LoadCursorFromFile(FileName: String): Cardinal; external 'LoadCursorFromFile{#A}@user32 stdcall';
function DeleteObject(p1: Longword): BOOL; external 'DeleteObject@gdi32.dll stdcall';

const
MyCursor = 101;

var
hcur: Cardinal;

function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\cursor.ani')) then ExtractTemporaryFile('cursor.ani');
Result := True;
end;

procedure InitializeWizard();
begin
with WizardForm do begin

//Собственно здесь указываешь к чему прикрутить курсор)))
PageNameLabel.Cursor := MyCursor;
PageDescriptionLabel.Cursor := MyCursor;
WelcomeLabel1.Cursor := MyCursor;
WelcomeLabel2.Cursor := MyCursor;
SelectDirBitmapImage.Cursor := MyCursor;
SelectDirBrowseLabel.Cursor := MyCursor;
SelectDirLabel.Cursor := MyCursor;
FinishedHeadingLabel.Cursor := MyCursor;
FinishedLabel.Cursor := MyCursor;
MainPanel.Cursor := MyCursor;
FilenameLabel.Cursor := MyCursor;
StatusLabel.Cursor := MyCursor;
SelectStartMenuFolderLabel.Cursor := MyCursor;
SelectStartMenuFolderBrowseLabel.Cursor := MyCursor;
ReadyLabel.Cursor := MyCursor;
LicenseLabel1.Cursor := MyCursor;
InfoBeforeClickLabel.Cursor := MyCursor;
InfoAfterClickLabel.Cursor := MyCursor;
ComponentsDiskSpaceLabel.Cursor := MyCursor;
SelectComponentsLabel.Cursor := MyCursor;
GroupEdit.Cursor := MyCursor;
GroupBrowseButton.Cursor := MyCursor;
CancelButton.Cursor := MyCursor;
BackButton.Cursor := MyCursor;
/////////////////////////////

end;
hcur := LoadCursorFromFile(ExpandConstant('{tmp}\cursor.ani'));
Screen.Cursors[MyCursor] := hcur;
end;

procedure DeinitializeSetup();
begin
DeleteObject(hcur);
end;


diman_21Ru 24-04-2014 16:41 2342480

Имея сайт как можно реализовать в игру оповещение о новой версии установщика

saurn 24-04-2014 22:18 2342667

Цитата:

Цитата Dodakaedr
Вопрос: Почему иконка {uninstallexe} берется с инсталлятора? »

Так вы сами и ответили на сей вопрос, не?
Цитата:

Цитата Dodakaedr
IconFilename
Имя файла иконки (расположенной в системе пользователя). Это может быть изображение с расширением .exe или .dll, содержащее иконки, или файл .ico. Если этот параметр не указан или пустой, Windows будет использовать иконку, выбранную по умолчанию. »

По умолчанию, деинсталятору назначается иконка инсталятора.
Хотите, чтобы иконки были разные, укажите для деинсталятора свою иконку:
Код:

[Setup]
UninstallIconFile=путь к файлу иконки

----------------------------------------------------------------------------------

Цитата:

Цитата diman_21Ru
Имея сайт как можно реализовать в игру оповещение о новой версии установщика »

Берете удобную вам среду программирования(Дельфи, Си...) и делаете, что вам необходимо. А использовать для этих целей инно в лучшем случае просто изврат.

Dodakaedr 24-04-2014 22:22 2342671

Цитата:

Цитата saurn
Хотите, чтобы иконки были разные, укажите для деинсталятора свою иконку: »

Так и пришлось сделать.... Я думал что иконка для инсталлятора одна, а для деинсталлятора другая..

ROMKA-1977 26-04-2014 14:34 2343328

Подскажите: в скрипте использую descctrl.dll.
Проблема: при нажатии кнопки "Отмена" закрытие инсталятора происходит с небольшой задержкой при этом фаил descctrl.dll из временной папки не удаляется вместе с другими временными файлами, также фаил не удаляется после установки , но если установку запустить в Inno Setup Compiler после компиляции то всё норм проблем описанных нет.
Пример кода:
читать дальше »

[Components]
Name: enginstall; Description: Английская версия; Types: full; Flags: exclusive
Name: rusinstall; Description: Русская версия; Types: full; Flags: exclusive

[Files]
Source: descctrl.dll; DestDir: {tmp}; Flags: dontcopy

[_Code]
function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;

procedure DeinitializeSetup();
begin
disabledesc();
end;

procedure InitializeWizard();
begin

WizardForm.TYPESCOMBO.Visible:= false;
WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Width := ScaleX(200);

InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height;
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := 'Информация:';
InfoCaption.Left := ScaleX(224);
InfoCaption.Top := InfoPanel.Top - ScaleY(5);
InfoCaption.Font.Color := clActiveCaption;
Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(188);
Info.Top := ScaleY(12);
Info.Height := WizardForm.ComponentsList.Height - ScaleY(18);
Info.Caption := 'Наведите на компонент, чтобы получить дополнительную информацию';
Info.WordWrap := true;
enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
'Английская озвучка и английский текст;'+
'Русская озвучка и русский текст;'
);
end;

sergey3695 26-04-2014 15:15 2343346

ROMKA-1977,
descctrl.dll - это старье,юзай расш. версию инно.
http://rghost.ru/54644188

White Rabbit 26-04-2014 23:56 2343581

Здравствуйте. Есть вопрос по выбору языка. Как можно организовать выбор языка для секции [code]?

diman_21Ru 27-04-2014 00:29 2343598

White Rabbit,

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "english"; MessagesFile: "compiler:Languages\English.isl"

habib2302 27-04-2014 00:34 2343604

Доброе время суток. У меня есть 2 экзешник разной разрядности. Как сделать так, чтобы создавался один ярлык в панели упр win 7 в зависимости от разрядности win
Код:

[Code ]
const
LOAD_LIBRARY_AS_DATAFILE = $2;

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryExA@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Byte; nBufferMax: Integer): Integer; external 'LoadStringA@user32.dll stdcall';
function PinToTaskbarWin7(Filename: String): Boolean;
var
hInst: THandle;
buf: array [0..255] of byte;
i: byte;
strVerb, s: String;
objShell, colverbs: Variant;
begin
if not FileExists(Filename) then Exit;
if (GetWindowsVersion shr 24 = 6) and ((GetWindowsVersion shr 16) and $FF = 1) then
begin
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
for i := 0 to LoadString(hInst, 5386, buf[0], 255)-1 do strVerb := strVerb + Chr(Buf[i]);
FreeDLL(hInst);
try
objShell := CreateOleObject('Shell.Application');
except
ShowExceptionMessage;
Exit;
end;
colVerbs := objShell.Namespace(ExtractFileDir(Filename)).ParseName(ExtractFileName(Filename)).Verbs;
for i := colVerbs.Count downto 1 do if colVerbs.Item[i].Name = strVerb then
begin
colVerbs.Item[i].DoIt;
Result := True;
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
res:Integer;
s,s1:string;
begin
If CurStep=ssPostInstall
then
begin
s1:=ExpandConstant('{app}');
Exec(s, '-y -o"'+ s1 + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);
if (CurStep = ssPostInstall) and IsTaskSelected('taskbaricon') then PinToTaskbarWin7(ExpandConstant('{app}\ezcd.exe'))
end;
end;

[Tasks]
Name: taskbaricon; Description: "{cm:CreateTaskBarIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; MinVersion: 0.0,6.1.7600

[CustomMessages]
russian.AdditionalIcons=Дополнительные значки:
russian.CreateTaskBarIcon=Создать значок в &Панели задач


White Rabbit 27-04-2014 02:12 2343641

Цитата:

Цитата diman_21Ru
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "english"; MessagesFile: "compiler:Languages\English.isl" »

Не понял...Если я в [code] наберу сообщение на русском языке, оно будет само на том или ином языке выдаваться на экран?

Nordek 27-04-2014 03:17 2343648

Цитата:

Цитата White Rabbit
Не понял... »

Совместно с [Languages] используйте [CustomMessages], в коде вглядитесь в Caption.

Пример:
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Languages]
Name: default; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
default.text=Text in English
russian.text=Текст на Русском

[Code]
var
 
Text: TNewStaticText;

procedure InitializeWizard();
begin
  Text := TNewStaticText.Create(WizardForm);
  with Text do
  begin

    Parent := WizardForm;
    Caption := CustomMessage('text');
    Left := ScaleX(24);
    Top := ScaleY(336);
    AutoSize := True;
  end;
end;


sergey3695 27-04-2014 08:56 2343666

habib2302,
элементарно
Код:

if (CurStep = ssPostInstall) and IsTaskSelected('taskbaricon') then
begin
if iswin64 then
PinToTaskbarWin7(ExpandConstant('{app}\ezcd64.exe'))
else
PinToTaskbarWin7(ExpandConstant('{app}\ezcd32.exe'));
end;


diman_21Ru 27-04-2014 09:45 2343676

White Rabbit, а зачем его в код засовывать пиши отдельно

White Rabbit 27-04-2014 10:59 2343692

Цитата:

Цитата diman_21Ru
а зачем его в код засовывать пиши отдельно »

Может и не нужно. Просто в коде сообщения выдаются на экран в отдельном окошке "MsgBox". По умолчанию просто набран текст на русском, а я хотел бы мультиязычный вариант, вот и задумался, как это реализовать.

Shift85 27-04-2014 16:52 2343792

Вложений: 1
Цитата:

Цитата White Rabbit
мультиязычный вариант »

White Rabbit,Пример:

Nordek 27-04-2014 17:05 2343800

White Rabbit, Я уже дал пример.

Вот ещё пример:
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Languages]
Name: default; MessagesFile: compiler:Default.isl
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
default.MyText=Hello! %nYour text in English %nPress «OK» to continue
russian.MyText=Здравствуйте! %nВаш текст на Русском %nДля продолжения нажмите «ОК»

[Code]
Function InitializeSetup: Boolean;
begin
if
MsgBox(CustomMessage('MyText'), mbError, MB_OKCANCEL) = idOk then result := true else result := false;
end;



diman_21Ru, Какая вам разница? Его установщик, пусть что хочет то и делает - вас это меньше всего должно волновать.

Shift85, Код такой большой что сюда не влазит?
Я к тому, что через неделю или месяц ссылка исчезнет - а код может кому нибудь пригодиться.

Dodakaedr 27-04-2014 21:28 2343885

Цитата:

Цитата Shift85
Как вариант разные иконки »

Как самому создать такую иконку?

White Rabbit 27-04-2014 21:45 2343890

Сэнкс. Второй вариант понятнее.

Shift85 27-04-2014 21:59 2343895

Цитата:

Цитата Dodakaedr
Как самому создать такую иконку? »

Dodakaedr, Через Axialis IconWorkshop чумовая прога... :gamer: =)

diman_21Ru 28-04-2014 15:36 2344153

Nordek, Мне разницы нет я просто написал

Mancoffee 29-04-2014 01:12 2344409

Как обойти установку дополнительных компонентов (Inno Script Studio и другие) в "тихой" установке, если нет интернета?

ПС. Знаю, что есть параметр /COMPONENTS , но нигде не нашёл, какие у него подпараметры, то есть как называются.

saurn 29-04-2014 07:12 2344439

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

Mancoffee 29-04-2014 09:06 2344459

saurn, да вроде как написал, что про параметр /COMPONENTS знаю и про другие тоже. Есть так к примеру help, то есть /COMPONENTS="help"
А как поставить туда Inno Script Studio? Где это описано?

saurn 29-04-2014 11:45 2344511

Цитата:

Цитата Mancoffee
да вроде как написал, что про параметр /COMPONENTS знаю »

Если знаете, к чему вопросы?
Цитата:

Цитата Mancoffee
Где это описано? »

Да там же и описано. Других предустановленных параметров командной строки инсталляторы инно не имеют. Исключения составляют инсталляторы, где автор оного задал кастомные команды в коде. Рискну предположить, что вы пытаетесь обойти установку студии при установке QuickStart Pack в тихом режиме. В нем - в QuickStart Pack - дополнительные опции (установка препроцессора, студии, инно иде, модуля шифрования) реализованы, как кастомные команды, не относящиеся к секции Components или Tasks, а следовательно стандартные параметры командной строки им до лампочки. Автор инсталятора QuickStart Pack должен был сам указать кастомные параметры для управления установкой этих компонентов, если счел нужным. Сделал ли он это - я не знаю. Как вариант - гляньте в сторону файла ответов.

Mancoffee 29-04-2014 14:02 2344565

Цитата:

Цитата saurn
Да там же и описано. »

Конкретизирую вопрос - как тогда обойти установки (если отсутствует интернет; или просто пропуск) Inno Script Studio, PreProcessor и другие?

El Sanchez 30-04-2014 17:18 2345252

Цитата:

Цитата Mancoffee
как тогда обойти установки (если отсутствует интернет; или просто пропуск) Inno Script Studio, PreProcessor и другие? »

Mancoffee, да никак, разве что перепаковать. Параметров комстроки, отвечающих за закачку сторонних компонентов всего 2 (/allowinnoide и /ispp (не в версии QuickStart Pack)). Первый особо не интересен, т.к. предлагает к закачке среды InnoIDE на странице закачки IDE, а вот второй позволял бы отключить закачку препроцессора (/ispp=0), если бы не детская ошибка в коде официального инсталлятора, приводящая к тому, что галка будет всегда отмечена. Про ISStudio и ISCrypt там вообще ничего.

Dodakaedr 01-05-2014 17:14 2345735

Есть конвертор nsis скриптов в inno формат? Интересует как это сделать
читать дальше »
Код:

!macro RegisterExtension extenstion
        ;create a class for extesion
                ;read/write section state
                !insertmacro ProcessSection ${extenstion}
                ;if $r0 is 0 then exit section
                StrCmp $R0 0 EndMacro 0
                ;--------------section code----------------                       
               
  StrCpy $ClassName "AIMP.${extenstion}"
  StrCmp ${extenstion} "AUDIOCD" 0 noaudio
        WriteRegStr HKCR "${extenstion}" "" "$ClassName"
        DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${extenstion}\UserChoice"
        WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${extenstion}\UserChoice" "Progid" "$ClassName"
  noaudio:
  WriteRegStr HKCR ".${extenstion}" "" "$ClassName"
  DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice"
  WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" "Progid" "$ClassName"
  WriteRegStr HKCR "$ClassName\CLSID" "" "{0041494D-5032-4472-6F70-546172676574}"
  WriteRegStr HKCR "$ClassName\shell\open" "" "Открыть в AIMP2"
  WriteRegStr HKCR "$ClassName\shell\open\command" "" "$OpenCommand"
  WriteRegStr HKCR "$ClassName\shell\open\DropTarget" "CLSID" "{0041494D-5032-4472-6F70-546172676574}"
  WriteRegStr HKCR "CLSID\{0041494D-5032-4472-6F70-546172676574}" "" "AIMP"
  WriteRegStr HKCR "CLSID\{0041494D-5032-4472-6F70-546172676574}\LocalServer32" "" "$Exe_Path"
  WriteRegStr HKCR "CLSID\{0041494D-5032-4472-6F70-546172676574}\ProgID" "" "AIMP.TDropTarget"
  WriteRegStr HKCR "AIMP.TDropTarget" "" "AIMP"
  WriteRegStr HKCR "AIMP.TDropTarget\Clsid" "" "{0041494D-5032-4472-6F70-546172676574}"
 
        ;define  icon for class
        ${Switch} ${extenstion}       
                ${Case}        "AAC"
                        StrCpy $IconIndex 4
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Advanced Audio Codec"
                        ${Break}       
       
                ${Case}        "AC3"
                        StrCpy $IconIndex 4
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Dolby Digital AC-3"
                        ${Break}
       
                ${Case} "ACS2"
                        StrCpy $IconIndex 8
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Skin Package"
                        ${Break}       
       
                ${Case} "AIF"
                        StrCpy $IconIndex 4
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Apple Audio"
                        ${Break}       
               
                ${Case} "AIFF"
                        StrCpy $IconIndex 4
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Apple Audio"
                        ${Break}       

                ${Case} "APE"
                        StrCpy $IconIndex 4
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Monkey's Audio"
                        ${Break}
                       
                ${Case} "AUDIOCD"
                        StrCpy $IconIndex 4
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Audio CD Autorun"
                        ${Break}                       
       
                ${Case} "CDA"
                        StrCpy $IconIndex 4
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: CD Digital Audio"
                        ${Break}       

                ${Case} "CUE"
                        StrCpy $IconIndex 9
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: CUE Sheet"
                        ${Break}                       
       
                ${Case} "FLA"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Free Lossless Audio"
                        StrCpy $IconIndex 6
                        ${Break}       
                       
                ${Case} "FLAC"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Free Lossless Audio"
                        StrCpy $IconIndex 6
                        ${Break}                               
                       
                ${Case} "IT"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Impulse Tracker Module"
                        StrCpy $IconIndex 5
                        ${Break}                       

                ${Case} "KAR"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: MIDI Audio"
                        StrCpy $IconIndex 4
                        ${Break}       

                ${Case} "M3U"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: M3U Playlist"
                        StrCpy $IconIndex 9                               
                        ${Break}
                       
                ${Case} "M3U8"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: M3U (Unicoded) Playlist"
                        StrCpy $IconIndex 9                               
                        ${Break}
                       
                ${Case} "M4A"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Apple Lossless Audio Codec"
                        StrCpy $IconIndex 1                               
                        ${Break}                       
                       
                ${Case} "MAC"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Monkey's Audio"
                        StrCpy $IconIndex 4                               
                        ${Break}       

                ${Case} "MID"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: MIDI Audio"
                        StrCpy $IconIndex 4                               
                        ${Break}       

                ${Case} "MIDI"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: MIDI Audio"
                        StrCpy $IconIndex 4                               
                        ${Break}

                ${Case} "MO3"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Compressed Tracker Module"
                        StrCpy $IconIndex 5                               
                        ${Break}
               
                ${Case} "MOD"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Compressed Tracker Module"
                        StrCpy $IconIndex 5                               
                        ${Break}
                       
                ${Case} "MP+"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: MusePack Audio"
                        StrCpy $IconIndex 7                               
                        ${Break}

                ${Case} "MP1"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: MPEG Layer 1"
                        StrCpy $IconIndex 1                               
                        ${Break}

                ${Case} "MP2"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: MPEG Layer 2"
                        StrCpy $IconIndex 1                               
                        ${Break}       

                ${Case} "MP3"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: MPEG Layer 3"
                        StrCpy $IconIndex 1                               
                        ${Break}

                ${Case} "MPC"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: MusePack Audio"
                        StrCpy $IconIndex 7                               
                        ${Break}

                ${Case} "MPP"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: MusePack Audio"
                        StrCpy $IconIndex 7                               
                        ${Break}

                ${Case} "MTM"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Tracker Module"
                        StrCpy $IconIndex 5                               
                        ${Break}       

                ${Case} "OFR"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: OptimFROG"
                        StrCpy $IconIndex 4                               
                        ${Break}

                ${Case} "OFS"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: OptimFROG"
                        StrCpy $IconIndex 4                               
                        ${Break}       

                ${Case} "OGA"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Ogg Vorbis Audio"
                        StrCpy $IconIndex 2                               
                        ${Break}       

                ${Case} "OGG"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Ogg Vorbis Audio"
                        StrCpy $IconIndex 2                               
                        ${Break}       

                ${Case} "PLC"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: PLC Playlist"
                        StrCpy $IconIndex 9                               
                        ${Break}

                ${Case} "PLS"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: PLS Playlist"
                        StrCpy $IconIndex 9                               
                        ${Break}

                ${Case} "RMI"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: MIDI Audio"
                        StrCpy $IconIndex 4                               
                        ${Break}       

                ${Case} "S3M"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Scream Tracker 3 Module"
                        StrCpy $IconIndex 5                               
                        ${Break}

                ${Case} "SPX"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Speex"
                        StrCpy $IconIndex 5                               
                        ${Break}       

                ${Case} "TTA"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: The True Audio"
                        StrCpy $IconIndex 4                       
                        ${Break}

                ${Case} "UMX"
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Unreal Music File"
                        StrCpy $IconIndex 5                       
                        ${Break}                       

                ${Case} "WAV"
                        StrCpy $IconIndex 0
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Windows WAVE"
                        ${Break}       
               
                ${Case} "WMA"
                        StrCpy $IconIndex 3
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Windows Media Audio"
                        ${Break}               
                       
                ${Case} "WV"
                        StrCpy $IconIndex 4
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: WavPack"
                        ${Break}

                ${Case} "XM"
                        StrCpy $IconIndex 5
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Fast Tracker Module"
                        ${Break}
                       
                ${Default}
                        StrCpy $IconIndex 4
                        WriteRegStr HKCR "$ClassName" "" "AIMP2: Media File"
                        ${Break}
        ${EndSwitch}
  WriteRegStr HKCR "$ClassName\DefaultIcon" "" "$IconFile,$IconIndex"       
  EndMacro:
!macroend



!macro UnRegisterExtension extenstion
  StrCpy $ClassName "AIMP.${extenstion}"
 
  StrCmp ${extenstion} "AUDIOCD" 0 +7
        ReadRegStr $0 HKCR "${extenstion}" ""
        StrCmp $0        $ClassName 0 +2
        DeleteRegKey HKCR "$ClassName"
        ReadRegStr $0 HKCR "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${extenstion}\UserChoice" ""
        StrCmp $0        $ClassName 0 +2
        DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\${extenstion}\UserChoice"

        ReadRegStr $0 HKCR ".${extenstion}" ""
  StrCmp $0        $ClassName 0 +2
  DeleteRegKey HKCR "$ClassName"
 
  ReadRegStr $0 HKCR "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice" ""
  StrCmp $0        $ClassName 0 +2
  DeleteRegKey HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.${extenstion}\UserChoice"
!macroend

SectionGroup /e "Ассоциации файлов"

        Section "-SetupIconsVariables"
                StrCmp $gMode 1 NotgMode       
                ;default icon file
                StrCpy $IconFileName "aimp2.dll"
                IfSilent 0 EndSection
                        IfFileExists $IniFile 0 EndSection
                        ReadINIStr $R0 $IniFile Advanced IconFileName
                        IfFileExists "$INSTDIR\Icons\$R0" 0 EndSection
                        StrCpy $IconFileName $R0
                EndSection:
                        StrCpy $IconFile "$INSTDIR\Icons\$IconFileName"
                        StrCpy $OpenCommand "$INSTDIR\AIMP2.exe $\"%1$\""
                        StrCpy $Exe_Path "$INSTDIR\AIMP2.exe"
                NotgMode:       
        SectionEnd
       
        Section "Контекстое меню проводника" ContextMenu
                SectionIn 1 2
                ;read/write section state
                !insertmacro ProcessSection "ContextMenu"
                ;if $r0 is 0 then exit section
                StrCmp $R0 0 EndSection 0
                ;--------------section code----------------               
                RegDLL  "$INSTDIR\System\aimp_shell.dll"
                EndSection:
        SectionEnd
       
        Section "AAC" AAC
                SectionIn 1 2
                !insertmacro RegisterExtension "AAC"
        SectionEnd
       
        Section "AC3" AC3
                SectionIn 1 2
                !insertmacro RegisterExtension "AC3"
        SectionEnd

        Section "ACS2" ACS2
                SectionIn 1 2
                !insertmacro RegisterExtension "ACS2"
        SectionEnd       

        Section "AIF" AIF
                SectionIn 1 2
                !insertmacro RegisterExtension "AIF"
        SectionEnd               
       
        Section "AIFF" AIFF
                SectionIn 1 2
                !insertmacro RegisterExtension "AIFF"
        SectionEnd       
       
        Section "APE" APE
                SectionIn 1 2
                !insertmacro RegisterExtension "APE"
        SectionEnd       
       
        Section "AUDIOCD" AUDIOCD
                SectionIn 1 2
                !insertmacro RegisterExtension "AUDIOCD"
        SectionEnd               
       
        Section "CDA" CDA
                SectionIn 1 2
                !insertmacro RegisterExtension "CDA"
        SectionEnd       
       
        Section "CUE" CUE
                SectionIn 1 2
                !insertmacro RegisterExtension "CUE"
        SectionEnd       

        Section "FLA" FLA
                SectionIn 1 2
                !insertmacro RegisterExtension "FLA"
        SectionEnd
       
        Section "FLAC" FLAC
                SectionIn 1 2
                !insertmacro RegisterExtension "FLAC"
        SectionEnd       
       
        Section "IT" IT
                SectionIn 1 2
                !insertmacro RegisterExtension "IT"
        SectionEnd

        Section "KAR" KAR
                SectionIn 1 2
                !insertmacro RegisterExtension "KAR"
        SectionEnd
       
        Section "M3U" M3U
                SectionIn 1 2
                !insertmacro RegisterExtension "M3U"
        SectionEnd       

        Section "M3U8" M3U8
                SectionIn 1 2
                !insertmacro RegisterExtension "M3U8"
        SectionEnd       

        Section "M4A" M4A
                SectionIn 1 2
                !insertmacro RegisterExtension "M4A"
        SectionEnd               
       
        Section "MAC" MAC
                SectionIn 1 2
                !insertmacro RegisterExtension "MAC"
        SectionEnd       

        Section "MID" MID
                SectionIn 1 2
                !insertmacro RegisterExtension "MID"
        SectionEnd       
       
        Section "MIDI" MIDI
                SectionIn 1 2
                !insertmacro RegisterExtension "MIDI"
        SectionEnd               

        Section "MO3" MO3
                SectionIn 1 2
                !insertmacro RegisterExtension "MO3"
        SectionEnd

        Section "MOD" MOD
                SectionIn 1 2
                !insertmacro RegisterExtension "MOD"
        SectionEnd
       
        Section "MP+" MP+
                SectionIn 1 2
                !insertmacro RegisterExtension "MP+"
        SectionEnd
       
        Section "MP1" MP1
                SectionIn 1 2
                !insertmacro RegisterExtension "MP1"
        SectionEnd       
       
        Section "MP2" MP2
                SectionIn 1 2
                !insertmacro RegisterExtension "MP2"
        SectionEnd       
       
        Section "MP3" MP3
                SectionIn 1 2
                !insertmacro RegisterExtension "MP3"
        SectionEnd       
       
        Section "MPC" MPC
                SectionIn 1 2
                !insertmacro RegisterExtension "MPC"
        SectionEnd

        Section "MPP" MPP
                SectionIn 1 2
                !insertmacro RegisterExtension "MPP"
        SectionEnd       

        Section "MTM" MTM
                SectionIn 1 2
                !insertmacro RegisterExtension "MTM"
        SectionEnd       
       
        Section "OFR" OFR
                SectionIn 1 2
                !insertmacro RegisterExtension "OFR"
        SectionEnd               

        Section "OFS" OFS
                SectionIn 1 2
                !insertmacro RegisterExtension "OFS"
        SectionEnd       
       
        Section "OGA" OGA
                SectionIn 1 2
                !insertmacro RegisterExtension "OGA"
        SectionEnd       

        Section "OGG" OGG
                SectionIn 1 2
                !insertmacro RegisterExtension "OGG"
        SectionEnd       
       
        Section "PLC" PLC
                SectionIn 1 2
                !insertmacro RegisterExtension "PLC"
        SectionEnd
       
        Section "PLS" PLS
                SectionIn 1 2
                !insertmacro RegisterExtension "PLS"
        SectionEnd       
       
        Section "RMI" RMI
                SectionIn 1 2
                !insertmacro RegisterExtension "RMI"
        SectionEnd       

        Section "S3M" S3M
                SectionIn 1 2
                !insertmacro RegisterExtension "S3M"
        SectionEnd               

        Section "SPX" SPX
                SectionIn 1 2
                !insertmacro RegisterExtension "SPX"
        SectionEnd

        Section "TTA" TTA
                SectionIn 1 2
                !insertmacro RegisterExtension "TTA"
        SectionEnd
       
        Section "UMX" UMX
                SectionIn 1 2
                !insertmacro RegisterExtension "UMX"
        SectionEnd       
       
        Section "WAV" WAV
                SectionIn 1 2
                !insertmacro RegisterExtension "WAV"
        SectionEnd       
       
        Section "WMA" WMA
                SectionIn 1 2
                !insertmacro RegisterExtension "WMA"
        SectionEnd       
       
        Section "WV" WV
                SectionIn 1 2
                !insertmacro RegisterExtension "WV"
        SectionEnd               
       
        Section "XM" XM
                SectionIn 1 2
                !insertmacro RegisterExtension "XM"
        SectionEnd
       
        Section "-RefreshIcons"
                SectionIn 1 2 3
                StrCmp $gMode 1 +2 0
                ${RefreshShellIcons}
        SectionEnd
SectionGroupEnd


sergey3695 01-05-2014 19:44 2345784

Dodakaedr, интересно,а по какому принципу конвертер должен работать? я точно не встречал,даже не интересовался.

Dodakaedr 01-05-2014 20:51 2345805

sergey3695, ну приблизительно как конвертор с inno в nsis.

Dodakaedr 02-05-2014 16:34 2346042

Из справки:
читать дальше »
Цитата:

В этом скрипте при инсталляции в бэкап сохраняются (перемещением) только те файлы, которые инсталлятор заменяет. При удалении, эти же файлы восстанавливаются (тоже перемещением).
Код:

#include "SHFileOperation.iss"

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DisableProgramGroupPage=yes

[Files]
Source: Files\*.*; DestDir: {app}; Flags: ignoreversion recursesubdirs; BeforeInstall: CreateBackup

[ Code]
function MoveFile(const srcFile, destFile: PChar):Integer;
external 'MoveFileA@kernel32.dll stdcall';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
MoveDir(ExpandConstant('{app}\Backup\'),ExpandConstant('{app}'));
RemoveDir(ExpandConstant('{app}\Backup\'));
end;
end;

procedure CreateBackup;
var
srcFile, destFile: string;
basePath, shortPath: string;
begin
basePath:= ExpandConstant('{app}');
srcFile:= ExpandConstant(CurrentFileName);
shortPath:= srcFile;
StringChangeEx(shortPath, basePath, '', True);
destFile:= ExpandConstant('{app}\Backup') + shortPath;
ForceDirectories(ExtractFilePath(destFile));
MoveFile(PChar(srcFile), PChar(destFile));
end;


Сделайте, пожалуйста такой же код, но для реестра, чтобы перед установкой создавался бекап, а при удалении восстанавливался. И чтобы бекап создавался в той ветке реестра в которой инсталлятор изменяет значение. Важным в коде должно быть, то что я выделил жирным... если это возможно, конечно.

ROMKA-1977 02-05-2014 18:45 2346081

Подскажите пож. как в Inno Setup переименовать папку Мои документы в Documents (My Documents)?

sergey3695 02-05-2014 20:39 2346132

ROMKA-1977, хм..
Код:

procedure InitializeWizard();
begin
  RenameFile(ExpandConstant('{userdocs}'), ExpandConstant('{%userprofile}\My Documents'));
end;

вроде вот,но что-то только имя объекта меняется.

ROMKA-1977 02-05-2014 20:52 2346141

Цитата:

Цитата sergey3695
вроде вот,но что-то только имя объекта меняется. »

Не то!

habib2302 03-05-2014 10:41 2346336

как добавить прогресс бар показывающий установку допустим adobe flash player

diman_21Ru 03-05-2014 11:43 2346358

Как можно добавить кнопку по переходу с En в Ru версию установщика, и как её можно двигать , вот скрин примера

habib2302 03-05-2014 11:51 2346366

diman_21Ru, http://forum.oszone.net/post-2343792-515.html
http://forum.oszone.net/post-2246421.html#post2246421
http://forum.oszone.net/post-2261326.html#post2261326

diman_21Ru 03-05-2014 12:28 2346378

habib2302, а как кнопку сделать больше размером,нашел где подвинуть,растянуть но не нашел размер увеличить.
И ещё можно ли как то иконку поставить под эту надпись

Nordek 03-05-2014 12:50 2346387

Цитата:

Цитата diman_21Ru
но не нашел размер увеличить »

Врёшь. Нужно не находить, а уже понимать.
Я же писал.

Замени:
Код:

    SetBounds(10,WizardForm.CancelButton.Top,30,WizardForm.CancelButton.Height)
на
Код:

    SetBounds(10,300,80,23)
Код:

//            Слева | Сверху | Ширина | Высота
//  SetBounds(10,    300,    80,      23)


diman_21Ru 03-05-2014 12:55 2346389

Nordek, спасибо большое а может есть ещё функция картинки на эту кнопку ?

Nordek 03-05-2014 13:04 2346393

diman_21Ru, В первом сообщении: "Сборник скриптов в формате .chm от Krinkels;" скачай - там есть примеры "Текстурирование кнопок", "Текстурирование кнопок через botva2.dll".

Shift85 03-05-2014 13:44 2346400

Вложений: 1
Цитата:

Цитата diman_21Ru
функция картинки на эту кнопку »

diman_21Ru, Через png и bmp:

habib2302 03-05-2014 15:15 2346450

ответьте пожалуйста на мой вопрос http://forum.oszone.net/post-2346336-534.html

Shift85 03-05-2014 15:21 2346453

Цитата:

Цитата habib2302
ответьте пожалуйста на мой вопрос http://forum.oszone.net/post-2346336-534.html »

habib2302, Не совсем понятен вопрос,что за прогресс бар и куда его добавить.

Давайте поточней задавайте вопросы...

habib2302 03-05-2014 15:29 2346455

Shift85, как вам объяснить? я дорабатываю свой репак adobe flash player. во время установки первый прогресс бар показывал состояние распаковки файлов, а второй показывал состояние установки самого adobe fl pl

Shift85 03-05-2014 15:45 2346460

habib2302, Не то пробуй:http://rghost.ru/54891448

diman_21Ru 03-05-2014 17:01 2346516

habib2302, русский ,английский добавил спасибо огромное а как можно ещё украинский,работал с этим примером если можно добавьте туда же заранее спасибо http://rghost.ru/54895502

habib2302 05-05-2014 00:44 2347074

diman_21Ru, http://yadi.sk/d/CdooukGBP4J6T

Антон_Мураткин@vk 05-05-2014 15:11 2347307

Всем привет!!!
Подскажите пожалуйста скрипты на музыку, Слайдшоу и соответственно какие должны быть ещё dll-ки для этого

Shift85 05-05-2014 15:17 2347311

Цитата:

Цитата Антон_Мураткин@vk
Подскажите пожалуйста скрипты на музыку, Слайдшоу »

На слайдшоу: http://rghost.ru/54963256

habib2302 05-05-2014 23:17 2347541


я дорабатываю свой репак adobe flash player. и как сделать так, чтобы во время установки первый прогресс бар показывал состояние распаковки файлов, а второй показывал состояние установки самого adobe fl pl

sergey3695 06-05-2014 11:23 2347687

habib2302, ну как первый прогрессбар сделать? ну думаю знаешь. загвоздка во втором.
1. второй активируется после первого. (думаю понятно)
2. проверка папки установки flash player (если там указывается папка установки,то способ не прокатит)
3. какой размер папки куда ставится и сколько займет устанавливаемое.
4. двигать прогрессбар второй проверяя размер папки куда ставится.
5. не парится. поставить скрыто установку а потом прогрессбар на 100 сразу двинуть и все. (ставится то недолго)
я только не знаю как скрыто установить флеш. надо параметр смотреть.

habib2302 06-05-2014 12:22 2347704

sergey3695, мой репак сделан на подобии от diakov.
вот как устроен мой скрипт

и вот команда для тихой установки
Код:

[Run]
Filename: {tmp}\activex.exe; Flags: RunHidden; Components: AFP\A; Parameters: "/install /force";
Filename: {tmp}\plugin.exe; Flags: RunHidden; Components: AFP\P; Parameters: "/install /force";

т.е у меня идет распаковка во временную папку и дальше идет тихая установка самого flash player'а

Shift85 06-05-2014 13:58 2347736

Цитата:

Цитата habib2302
т.е у меня идет распаковка во временную папку и дальше идет тихая установка самого flash player'а »

habib2302, Зачем изобретать велосипед а не проще все напрямую ставить как репаки игр например.

habib2302 06-05-2014 14:10 2347745

Shift85, в каком смысле напрямую?

sergey3695 06-05-2014 19:00 2347902

habib2302, т.к. файлов нету,скрипта нету,то пример.
Сделал так
читать дальше »
Код:

////////////////////// Начало ExecAndWait //////////////////

var
  lastproc: cardinal;
const
  NORMAL_PRIORITY_CLASS          = $00000020;
  REALTIME_PRIORITY_CLASS        = $00000100;
type
  _TStartupInfo = record
  cb: DWORD;
  lpReserved, lpDesktop: Longint;
  lpTitle: PAnsiChar;
  dwX, dwY, dwXSize, dwYSize, dwXCountChars, dwYCountChars, dwFillAttribute, dwFlags: DWORD;
  wShowWindow, cbReserved2: Word;
  lpReserved2: Byte;
  hStdInput, hStdOutput, hStdError: Longint;
end;
  _TProcessInformation = record
  hProcess, hThread: Longint;
  dwProcessId, dwThreadId: DWORD;
end;
  _TMsg = record
  hWnd: HWND;
  msg, wParam: Word;
  lParam: LongWord;
  Time: TFileTime;
  pt: TPoint;
end;

function OpenProcess(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; external 'OpenProcess@kernel32.dll stdcall';
procedure GetStartupInfo(var lpStartupInfo: _TStartupInfo); external 'GetStartupInfoA@kernel32.dll stdcall';
function CreateProcess(lpApplicationName: PAnsiChar; lpCommandLine: PAnsiChar; lpProcessAttributes, lpThreadAttributes: DWORD; bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: PAnsiChar; lpCurrentDirectory: PAnsiChar; const lpStartupInfo: _TStartupInfo; var lpProcessInformation: _TProcessInformation): BOOL; external 'CreateProcessA@kernel32.dll stdcall';
function WaitForSingleObject(hHandle: Longint; dwMilliseconds: DWORD): DWORD; external 'WaitForSingleObject@kernel32.dll stdcall';
function TerminateProcess(hProcess: Longint; uExitCode: UINT): BOOL; external 'TerminateProcess@kernel32.dll stdcall';
function PeekMessage(var lpMsg: _TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: _TMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: _TMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';

procedure Application_ProcessMessages;
var
  Msg: _TMsg;
begin
while PeekMessage(Msg, 0, 0, 0, 1) do begin
  TranslateMessage(Msg);
  DispatchMessage(Msg);
end;
end;

function ExecAndWait(filename, params: pansichar; showcmd: integer; Priority: Smallint; zav: DWord): Boolean;
var
  SI : _TStartupInfo;
  PI : _TProcessInformation;
  CMD: string;
  prt: DWORD;
begin
  Result:=false;
  CMD:='"' + filename + '" ' + params;
  GetStartupInfo(SI);
  SI.wShowWindow := showcmd;
  SI.dwFlags := 1;
if Priority = 0  then prt:= NORMAL_PRIORITY_CLASS else
if Priority = 1  then prt:= REALTIME_PRIORITY_CLASS;
  Result:=CreateProcess('', PansiChar(CMD), 0, 0, false, prt,'', pansichar(ExtractFilePath(filename)), SI, PI);
  lastproc:=PI.dwProcessId;
if zav=1 then
begin
while WaitforSingleObject(PI.hProcess, 50) = $00000102 do
  Application_ProcessMessages;
end;
  CloseHandle(PI.hProcess)
end;

////////////////////// Конец ExecAndWait ///////////////////


читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DisableFinishedPage=yes
OutputDir=.

[Languages]
Name: RUS; MessagesFile: "compiler:Languages\Russian.isl"

[Code ]
var
  Timer: TTimer;
  Labelpr: TLabel;
  NewProgressBar1: TNewProgressBar;

// ExecAndWait
#include "ExecAndWait.iss"

procedure RedesignWizardForm;
begin
  Labelpr := TLabel.Create(WizardForm);
  with Labelpr do
  begin
    Parent := WizardForm;
    Left := ScaleX(96);
    Top := ScaleY(120);
    Width := ScaleX(289);
    Caption:= 'Установка флеша';
  end;
  { NewProgressBar1 }
  NewProgressBar1 := TNewProgressBar.Create(WizardForm);
  with NewProgressBar1 do
  begin
    Parent := WizardForm;
    Left := ScaleX(96);
    Top := ScaleY(144);
    Width := ScaleX(289);
    Height := ScaleY(25);
    Max:= 100;
  end;
end;

procedure FlRun(Sender: TObject);
begin
  ExecAndWait(ExpandConstant('{src}\activex.exe'), '/install /force', SW_HIDE, 0,1);
  WizardForm.Close;
end;

procedure Timepr(Sender: TObject);
begin
  NewProgressBar1.Position:=NewProgressBar1.Position+9;
if NewProgressBar1.Position= 100 then
begin
  Labelpr.Caption:= 'Завершение установки';
  Timer.Enabled:= False;
end;
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
  WizardForm.InnerNotebook.Hide;
  WizardForm.OuterNotebook.Hide;
  Timer:=TTimer.Create(nil);
with Timer do begin
  Interval:= 300;
  OnTimer:=@Timepr;
end;
  WizardForm.OnActivate:= @FlRun;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm:=False;
  Cancel:=True;
end;


Время таймера должно быть меньше времени установки флеша. Прогрессбар тупо двигается по таймеру,а в это время происходит установка, потом прогресс доходит до максимума и лейбл меняется на завершение установки,в то время как флеш еще ставится. хотел сделать ожидание установщика (если флеш установится), но тогда процесс зависает. Можно конечно создать еще процесс,но это извращенство. Вообщем так. Или файлы со скиптом и я по изгаляюсь )

Антон_Мураткин@vk 06-05-2014 20:09 2347950

Shift85, Благодарю!!!

Ребят, вот скрипт Инсталлятора http://sendfile.su/976358 не могу найти в скрипте код на кнопки далее, отмена, установка. Хочу кнопки передвинуть в другое место. Может кто посмотрит и подскажет в каком месте в скрипте это поменять положения этих кнопок. Заранее благодарю

habib2302 06-05-2014 20:27 2347965

Цитата:

Цитата sergey3695
скрипта нету »

скрипт я не дам. т.к кто-то у меня скрипт украл и за меня делал репаки

Shift85 06-05-2014 20:29 2347966

Цитата:

Цитата Антон_Мураткин@vk
в каком месте в скрипте это поменять положения этих кнопок »

Антон_Мураткин@vk, В модуле Button.iss

Код:

with WizardForm.BackButton do begin
    hBackBtn:=BtnCreate(WizardForm.Handle,203,277,77,23,ExpandConstant('{tmp}\button.png'),18,False);
    BtnSetEvent(hBackBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
    BtnSetEvent(hBackBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
    BtnSetFont(hBackBtn,WFButtonFont.Handle);
    BtnSetFontColor(hBackBtn,$DAE369,$DAE369,$DAE369,$B6B6B6);
    BtnSetCursor(hBackBtn,GetSysCursorHandle(32649));
    Width:=0;
    Height:=0;
end;

with WizardForm.NextButton do begin
    hNextBtn:=BtnCreate(WizardForm.Handle,298,277,77,23,ExpandConstant('{tmp}\button.png'),18,False);
    BtnSetEvent(hNextBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
    BtnSetEvent(hNextBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
    BtnSetFont(hNextBtn,WFButtonFont.Handle);
    BtnSetFontColor(hNextBtn,$DAE369,$DAE369,$DAE369,$B6B6B6);
    BtnSetCursor(hNextBtn,GetSysCursorHandle(32649));
    Width:=0;
    Height:=0;
end;

with WizardForm.CancelButton do begin
    hCancelBtn:=BtnCreate(WizardForm.Handle,203,277,77,23,ExpandConstant('{tmp}\button.png'),18,False);
    BtnSetEvent(hCancelBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
    BtnSetEvent(hCancelBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
    BtnSetFont(hCancelBtn,WFButtonFont.Handle);
    BtnSetFontColor(hCancelBtn,$DAE369,$DAE369,$DAE369,$B6B6B6);
    BtnSetCursor(hCancelBtn,GetSysCursorHandle(32649));
    Width:=0;
    Height:=0;
end;

Код:

298,277,77,23
298,277,77,23
203,277,77,23

Эти параметры. ;)

Антон_Мураткин@vk 06-05-2014 20:35 2347974

Shift85, Благодарю! А я искал в главном скрипте

Dodakaedr 06-05-2014 21:43 2348022

Цитата:

Цитата Shift85
мультиязычный вариант »

Как сделать чтобы полностью инсталлятор менялся, а то оно меняется только на одной странице?

Антон_Мураткин@vk 06-05-2014 21:51 2348030

Вот ещё одна проблема с кнопками :( после установки они появляются так же в центре где у них интересно менять положения кнопок

Shift85 06-05-2014 21:58 2348034

Цитата:

Цитата Dodakaedr
Как сделать чтобы полностью инсталлятор менялся, а то оно меняется только на одной странице? »

Dodakaedr, В коде нужно прописывать.

Код:

procedure ChangeLang();
begin
  WizardForm.BackButton.Caption:= CustomMessage(lang+'ButtonBack');
  WizardForm.NextButton.Caption:= CustomMessage(lang+'ButtonNext');
  WizardForm.CancelButton.Caption:= CustomMessage(lang+'ButtonCancel');
  WizardForm.Caption:= FmtMessage(CustomMessage(lang+'SetupWindowTitle'), ['{#SetupSetting('AppName')}']);
  WizardForm.WelcomeLabel1.Caption:= FmtMessage(CustomMessage(lang+'WelcomeLabel1'), ['{#SetupSetting('AppName')}']);
  WizardForm.WelcomeLabel2.Caption:= FmtMessage(CustomMessage(lang+'WelcomeLabel2'), ['{#SetupSetting('AppName')}', '{#SetupSetting('AppVersion')}']);
end;


Dodakaedr 06-05-2014 22:22 2348045

Цитата:

Цитата Shift85
В коде нужно прописывать. »

В вашем примере так и прописано, я решил для начала изменить кнопки (русский по умолчанию) и в итоге получилось что на первой странице при нажатии на кнопку смены языка надписи меняются на английский, перехожу на следующую страницу опять русские надписи... вот такая проблема.

Антон_Мураткин@vk 06-05-2014 22:39 2348051

Shift85, Подскажи пожалуйста если знаешь где. Во время установки чего либо кнопка отменить находится по середине. Так-же кнопка завершить тоже по середине. Где их менять? Всё вроде облазил все скрипты которые есть в этом инсталляторе.

Shift85 06-05-2014 22:55 2348060

Цитата:

Цитата Антон_Мураткин@vk
Во время установки чего либо кнопка отменить находится по середине. Так-же кнопка завершить тоже по середине »

Антон_Мураткин@vk, Координаты поменяй они одинаковые.

Код:

hBackBtn:=BtnCreate(WizardForm.Handle,203,277,77,23,ExpandConstant('{tmp}\button.png'),18,False);
hCancelBtn:=BtnCreate(WizardForm.Handle,203,277,77,23,ExpandConstant('{tmp}\button.png'),18,False);

Цитата:

Цитата Dodakaedr
перехожу на следующую страницу опять русские надписи... »

Dodakaedr, Давай скрипт погляжу.

Dodakaedr 06-05-2014 23:12 2348069

Цитата:

Цитата Shift85
Давай скрипт погляжу. »

Это с вашего примера:
читать дальше »
Код:

[setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}
ShowLanguageDialog=auto

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
Name: eng; MessagesFile: compiler:Default.isl

[CustomMessages]
; Русский
rusButtonBack=< &Назад
rusButtonNext=&Далее >
rusButtonCancel=Отмена
rusSetupWindowTitle=Установка — %1

; English
engButtonBack=< &Back
engButtonNext=&Next >
engButtonCancel=Cancel
engSetupWindowTitle=Setup — %1

[ Code]
var
  lang: String;
  langBtn: TButton;

procedure ChangeLang();
begin
  WizardForm.BackButton.Caption:= CustomMessage(lang+'ButtonBack');
  WizardForm.NextButton.Caption:= CustomMessage(lang+'ButtonNext');
  WizardForm.CancelButton.Caption:= CustomMessage(lang+'ButtonCancel');
  WizardForm.Caption:= FmtMessage(CustomMessage(lang+'SetupWindowTitle'), ['{#SetupSetting('AppName')}']);
  end;

procedure LangBtnClick(Sender: TObject);
begin
  if lang='rus' then begin
    lang:= 'eng';
    langBtn.Caption:= 'рус';
  end else begin
    lang:= 'rus';
    langBtn.Caption:= 'eng';
  end;
  ChangeLang();
end;

procedure InitializeWizard;
begin
  langBtn:= TButton.Create(WizardForm);
  with langBtn do begin
    SetBounds(10,WizardForm.CancelButton.Top,30,WizardForm.CancelButton.Height)
    OnClick:= @LangBtnClick;
    Parent:= WizardForm;
  end;

  if ActiveLanguage='rus' then begin
    lang:= 'rus';
    langBtn.Caption:= 'eng';
  end else begin
    lang:= 'eng';
    langBtn.Caption:= 'рус';
  end;
end;

Напоминаю: я покамись тестирую кнопки.


Shift85, И обратите внимание что WizardForm.Caption соответствует выбранному языку, а кнопки нет.

Shift85 06-05-2014 23:30 2348076

Вложений: 1
Dodakaedr, А так у меня на Юникоде работает.

Dodakaedr 06-05-2014 23:44 2348085

Цитата:

Цитата Shift85
А так у меня на Юникоде работает. »

У меня ни на уникоде ни в анси не работает...

Shift85 06-05-2014 23:55 2348088

Вложений: 1
Цитата:

Цитата Dodakaedr
У меня ни на уникоде ни в анси не работает »

Dodakaedr, Значит не судьба придеться юзать оконный режим вот. :lol:

Caratel 07-05-2014 00:42 2348102

Как из одного архива распаковывать только нужный компонент?
Например папка ru, en, ru\en находится в архиве data1

ru - полностью русский является компонентом 1
en - полностью английский является компонентом 2
ru\en - является компонентом 3


Не могли бы вы указать, где и как именно это прописывать?

#ifdef Data1
if not ISExec( 0, 0, 0, ExpandConstant('{tmp}\unarc.exe'), ExpandConstant('x -o+ -cfg"{tmp}\arc.ini" -w"{app}" -p"password" -dp"{app}" "{src}\data1.bin"'), ExpandConstant('{tmp}'), '...',false) then break;
#endif

Или в if not ISExec это нельзя реализовать? (Как понял из справки за это отвечает ExtractedPath, а в этой функции её нету)


Нужно именно через if not ISExec

Если нельзя реализовать, то как это сделать через if not ISArcExtract, используя unarc.exe и arc.ini?

sergey3695 07-05-2014 09:41 2348174

Caratel, в справке про ISArcExtract это есть. поверь. надо лишь прочитать.

Антон_Мураткин@vk 07-05-2014 13:26 2348280

Цитата:

Цитата Shift85
Антон_Мураткин@vk, Координаты поменяй они одинаковые.
Код:
hBackBtn:=BtnCreate(WizardForm.Handle,203,277,77,23,ExpandConstant('{tmp}\button.png'),18,False);
hCancelBtn:=BtnCreate(WizardForm.Handle,203,277,77,23,ExpandConstant('{tmp}\button.png'), »

А где это менять? Если в Button'e то там всё уже изменено, но отмена и завершить всё равно по центру. В других что то такое и не нашёл

Антон_Мураткин@vk 07-05-2014 13:43 2348293

Цитата Антон_Мураткин@vk:
А где это менять? Если в Button'e то там всё уже изменено, но отмена и завершить всё равно по центру. В других что то такое и не нашёл »
Нашёл где это менять. Только совсем почему то названия кнопок другие.
Shift85: Благодарю за помощь.

Caratel 07-05-2014 13:51 2348300

sergey3695 я знаю, что это есть.
Но мне нужно чтобы через if not ISExec было. Ибо у меня метод сжатия, который ISArcExtract не распаковывает.
Вот я и спрашиваю как это реализовать.

sergey3695 07-05-2014 20:33 2348494

Caratel, а как пакуешь?

Антон_Мураткин@vk 07-05-2014 20:53 2348511

Ребят, на странице приветствия не появляется текст. Вас приветствует Мастер установки игры {#MyAppName} Рекомендуется закрыть антивирусные пакеты, а также все прочие приложения и т.п

Вот ссылка на скрипт http://sendfile.su/976358

vint56 07-05-2014 21:53 2348530

Антон_Мураткин@vk, потому там нету этих лайбалов

Caratel 07-05-2014 22:15 2348537

Уважаемый vint56, вы не могли бы мне помочь с моим вопросом?

Dodakaedr 07-05-2014 22:33 2348547

Антон_Мураткин@vk, добавьте это
читать дальше »
Код:

Welcome1:= TLabel.Create(WizardForm);
with welcome1 do
Begin
AutoSize:= False;
  WordWrap:= True;
  SetBounds(ScaleX(140), ScaleY(30), ScaleX(400), ScaleY(90));
  Transparent:=True;
  Font.Name:= 'Arial';
  Font.Size:= 10;
  Font.Color:=$FFFFFF;
  Font.Style:=[fsBold];
  OnMouseDown:=@LabelOnMouseDown;
  Parent:=WizardForm;
  Caption:=CustomMessage('Welcome1');
end;

Welcome2:= TLabel.Create(WizardForm);
with welcome2 do
Begin
AutoSize:= False;
  WordWrap:= True;
  SetBounds(ScaleX(100), ScaleY(130), ScaleX(400), ScaleY(90));
  Transparent:=True;
  Font.Name:= 'Arial';
  Font.Size:= 10;
  Font.Color:=$FFFFFF;
  Font.Style:=[fsBold];
  OnMouseDown:=@LabelOnMouseDown;
  Parent:=WizardForm;
  Caption:=CustomMessage('Welcome2');
end;


vint56 07-05-2014 22:57 2348559

Caratel вот пример по другому я не знаю http://dfiles.ru/files/it6gqqi9q

Антон_Мураткин@vk 07-05-2014 23:40 2348577

Цитата:

Цитата Dodakaedr
добавьте это
читать дальше » »

Не подходит выдаёт ошибку. Пробовал переделать тоже что то не получается. Может кто поможет? Заранее благодарю!!!

vint56 08-05-2014 00:07 2348588

Антон_Мураткин@vk
http://rghost.ru/55019065

audiofeel 08-05-2014 01:14 2348612

привет всем, помогите, как сделать , чтоб кнопка GroupBrowseButton (созданная через ботву) обновлялась "правильно" при нажатии на "штатный чек бокс" (не через ботву) "NoIconsCheck"
сделал так =========
procedure NoIconsClick(Sender: TObject);
begin
WizardForm.GroupEdit.Enabled:= not WizardForm.NoIconsCheck.Checked;
BtnSetEnabled(GroupBrowseButton, not WizardForm.NoIconsCheck.Checked);
end;
*********************

procedure InitializeWizard;
begin
with WizardForm do begin
NoIconsCheck.OnClick := @NoIconsClick;

вроде все правильно, но при повторной установке, если при первой выбрал не создовать папку в меню пуск - кнопка активна, а чек бокс нажат
а должно быть , кнопка тоже не активна , раз чек бокс нажат

Антон_Мураткин@vk 08-05-2014 01:49 2348625

Цитата vint56:
http://rghost.ru/55019065 »
Благодарю! :up
Я просто код скрипта стандартый заменял на то что дал Dodakaedr вот из-за этого ошибка и вылазила.
Всем огромное спасибо.

Ещё одну проблему надо решить с этим скриптом! На счёт удаления игры и т.п :(
Как туда вставить свою картинку и поменять положения текста. Может кто подскажет? Заранее благодарю.

Dodakaedr 08-05-2014 08:30 2348684

audiofeel, Пример скрипта скиньте

Shift85 08-05-2014 08:41 2348690

Цитата:

Цитата audiofeel
как сделать , чтоб кнопка GroupBrowseButton (созданная через ботву) обновлялась "правильно" »

audiofeel, Вот так примерно. ;)

Код:

// Для чек боксов
function NoIcons: Boolean;
begin
  Result:= BtnGetEnabled(hGroupBrowseBtn);
end;

procedure NoIconsClick(hBtn:HWND);
var
  Check:boolean;
begin
  Check:=BtnGetChecked(hBtn);
  BtnSetEnabled(hGroupBrowseBtn, not Check);
  WizardForm.GroupEdit.Enabled:=not Check;
  if Check then NoIconsLabel.Font.Color:=clGray else NoIconsLabel.Font.Color:=$c1c1c1;
end;

procedure NoIconsLabelClick(Sender:TObject);
begin
  BtnSetChecked(NoIconsCheck, not BtnGetChecked(NoIconsCheck));
  NoIconsClick(NoIconsCheck);
end;

Цитата:

Цитата Антон_Мураткин@vk
Как туда вставить свою картинку »

Антон_Мураткин@vk, Пример через ботву. http://rghost.ru/55023514

audiofeel 08-05-2014 12:38 2348807

Цитата:

Цитата Shift85
Вот так примерно »

да , видел я эти примеры, у меня нет лейбла "NoIconsLabel", он стандартный, то есть и чек бокс то же стандартный, и груп эдит тоже стандартный, только кнопка груп браузер - через ботву
честно говоря ваще не понял как его ко мне прикрутить
вот скачайте и попробуйте запустить установщик, при первой установке все норм, но если ее повыторить , то естественно инно прочитает в реестре все что делал пользователь и чек бокс "но айконс" будет активен, то есть нажат - НО КНОПКА ГРУПП БРАУЗЕР АКТИВНА
http://rghost.ru/55026079

Shift85 08-05-2014 13:21 2348819

Цитата:

Цитата audiofeel
он стандартный, то есть и чек бокс то же стандартный »

audiofeel, На чек бокс

Код:

OnClick:= @NoIconsLabelClick;

audiofeel 08-05-2014 14:12 2348841

Цитата:

Цитата Shift85
На чек бокс »

не работает ( не подходит) анкнаун идентифер "но айконс чек"
вот как у меня
function NoIconsCheck: Boolean;
begin
Result:= not WizardForm.NoIconsCheck.Checked;
end;

procedure NoIconsClick(Sender: TObject);
begin
WizardForm.GroupEdit.Enabled:= not WizardForm.NoIconsCheck.Checked;
BtnSetEnabled(GroupBrowseButton, not WizardForm.NoIconsCheck.Checked);
end;

saurn 08-05-2014 14:49 2348859

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

procedure CurPageChanged(CurPageID: Integer);
begin
    case CurPageID of
        Нужная страница: NoIconsClick(nil);  //NoIconsClick(Имя чекбокса);
    end;
end;


audiofeel 08-05-2014 16:14 2348906

saurn,
все заработало, но как то странно, указал чек бокс WizardForm.NoIconsCheck.(nil); ошибка, - оставил как у вас NoIconsClick(nil); = работает :o
*************************
wpSelectProgramGroup: begin
WizardForm.SelectStartMenuFolderLabel.Show;
WizardForm.SelectStartMenuFolderBrowseLabel.Show;
WizardForm.GroupEdit.Show;
WizardForm.NoIconsCheck.Show;

BtnSetVisibility(BackButton, True);
BtnSetVisibility(NextButton, True);
BtnSetText(NextButton, ExpandConstant('{cm:NextButton}'));
BtnSetVisibility(CancelButton, True);
BtnSetVisibility(GroupBrowseButton, True);

ImgSetVisibility(Image2, True);
ImgSetVisibility(EditImage, True);
NoIconsClick(nil);
end;

saurn 08-05-2014 19:47 2349005

Цитата:

Цитата audiofeel
но как то странно »

Отнюдь. WizardForm. тут лишнее. Вы просто вызываете обработчик NoIconsClick при переходе на страницу.

Антон_Мураткин@vk 08-05-2014 22:55 2349061

Цитата:

Цитата vint56
Антон_Мураткин@vk
http://rghost.ru/55019065 »

Чтото вообще не чего не меняется. Всю голову уже сломал. Может кто в примере подскажет? Заранее благодарю!!!

Dodakaedr 09-05-2014 00:49 2349108

Цитата:

Цитата Антон_Мураткин@vk
Может кто в примере подскажет? »

пример c папки inno uninstall

Dodakaedr 09-05-2014 16:56 2349319

Подскажите как добавить значок программы в панель управления? Файл .cpl имеется?

Антон_Мураткин@vk 09-05-2014 18:00 2349340

Цитата Dodakaedr:
Профиль | Отправить PM | Цитировать
Цитата Антон_Мураткин@vk:
Может кто в примере подскажет? »
пример c папки inno uninstall »
Нет, всё тоже самое. Или ошибки вылазиют или не чего не меняется. Даже и не знаю где ещё что менять в uninstall. Кто что ещё подскажет?
Заранее благодарю.

Может даже быть что то где то не правильно делаю, вот из-за этого наверное и не получается.
Даже не меняется положение текста и прогрес-бара

Nordek 09-05-2014 18:59 2349357

Dodakaedr,

Код:

#define AppID "{2FCBA0AC-DA4C-4BC9-8FBC-D0C18A88C213}"

[Setup]
AppId={{#AppID}
AppName=NetWorx
AppVersion=1.0
DefaultDirName={pf}\NetWorx
DefaultGroupName=NetWorx
UninstallDisplayIcon={app}\networx.exe
OutputDir=.

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: cplnw; Description: Добавить NetWorx в панель управления; Flags: unchecked; GroupDescription: {cm:AdditionalIcons}

[Files]
Source: NetWorx\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: {group}\NetWorx; Filename: {app}\networx.exe
Name: {group}\{cm:UninstallProgram,NetWorx}; Filename: {uninstallexe}
Name: {commondesktop}\NetWorx; Filename: {app}\networx.exe; Tasks: desktopicon

[Run]
Filename: {app}\networx.exe; Description: {cm:LaunchProgram,NetWorx}; Flags: nowait postinstall skipifsilent

[Registry]
Root: HKCR; SubKey: CLSID\{{#AppID}; ValueType: string; ValueData: NetWorx; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: cplnw
Root: HKCR; SubKey: CLSID\{{#AppID}; ValueType: string; ValueName: InfoTip; ValueData: NetWorx; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: cplnw
Root: HKCR; SubKey: CLSID\{{#AppID}\DefaultIcon; ValueType: string; ValueData: {app}\networx.exe,0; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: cplnw
Root: HKCR; SubKey: CLSID\{{#AppID}\Shell\Open; ValueType: string; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: cplnw
Root: HKCR; SubKey: CLSID\{{#AppID}\Shell\Open\command; ValueType: string; ValueData: {app}\networx.exe; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: cplnw
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\{{#AppID}; ValueType: string; ValueData: NetWorx; Flags: uninsdeletevalue uninsdeletekeyifempty; Tasks: cplnw


Dodakaedr 10-05-2014 20:42 2349709

Nordek, для чего вообще файл .cpl в составе программы?

Антон_Мураткин@vk 11-05-2014 00:02 2349763

Ребят всем привет! Подскажите как понять что за путь до ехе файла получается?

Цитата:

Exec(ExpandConstant('{src}\Redist\vcredist_x86.exe'), '', ExpandConstant('{src}\Redist'), SW_SHOW, ewWaitUntilTerminated, tmp);
Redist - это папка
vcredist_x86.exe - сам ехе файл
{src} - А вот это что?

Папку делаю около скрипта Redist туда кидаю файл vcredist_x86.exe а установка не происходит.

И надо ли писать в скрипте категорию Run для Redistа?

Заранее благодарю!!!

Nordek 11-05-2014 00:55 2349774

Dodakaedr, Код для общей нагрузки дал. А так, файл .cpl достаточно просто поместить в "C:\WINDOWS\system32".

Dodakaedr 11-05-2014 12:57 2349859

Цитата:

Цитата Антон_Мураткин@vk
{src} - А вот это что? »

{src} - Папка, в которой находится инсталлятор.

diman_21Ru 11-05-2014 13:41 2349874

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

habib2302 11-05-2014 16:06 2349965

diman_21Ru,
Код:

[Tasks]
Name: a; Description: Дополнительно
Name: a/dx; Description: DirectX
Name: a/vc; Description: Visual C++

[Run]
Filename: {src}\vcredist.exe; Parameters: /q; StatusMsg: Установка Visual C++; Tasks: a/vc
Filename: {src}\DirectX.exe; Parameters: /silent; StatusMsg: Установка DirectX; Tasks: a/dx


Shift85 11-05-2014 17:50 2350037

Цитата:

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

diman_21Ru, Примерчик.

habib2302 11-05-2014 18:02 2350042

Shift85, вы тупо взяли перенесли компоненты на др страницу, а страница компонентов осталась

Shift85 11-05-2014 18:09 2350048

Цитата:

Цитата habib2302
вы тупо взяли перенесли компоненты на др страницу »

habib2302, Зацени.

PRAVIY 11-05-2014 18:29 2350058

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

Конкретно в моём случае необходимо сделать так чтобы текстовому документу присваивалось свойство "Только чтение"

Dodakaedr 11-05-2014 18:33 2350062

Цитата:

Цитата PRAVIY
Ребят а возможно ли сделать так чтобы распаковываемому файлу сразу задавалось оперделённое свойство.
Конкретно в моём случае необходимо сделать так чтобы текстовому документу присваивалось свойство "Только чтение" »

В секции Files нужному файлу допишите Attribs: readonly

habib2302 11-05-2014 19:48 2350090

Shift85, страница компонентов по прежнему осталась

PRAVIY 11-05-2014 19:49 2350091

Цитата:

Цитата Dodakaedr
В секции Files нужному файлу допишите Attribs: readonly »

Благодарю.

Shift85 11-05-2014 20:12 2350100

Цитата:

Цитата habib2302
страница компонентов по прежнему осталась »

habib2302, Дак отключить ее не судьба.

Код:

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID =wpSelectComponents)then
  Result:= True;
end;


Dodakaedr 11-05-2014 22:43 2350152

Как вручную можно создать такой компонент лист, как в секции [Components]?

saurn 12-05-2014 06:19 2350206

Цитата:

Цитата Dodakaedr
Как вручную можно создать такой компонент лист, как в секции [Components]? »

В папке примеров расширенной версии есть пример скрипта "Example_NewCheckListBox.iss", в нем содержится наглядный ответ на ваш вопрос.

Dodakaedr 12-05-2014 08:41 2350236

saurn, Как в секции [Files] указывать компонент?

Dodakaedr 12-05-2014 08:50 2350237

Вложений: 1
Пример

Антон_Мураткин@vk 12-05-2014 11:19 2350303

Доброе время суток.
Подскажите пожалуйста, есть проблемка в скрипте.
Прописываю в скрипте код:
Код:

[Run]
Filename: {src}\Redist\dxwebsetup.exe; Parameters: /q; StatusMsg: Установка
Filename: {src}\Redist\vcredist_x86.exe; Parameters: /q; StatusMsg: Установка Microsoft Visual;

По сути всё работает, но появляется установка этих программ по два раза. 1-ая установка идёт сама по себе даже если ты отменил установку этих програм а вот вторая установка программ уже как бы по этому коду который выше.

Если эту секцию Run убрать то вообще установка этих программ не осуществляется.

Как с этим бороться?


ЗЫ. Разобрался в чём было дело.

saurn 12-05-2014 19:58 2350557

Цитата:

Цитата Dodakaedr
Как в секции [Files] указывать компонент? »

Файлы указывать, как обычно. Устанавливать по результату чековой функции, где цифра - номер чекбокса в листе. Нумерация начинает с нуля.
Код:

[Files]
Source: compiler:Examples\Readme.txt; DestDir: {app}; Check: IsChecked(0)
Source: compiler:Examples\Readme.txt; DestDir: {app}; Check: IsChecked(1)

[Code]
//************************************************************************************//
function IsChecked(const Index: Integer): Boolean;
begin
    Result:= CheckListBox.Checked[Index]
end;
//***********************************************************************************//


Dodakaedr 13-05-2014 01:06 2350647

Помогите объединить:
читать дальше »
У меня в скрипте уже используется BeforeInstall: ChangeLabel('reg');, BeforeInstall: ChangeLabel('files'); и так далее...
надо объеденить это
Код:

[Registry]
; .ext1
Root: HKCR; Subkey: .ext1; ValueType: string; ValueName: ; ValueData: MyProgramFile1; Flags: uninsdeletevalue; Tasks: MostVideo\DiracVideo; BeforeInstall: BackupData('ext1')
Root: HKCR; Subkey: MyProgramFile1; ValueType: string; ValueName: ; ValueData: "My Program File ¹1"; Flags: uninsdeletekey; Tasks: MostVideo\DiracVideo
Root: HKCR; Subkey: MyProgramFile1\DefaultIcon; ValueType: string; ValueName: ; ValueData: {sys}\notepad.exe,0; Tasks: MostVideo\DiracVideo
Root: HKCR; Subkey: MyProgramFile1\shell\open\command; ValueType: string; ValueName: ; ValueData: """{sys}\notepad.exe"" ""%1"""; Tasks: MostVideo\DiracVideo
; .ext2
Root: HKCR; Subkey: .ext2; ValueType: string; ValueName: ; ValueData: MyProgramFile2; Flags: uninsdeletevalue; Tasks: MostVideo\AviVideo; BeforeInstall: BackupData('ext2')
Root: HKCR; Subkey: MyProgramFile2; ValueType: string; ValueName: ; ValueData: "My Program File ¹2"; Flags: uninsdeletekey; Tasks: MostVideo\AviVideo
Root: HKCR; Subkey: MyProgramFile2\DefaultIcon; ValueType: string; ValueName: ; ValueData: {sys}\notepad.exe,0; Tasks: MostVideo\AviVideo
Root: HKCR; Subkey: MyProgramFile2\shell\open\command; ValueType: string; ValueName: ; ValueData: """{sys}\notepad.exe"" ""%1"""; Tasks: MostVideo\AviVideo
; .ext3
Root: HKCR; Subkey: .ext3; ValueType: string; ValueName: ; ValueData: MyProgramFile3; Flags: uninsdeletevalue; Tasks: MostVideo\MP4Video; BeforeInstall: BackupData('ext3')
Root: HKCR; Subkey: MyProgramFile3; ValueType: string; ValueName: ; ValueData: "My Program File ¹3"; Flags: uninsdeletekey; Tasks: MostVideo\MP4Video
Root: HKCR; Subkey: MyProgramFile3\DefaultIcon; ValueType: string; ValueName: ; ValueData: {sys}\notepad.exe,0; Tasks: MostVideo\MP4Video
Root: HKCR; Subkey: MyProgramFile3\shell\open\command; ValueType: string; ValueName: ; ValueData: """{sys}\notepad.exe"" ""%1"""; Tasks: MostVideo\MP4Video

[ Code]
procedure BackupData(FileExt: String);
var
  OldValueData: string;
begin
  if RegKeyExists(HKCR, '.' + FileExt) then
    begin
      RegQueryStringValue(HKCR, '.' + FileExt, '', OldValueData);
      RegWriteStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData);
    end;
end;

procedure RestoreData(FileExt: String);
var
  OldValueData: string;
begin
  if RegKeyExists(HKCR, '.' + FileExt + '(backup)') then
    begin
      RegQueryStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData);
      RegWriteStringValue(HKCR, '.' + FileExt, '', OldValueData);
      RegDeleteKeyIncludingSubkeys(HKCR, '.' + FileExt + '(backup)');
    end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usPostUninstall then
    begin
      RestoreData('ext1');
      RestoreData('ext2');
      RestoreData('ext3');
    end;
end;

с этим
Код:


[Registry]
;video
Root: HKCU; SubKey: Software\Classes\WindowsPlayer.Video; ValueType: string; ValueData: WindowsPlayer.Video.File; BeforeInstall: ChangeLabel('reg'); Check: VideoCheck; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\Classes\WindowsPlayer.Video; ValueType: string; ValueName: Registered; ValueData: 3gp|asf|avchd|avi|avs|bink|cavsvideo|divx|dv|flv|hdv|matroska|m1v|m2v|m2ts|m4v|mkv|mod|mov|mp4|mpg|mpeg|mpegts|mpeg-ts|mts|rm|str|ts|tp|vcr|vob|wmv|webm|xmv; BeforeInstall: ChangeLabel('reg'); Check: VideoCheck; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\Classes\WindowsPlayer.Video; ValueType: dword; ValueName: Fill; ValueData: $00000000; BeforeInstall: ChangeLabel('reg'); Check: VideoCheck; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\Classes\WindowsPlayer.Video; ValueType: dword; ValueName: HQ; ValueData: $00000000; BeforeInstall: ChangeLabel('reg'); Check: VideoCheck; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\Classes\WindowsPlayer.Video; ValueType: dword; ValueName: LastX; ValueData: $000000d4; BeforeInstall: ChangeLabel('reg'); Check: VideoCheck; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\Classes\WindowsPlayer.Video; ValueType: dword; ValueName: LastY; ValueData: $0000008c; BeforeInstall: ChangeLabel('reg'); Check: VideoCheck; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\Classes\WindowsPlayer.Video; ValueType: dword; ValueName: AutoCheckUpdate; ValueData: $00000000; BeforeInstall: ChangeLabel('reg'); Check: VideoCheck; Flags: uninsdeletevalue uninsdeletekeyifempty
[ code]
procedure ChangeLabel(param:string);
begin
case param of
'files': NewStatusLabel.Caption:='Копирование файлов...';
'reg': NewStatusLabel.Caption:='Создание записи в реестре...';
'portable1': NewStatusLabel.Caption:='Распаковка файлов...';
'icon': NewStatusLabel.Caption:='Создание ярлыков...';
end;
end;

Как совместить BeforeInstall: BackupData('ext1') и BeforeInstall: ChangeLabel('reg');? Было бы здорово если б они были раздельно, потому что мой BeforeInstall используется в каждой сточке секции [Registry], а резерв создается целого ключа (тоисть одна сточка). Хотелось бы чтобы работал и ChangeLabel и BackupData.

Антон_Мураткин@vk 13-05-2014 03:40 2350661

Люди помогите пожалуйста, всю голову уже сломал как изменить удаление игры (Передвинуть прогресбар, вставить картинку и т.п) Только и нашёл в скрипте как поменять текст а где остальное не пойму Всё уже перепробовал в этом скрипте :sorry: А если чтото меняю в скрипте то какая нибудь ошибка вылазиет.
Вот ссылка на скрипт http://rghost.ru/55118585
Заранее благодарю!!!

PRAVIY 13-05-2014 08:58 2350690

Возникла проблемка при добавлении в скрипт установки DirectX чезер [code]
При компиляции ни на что не жалуется, но при установке выдаёт такую вот ошибку:
Цитата:

Command line option error. Type command/?for Help.

Вот эта часть скрипта отдельно:
читать дальше »
procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode:Integer;
begin
if CurStep = ssPostInstall then
begin
WizardForm.StatusLabel.Caption:='Èäåò îáíîâëåíèå DirectX ...';
WizardForm.StatusLabel.Font.Color:= ClBlack;
WizardForm.StatusLabel.Font.Name:= 'Arial';
WizardForm.StatusLabel.Font.Size:= 7
WizardForm.StatusLabel.Font.Style := [fsBold, fsItalic];
Exec(ExpandConstant('{src}\DirectX\DXSETUP.exe'), '/silent', ExpandConstant('{src}\DirectX'), SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
end;


А вот весь скрипт целиком:
читать дальше »

[Setup]
DiskSpanning=true
DiskSliceSize=1457664000
AppName=F.E.A.R - C.O.O.P
AppVerName=F.E.A.R - C.O.O.P
AppPublisher=R.G.COOP-MOD
AppPublisherURL=http://coop-land.ru/rookovodstva/2614-rukovodstvo-zapuska-fear-coop-po-seti.html
DefaultDirName=F.E.A.R - C.O.O.P
DefaultGroupName=F.E.A.R - C.O.O.P
AllowNoIcons=yes
OutputDir=D:\GAMES\SETUP\F.E.A.R - C.O.O.P [RePack]
OutputBaseFilename=F.E.A.R - C.O.O.P
SetupIconFile=D:\GAMES\F.E.A.R\icon.ico
Compression=lzma/ultra64
SolidCompression=true
WizardImageFile=IMG\Fon.bmp
WizardSmallImageFile=IMG\Shapka.bmp
InternalCompressLevel=ultra64

[Languages]
Name: russian; MessagesFile: compiler:Default.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: IMG\logo.bmp; Flags: dontcopy
Source: DLL\CallbackCtrl.dll; Flags: dontcopy
Source: IMG\splash.png; Flags: dontcopy
Source: DLL\isgsg.dll; Flags: dontcopy
Source: D:\GAMES\F.E.A.R\F.E.A.R - C.O.O.P.exe; DestDir: {app}; Flags: ignoreversion
;Source: D:\GAMES\SETUP\FEAR\MapList\[1] F.E.A.R. - C.O.O.P.txt; DestDir: {app}\CoopWarfare_User\ServerOptions; Attribs: ReadOnly; Flags: ignoreversion
;Source: D:\GAMES\SETUP\FEAR\MapList\[2] All Single Maps.txt; DestDir: {app}\CoopWarfare_User\ServerOptions; Attribs: ReadOnly; Flags: ignoreversion
;Source: D:\GAMES\SETUP\FEAR\MapList\[3] Coop-Warfare Mod.txt; DestDir: {app}\CoopWarfare_User\ServerOptions; Attribs: ReadOnly; Flags: ignoreversion
;Source: D:\GAMES\F.E.A.R\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
;Source: D:\GAMES\Monolith Productions\*; DestDir: C:\Users\Public\Documents; Flags: ignoreversion recursesubdirs createallsubdirs


[Icons]
Name: {group}\F.E.A.R - C.O.O.P; Filename: {app}\F.E.A.R - C.O.O.P.exe; WorkingDir: {app}
Name: {group}\Ðóêîâîäñòâî çàïóñêà F.E.A.R - C.O.O.P ïî ñåòè; Filename: http://coop-land.ru/rookovodstva/2614-rukovodstvo-zapuska-fear-coop-po-seti.html
Name: {group}\{cm:UninstallProgram,F.E.A.R - C.O.O.P}; Filename: {uninstallexe}
Name: {commondesktop}\F.E.A.R - C.O.O.P; Filename: {app}\F.E.A.R - C.O.O.P.exe; WorkingDir: {app}; Comment: Çàïóñòèòü êîîïåðàòèâíûé ðåæèì F.E.A.R.; Tasks: desktopicon



[CustomMessages]
russian.Error2=Óñòàíîâêà %nF.E.A.R - C.O.O.P%níå çàâåðøåíà.
russian.Error3=%nÂî âðåìÿ óñòàíîâêè ïðîèçîøëà îøèáêà, ïîæàëóéñòà îòêëþ÷èòå ñòîðîííèå ïðîãðàììû è ïîâòîðèòå ïîïûòêó óñòàíîâêè.%n%n%nÍàæìèòå «Çàâåðøèòü», ÷òîáû âûéòè.
russian.WelcomeLabel1=ÁÓÄÅÒ ÓÑÒÀÍÎÂËÅÍ%nÍÀ ÂÀØ ÊÎÌÏÜÞÒÅÐ
russian.FinisLabel1=ÓÑÏÅØÍÎ ÓÑÒÀÍÎÂËÅÍ%nÍÀ ÂÀØ ÊÎÌÏÜÞÒÅÐ

[code]
var
PageNameLabel, PageDescriptionLabel, WelcomeLabel1,WelcomeLabel2,FLabel1, FLabel2, WLabel1, WLabel2, WelcomeLabel4,FinishedHeadingLabel, FinishedHeadingLabel1,WelcomeLabel3: TLabel;

/////////////////////////////// ÔÎÍÎÂÎÅ ÈÇÎÁÐÀÆÅÍÈÅ ///////////////////////////////
procedure WizardImage();
begin
WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);

WelcomeLabel1:= TLabel.Create(WizardForm);
WelcomeLabel1.Left := ScaleX(17); //Ñëåâà
WelcomeLabel1.Top := ScaleY(179); //Ñâåðõó
WelcomeLabel1.Width := ScaleX(300); //Ïî øèðèíå
WelcomeLabel1.Height := ScaleY(300); //Ïî âûñòîòå
WelcomeLabel1.AutoSize := False;
WelcomeLabel1.WordWrap := True;
WelcomeLabel1.Alignment := taCenter;
WelcomeLabel1.Font.Size := 17;
WelcomeLabel1.Font.Color:= clBlack;
WelcomeLabel1.Font.Style:= [fsBold]
WelcomeLabel1.Font.Name:= 'Arial Bold'
WelcomeLabel1.ShowAccelChar := False;
WelcomeLabel1.Caption :=ExpandConstant('{cm:WelcomeLabel1}');
WelcomeLabel1.Transparent := True;
WelcomeLabel1.Parent := WizardForm.WelcomePage;

WLabel1 := TLabel.Create(WizardForm);
WLabel1.Left := ScaleX(15);
WLabel1.Top := ScaleY(177);
WLabel1.Width := ScaleX(300);
WLabel1.Height := ScaleY(300);
WLabel1.AutoSize := False;
WLabel1.WordWrap := True;
WLabel1.Alignment := taCenter;
WLabel1.Font.Size := 17;
WLabel1.Font.Color:= clWhite;
WLabel1.Font.Style:= [fsBold]
WLabel1.Font.Name:= 'Arial Bold'
WLabel1.ShowAccelChar := False;
WLabel1.Caption :=ExpandConstant('{cm:WelcomeLabel1}');
WLabel1.Transparent := True;
WLabel1.Parent := WizardForm.WelcomePage;

FinishedHeadingLabel:= TLabel.Create(WizardForm);
FinishedHeadingLabel.Left := ScaleX(17);
FinishedHeadingLabel.Top := ScaleY(179);
FinishedHeadingLabel.Width := ScaleX(300);
FinishedHeadingLabel.Height := ScaleY(300);
FinishedHeadingLabel.AutoSize := False;
FinishedHeadingLabel.WordWrap := True;
FinishedHeadingLabel.Alignment := taCenter;
FinishedHeadingLabel.Font.Size := 17;
FinishedHeadingLabel.Font.Color:= clBlack;
FinishedHeadingLabel.Font.Style:= [fsBold]
FinishedHeadingLabel.Font.Name:= 'Arial Bold'
FinishedHeadingLabel.ShowAccelChar := False;
FinishedHeadingLabel.Caption :=ExpandConstant('{cm:FinisLabel1}');
FinishedHeadingLabel.Transparent := True;
FinishedHeadingLabel.Parent := WizardForm.FinishedPage;

FLabel1 := TLabel.Create(WizardForm);
FLabel1.Left := ScaleX(15);
FLabel1.Top := ScaleY(177);
FLabel1.Width := ScaleX(300);
FLabel1.Height := ScaleY(300);
FLabel1.AutoSize := False;
FLabel1.Alignment := taCenter;
FLabel1.WordWrap := True;
FLabel1.Font.Size := 17;
FLabel1.Font.Name := 'Arial Bold'
FLabel1.Font.Color:= clWhite;
FLabel1.Font.Style:= [fsBold]
FLabel1.ShowAccelChar := False;
FLabel1.Caption := ExpandConstant('{cm:FinisLabel1}');
FLabel1.Transparent := True;
FLabel1.Parent := WizardForm.FinishedPage;

WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;

WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
end;
/////////////////////////////////////////Ô.È.///////////////////////////////////////////



///////////////////////////////// ÈÇÎÁÐÀÆÅÍÈÅ ØÀÏÊÈ ////////////////////////////////////
procedure WizardSmallImage();
begin
WizardForm.WizardSmallBitmapImage.SetBounds(ScaleX(0), ScaleY(0), WizardForm.MainPanel.Width, WizardForm.MainPanel.Height);

PageNameLabel:= TLabel.Create(WizardForm)
with WizardForm.PageNameLabel do
PageNameLabel.SetBounds(Left, Top, Width, Height);
PageNameLabel.Transparent:= True;
PageNameLabel.Font:= WizardForm.PageNameLabel.Font;
PageNameLabel.Font.Color:= clblack;
PageNameLabel.Parent:= WizardForm.MainPanel;

PageDescriptionLabel:= TLabel.Create(WizardForm);
with PageDescriptionLabel do
begin
Left:= WizardForm.PageDescriptionLabel.Left-12;
Top:= WizardForm.PageDescriptionLabel.Top;
Height:= WizardForm.PageDescriptionLabel.Height;
Width:= ScaleX(280);
AutoSize:= False;
WordWrap:= True;
Font.Name:= WizardForm.PageDescriptionLabel.Font.Name;
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;

WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
end;
/////////////////////////////////////////È.Ø.///////////////////////////////////////////



////////////////////////////////// ÂÑÏËÛÂÀÞÙÅÅ ËÎÃÎ ////////////////////////////////////
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure Splash();
begin
ExtractTemporaryFile('Splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);
end;
/////////////////////////////////////////Â.Ë.///////////////////////////////////////////



////////////////////////////////// ÊËÈÊÀÁÅËÜÍÎÅ ËÎÃÎ ///////////////////////////////////
procedure LogoOnClick(Sender: TObject);
var ResCode: Integer;
begin
ShellExec('', 'http://coop-land.ru/rookovodstva/2614-rukovodstvo-zapuska-fear-coop-po-seti.html', '' , '', SW_SHOW, ewNoWait, ResCode)
end;

procedure Logo();
var
BtnPanel: TPanel;
BtnImage: TBitmapImage;
begin
ExtractTemporaryFile('logo.bmp')

BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=20
Top:=325
Width:=173
Height:=26
Cursor:=crHand
OnClick:=@logoOnClick
Parent:=WizardForm
end
BtnImage:=TBitmapImage.Create(WizardForm)
with BtnImage do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\logo.bmp')
Parent:=BtnPanel
end
end;
/////////////////////////////////////////Ê.Ë.///////////////////////////////////////////



procedure InitializeWizard;
begin
Splash();
Logo();
WizardImage();
WizardSmallImage();
WizardForm.CancelButton.BringToFront;
end;



/////////////////////////////////////////Äîïîëíèòåëüíîå ÏÎ.///////////////////////////////////////////

procedure CurStepChanged(CurStep: TSetupStep);
var
ResultCode:Integer;
begin
if CurStep = ssPostInstall then
begin
WizardForm.StatusLabel.Caption:='Èäåò îáíîâëåíèå DirectX ...';
WizardForm.StatusLabel.Font.Color:= ClBlack;
WizardForm.StatusLabel.Font.Name:= 'Arial';
WizardForm.StatusLabel.Font.Size:= 7
WizardForm.StatusLabel.Font.Style := [fsBold, fsItalic];
Exec(ExpandConstant('{src}\DirectX\DXSETUP.exe'), '/silent', ExpandConstant('{src}\DirectX'), SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
end;
/////////////////////////////////////////Ê.Ë.///////////////////////////////////////////


Помогите пожалуйста если кто знает в чём может заключаться проблемма :blush2:

ПС
В папке лежит DXWEBSETUP.exe, но он переиминован в DXSETUP.exe

saurn 13-05-2014 09:04 2350692

PRAVIY, вэб-установщик директа не поддерживает параметр /silent, и вообще какие бы то нибыло параметры тихой установки.

PRAVIY 13-05-2014 09:11 2350694

Цитата:

Цитата saurn
вэб-установщик директа не поддерживает параметр /silent, и вообще какие бы то нибыло параметры тихой установки. »

Ясно, а не подскажешь где можно скачать последнюю версию обычного инсталлятора DirectX? А-то нашёл только эту, но она похоже устаревшая..

saurn 13-05-2014 09:22 2350699

PRAVIY, http://www.microsoft.com/en-us/downl...s.aspx?id=8109

PRAVIY 13-05-2014 09:25 2350700

Цитата:

Цитата saurn
http://www.microsoft.com/en-us/downl...s.aspx?id=8109 »

Благодарю.

Цитата:

Цитата saurn
не поддерживает параметр /silent, и вообще какие бы то нибыло параметры тихой установки[/post]

А можно ли заменить этот параметр на тот который будет поддерживаться веб-установочником?

saurn 13-05-2014 09:30 2350705

Цитата:

Цитата PRAVIY
А можно ли заменить этот параметр на тот который будет поддерживаться веб-установочником? »

/Q, как вариант. А вообще, запустите установщик с параметром /? и увидите, какие параметры командной строки он поддерживает.

PRAVIY 13-05-2014 09:39 2350711

saurn, Большое спасибо за помощь!

Dodakaedr 13-05-2014 12:20 2350798

Как в этом коде указать HKU\{code:UsSID}\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts?
Код:

procedure BackupData(FileExt: String);
var
  OldValueData: string;
begin
  if RegKeyExists(HKCR, '.' + FileExt) then
    begin
      RegQueryStringValue(HKCR, '.' + FileExt, '', OldValueData);
      RegWriteStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData);
    end;
end;

procedure RestoreData(FileExt: String);
var
  OldValueData: string;
begin
  if RegKeyExists(HKCR, '.' + FileExt + '(backup)') then
    begin
      RegQueryStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData);
      RegWriteStringValue(HKCR, '.' + FileExt, '', OldValueData);
      RegDeleteKeyIncludingSubkeys(HKCR, '.' + FileExt + '(backup)');
    end;
end;


Антон_Мураткин@vk 14-05-2014 08:02 2351194

Цитата Антон_Мураткин@vk:
Люди помогите пожалуйста, всю голову уже сломал как изменить удаление игры (Передвинуть прогресбар, вставить картинку и т.п) Только и нашёл в скрипте как поменять текст а где остальное не пойму Всё уже перепробовал в этом скрипте А если чтото меняю в скрипте то какая нибудь ошибка вылазиет.
Вот ссылка на скрипт http://rghost.ru/55118585
Заранее благодарю!!! »
Не ужели не кто не подскажет?

И можно ли ещё сделать текст с глянцевым эффектом?

Dodakaedr 14-05-2014 11:27 2351257

Цитата:

Цитата Антон_Мураткин@vk
а где остальное не пойму »

Вот здесь http://rghost.ru/55144860 :)

Антон_Мураткин@vk 14-05-2014 16:26 2351353

Цитата:

Цитата Dodakaedr
Вот здесь http://rghost.ru/55144860 »

:durak: Это я и сам знаю что где то есть в этом скрипте. Мне нужно узнать где именно это менять.

Shift85 14-05-2014 16:38 2351363

Цитата:

Цитата Антон_Мураткин@vk
Передвинуть прогресбар »

Антон_Мураткин@vk, Примерно здесь.

Код:

ISDoneProgressBar1:=ImgPBCreate(WizardForm.Handle, ExpandConstant('{tmp}\pbbkg.png'), ExpandConstant('{tmp}\pb.png'),114,244,580, 39);

Dodakaedr 14-05-2014 16:42 2351365

Цитата:

Цитата Антон_Мураткин@vk
Это я и сам знаю что где то есть в этом скрипте. Мне нужно узнать где именно это менять. »

Вы проверяли? Я уже сделал это. Обратите внимание на секцию [Files], функцию InitializeUninstall и процедуру InitializeUninstallProgressForm

Антон_Мураткин@vk 14-05-2014 18:12 2351421

Цитата:

Цитата Dodakaedr
Вы проверяли? Я уже сделал это. Обратите внимание на секцию [Files], функцию InitializeUninstall и процедуру InitializeUninstallProgressForm »

Выдаёт ошибку http://i63.fastpic.ru/big/2014/0514/...2add63d582.jpg Может конечно я что то пропустил. Но не могли бы вы поменить как нибуть в скрипте что и где Вы добавляли.Заранее благодарю.

Цитата:

Цитата Shift85
Примерно здесь. »

А в каком скрипте это находится? Нашёл 2 шт но это меняется процедура установки. Где эти строчки находятся?

Dodakaedr 14-05-2014 18:26 2351429

Антон_Мураткин@vk, эта ошибка означает что нету файла botva2.dll во временной папке. Посмотрите по внимательней скрипт который я вам дал и я писал на что надо обратить внимание
Цитата:

на секцию [Files], функцию InitializeUninstall и процедуру InitializeUninstallProgressForm

Антон_Мураткин@vk 14-05-2014 18:34 2351432

Dodakaedr, Всё есть. Сейчас всё переделал Полоса прогресбара только изменилась и опять скрина нету

Dodakaedr, Вот это менять всё в главном скрипте?
Цитата:

Цитата Dodakaedr
на секцию [Files], функцию InitializeUninstall и процедуру InitializeUninstallProgressForm »


Dodakaedr 14-05-2014 18:49 2351439

Антон_Мураткин@vk, У меня все работает

Цитата:

Цитата Антон_Мураткин@vk
Вот это менять всё в главном скрипте? »

Да

Антон_Мураткин@vk 14-05-2014 19:01 2351449

Цитата:

Цитата Антон_Мураткин@vk
и процедуру InitializeUninstallProgressForm »

А этого нету в главном скрипте

Dodakaedr 14-05-2014 19:07 2351453

Цитата:

Цитата Антон_Мураткин@vk
А этого нету в главном скрипте »

Есть перед procedure HideComponents

Антон_Мураткин@vk 14-05-2014 19:12 2351455

Dodakaedr, Всё изменил, но у меня выходит ошибка такая же как кидал скриншот

Dodakaedr, Обозначь в скрипте что и где менять пожалуйста

Dodakaedr 14-05-2014 19:27 2351466

Антон_Мураткин@vk, держите

Антон_Мураткин@vk 14-05-2014 20:19 2351485

Dodakaedr, я хз из-за чего но теперь ошибки нет но и скин не появляется а просто серый экран

Антон_Мураткин@vk 14-05-2014 20:46 2351495

Разобрался из-за чего такое было. Стандартные картинки работают которые 580-390 а вставляю свои картинки 700-400 не работает картинка кроме скина png.

Dodakaedr, Как изменить под свои скины и картинки? Разрешение в скрипте поменял так - же и картинки но это не помогает. Подскажи пожалуйста

Kashtan007 14-05-2014 20:47 2351496

Всем привет ребята.
Возникла такая проблема.
В установщике используется страница Components и Tasks. Но Components находится в нестандартном положении (т.е. по нажатию кнопки внизу) Но из-за этого страница компонентов переносится вниз. Возможно ли как-то. Иметь в установщике 2 страницы компонентов? Одна внизу при нажатии кнопки, вторая на странице Components.
Прилагаю скрипт и скриншоты.
Скрипт
Скриншоты


Прошу помочь мне решить эту проблему. Заранее спасибо!

Dodakaedr 14-05-2014 21:15 2351512

Цитата:

Цитата Антон_Мураткин@vk
Разобрался из-за чего такое было. Стандартные картинки работают которые 580-390 а вставляю свои картинки 700-400 не работает картинка кроме скина png.
Dodakaedr, Как изменить под свои скины и картинки? Разрешение в скрипте поменял так - же и картинки но это не помогает. Подскажи пожалуйста »

Код:

ImgLoad(UninstallProgressForm.Handle,ExpandConstant('{tmp}\Skin.jpg'),0,0,548,368,true,true);
548,368 это разрешение картинки в деинсталяторе
Код:

I1:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\I1.jpg'),ScaleX(25), ScaleY(20),ScaleX(530), ScaleY(313),false,True);
  i2:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\I2.jpg'),ScaleX(25), ScaleY(20),ScaleX(530), ScaleY(313),false,True);
  i3:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\I3.jpg'),ScaleX(25), ScaleY(20),ScaleX(530), ScaleY(313),false,True);
  i4:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\I4.jpg'),ScaleX(25), ScaleY(20),ScaleX(530), ScaleY(313),false,True);
  i5:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\I5.jpg'),ScaleX(25), ScaleY(20),ScaleX(530), ScaleY(313),false,True);
  i6:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\I6.jpg'),ScaleX(25), ScaleY(20),ScaleX(530), ScaleY(313),false,True);

ScaleX(530), ScaleY(313) это разрешение картинок в инсталяторе

Dodakaedr 14-05-2014 21:32 2351521

Цитата:

Цитата Kashtan007
Одна внизу при нажатии кнопки, вторая на странице Components. »

Как-то так:
читать дальше »
Код:

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

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"


[Files]
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "TextRussian.isl"; Check: IsComponent(1)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "TextEnglish.isl"; Check: IsComponent(2)
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "VoiceRussian.isl"; Check: IsComponent(4)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "VoiceEnglish.isl"; Check: IsComponent(5)

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Дополнительное по; Types: full;
Name: text\DirectX; Description: DirectX 9;
Name: text\Visual; Description: Microsoft Visual C++;

[CustomMessages]
RU.CompSubtitlesLng=Язык субтитров
RU.CompVoiceLng=Язык озвучки
RU.CompRussian=Русский
RU.CompEnglish=Английский


[ code]
var
Flag: Boolean;
SettingButton: TButton;
ComponentsPage: TWizardPage;
SelectComponentsLabel: TNewStaticText;
ComponentsList: TNewCheckListBox;

procedure HideShowOnClick(Sender: TObject);
begin
if Flag = False then begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(360);
Flag:= True;
SettingButton.Caption:= '[]';
end else begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(450);
Flag:= False;
SettingButton.Caption:= '[]';
end;
end;

procedure RedesignWizardForm;
begin
  SelectComponentsLabel := TNewStaticText.Create(WizardForm);
  with SelectComponentsLabel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(42));
    AutoSize := False;
    WordWrap := True;
    Caption := SetupMessage(msgSelectComponentsLabel2);
  end;

  ComponentsList := TNewCheckListBox.Create(WizardForm);
  with ComponentsList do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(0), ScaleY(61), ScaleX(417), ScaleY(169));
    AddCheckBox(CustomMessage('CompSubtitlesLng'), '', 0, True, False, False, True, nil);
      AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);
      AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);
    AddCheckBox(CustomMessage('CompVoiceLng'), '', 0, True, False, False, True, nil);
      AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);
      AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);
  end;
end;

function IsComponent(CompIndex: Integer): Boolean;
var
  i: Integer;
begin
  Result := False;
  for i := 0 to ComponentsList.ItemCount - 1 do
  begin
    if CompIndex <= (ComponentsList.ItemCount - 1) then
      Result := ComponentsList.Checked[CompIndex];
  end;
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
SettingButton:= TButton.Create(WizardForm);
SettingButton.SetBounds(ScaleX(10),ScaleY(325), ScaleX(30), ScaleY(30))
SettingButton.Caption:= '[]';
SettingButton.OnClick:= @HideShowOnClick;
SettingButton.Parent:= WizardForm;
Flag:=True;
with WizardForm do begin
ComponentsList.Parent:= WizardForm;
WizardForm.ComponentsList.Checked[1]:=True
WizardForm.ComponentsList.Checked[2]:=True
WizardForm.ComponentsList.Top := ScaleY(370);
WizardForm.ComponentsList.Height := ScaleY(55);
WizardForm.ComponentsList.Left := ScaleY(40);
WizardForm.ComponentsList.Color := clMenu;
end;
end;


Антон_Мураткин@vk 14-05-2014 21:37 2351523

Dodakaedr, Это я знаю. Я всё это поменял, но при удаление игры фон больше чем картинка хотя и стоит 700x400 вот скрин http://i64.fastpic.ru/big/2014/0514/...9b0491f1ad.jpg

Dodakaedr, Может ты знаешь где разрешения удаления поменять т.к картинка в конце удаления 700-400 а фон под картинкой больше почему то. Где это ещё можно поменять?

Kashtan007 14-05-2014 21:46 2351525

Еще небольшой вопросик. Хочу сделать на каждой странице установщика разную шапку. Ибо если использовать функцию BitImage то будет одна и та же на всех страницах. Какой код нужно прописывать чтобы для каждой страницы разную шапку.
Если не ошибаюсь то есть код на отключение изображения на определенных страницах. Вот именно это мне нужно.

P.S. Dodakaedr благодарю за помощь в с компонент листами.

Dodakaedr 14-05-2014 21:54 2351530

Цитата:

Цитата Антон_Мураткин@vk
Dodakaedr, Может ты знаешь где разрешения удаления поменять т.к картинка в конце удаления 700-400 а фон под картинкой больше почему то. Где это ещё можно поменять? »

В модуле Uninstall.iss, но как видите она не больше ваших картинок
Код:

procedure InitializeUninstallProgressForm;
begin
  UninstallProgressForm.ClientWidth:=550; //ширина
  UninstallProgressForm.ClientHeight:=440;
// высота
  UninstallProgressForm.OuterNotebook.Hide;
  UninstallProgressForm.InnerNotebook.Hide;
  UninstallProgressForm.Bevel.Hide;
  UninstallProgressForm.Center;

Цитата:

Цитата Kashtan007
Если не ошибаюсь то есть код на отключение изображения на определенных страницах. Вот именно это мне нужно. »

читать дальше »
Код:

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

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"


[Files]
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "TextRussian.isl"; Check: IsComponent(1)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "TextEnglish.isl"; Check: IsComponent(2)
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "VoiceRussian.isl"; Check: IsComponent(4)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "VoiceEnglish.isl"; Check: IsComponent(5)

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Дополнительное по; Types: full;
Name: text\DirectX; Description: DirectX 9;
Name: text\Visual; Description: Microsoft Visual C++;

[CustomMessages]
RU.CompSubtitlesLng=Язык субтитров
RU.CompVoiceLng=Язык озвучки
RU.CompRussian=Русский
RU.CompEnglish=Английский


[ code]
var
Flag: Boolean;
SettingButton: TButton;
ComponentsPage: TWizardPage;
SelectComponentsLabel: TNewStaticText;
ComponentsList: TNewCheckListBox;

procedure HideShowOnClick(Sender: TObject);
begin
if Flag = False then begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(360);
Flag:= True;
SettingButton.Caption:= '[]';
end else begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(450);
Flag:= False;
SettingButton.Caption:= '[]';
end;
end;

procedure RedesignWizardForm;
begin
  SelectComponentsLabel := TNewStaticText.Create(WizardForm);
  with SelectComponentsLabel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(42));
    AutoSize := False;
    WordWrap := True;
    Caption := SetupMessage(msgSelectComponentsLabel2);
  end;

  ComponentsList := TNewCheckListBox.Create(WizardForm);
  with ComponentsList do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(0), ScaleY(61), ScaleX(417), ScaleY(169));
    AddCheckBox(CustomMessage('CompSubtitlesLng'), '', 0, True, False, False, True, nil);
      AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);
      AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);
    AddCheckBox(CustomMessage('CompVoiceLng'), '', 0, True, False, False, True, nil);
      AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);
      AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);
  end;
end;

function IsComponent(CompIndex: Integer): Boolean;
var
  i: Integer;
begin
  Result := False;
  for i := 0 to ComponentsList.ItemCount - 1 do
  begin
    if CompIndex <= (ComponentsList.ItemCount - 1) then
      Result := ComponentsList.Checked[CompIndex];
  end;
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
SettingButton:= TButton.Create(WizardForm);
SettingButton.SetBounds(ScaleX(10),ScaleY(325), ScaleX(30), ScaleY(30))
SettingButton.Caption:= '[]';
SettingButton.OnClick:= @HideShowOnClick;
SettingButton.Parent:= WizardForm;
Flag:=True;
with WizardForm do begin
ComponentsList.Parent:= WizardForm;
WizardForm.ComponentsList.Checked[1]:=True
WizardForm.ComponentsList.Checked[2]:=True
WizardForm.ComponentsList.Top := ScaleY(370);
WizardForm.ComponentsList.Height := ScaleY(55);
WizardForm.ComponentsList.Left := ScaleY(40);
WizardForm.ComponentsList.Color := clMenu;
end;
end;

//отключение/включение изображения
procedure CurPageChanged(CurPageID: Integer);
begin
 case CurPageID of
 wpSelectDir:
begin
WizardForm.WizardSmallBitmapImage.Hide;
end;
wpSelectComponents:
begin
WizardForm.WizardSmallBitmapImage.Show;
end;
wpReady:
WizardForm.WizardSmallBitmapImage.Hide;
end;
end;



Значения PageID для определенных страниц мастера:
wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished

Kashtan007 14-05-2014 22:12 2351538

Dodakaedr, спасибо за помощь.

Есть еще вопрос по поводу компонент листов.
Вообщем дело такое... Чтобы добавлять компоненты в нижний компонент лист можно пользоваться секцией Components. А чтобы добавлять на основной компонент лист который находится на странице Components нужно уже компоненты писать не в секции Components а в Code. Возможно ли заменить это местами? Т.е. чтобы в нижний компонент лист можно было добавлять компоненты через код (ибо там будет всего 3-4 файла, чтобы не заморачиватся). А на компонент лист который находится на основной странице компонентов, компоненты можно было бы добавить через секцию Components.
Нужно это потому что в нижнем компонент листе нужно всего лишь 3-4 файла, а на основном около 100. А через секцию Components добавлять компоненты легче чем через секцию Code.
Заранее спасибо за ответ!

Dodakaedr 14-05-2014 22:26 2351548

Цитата:

Цитата Kashtan007
Т.е. чтобы в нижний компонент лист можно было добавлять компоненты через код (ибо там будет всего 3-4 файла, чтобы не заморачиватся). А на компонент лист который находится на основной странице компонентов, компоненты можно было бы добавить через секцию Components. »

читать дальше »
Код:

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

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"


[Files]
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "TextRussian.isl"; Check: IsComponent(1)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "TextEnglish.isl"; Check: IsComponent(2)
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "VoiceRussian.isl"; Check: IsComponent(4)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "VoiceEnglish.isl"; Check: IsComponent(5)

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Дополнительное по; Types: full;
Name: text\DirectX; Description: DirectX 9;
Name: text\Visual; Description: Microsoft Visual C++;

[CustomMessages]
RU.CompSubtitlesLng=Язык субтитров
RU.CompVoiceLng=Язык озвучки
RU.CompRussian=Русский
RU.CompEnglish=Английский


[ code]
var
Flag: Boolean;
SettingButton: TButton;
ComponentsPage: TWizardPage;
ComponentsList: TNewCheckListBox;

procedure HideShowOnClick(Sender: TObject);
begin
if Flag = False then begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(360);
Flag:= True;
SettingButton.Caption:= '[]';
end else begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(500);
Flag:= False;
SettingButton.Caption:= '[]';
end;
end;

function IsComponent(CompIndex: Integer): Boolean;
var
  i: Integer;
begin
  Result := False;
  for i := 0 to ComponentsList.ItemCount - 1 do
  begin
    if CompIndex <= (ComponentsList.ItemCount - 1) then
      Result := ComponentsList.Checked[CompIndex];
  end;
end;

procedure InitializeWizard();
begin
SettingButton:= TButton.Create(WizardForm);
SettingButton.SetBounds(ScaleX(10),ScaleY(325), ScaleX(30), ScaleY(30))
SettingButton.Caption:= '[]';
SettingButton.OnClick:= @HideShowOnClick;
SettingButton.Parent:= WizardForm;
Flag:=True;

ComponentsList := TNewCheckListBox.Create(WizardForm);
  with ComponentsList do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(40), ScaleY(370), ScaleX(417), ScaleY(100));
    AddCheckBox(CustomMessage('CompSubtitlesLng'), '', 0, True, False, False, True, nil);
      AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);
      AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);
    AddCheckBox(CustomMessage('CompVoiceLng'), '', 0, True, False, False, True, nil);
      AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);
      AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
 case CurPageID of
 wpSelectDir:
begin
WizardForm.WizardSmallBitmapImage.Hide;
end;
wpSelectComponents:
begin
WizardForm.WizardSmallBitmapImage.Show;
end;
wpReady:
WizardForm.WizardSmallBitmapImage.Hide;
end;
end;


Антон_Мураткин@vk 14-05-2014 22:35 2351551

Цитата:

Цитата Dodakaedr
В модуле Uninstall.iss, но как видите она не больше ваших картинок »

В Uninstall.iss вообще нечего не менял но на скине видно что с права полоса и снизу. Из-за чего же это может быть?

Dodakaedr 14-05-2014 22:41 2351555

Цитата:

Цитата Антон_Мураткин@vk
В Uninstall.iss вообще нечего не менял но на скине видно что с права полоса и снизу. Из-за чего же это может быть? »

Не знаю, может из-за скина, а может попробуйте отцентрировать свое изображение.

Антон_Мураткин@vk 14-05-2014 23:20 2351576

Dodakaedr, Всё разобрался. Только почему так получается фиг его знает. Сделал ширина - 693 высота 372 и всё стало нормально и разрешение исталятора 700x400.

Просто мистика какая та.

Dodakaedr, Огромное спасибо за помощь. :up:

Dodakaedr, И ещё вопросик, можно ли сделать текст с глянцевым эффектом?
Может знаешь?

Dodakaedr 14-05-2014 23:27 2351579

Цитата:

Цитата Антон_Мураткин@vk
Dodakaedr, И ещё вопросик, можно ли сделать текст с глянцевым эффектом?
Может знаешь? »

Не знаю, но можете попробувать создать изображение с текстом с глянцевым эффектом на прозрачном фоне и сохранить в .png формате и потом через ботву вставить. Как-то так :)

Антон_Мураткин@vk 14-05-2014 23:35 2351581

Цитата:

Цитата Dodakaedr
создать изображение с текстом с глянцевым эффектом на прозрачном фоне и сохранить в .png »

Так текста уж много. Ладно что то другое поищу.

Dodakaedr 15-05-2014 09:49 2351684

Цитата:

Цитата Dodakaedr
Как в этом коде указать HKU\{code:UsSID}\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts?

Код:

procedure BackupData(FileExt: String);
var
 OldValueData: string;
begin
 if RegKeyExists(HKCR, '.' + FileExt) then
 begin
 RegQueryStringValue(HKCR, '.' + FileExt, '', OldValueData);
 RegWriteStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData);
 end;
end;
procedure RestoreData(FileExt: String);
var
 OldValueData: string;
begin
 if RegKeyExists(HKCR, '.' + FileExt + '(backup)') then
 begin
 RegQueryStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData);
 RegWriteStringValue(HKCR, '.' + FileExt, '', OldValueData);
 RegDeleteKeyIncludingSubkeys(HKCR, '.' + FileExt + '(backup)');
 end;
end;

»

С этим решено, теперь подскажите как сделать чтобы код бекапил полностью ключ со всеми значениями и подключами, потому что этот код бекапит только значение ключа.

saurn 15-05-2014 15:27 2351776

Цитата:

Цитата Dodakaedr
ключ со всеми значениями и подключами »

Предлагаю, так:
читать дальше »
Код:

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; AfterInstall: IsRegExport(); Flags: ignoreversion;


[code]
procedure IsRegExport();
var
    i: Integer;
    RegKey: String;
begin
    RegKey := 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup 5_is1';

    Exec( ExpandConstant( '{win}\regedit.exe' ), '-ea export.reg ' + AddQuotes( RegKey ), ExpandConstant( '{app}' ), SW_HIDE, ewWaitUntilTerminated, i );
end;


procedure IsRegImport();
var
    i: Integer;
    RegFile: String;
begin
    RegFile:= ExpandConstant('{app}\export.reg');

    if FileExists(RegFile) <> False then
      Exec( 'regedit.exe', ' /s ' + AddQuotes( RegFile ), ExpandConstant( '{win}' ), SW_HIDE, ewWaitUntilTerminated, i );
end;


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
    case CurUninstallStep of
        usUninstall: IsRegImport();
    end;
end;


Dodakaedr 15-05-2014 18:43 2351844

Цитата:

Цитата saurn
Предлагаю, так: »

А как больше веток добавить? Так не работает:
Код:

procedure IsRegExport();
var
    i: Integer;
    RegKey: String;
begin
    RegKey := 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3';
    RegKey := 'HKEY_CLASSES_ROOT\.mp3';
    Exec( ExpandConstant( '{win}\regedit.exe' ), '-ea export.reg ' + AddQuotes( RegKey ), ExpandConstant( '{app}' ), SW_HIDE, ewWaitUntilTerminated, i );
end;

И то создал бекап ключа HKEY_CLASSES_ROOT\.mp3 а при удалении программы не восстанавливает.

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

Shift85 15-05-2014 18:44 2351846

Цитата:

Цитата Антон_Мураткин@vk
можно ли сделать текст с глянцевым эффектом? »

Антон_Мураткин@vk, Нет. Вот попробуй модуль для текста.http://rghost.ru/55185131 :ok:

Kashtan007 15-05-2014 19:05 2351856

Привет всем. Как сделать чтобы шапка установщика на каждой странице была разная. Разные шапки получилось поставить только на начальной и финишной странице. А на страницах: каталог, компонент лист и т.д. ставилась одна общая шапка.
Ставил изображения через Редактор форм в расширенном Инно. Добавлял BitmapImage.
Возможно ли как-то сделать на этих страницах разные шапки. Если да, то как? Заранее спасибо!

audiofeel 15-05-2014 19:08 2351857

привет всем !!
не отображается StatusPanel.png и StatusPanel2.png
подскажите что и где не так
читать дальше »
#include "iss\b2p.iss"
#include "iss\STS_module.iss"

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[Files]
Source: Dll\*; Flags: dontcopy
Source: Files\*; Flags: dontcopy;

[_code]
var
MyFont: TFont;
Form: LongInt;

procedure CreateForm;
begin
Form := ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\Form.png'), ScaleX(0), ScaleY(0), WizardForm.ClientWidth, WizardForm.ClientHeight, False, True);
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('botva2.dll')
ExtractTemporaryFile('b2p.dll')
ExtractTemporaryFile('CallbackCtrl.dll')
ExtractTemporaryFile('StatusPanel.png');
ExtractTemporaryFile('StatusPanel2.png');

WizardForm.Width:= 790;
WizardForm.InnerNotebook.Hide;
WizardForm.OuterNotebook.Hide;

MyFont:= TFont.Create
MyFont.Size:=8;
// | отключаем функцию сортировки страниц
STS_Init(ExpandConstant('{tmp}\StatusPanel.png'), ExpandConstant('{tmp}\StatusPanel.png'), 0, 20, WizardForm.Width, 20, MyFont, False)
//Если вы отключили функцию сортировки страниц, то должны добавлять страницы
//которые будут использоваться в панели, строго по порядку их показывания
//Иначе панель будет неправильно отображать текущий статус
//Pagename PageID
STS_AddStage(CustomMessage('STSWelcomePage'), wpWelcome); //добавляет строку с названием страницы в панель
STS_AddStage(CustomMessage('STSDirEditPage'), wpSelectDir);
STS_AddStage(CustomMessage('STSReadyPage'), wpReady);
STS_AddStage(CustomMessage('STSInstallingPage'), wpInstalling);
STS_AddStage(CustomMessage('STSFinishedPage'), wpFinished);
STS_SetColor(clGray, clWhite)
STS_CreatePanel();
CreateForm;
ImgApplyChanges(WizardForm.Handle);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
STS_UpdateStages(CurPageID)
end;

procedure DeinitializeSetup();
begin
gdipShutdown
end;

Shift85 15-05-2014 20:07 2351871

audiofeel, Юзай.http://rghost.ru/55188772

audiofeel 15-05-2014 20:17 2351878

Shift85,
:cool:
этот пример я и взял, только там "старая" ботва" а как быть с "новой", то есть b2p.dll и тд
вот = http://file.sampo.ru/w8nrsk/

Shift85 15-05-2014 20:30 2351888

Цитата:

Цитата audiofeel
а как быть с "новой", то есть b2p.dll »

audiofeel, Бес понятия. Придеться походу остаться на botva2.dll. :(

Dodakaedr 15-05-2014 20:59 2351896

Цитата:

Цитата Kashtan007
Ставил изображения через Редактор форм в расширенном Инно. Добавлял BitmapImage.
Возможно ли как-то сделать на этих страницах разные шапки. Если да, то как? Заранее спасибо! »

Приблизительно так:
читать дальше »
Код:

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

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"


[Files]

DestName: "WizardForm.BitmapImage1.bmp"; Source: "1.bmp"; Flags: dontcopy solidbreak
DestName: "WizardForm.BitmapImage2.bmp"; Source: "2.bmp"; Flags: dontcopy solidbreak
DestName: "WizardForm.BitmapImage3.bmp"; Source: "3.bmp"; Flags: dontcopy solidbreak
DestName: "WizardForm.BitmapImage4.bmp"; Source: "4.bmp"; Flags: dontcopy solidbreak


Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "TextRussian.isl"; Check: IsComponent(1)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "TextEnglish.isl"; Check: IsComponent(2)
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "VoiceRussian.isl"; Check: IsComponent(4)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "VoiceEnglish.isl"; Check: IsComponent(5)

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Дополнительное по; Types: full;
Name: text\DirectX; Description: DirectX 9;
Name: text\Visual; Description: Microsoft Visual C++;

[CustomMessages]
RU.CompSubtitlesLng=Язык субтитров
RU.CompVoiceLng=Язык озвучки
RU.CompRussian=Русский
RU.CompEnglish=Английский


[ code]
var
Flag: Boolean;
SettingButton: TButton;
ComponentsPage: TWizardPage;
ComponentsList: TNewCheckListBox;
BitmapImage1, BitmapImage2, BitmapImage3, BitmapImage4: TBitmapImage;

procedure HideShowOnClick(Sender: TObject);
begin
if Flag = False then begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(360);
Flag:= True;
SettingButton.Caption:= '[]';
end else begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(500);
Flag:= False;
SettingButton.Caption:= '[]';
end;
end;

function IsComponent(CompIndex: Integer): Boolean;
var
  i: Integer;
begin
  Result := False;
  for i := 0 to ComponentsList.ItemCount - 1 do
  begin
    if CompIndex <= (ComponentsList.ItemCount - 1) then
      Result := ComponentsList.Checked[CompIndex];
  end;
end;

procedure InitializeWizard();
begin
WizardForm.WizardSmallBitmapImage.Hide;
SettingButton:= TButton.Create(WizardForm);
SettingButton.SetBounds(ScaleX(10),ScaleY(325), ScaleX(30), ScaleY(30))
SettingButton.Caption:= '[]';
SettingButton.OnClick:= @HideShowOnClick;
SettingButton.Parent:= WizardForm;
Flag:=True;

ComponentsList := TNewCheckListBox.Create(WizardForm);
  with ComponentsList do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(40), ScaleY(370), ScaleX(417), ScaleY(100));
    AddCheckBox(CustomMessage('CompSubtitlesLng'), '', 0, True, False, False, True, nil);
      AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);
      AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);
    AddCheckBox(CustomMessage('CompVoiceLng'), '', 0, True, False, False, True, nil);
      AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);
      AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);
  end;
  BitmapImage1 := TBitmapImage.Create(WizardForm);
  with BitmapImage1 do
  begin
    Parent := WizardForm.MainPanel;
    Left := ScaleX(440);
    Top := ScaleY(1);
    Width := ScaleX(55);
    Height := ScaleY(55);
    ExtractTemporaryFile('WizardForm.BitmapImage1.bmp');
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage1.bmp'));
  end;


  BitmapImage2 := TBitmapImage.Create(WizardForm);
  with BitmapImage2 do
  begin
    Parent := WizardForm.MainPanel;
    Left := ScaleX(440);
    Top := ScaleY(1);
    Width := ScaleX(55);
    Height := ScaleY(55);
    ExtractTemporaryFile('WizardForm.BitmapImage2.bmp');
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage2.bmp'));
  end;


  BitmapImage3 := TBitmapImage.Create(WizardForm);
  with BitmapImage3 do
  begin
    Parent := WizardForm.MainPanel;
    Left := ScaleX(440);
    Top := ScaleY(1);
    Width := ScaleX(55);
    Height := ScaleY(55);
    ExtractTemporaryFile('WizardForm.BitmapImage3.bmp');
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage3.bmp'));
  end;


  BitmapImage4 := TBitmapImage.Create(WizardForm);
  with BitmapImage4 do
  begin
    Parent := WizardForm.MainPanel;
    Left := ScaleX(440);
    Top := ScaleY(1);
    Width := ScaleX(55);
    Height := ScaleY(55);
    ExtractTemporaryFile('WizardForm.BitmapImage4.bmp');
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage4.bmp'));
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
 case CurPageID of
 wpSelectDir:
begin
  BitmapImage1.Show;
  BitmapImage2.Hide;
  BitmapImage3.Hide;
  BitmapImage4.Hide;
end;
wpSelectComponents:
begin
  BitmapImage2.Show;
  BitmapImage1.Hide;
  BitmapImage3.Hide;
  BitmapImage4.Hide;
end;
wpReady:
begin
  BitmapImage3.Show;
  BitmapImage2.Hide;
  BitmapImage1.Hide;
  BitmapImage4.Hide;
end;
wpInstalling:
begin
  BitmapImage4.Show;
  BitmapImage2.Hide;
  BitmapImage3.Hide;
  BitmapImage1.Hide;
end;
end;
end;


Kashtan007 15-05-2014 22:20 2351910

Dodakaedr, спасибо большое. Все получилось!)

Антон_Мураткин@vk 16-05-2014 00:00 2351952

Всем привет. А можно на текст наложить тень или эфект двойной контур или чего нибудь подобное? Заранее благодарю.

saurn 16-05-2014 06:30 2351985

Цитата:

Цитата Dodakaedr
а как больше путей добавить без понятия. »

Аналогичным способом вызвать Exec для второго ключа или раздела.

Shift85 16-05-2014 07:33 2351994

Цитата:

Цитата Антон_Мураткин@vk
А можно на текст наложить тень или эфект двойной контур »

Антон_Мураткин@vk, Можно создать два лейбла. (То есть второй для тени.) Как то так.

Код:

  WelcomeLabel1:= TLabel.Create(WizardForm);
  with WelcomeLabel1 do begin
    AutoSize:=False;
    SetBounds(ScaleX(-26), ScaleY(31), ScaleX(550), ScaleY(70));
    WordWrap:=True;
    Alignment := taCenter;
    Transparent:=True;
    Font.Name:='Georgia';
    Font.Size:= 14;
    Font.Color:=$000000;
    Font.Style:=[fsBold];
    Caption:= ExpandConstant('{cm:Welcome1}');
    Parent:=WizardForm.WelcomePage;
  end;
  WelcomeLabel2:= TLabel.Create(WizardForm);
  with WelcomeLabel2 do begin
    AutoSize:=False;
    SetBounds(ScaleX(-27), ScaleY(30), ScaleX(550), ScaleY(70));
    WordWrap:=True;
    Alignment := taCenter;
    Transparent:=True;
    Font.Name:='Georgia';
    Font.Size:= 14;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    Caption:= ExpandConstant('{cm:Welcome1}');
    Parent:=WizardForm.WelcomePage;
  end;


Dodakaedr 16-05-2014 12:33 2352061

saurn,
Цитата:

Цитата Dodakaedr
С восстановлением разобрался »

Нет не разобрался((( код не восстанавливает экспортированный ключ...

читать дальше »
Код:

[Registry]
Root: HKCR; SubKey: .mp3; BeforeInstall: IsRegExport(); Check: AudioCheck;

[ Code]
procedure IsRegExport();
var
    i: Integer;
    RegKey: String;
begin
    RegKey := 'HKEY_CLASSES_ROOT\.mp3';
    Exec( ExpandConstant( '{win}\regedit.exe' ), '-ea mp3.reg ' + AddQuotes( RegKey ), ExpandConstant( '{app}' ), SW_HIDE, ewWaitUntilTerminated, i );
end;

procedure IsRegImport();
var
    i: Integer;
    RegFile: String;
begin
    RegFile:= ExpandConstant('{app}\mp3.reg');

    if FileExists(RegFile) <> False then
      Exec( 'regedit.exe', ' /s ' + AddQuotes( RegFile ), ExpandConstant( '{win}' ), SW_HIDE, ewWaitUntilTerminated, i );
end;


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
    case CurUninstallStep of
        usUninstall: IsRegImport();
    end;
end;


diman_21Ru 16-05-2014 13:49 2352092

Всем привет у меня в скрипте есть установка модов на Мир Танков и автопоиск игры а как мне можно дополнительно программы устнавливать чтобы программы в конце установки вышли а не рспаковывались , скрипты все есть каков пусть лишь нужен ,заранее спасибо

Kashtan007 16-05-2014 15:57 2352143

Всем привет. Как добавить фон для установщика. Если делать это через Редактор форм, а точнее BitmapImage то её закрывают такие элементы как компонент лист, блок с текстом и т.д. В итоге получается что видны только края картинки. Я видел, в справке есть другой вариант, но он более трудоемкий. Если ли способы полегче. Как залить фон для установщика! Заранее спасибо за ответ!

Shift85 16-05-2014 18:00 2352193

Цитата:

Цитата Kashtan007
Как залить фон для установщика! »

Kashtan007, Вот можно так:http://rghost.ru/55220479 =)

Kashtan007 16-05-2014 19:26 2352222

Shift85, спасибо, но немножко не то.

Как сделать эти серые окна прозрачные?

Shift85 16-05-2014 19:42 2352231

Цитата:

Цитата Kashtan007
Как сделать эти серые окна прозрачные? »

Kashtan007, Попробуй.

Код:

const 
TransparentPercent = 50; // процент прозрачности
 
WS_EX_LAYERED = $80000; 
WS_EX_TRANSPARENT = $20; 
LWA_COLORKEY = 1; 
LWA_ALPHA = 2; 
GWL_EXSTYLE = (-20); 
 
function SetLayeredWindowAttributes(hwnd: HWND; crKey: TColor; bAlpha: BYTE; dwFlags: DWORD): Boolean; 
external 'SetLayeredWindowAttributes@user32.dll stdcall'; 
 
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; 
external 'GetWindowLongA@user32.dll stdcall'; 
 
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; 
external 'SetWindowLongA@user32.dll stdcall'; 
 
Procedure InitializeWizard(); 
begin 
SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_LAYERED); 
SetLayeredWindowAttributes(WizardForm.Handle, 0, (255 * TransparentPercent) / 100, LWA_ALPHA); 
end;


Kashtan007 16-05-2014 20:15 2352245

Shift85, весь установщик стал прозрачный.. А мне нужно чтобы внутри серые блоки были прозрачные.

ROMKA-1977 17-05-2014 18:29 2352506

Подскажите пожалуйста. Применяю архивы FreeArc, для отображения размера установленной проги в окне "Удаление программ" в секции [Setup] указываю: UninstallDisplaySize=3176374272. Как правильно указать чтобы размер отображался в зависимости от выбранных компонентов?

saneksanek 18-05-2014 04:32 2352621

Здрасте.может кто-то помочь если не трудно,не выходит не как в данный код добавить чек-бокс в завершение,для запуска игры после установки.
Код:

var MainImage    : TBitmapImage;
    FinishedImage: TBitmapImage;
    WelcomeLabel1, WelcomeLabel2,StartMenuLbl,FinishedLabel,Welcome1,Welcome2,NeedSpaceLabel,SelectTasksLabel, FreeSpaceLabel, FinishedHeadingLabel: TLabel;

procedure InitializeWizard();
begin
    ExtractTemporaryFile('1.bmp');
    MainImage := TBitmapImage.Create(WizardForm);
    with MainImage do
    begin
        Parent := WizardForm;
        Left := 0;
        Top := 0;
        Width := 500;
        Height := 313;
        Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
end;

ExtractTemporaryFile('2.bmp');
    FinishedImage := TBitmapImage.Create(WizardForm);
    with FinishedImage do
    begin
        Parent := WizardForm;
        Left := 0;
        Top := 0;
        Width := 500;
        Height := 313;
        Bitmap.LoadFromFile(ExpandConstant('{tmp}\2.bmp'));
    end;

Welcome1:= TLabel.Create(WizardForm);
  with Welcome1 do
  begin
    Left:= ScaleX(150);
    Top:= ScaleY(26);
    Width:= ScaleX(301);
    Height:= ScaleY(71);
    AutoSize:= false;
    Transparent:= true;
    WordWrap:= true;
    Font.Size:= 12;
    Font.Color:=clBlack
    Font.Style := [fsBold]
    Parent:= WizardForm;
    Font.Name:= 'Georgia'
    Caption:= ExpandConstant('{cm:Welcome1}')
 end;

Welcome2:=TLabel.Create(WizardForm);
  with Welcome2 do
  begin
    Left:= ScaleX(150);
    Top:= ScaleY(66);
    Width:= ScaleX(345);
    Height:= ScaleY(300);
    AutoSize:= false;
    WordWrap:= true;
    Font.Color:=clBlack
    Font.Name:= 'Georgia'
    Font.Size:= 9;
    Transparent:= true;
    Parent:= WizardForm;
    Caption:= ExpandConstant('{cm:Welcome2}')
end;

FinishedHeadingLabel:=TLabel.Create(WizardForm);
  with FinishedHeadingLabel do
  begin
    Left:= ScaleX(170);
    Top:= ScaleY(26);
    Width:= ScaleX(300);
    Height:= ScaleY(150);
    AutoSize:= false;
    WordWrap:= true;
    Font.Size:= 12;
    Font.Color:=clBlack
    Font.Name:= 'Georgia'
    Font.Style := [fsBold]
    Transparent:= true;
    Parent:= WizardForm;
    Caption:= WizardForm.FinishedHeadingLabel.Caption;
  end;

FinishedLabel:= TLabel.Create(WizardForm);
  with FinishedLabel do
  begin
    Left:= ScaleX(170);
    Top:= ScaleY(66);
    Width:= ScaleX(325);
    Height:= ScaleY(150);
    AutoSize:= false;
    WordWrap:= true;
    Transparent:= true;
    Font.Color:=clBlack
    Font.Size:= 9;
    Font.Name:= 'Georgia'
    Parent:= WizardForm;
    Caption:= ExpandConstant('{cm:Finished1}') + #10#13#10 + ExpandConstant('{cm:Finished2}')
end;
end;

procedure HideComponents;
begin
  Welcome1.Hide;
  Welcome2.Hide;
  FinishedHeadingLabel.Hide;
  FinishedLabel.Hide;

end;

procedure ShowComponents(CurPageID: Integer);
begin
  case CurPageID of
    wpWelcome:
    begin
      Welcome1.Show;
      Welcome2.Show;
end;
    wpFinished:
    begin
      FinishedHeadingLabel.Show;
      FinishedLabel.Show;
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  HideComponents;
  ShowComponents(CurPageID);
    if CurPageID = wpWelcome then
    begin
        WizardForm.OuterNotebook.Hide;
        FinishedImage.Hide;

    end
    else if CurPageID = wpFinished then
    begin
        WizardForm.OuterNotebook.Hide;
        MainImage.Hide;
        FinishedImage.Show;
    end
    else WizardForm.OuterNotebook.Show;
end;


Антон_Мураткин@vk 18-05-2014 09:50 2352635

Shift85, Всё нормально, но второй текст (типа тени) появляется на всех остальных страницах. Как это исправить?

ROMKA-1977 18-05-2014 11:43 2352657

saneksanek,
читать дальше »

#define MyAppName "Need for Speed: The Run - Limited Edition"
#define MyAppExeName "Need For Speed The Run.exe"

[CustomMessages]
russian.RunEntryExec=Запустить {#MyAppName}

[code]
///////////////////////// Чекбокс запуска приложения на странице завершения установки /////////////////////////
var
RunProgram: TCheckBox;
RunProgramLabel: TLabel;

procedure LabelOnClick(Sender: TObject);
begin
case Sender of
RunProgramLabel: begin RunProgram.Checked:= not RunProgram.Checked; end;
end;
end;

procedure DeinitializeSetup();
var ResultCode: Integer;
begin
if (WizardForm.CurPageID=wpFinished) and (RunProgram.Checked) then
Exec(ExpandConstant('{app}\{#MyAppExeName}'), '', '', SW_SHOWNORMAL, ewNoWait, ResultCode);
end;

procedure InitializeWizard();
begin
RunProgram:= TCheckBox.Create(WizardForm);
with RunProgram do
begin
Parent:= WizardForm.FinishedPage;
SetBounds(ScaleX(65), ScaleY(147), ScaleX(13), ScaleY(13)) //Координаты чекбокса
TabOrder:= 5;
Checked:= False; //Если необходимо, можно поменять на True
end;

RunProgramLabel:= TLabel.Create(WizardForm);
with RunProgramLabel do
begin
Caption:=ExpandConstant('{cm:RunEntryExec}');
SetBounds(ScaleX(85), ScaleY(147), ScaleX(150), ScaleY(13)) //Координаты текста чекбокса
Transparent := True;
Font.Color:= clWhite;
Parent:= WizardForm.FinishedPage;
OnClick:= @LabelOnClick;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
RunProgram.Hide;
RunProgramLabel.Hide;
if CurPageId = wpFinished then
begin
RunProgram.Show;
RunProgramLabel.Show;
end;
if (CurPageID = wpFinished) and ISDoneError then
begin
RunProgram.hide;
RunProgramLabel.hide;
end;
end;

Антон_Мураткин@vk 18-05-2014 14:54 2352694

Ребят ну подскажите как тень сделать для текста? По примеру Shift85 тень появляется на всех страницах. Заранее благодарю.

habib2302 18-05-2014 16:13 2352748

всем привет. как выполнить установку драйверов .sys разной битности?

ne-dm 18-05-2014 19:54 2352839

Как вывести надпись здесь?

habib2302 18-05-2014 20:10 2352844

ne-dm,
Код:

[Messages]
BeveledLabel=BurnAware


saneksanek 18-05-2014 21:25 2352862

ROMKA-1977, Поспешил с выводами,работать работает без данного кода.

Dodakaedr 18-05-2014 23:19 2352890

habib2302, а IsWin64 и not IsWin64 не подходит?

Shift85 19-05-2014 08:33 2352972

Цитата:

Цитата Антон_Мураткин@vk
Как это исправить? »

Антон_Мураткин@vk, На нужной странице скрой лейблы.

Код:

WelcomeLabel1.Hide;
WelcomeLabel2.Hide;


Антон_Мураткин@vk 19-05-2014 09:50 2352987

Shift85, Да они и так скрыты. Открытия тоже не чего не даёт

Shift85 19-05-2014 10:12 2352994

Вложений: 1
Цитата:

Цитата ne-dm
Как вывести надпись здесь? »

ne-dm, Вот пример. Можно изменить также цвет лейбла.

habib2302 19-05-2014 10:46 2353002

ne-dm, можно и так
Код:

[Setup]
AppName=AppName
AppVerName=AppVerName
DefaultDirName={pf}\My Program

[Messages]
BeveledLabel= Copyright 2007 © Microsoft

[  Code]
procedure BevelLabelClick(Sender: TObject);
var ErrorCode: Integer;
begin
ShellExec('open','http://www.innosetup.com','', '', SW_SHOW, ewNoWait, ErrorCode)
end;

procedure InitializeWizard();
begin
with WizardForm do begin
with BeveledLabel do begin
OnClick:=@BevelLabelClick;
Font.Color:=clBlue;
Enabled:=True;
Cursor:=crHand;
end;
end;
end;


Mat_y 19-05-2014 13:03 2353036

А Inno может ставить расширения в браузеры... в Хром там, Оперу или огнелиса? Если да, то где код бы посмотреть?

Kashtan007 19-05-2014 13:27 2353051

Всем привет.
Как сделать эти серые окна прозрачные?

Чтобы было видно задний фон. Но при этом прозрачные оставались только серые окна, а текст на них и все остальное было видно.

Dodakaedr 19-05-2014 15:01 2353096

Kashtan007, Зайдите в папку Inno Setup Ultra\Dll Examples\IsWin7 [dwmEnabled] и там найдете подходящий (так думаю) вам пример.

Mat_y, пример ассоциация файлов формата .ext1, .ext2, .ext3 с программой notepad.exe:
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
ChangesAssociations=yes

[Tasks]
Name: MostVideo; Description: "Most Video Files "; GroupDescription: Associate Video Files:
Name: MostVideo\DiracVideo; Description: Dirac; GroupDescription: Associate Video Files:
Name: MostVideo\AviVideo; Description: AVI; GroupDescription: Associate Video Files:
Name: MostVideo\MP4Video; Description: MP4; GroupDescription: Associate Video Files:


[Registry]
; .ext1
Root: HKCR; Subkey: .ext1; ValueType: string; ValueName: ; ValueData: MyProgramFile1; Flags: uninsdeletevalue; Tasks: MostVideo\DiracVideo;
Root: HKCR; Subkey: MyProgramFile1; ValueType: string; ValueName: ; ValueData: "My Program File ?1"; Flags: uninsdeletekey; Tasks: MostVideo\DiracVideo
Root: HKCR; Subkey: MyProgramFile1\DefaultIcon; ValueType: string; ValueName: ; ValueData: {sys}\notepad.exe,0; Tasks: MostVideo\DiracVideo
Root: HKCR; Subkey: MyProgramFile1\shell\open\command; ValueType: string; ValueName: ; ValueData: """{sys}\notepad.exe"" ""%1"""; Tasks: MostVideo\DiracVideo
; .ext2
Root: HKCR; Subkey: .ext2; ValueType: string; ValueName: ; ValueData: MyProgramFile2; Flags: uninsdeletevalue; Tasks: MostVideo\AviVideo;
Root: HKCR; Subkey: MyProgramFile2; ValueType: string; ValueName: ; ValueData: "My Program File ?2"; Flags: uninsdeletekey; Tasks: MostVideo\AviVideo
Root: HKCR; Subkey: MyProgramFile2\DefaultIcon; ValueType: string; ValueName: ; ValueData: {sys}\notepad.exe,0; Tasks: MostVideo\AviVideo
Root: HKCR; Subkey: MyProgramFile2\shell\open\command; ValueType: string; ValueName: ; ValueData: """{sys}\notepad.exe"" ""%1"""; Tasks: MostVideo\AviVideo
; .ext3
Root: HKCR; Subkey: .ext3; ValueType: string; ValueName: ; ValueData: MyProgramFile3; Flags: uninsdeletevalue; Tasks: MostVideo\MP4Video;
Root: HKCR; Subkey: MyProgramFile3; ValueType: string; ValueName: ; ValueData: "My Program File ?3"; Flags: uninsdeletekey; Tasks: MostVideo\MP4Video
Root: HKCR; Subkey: MyProgramFile3\DefaultIcon; ValueType: string; ValueName: ; ValueData: {sys}\notepad.exe,0; Tasks: MostVideo\MP4Video
Root: HKCR; Subkey: MyProgramFile3\shell\open\command; ValueType: string; ValueName: ; ValueData: """{sys}\notepad.exe"" ""%1"""; Tasks: MostVideo\MP4Video


Kashtan007 19-05-2014 15:26 2353112

Dodakaedr, к сожалению. По данному пути такого нету. Не могли бы вы скинуть пример? Буду очень благодарен.

Dodakaedr 19-05-2014 15:32 2353116

Цитата:

Цитата Kashtan007
к сожалению. По данному пути такого нету. Не могли бы вы скинуть пример? Буду очень благодарен. »

А по такому Inno Setup 5\Dll Examples\IsWin7 [0.5]? У вас Ultra сборка?
Пробуйте
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
Compression=lzma
SolidCompression=yes
OutputDir=.

[Files]
Source: compiler:Dll Pack\iswin7.dll; Flags: dontcopy

[.Code]
procedure iswin7_add_glass(Handle:HWND; Left, Top, Right, Bottom : Integer; GDIPLoadMode: boolean); external 'iswin7_add_glass@files:iswin7.dll stdcall';
procedure iswin7_add_button(Handle:HWND); external 'iswin7_add_button@files:iswin7.dll stdcall';
procedure iswin7_free; external 'iswin7_free@files:iswin7.dll stdcall';

procedure InitializeWizard();
begin
  // Необходимо добавлять каждую кнопку расположенную на стекле
  // до инициализации стекла для того что бы не было дыр ))
  iswin7_add_button(WizardForm.BackButton.Handle);
  iswin7_add_button(WizardForm.NextButton.Handle);
  iswin7_add_button(WizardForm.CancelButton.Handle);
  // Параметр True не трогать он для htuos ))
  iswin7_add_glass(WizardForm.Handle, 0, 0, 0, 47, True);
end;

procedure DeinitializeSetup();
begin
  iswin7_free;
end;


Shift85 19-05-2014 21:56 2353283

Вложений: 1
Цитата:

Цитата Kashtan007
Как сделать эти серые окна прозрачные? »

Kashtan007, Вот.

diman_21Ru 20-05-2014 11:31 2353471

Имеется скрипт на переключения языков с русского на английский , украинский но есть одна проблема обратно не возвращает на русский , получается как бы баг вот скрипт посмотрите : http://rghost.ru/55424206

nik1967 20-05-2014 13:01 2353496

diman_21Ru,
читать дальше »
Код:

[setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}
ShowLanguageDialog=auto

[Languages]
Name: "eng"; MessagesFile: "compiler:Languages\English.isl"
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "ukr"; MessagesFile: "compiler:Languages\Ukrainian.isl"

[CustomMessages]
; Русский
rusButtonBack=< &Назад
rusButtonNext=&Далее >
rusButtonCancel=Отмена
rusSetupWindowTitle=Установка — %1
rusWelcomeLabel1=Вас приветствует Мастер установки %1
rusWelcomeLabel2=Программа установит %1, версия %2 на Ваш компьютер.%n%nРекомендуется закрыть все прочие приложения перед тем, как продолжить.%n%nНажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти из программы установки.

; English
engButtonBack=< &Back
engButtonNext=&Next >
engButtonCancel=Cancel
engSetupWindowTitle=Setup — %1
engWelcomeLabel1=Welcome to the %1 Setup Wizard
engWelcomeLabel2=This will install %1 version %2 on your computer.%n%nIt is recommended that you close all other applications before continuing.%n%nClick Next to continue, or Cancel to exit Setup.

; Ukrainian
ukrButtonBack=< &Назад
ukrButtonNext=&Далi >
ukrButtonCancel=Cкасування
ukrSetupWindowTitle=Встановити — %1
ukrWelcomeLabel1=Вас вітає Майстер установки %1
ukrWelcomeLabel2=Програма встановить %1, версія %2 на Ваш комп'ютер.%n%nРекомендуємо закрити всі інші програми перед тим, як продовжити.%n%nНатисніть «Далі», щоб продовжити, або «Скасувати», щоб вийти з програми установки.

[ Code]
var
  lang: String;
  langBtn: TButton;

procedure ChangeLang();
begin
  WizardForm.BackButton.Caption:= CustomMessage(lang+'ButtonBack');
  WizardForm.NextButton.Caption:= CustomMessage(lang+'ButtonNext');
  WizardForm.CancelButton.Caption:= CustomMessage(lang+'ButtonCancel');
  WizardForm.Caption:= FmtMessage(CustomMessage(lang+'SetupWindowTitle'), ['{#SetupSetting('AppName')}']);
  WizardForm.WelcomeLabel1.Caption:= FmtMessage(CustomMessage(lang+'WelcomeLabel1'), ['{#SetupSetting('AppName')}']);
  WizardForm.WelcomeLabel2.Caption:= FmtMessage(CustomMessage(lang+'WelcomeLabel2'), ['{#SetupSetting('AppName')}', '{#SetupSetting('AppVersion')}']);
end;

procedure LangBtnClick(Sender: TObject);
begin
  if lang='rus' then begin
    lang:= 'eng';
    langBtn.Caption:= 'ukr';
  end else
  if lang='eng' then begin
    lang:= 'ukr';
    langBtn.Caption:= 'rus';
  end else
  if lang='ukr' then begin
    lang:= 'rus';
    langBtn.Caption:= 'eng';
  end;
  ChangeLang();
end;

procedure InitializeWizard;
begin
  langBtn:= TButton.Create(WizardForm);
  with langBtn do begin
    SetBounds(10,WizardForm.CancelButton.Top,30,WizardForm.CancelButton.Height)
    OnClick:= @LangBtnClick;
    Parent:= WizardForm;
  end;

  if ActiveLanguage='rus' then begin
    lang:= 'rus';
    langBtn.Caption:= 'eng';
  end;
end;


Irenis 20-05-2014 14:17 2353526

Уважаемые форумчане! подскажите пожалуйста.
При компилировании происходит ошибка:

CallBack:=WrapMyCallback(@ProgressCallback,2);
Cancel:=0;
OveralPct:=0;

Ошибка в первой строчке, т.е тут: CallBack:=WrapMyCallback(@ProgressCallback,2);

С чем это может быть связано? Буду рада, если кто то подскажет))

Напишу, что мне вообще нужно. Пытаюсь научиться создавать установщики. Сейчас пробую сделать установщик игры Panzar. Я совсем новичек в этом деле. В общем, читала различные уроки, которые нашла в инете. Скачала видео-урок, по примеру этого урока создала скрипт, вроде бы все делаю, как там сказано, но вот почему то при компиляции появляется ошибка. Возможно кто нибудь поможет разобраться что не так? Может у кого то есть возможность через TeamViewer все показать? Буду очень благодарна, так как каждый день пытаюсь создать этот установщик, но пока не получается.

Мой скайп irenna-85. Спасибо тому, кто откликнется))

Shift85 20-05-2014 14:56 2353546

Irenis, Скрипт покажите. (Залейте куда нибудь на файлообменник)

saurn 20-05-2014 15:35 2353554

Irenis, компилятор дает описание ошибки, его нужно прикрепить к сообщению, а еще лучше, как сказали выше, прикрепить к сообщению скрипт с минимальным набором файлов. Ибо гадать на пальцах, почему в вашем скрипте происходит ошибка в обратном вызове можно до бесконечности.

Irenis 20-05-2014 17:39 2353596

Цитата:

Цитата Shift85
Скрипт покажите »

Скрипт.
Залила. А какие еще файлы нужно выложить? Всю игру?
Я делаю игру Panzar. Сделала из нее .arc архив. И пытаюсь как то совместить этот архив и установщик.

saurn 20-05-2014 17:48 2353602

Irenis, найдите в коде секцию типов type и замените первую строку в ней на вот эту:

Код:

TCallback = function ( Pct: integer; CurrentFile: AnsiString ): longword;
Цитата:

Цитата Irenis
А какие еще файлы нужно выложить? Всю игру? »

Нет) Только файлы необходимые для работы установщика, как, то - библиотеки, изображения и т.д.

vint56 20-05-2014 17:55 2353606

Irenis лутше используй версию ISDone0.6final потому как есть SrepInside и PrecompInside а не ISDone 4 она очень старая там этого нету
вот сылка http://rghost.ru/55431699
Вот для сжатия Precomp+Srep+Arc и Srep+Arc и так далее все в архиве для сжатия
http://rghost.ru/55431917

Shift85 20-05-2014 17:56 2353607

Вложений: 1
Irenis,

Irenis 20-05-2014 18:48 2353626

Цитата:

Цитата saurn
Irenis, найдите в коде секцию типов type и замените первую строку в ней на вот эту: »

Спасибо, действительно помогло :up
Компиляция прошла успешно!

Цитата:

Цитата Shift85
Irenis,
Вложения
skript panzar.7z
(3.0 Kb, 0 просмотров) »

Тут, я так понимаю, тоже заменили строку или еще что то? Вам тоже большое спасибо :)

Единственное, все вроде хорошо, все скомпилировалось и игра даже установилась и запустилась :yahoo: , только при распаковке не отображается, что именно распаковывается. То есть идет строка распаковки, а ниже написано "Распаковка файлов:????????????????"
В общем много знаков вопросов. В принципе, это не столь важно, но все равно лучше было бы, если бы там отображалось то, что должно.

Цитата:

Цитата vint56
лутше используй версию ISDone0.6final »

Спасибо за ссылочки :) Посмотрю.

Кстати, меня вот еще что интересует. Как сделать так, чтобы по завершению установки игры, автоматически открывалась страница в браузере по той ссылке, которую я укажу? Это, я так понимаю, нужен какой то скрипт или код? Может кто подскажет, где взять такое? Пока нашла только код, в котором можно прописать необходимую ссылку и в процессе установки в нижней части установщика будет отображаться кликабельная ссылка. Но хотелось бы именно, чтоб эта ссылка открывалась автоматически по завершению установки :)

saurn 20-05-2014 19:12 2353650

Цитата:

Цитата Irenis
То есть идет строка распаковки, а ниже написано "Распаковка файлов:????????????????" »

Пробуйте
читать дальше »
Код:

[Code]
var
  LabelPct,LabelCurrFileName: TLabel;
  ISDoneProgressBar: TNewProgressBar;
  MyCancelButton: TButton;
  OveralPct,Cancel:integer;
  CallBack:longword;
  MyError:boolean;

  type
  TCallback = function (Pct: integer;CurrentFile:string): longword;
  TMessage = record hWnd: HWND; msg, wParam: Word; lParam: LongWord; Time: TFileTime; pt: TPoint; end;

function PeekMessage(var lpMsg: TMessage; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: TMessage): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: TMessage): Longint; external 'DispatchMessageA@user32.dll stdcall';

function WrapMyCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:innocallback.dll stdcall';

function ISArcExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; callback: longword; Password, CfgFile, WorkPath: AnsiString):BOOL; external 'ISArcExtract@files:ISDone.dll stdcall';
function IS7ZipExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; callback: longword; Password: AnsiString):BOOL; external 'IS7zipExtract@files:ISDone.dll stdcall';
function ISRarExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; callback: longword; Password: AnsiString):BOOL; external 'ISRarExtract@files:ISDone.dll stdcall';
function ISPrecompExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean; callback: longword):BOOL; external 'ISPrecompExtract@files:ISDone.dll stdcall';
function ISSRepExtract(CurComponent:longword; var OveralPct:integer; PctOfTotal:double; InName, OutFile, IdxFile: AnsiString; DeleteInFile:boolean; callback: longword):BOOL; external 'ISSrepExtract@files:ISDone.dll stdcall';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):BOOL; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall';
function StartRecord(RecordFileName:AnsiString; AllComponents:longword):BOOL; external 'StartRecord@files:ISDone.dll stdcall';
function CheckPoint(CurComponent:Integer):BOOL; external 'CheckPoint@files:ISDone.dll stdcall';
function StopRecord:BOOL; external 'StopRecord@files:ISDone.dll stdcall';

function ProgressCallback(Pct: integer; CurrentFile:String): longword;
var  Msg: TMessage;
begin
  if Pct<=ISDoneProgressBar.Max then
      ISDoneProgressBar.Position := Pct;
  LabelPct.Caption := IntToStr(Pct div 10)+'.'+chr(48 + Pct mod 10)+'%';
  LabelCurrFileName.Caption :=ExpandConstant('{cm:ExtractedFile} ')+CurrentFile;
  while PeekMessage(Msg, 0, 0, 0, 1) do begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
  end;
  Result := Cancel;
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
  if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then Cancel:=1;
end;

procedure InitializeWizard();
begin
  ISDoneProgressBar := TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar do begin
      Left      := ScaleX(0);
      Top      := ScaleY(40);
      Width    := ScaleX(417);
      Max      := 1000;
      Height    := WizardForm.ProgressGauge.Height;
      Parent    := WizardForm.InstallingPage;
  end;
  LabelPct := TLabel.Create(WizardForm);
  with LabelPct do begin
    Parent    := WizardForm.InstallingPage;
    AutoSize  := False;
    Width    := WizardForm.ProgressGauge.Width;
    Top      := WizardForm.ProgressGauge.Top + ScaleY(40);
    Alignment := taCenter;
    Caption  := '';
  end;
  LabelCurrFileName := TLabel.Create(WizardForm);
  with LabelCurrFileName do begin
      Parent    := WizardForm.InstallingPage;
      AutoSize  := False;
      Width    := WizardForm.ProgressGauge.Width;
      Left      := ScaleX(0);
      Top      :=  WizardForm.ProgressGauge.Top + ScaleY(25);
      Caption  := '';
  end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  if (CurPageID = wpFinished) and MyError then
  begin
      WizardForm.Caption:= ExpandConstant('{cm:Error}');
      WizardForm.FinishedLabel.Font.Color:= clRed;
      WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var ChComp, TmpValue:longword;
    n:integer;
begin
  if CurStep = ssInstall then begin  //Если необходимо, можно переделать на ssPostInstall
      WizardForm.ProgressGauge.Hide;
      WizardForm.CancelButton.Visible:=false;
      MyCancelButton:=TButton.Create(WizardForm);
      with MyCancelButton do begin
        Parent:=WizardForm;
        Width:=ScaleX(135);
        Caption:=ExpandConstant('{cm:CancelButton}');
        Left:=ScaleX(360);
        Top:=WizardForm.cancelbutton.top;
        OnClick:=@CancelButtonOnClick;
      end;
      CallBack:=WrapMyCallback(@ProgressCallback,2);
      Cancel:=0;
      OveralPct:=0;

// Распаковка всех необходимых файлов в папку {tmp}. Это необходимо для того, чтобы
//выполнять установку в момент ssInstall, и секция [Run] выполнялась после установки.
#ifdef records
      ExtractTemporaryFile('records.inf');
#endif
#ifdef precomp04
      ExtractTemporaryFile('packjpg_dll.dll');
      ExtractTemporaryFile('RTconsole.exe');
      ExtractTemporaryFile('precomp04.exe');
#endif
#ifdef precomp038
      ExtractTemporaryFile('packjpg_dll.dll');
      ExtractTemporaryFile('RTconsole.exe');
      ExtractTemporaryFile('precomp038.exe');
      ExtractTemporaryFile('zlib1.dll');
#endif
#ifdef unrar
      ExtractTemporaryFile('Unrar.dll');
#endif

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
      ChComp:=0;
#ifdef Components
      TmpValue:=1;
      if IsComponentSelected('text\rus') then ChComp:=ChComp+TmpValue;    //компонент 1
      TmpValue:=TmpValue*2;
      if IsComponentSelected('text\eng') then ChComp:=ChComp+TmpValue;    //компонент 2
      TmpValue:=TmpValue*2;
      if IsComponentSelected('voice\rus') then ChComp:=ChComp+TmpValue;    //компонент 3
      TmpValue:=TmpValue*2;
      if IsComponentSelected('voice\eng') then ChComp:=ChComp+TmpValue;    //компонент 4
#endif

      StartRecord(ExpandConstant('{src}\records.inf'),ChComp);
      repeat
        MyError:=true;
        //if not ISRarExtract    ( 0, OveralPct, 0, ExpandConstant('{src}\aaa.rar'), ExpandConstant('{app}'),            false,CallBack, ''              ) then break;
        if not ISArcExtract    ( 0, OveralPct, 0, ExpandConstant('{src}\Panzar.arc'),  ExpandConstant('{app}\'),                false,CallBack, '',    '',    '') then break;
        //if not ISSRepExtract  ( 0, OveralPct, 0, ExpandConstant('{app}\data1\CODMW2.srep'), ExpandConstant('{app}\data1\CODMW2.pcf'), '', true, CallBack                  ) then break;
        //if not ISPrecompExtract( 0, OveralPct, 0, ExpandConstant('{app}\data1\CODMW2.pcf'),  ExpandConstant('{app}\data1\CODMW2.7z'),      true, CallBack                  ) then break;
        //if not IS7ZipExtract  ( 0, OveralPct, 0, ExpandConstant('{app}\data1\CODMW2.7z'),  ExpandConstant('{app}\data1'),                true, CallBack, ''              ) then break;
        //if not ShowChangeDiskWindow('Пожалуйста, вставьте диск 2 и дождитесь его инициализации.', ExpandConstant('{src}'),'CODMW2_Disk2.arc'                ) then break;
        //if not ISArcExtract    ( 1, OveralPct, 0, ExpandConstant('{src}\rustext.arc'), ExpandConstant('{app}'),                false,CallBack, '',    '',    '') then break;
        //if not ISArcExtract    ( 2, OveralPct, 0, ExpandConstant('{src}\engtext.arc'), ExpandConstant('{app}'),                false,CallBack, '',    '',    '') then break;
        //if not ISArcExtract    ( 3, OveralPct, 0, ExpandConstant('{src}\rusvoice.arc'),ExpandConstant('{app}'),                false,CallBack, '',    '',    '') then break;
        //if not ISArcExtract    ( 4, OveralPct, 0, ExpandConstant('{src}\engvoice.arc'),ExpandConstant('{app}'),                false,CallBack, '',    '',    '') then break;
        MyError:=false;
      until true;
      StopRecord;
   
      MyCancelButton.Visible:=false;
      WizardForm.CancelButton.Visible:=true;
  end;
  if (CurStep=ssPostInstall) and MyError then
      Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);
end;


Dodakaedr 20-05-2014 19:20 2353654

Цитата:

Цитата Irenis
автоматически открывалась страница в браузере по той ссылке, которую я укажу? »

Код:

[Run]
Filename: "http://forum.oszone.net"; Flags: shellexec


Kashtan007 20-05-2014 19:23 2353658

Всем доброго времени суток!
На картинке видно, что когда наводишь на компонент то появляется картинка и описание к ней в окошках.

Как реализовать данное чудо? И можно будет как-то расширить эти окошки?
Заранее спасибо!

Dodakaedr 20-05-2014 19:28 2353659

Цитата:

Цитата Kashtan007
Как реализовать данное чудо? »

читать дальше »
Код:

[Setup]
AppName=Моя программа
AppVersion=1.5
DefaultDirName={pf}\Моя программа

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
RU.CompName1=Компонент 1
RU.CompName2=Компонент 2
RU.ComponentsInfo=Наведите курсор мыши на компонент, чтобы прочитать его описание.
RU.ComponentsImgInfo=Наведите курсор мыши на компонент, чтобы посмотреть его превью.
RU.CompDesc1=Описание первого компонента
RU.CompDesc2=Описание второго компонента

[Files]
Source: "compiler:WizModernImage.bmp"; DestName: "CompDescImg1.bmp"; Flags: dontcopy
Source: "compiler:WizModernImage-IS.bmp"; DestName: "CompDescImg2.bmp"; Flags: dontcopy

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: comp1; Description: "{cm:CompName1}"; Types: full
Name: comp2; Description: "{cm:CompName2}"; Types: full

[ Code]
type
  TComponentDesc = record
    Description: String;
    ImageName: String;
    Index: Integer;
  end;

var
  CompDescs: array of TComponentDesc;
  CompDescPanel, CompDescImgPanel: TPanel;
  CompDescText: array[1..2] of TLabel;
  CompIndex, LastIndex: Integer;
  CompDescImg: TBitmapImage;

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
  i: Integer;
begin
  if Index = LastIndex then Exit;
  CompIndex := -1;
  for i := 0 to GetArrayLength(CompDescs) -1 do
  begin
    if (CompDescs[i].Index = Index) then
    begin
      CompIndex := i;
      Break;
    end;
  end;
  if (CompIndex >= 0) and (Area = iaItem) then
  begin
    if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then
      ExtractTemporaryFile(CompDescs[CompIndex].ImageName);
    CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName);
    CompDescImg.Show;

    CompDescText[2].Caption := CompDescs[CompIndex].Description;
    CompDescText[2].Enabled := True;
  end else
  begin
    CompDescText[2].Caption := CustomMessage('ComponentsInfo');
    CompDescText[2].Enabled := False;
    CompDescImg.Hide;
  end;
  LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
  CompDescImg.Hide;
  CompDescText[2].Caption := CustomMessage('ComponentsInfo');
  CompDescText[2].Enabled := False;
  LastIndex := -1;
end;

procedure AddCompDescription(AIndex: Integer; ADescription: String; AImageName: String);
var
  i: Integer;
begin
  i := GetArrayLength(CompDescs);
  SetArrayLength(CompDescs, i + 1);
  CompDescs[i].Description := ADescription;
  CompDescs[i].ImageName := AImageName;
  CompDescs[i].Index := AIndex - 1
end;

procedure InitializeWizard();
begin
  WizardForm.SelectComponentsLabel.Hide;
  WizardForm.TypesCombo.Hide;
  WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(184), ScaleY(205));
  WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription;
  WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave;

  CompDescImgPanel := TPanel.Create(WizardForm);
  with CompDescImgPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(192), ScaleY(0), ScaleX(225), ScaleY(120));
    BevelInner := bvLowered;
  end;

  CompDescText[1] := TLabel.Create(WizardForm);
  with CompDescText[1] do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    AutoSize := False;
    WordWrap := True;
    Enabled := False;
    Caption := CustomMessage('ComponentsImgInfo');
  end;

  CompDescImg := TBitmapImage.Create(WizardForm);
  with CompDescImg do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    Stretch := True;
    Hide;
  end;

  CompDescPanel := TPanel.Create(WizardForm);
  with CompDescPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(192), ScaleY(125), ScaleX(225), ScaleY(80));
    BevelInner := bvLowered;
  end;

  CompDescText[2] := TLabel.Create(WizardForm);
  with CompDescText[2] do
  begin
    Parent := CompDescPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescPanel.Width - ScaleX(10), CompDescPanel.Height - ScaleY(10));
    AutoSize := False;
    WordWrap := True;
    Enabled := False;
    Caption := CustomMessage('ComponentsInfo');
  end;

  AddCompDescription(1, CustomMessage('CompDesc1'), 'CompDescImg1.bmp');
  AddCompDescription(2, CustomMessage('CompDesc2'), 'CompDescImg2.bmp');
end;


Kashtan007 20-05-2014 19:38 2353668

Dodakaedr, спасибо все работает!

Как место этих серых окон поставить фон? Т.е. мне нужно, чтобы место серого окна было изображение (фон)!



Kashtan007 20-05-2014 20:10 2353676

Dodakaedr, если на компонент не наводишь, то там блок с надписью наведите на компонент и появится картинка. Возможно ли сделать так, чтобы изначально там стола картинка, а уже при наведении на компонент она заменялась на картинку компонента.
Пробовал ставить через редактор форм (BitmapImage), но тогда картинку просто закрывает, окно для картинок компонентов.
Есть какой-то другой способ?

Хотелось бы что-бы выглядело вот так. А уже соответственно при наведении на компонент фон менялся на картинку компонента.


Возможно есть способ, чтобы там изначально стояла картинка?

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

Shift85 21-05-2014 07:01 2353846

Цитата:

Цитата Kashtan007
Возможно есть способ, чтобы там изначально стояла картинка? »

Kashtan007, А вот так не лутше.

diman_21Ru 21-05-2014 09:47 2353881

Dodakaedr, А если уже есть картинки на модах,можно лишь только на текст скрипт а то можно запутаться там у меня )

Dodakaedr 21-05-2014 12:33 2353937

Вложений: 1
Цитата:

Цитата diman_21Ru
А если уже есть картинки на модах,можно лишь только на текст скрипт а то можно запутаться там у меня ) »

Как-то так:
читать дальше »
Код:

[Setup]
AppName=Моя программа
AppVersion=1.5
DefaultDirName={pf}\Моя программа

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
RU.CompName1=Компонент 1
RU.CompName2=Компонент 2
RU.ComponentsInfo=Наведите курсор мыши на компонент, чтобы прочитать его описание.
RU.CompDesc1=Описание первого компонента
RU.CompDesc2=Описание второго компонента

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: comp1; Description: "{cm:CompName1}"; Types: full
Name: comp2; Description: "{cm:CompName2}"; Types: full

[ Code]
type
  TComponentDesc = record
    Description: String;
    Index: Integer;
  end;

var
  CompDescs: array of TComponentDesc;
  CompDescPanel: TPanel;
  CompDescText: array[1..2] of TLabel;
  CompIndex, LastIndex: Integer;
 

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
  i: Integer;
begin
  if Index = LastIndex then Exit;
  CompIndex := -1;
  for i := 0 to GetArrayLength(CompDescs) -1 do
  begin
    if (CompDescs[i].Index = Index) then
    begin
      CompIndex := i;
      Break;
    end;
end;
  if (CompIndex >= 0) and (Area = iaItem) then
  begin
    CompDescText[2].Caption := CompDescs[CompIndex].Description;
    CompDescText[2].Enabled := True;
  end else
  begin
    CompDescText[2].Caption := CustomMessage('ComponentsInfo');
    CompDescText[2].Enabled := False;
  end;
  LastIndex := Index;
end;

procedure CompListMouseLeave(Sender: TObject);
begin
  CompDescText[2].Caption := CustomMessage('ComponentsInfo');
  CompDescText[2].Enabled := False;
  LastIndex := -1;
end;

procedure AddCompDescription(AIndex: Integer; ADescription: String; AImageName: String);
var
  i: Integer;
begin
  i := GetArrayLength(CompDescs);
  SetArrayLength(CompDescs, i + 1);
  CompDescs[i].Description := ADescription;
  CompDescs[i].Index := AIndex - 1
end;

procedure InitializeWizard();
begin
  WizardForm.SelectComponentsLabel.Hide;
  WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(184), ScaleY(205));
  WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription;
  WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave;

  CompDescPanel := TPanel.Create(WizardForm);
  with CompDescPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(192), ScaleY(125), ScaleX(225), ScaleY(80));
    BevelInner := bvLowered;
  end;

  CompDescText[2] := TLabel.Create(WizardForm);
  with CompDescText[2] do
  begin
    Parent := CompDescPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescPanel.Width - ScaleX(10), CompDescPanel.Height - ScaleY(10));
    AutoSize := False;
    WordWrap := True;
    Enabled := False;
    Caption := CustomMessage('ComponentsInfo');
  end;

  AddCompDescription(1, CustomMessage('CompDesc1'), 'False');
  AddCompDescription(2, CustomMessage('CompDesc2'), 'False');
  end;



Цитата:

Цитата Kashtan007
Возможно ли сделать так, чтобы изначально там стола картинка, а уже при наведении на компонент она заменялась на картинку компонента.
Пробовал ставить через редактор форм (BitmapImage), но тогда картинку просто закрывает, окно для картинок компонентов.
Есть какой-то другой способ? »

Вот так:
читать дальше »
Код:

[Setup]
AppName=Моя программа
AppVersion=1.5
DefaultDirName={pf}\Моя программа

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
RU.CompName1=Компонент 1
RU.CompName2=Компонент 2
RU.ComponentsInfo=Наведите курсор мыши на компонент, чтобы прочитать его описание.
RU.CompDesc1=Описание первого компонента
RU.CompDesc2=Описание второго компонента

[Files]
Source: "WizModernImage.bmp"; DestName: "CompDescImg1.bmp"; Flags: dontcopy
Source: "WizModernImage-IS.bmp"; DestName: "CompDescImg2.bmp"; Flags: dontcopy
Source: "11.bmp"; DestName: "CompDescImg3.bmp"; Flags: dontcopy

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: comp1; Description: "{cm:CompName1}"; Types: full
Name: comp2; Description: "{cm:CompName2}"; Types: full

[ Code]
type
  TComponentDesc = record
    Description: String;
    ImageName: String;
    Index: Integer;
  end;

var
  CompDescs: array of TComponentDesc;
  CompDescPanel, CompDescImgPanel: TPanel;
  CompDescText: TLabel;
  CompIndex, LastIndex: Integer;
  CompDescImg, BitmapImage: TBitmapImage;

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
  i: Integer;
begin
  if Index = LastIndex then Exit;
  CompIndex := -1;
  for i := 0 to GetArrayLength(CompDescs) -1 do
  begin
    if (CompDescs[i].Index = Index) then
    begin
      CompIndex := i;
      Break;
    end;
  end;
  if (CompIndex >= 0) and (Area = iaItem) then
  begin
    if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then
      ExtractTemporaryFile(CompDescs[CompIndex].ImageName);
    CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName);
    CompDescImg.Show;
    BitmapImage.Hide;
    CompDescText.Caption := CompDescs[CompIndex].Description;
    CompDescText.Enabled := True;
    end else
  begin
    CompDescText.Caption := CustomMessage('ComponentsInfo');
    CompDescText.Enabled := False;
    CompDescImg.Hide;
    BitmapImage.Show;
    end;
  LastIndex := Index;
 
end;

procedure CompListMouseLeave(Sender: TObject);
begin
  CompDescImg.Hide;
  CompDescText.Caption := CustomMessage('ComponentsInfo');
  CompDescText.Enabled := False;
  LastIndex := -1;
  BitmapImage.Show;
end;

procedure AddCompDescription(AIndex: Integer; ADescription: String; AImageName: String);
var
  i: Integer;
begin
  i := GetArrayLength(CompDescs);
  SetArrayLength(CompDescs, i + 1);
  CompDescs[i].Description := ADescription;
  CompDescs[i].ImageName := AImageName;
  CompDescs[i].Index := AIndex - 1
end;

procedure InitializeWizard();
begin
  WizardForm.SelectComponentsLabel.Hide;
  WizardForm.TypesCombo.Hide;
  WizardForm.ComponentsList.SetBounds(ScaleX(0), ScaleY(0), ScaleX(184), ScaleY(205));
  WizardForm.ComponentsList.OnItemMouseMove:= @ShowCompDescription;
  WizardForm.ComponentsList.OnMouseLeave := @CompListMouseLeave;

  CompDescImgPanel := TPanel.Create(WizardForm);
  with CompDescImgPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(192), ScaleY(0), ScaleX(225), ScaleY(120));
    BevelInner := bvLowered;
    end;

  BitmapImage := TBitmapImage.Create(WizardForm);
  with BitmapImage do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    ExtractTemporaryFile('CompDescImg3.bmp');
  Bitmap.LoadFromFile(ExpandConstant('{tmp}\CompDescImg3.bmp'));
  end;

  CompDescImg := TBitmapImage.Create(WizardForm);
  with CompDescImg do
  begin
    Parent := CompDescImgPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescImgPanel.Width - ScaleX(10), CompDescImgPanel.Height - ScaleY(10));
    Stretch := True;
    Hide;
  end;

  CompDescPanel := TPanel.Create(WizardForm);
  with CompDescPanel do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(192), ScaleY(125), ScaleX(225), ScaleY(80));
    BevelInner := bvLowered;
  end;

  CompDescText := TLabel.Create(WizardForm);
  with CompDescText do
  begin
    Parent := CompDescPanel;
    SetBounds(ScaleX(5), ScaleY(5), CompDescPanel.Width - ScaleX(10), CompDescPanel.Height - ScaleY(10));
    AutoSize := False;
    WordWrap := True;
    Enabled := False;
    Caption := CustomMessage('ComponentsInfo');
  end;

  AddCompDescription(1, CustomMessage('CompDesc1'), 'CompDescImg1.bmp');
  AddCompDescription(2, CustomMessage('CompDesc2'), 'CompDescImg2.bmp');
  end;


Kashtan007 21-05-2014 14:47 2353981

Shift85 и Dodakaedr, спасибо за помощь!)

P.S. Ребята выше писал, но так и не получилось сделать.

Как место серых окон (Inner Notebook и Inner Page) на страницах установщика поставить изображение (фон)?
Буду благодарен за помощь!

Dodakaedr 21-05-2014 15:56 2354011

Цитата:

Цитата Kashtan007
Как место серых окон (Inner Notebook и Inner Page) на страницах установщика поставить изображение (фон)? »

Для этого вам, наверное, придется полностью скрипт менять....Sample.rar

Kashtan007 21-05-2014 16:27 2354025

Dodakaedr, спасибо.
А легче способа нету? Вот нашел выглядеть должно примерно так.

Dodakaedr 21-05-2014 18:12 2354061

Цитата:

Цитата Kashtan007
А легче способа нету? »

Я не знаю.

Антон_Мураткин@vk 21-05-2014 21:45 2354135

Доброе время суток! Подскажите в чём ошибка. Это ошибка на музыку появляется. Когда вкл установку игры.

На скрине показывается ошибка. Этот файл есть который на скрине

http://i64.fastpic.ru/big/2014/0521/...28f444074e.png

Shift85 21-05-2014 21:49 2354137

Цитата:

Цитата Антон_Мураткин@vk
Этот файл есть который на скрине »

Антон_Мураткин@vk, Покажите секцию "[Files]" и "ExtractTemporaryFile"

Dodakaedr 21-05-2014 22:01 2354140

Цитата:

Цитата Антон_Мураткин@vk
На скрине показывается ошибка. Этот файл есть который на скрине »

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

nik1967 22-05-2014 00:07 2354183

Нафиг вообще используете эту библиотеку? В расширенной Inno давно уже есть CallbackAddr - не надо с собой ни InnoCallback.dll, ни CallbackCtrl.dll таскать.

Kashtan007 22-05-2014 00:46 2354193

Всем привет. Мне нужно реализовать 2 чекбокса на странице "Каталог" в установщике.
Т.е. у нас есть полоска выбора пути (куда устанавливать наши компоненты) и нужно чтобы под ней было 2 чекбокса.

1 чекбокс: Удаление старых компонентов. Т.е. у меня есть папка res_mods... Нужно чтобы при выборе этого чекбокса очищало папку res_mods от всего содержимого.

2 чекбокс: Бекап файлов. У меня есть папка res_mods, но допустим в ней нужные компоненты и я хочу их сохранить. То при выборе этого чекбокса будет создана копия папки res_mods которая будет называться old_res_mods.

Вот это должно выглядеть примерно так:


Буду благодарен за помощь!

Антон_Мураткин@vk 22-05-2014 10:50 2354255

Shift85, Dodakaedr, Благодарю! Сам разобрался, просто удалил в скрипте строчку CallbackCtrl.dll и всё заработало.

habib2302 22-05-2014 13:24 2354333

всем привет. хочу доработать свой репак adobe flash player и допустим если выбрать тихую установку перед установкой запускался деинсталлятор, а если устанавливать в ручную, то деинсталлятор не запускался.

Shkutu 22-05-2014 13:29 2354339

Kashtan007, как-то так
читать дальше »
Код:

var  ModCheck, BackupCheck: TNewCheckBox;

procedure  InitializeWizard;
begin
  ModCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
  ModCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
  ModCheck.Parent := PageFromID(wpSelectDir).Surface;
  ModCheck.Caption:='Удалить старые моды'; 
  ModCheck.left:=wizardForm.DirEdit.left;
  ModCheck.Top:=wizardForm.DirEdit.top + ScaleY(30);

  BackupCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
  BackupCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
  BackupCheck.Parent := PageFromID(wpSelectDir).Surface;
  BackupCheck.Caption:='Сохранить резервную копию'; 
  BackupCheck.left:=wizardForm.DirEdit.left;
  BackupCheck.Top:=ModCheck.top + ScaleY(30);
end;


Shkutu 22-05-2014 13:49 2354345

habib2302, примерно так
Код:

function InitializeSetup(): Boolean;
var ResultCode:integer;
begin
 if WizardSilent then
  if FileExists (ExpandConstant('{uninstallexe}')) then //имхо, если при установке вы что-то пишете в реестр, то перед удалением неплохо было бы еще проверять наличие в реестре данных об уже установленной версии
  Exec(ExpandConstant('{uninstallexe}'), '/SILENT', '', SW_SHOW,ewWaitUntilTerminated, ResultCode);
 result:=true;
end;


Антон_Мураткин@vk 22-05-2014 17:36 2354441

Доброе время суток! Помогите пожалуйста.

Вот этот текст:
Код:

procedure InitializeWizard();
begin
  ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('CallbackCtrl.dll');
  ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('MusicButton.png');
  ExtractTemporaryFile('Music.mp3');

  BASS_Init('{tmp}\Music.mp3') //Çàïóñêàåì ìóçûêó
  //Ìîæíî äîáàâèòü â èíñòàëë íåñêîëüêî ïåñåí
  //BASS_Init(ExpandConstant('{tmp}\*'))        //Ïîèñê ïî ìàñêå
  BASS_CreateOnOffButton(WizardForm, '{tmp}\MusicButton.png', 20, 320, 36, 36, 4) //Ñîçäàåì êíîïêó âêë/âûêë
end;

Вставить вот в этот текст.
Код:

procedure InitializeWizard;

begin
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash piratbit.png',700,1000,700,0,255,False,$FFFFFF,10);

ExtractTemporaryFile('Splash WhiteSmoke.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash WhiteSmoke.png',700,1000,700,0,255,False,$FFFFFF,10);

ExtractTemporaryFile('Splash Game.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash Game.png',700,1000,700,0,255,False,$FFFFFF,10);
WizardForm.Position:=poScreenCenter;
IsMyFont;
wzform;
btn;
welcom;
SelectDir;
Components;
ProgramGroup;
ProgramTask;
CreateControls;
Finish;
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall delayload setuponly';

procedure LoadSkinU(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
procedure UnloadSkinU(); external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';


function InitializeSetup:boolean;
var
  ResCode: integer;
begin
  ExtractTemporaryFile('Skin.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Skin.cjstyles'), '');
  Result:= true

  if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
  if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('IsMyFont.dll');
  Result:=True;
end;

А то у меня выходит ошибка то на end; то на ExtractTemporaryFile('BASS.dll');

З.Ы. Вставлял в другой скрипт всё нормально было. А в другом вот ошибки вылазиют.
Заранее благодарю.

Dodakaedr 22-05-2014 17:55 2354444

Антон_Мураткин@vk, Так пробовали?
читать дальше »
Код:

procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall delayload setuponly';

procedure LoadSkinU(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
procedure UnloadSkinU(); external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';

function InitializeSetup:boolean;
var
  ResCode: integer;
begin
  ExtractTemporaryFile('Skin.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Skin.cjstyles'), '');
  Result:= true

  if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
  if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('IsMyFont.dll');
  ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('CallbackCtrl.dll');
  ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('MusicButton.png');
  ExtractTemporaryFile('Music.mp3');
  Result:=True;
end;

procedure InitializeWizard;
begin
  BASS_Init('{tmp}\Music.mp3')
  BASS_CreateOnOffButton(WizardForm, '{tmp}\MusicButton.png', 20, 320, 36, 36, 4) //Ñîçäàåì êíîïêó âêë/âûêë

ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash piratbit.png',700,1000,700,0,255,False,$FFFFFF,10);
ExtractTemporaryFile('Splash WhiteSmoke.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash WhiteSmoke.png',700,1000,700,0,255,False,$FFFFFF,10);
ExtractTemporaryFile('Splash Game.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash Game.png',700,1000,700,0,255,False,$FFFFFF,10);
WizardForm.Position:=poScreenCenter;
IsMyFont;
wzform;
btn;
welcom;
SelectDir;
Components;
ProgramGroup;
ProgramTask;
CreateControls;
Finish;
end;


Kashtan007 22-05-2014 18:09 2354449

Shkutu, добавил это в свой скрипт. Чекбоксы появились, но функции не работают.

Антон_Мураткин@vk 22-05-2014 18:10 2354450

Dodakaedr, ДА пробовал, ошибка уже получается на
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash piratbit.png',700,1000,700,0,255,False,$FFFFFF,10);

Shkutu 22-05-2014 18:12 2354451

Приветствую всех!
Ситуация следующая: в коде используется функция из dll. Выглядит примерно так
Код:

[Files]
...
Source: "mslib.dll"; Flags: dontcopy
Source: "dblib.dll"; Flags: dontcopy
Source: "libiconv.dll"; Flags: dontcopy
;2 последние длл требуются для работы функции из 1й длл, я их просто кладу рядом с 1й

[Сode]

function GetCRMUserGuid(dbname, host, user, pass:PansiChar):PansiChar;
 external 'GetCRMUserGuid@files:mslib.dll stdcall delayload setuponly';

procedure InitializeWizard;
var s: string;
begin
 ExtractTemporaryFile('dblib.dll');
 ExtractTemporaryFile('libiconv.dll');
 s:=GetCRMUserGuid('DB', '127.0.0.1:1433', 'sa', '111');
...
end;

Когда доходит до строчки, где происходит вызов функции, падает с ошибкой "Could not call proc". Похоже на ошибку инициализации, но если смотреть в дебагере, то на этот момент все длл уже извлечены.
Не подскажете, в чем может быть проблема?

Антон_Мураткин@vk,
читать дальше »

не очень понимаю, в чем проблема скопировать то, что в функции в 1м тексте между begin и end и вставить в procedure InitializeWizard из второго текста?
Код:

procedure InitializeWizard;

begin
  ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('CallbackCtrl.dll');
  ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('MusicButton.png');
  ExtractTemporaryFile('Music.mp3');

  BASS_Init('{tmp}\Music.mp3') //Çàïóñêàåì ìóçûêó
  //Ìîæíî äîáàâèòü â èíñòàëë íåñêîëüêî ïåñåí
  //BASS_Init(ExpandConstant('{tmp}\*'))        //Ïîèñê ïî ìàñêå
  BASS_CreateOnOffButton(WizardForm, '{tmp}\MusicButton.png', 20, 320, 36, 36, 4) //Ñîçäàåì êíîïêó  âêë/âûêë
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash piratbit.png',700,1000,700,0,255,False,$FFFFFF,10);

ExtractTemporaryFile('Splash WhiteSmoke.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash WhiteSmoke.png',700,1000,700,0,255,False,$FFFFFF,10);

ExtractTemporaryFile('Splash Game.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash Game.png',700,1000,700,0,255,False,$FFFFFF,10);
WizardForm.Position:=poScreenCenter;
IsMyFont;
wzform;
btn;
welcom;
SelectDir;
Components;
ProgramGroup;
ProgramTask;
CreateControls;
Finish;
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall delayload setuponly';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall delayload setuponly';

procedure LoadSkinU(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';
procedure UnloadSkinU(); external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload uninstallonly';


function InitializeSetup:boolean;
var
  ResCode: integer;
begin
  ExtractTemporaryFile('Skin.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Skin.cjstyles'), '');
  Result:= true

  if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
  if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('IsMyFont.dll');
  Result:=True;
end;

Не уверена, что вставлять надо именно в начало, ибо не знаю, что за функции у вас используются и, соответственно, в каком порядке их лучше выполнять.

Kashtan007,
читать дальше »
не понимаю, какие функции вы имеете в виду?
Вы просили добавить чекбоксов, в моем примере как раз это. Их обработку надо прописывать отдельно. Выглядеть может примерно так:
Код:

procedure CurStepChanged (CurStep: TSetupStep);
begin
 if (CurStep==ssInstall) then
 begin
    if BackupCheck.Checked then
  begin
    //бэкапите старые моды
  end;
  if ModCheck.Checked then
    begin
      //Удаляете старые моды
    end;
 end;
end;


Kashtan007 22-05-2014 18:25 2354456

Shkutu, спасибо.
Я указывал, что мне нужно не только чекбоксы а еще чтобы они выполняли функции. Удаления и бекапа.

Есть ли полный код на бекап папки и удаление папки. Заранее спасибо!

Антон_Мураткин@vk 22-05-2014 18:32 2354462

Shkutu, Если было бы так просто я бы не написал чтобы помогли. Пробовал я так ошибка идёт на end;

Shkutu 22-05-2014 18:52 2354467

Kashtan007, у меня к сожаление полного кода на подобные вещи нету. Попробуйте поискать по форуму, потому что, насколько я помню, подобный вопрос уже обсуждался.
http://forum.oszone.net/post-2307050-2242.html - здесь что-то похожее, но можно еще поискать.
Антон_Мураткин@vk,
читать дальше »
хм.. я копировала не глядя, так что в моем примере не хватает нескольких точек с запятой. Если их добавить, то на end; ругаться не должен. И извините за возможно глупый вопрос, но у вас точно все необходимые функции объявлены? Просто в вашем примере объявлено всего несколько функций, а используется их гораздо больше. И тот факт, что компилятор на них ругается, чаще говорит о том, что функции не объявлены. А вообще, вы бы хоть тект ошибки приводили, а то "получается ошибка" это как-то расплывчато.

Kashtan007 22-05-2014 18:55 2354469

Shkutu, ок спасибо поищу.

Irenis 22-05-2014 19:19 2354482

Всем привет)) Вроде бы немного научилась создавать установщики. Но опять возникли трудности. Объясню на примере. Есть игровая компания Game Net. При установке их игр, сначала устанавливается игровой клиент GameNet, а через него уже грузится игра. Подскажите пожалуйста, как создавать такие установщики? Пробовала отдельно делать установщик GameNet и установщик нужной мне игры. Но они естественно друг друга не видят. То есть, если зайти в клиент GameNet, то он просто начинает загружать игру снова. Клиент же самой игры так же работает не корректно.

Другой пример. Игры от компании Game XP. Тут в принципе так же, сначала устанавливается клиент Game XP, а из него уже–игра. Сделала установщик самой игры. Игра запускается только если запускать ее из папки с игрой. Если же запускать с рабочего стола, то постоянно не хватает какого то файла ***.dll и игра не запускается. Если поместить этот ***.dll на рабочий стол, то требует какого то другого ***.dll. В общем как то так :sorry: И как с этим бороться не знаю, и в инете что то ничего не могу найти по этому поводу.

audiofeel 22-05-2014 19:57 2354506

Цитата:

Цитата Irenis
То есть, если зайти в клиент GameNet, то он просто начинает загружать игру снова. Клиент же самой игры так же работает не корректно. »

надо наверняка отследить какие изменения вносит в реестр веб установщик- (я делаю так, просто в реестре ищу по поиску искомое значение -например название издателя или название самой игры)
Цитата:

Цитата Irenis
Игра запускается только если запускать ее из папки с игрой. Если же запускать с рабочего стола, то постоянно не хватает какого то файла ***.dll и игра не запускается. Если поместить этот ***.dll на рабочий стол, то требует какого то другого ***.dll. В общем как то так И как с этим бороться не знаю, и в инете что то ничего не могу найти по этому поводу. »

было у меня такое года 3 -4 назад, со сталкером, нужно было "правильно" указать рабочую папку для файла запуска, в свойствах ярлыка (проще говоря изменить ее)
параметр = WorkingDir: {app} указывает на то, что рабочая папка для создаваемого ярлыка будет как и по умолчанию, то есть это папка приложения, но во многих играх особенно на движке unreal, папка где хранится файл запуска находится в подпапке, обычно Bin, Binaries и тд

[Icons]

Name: {userdesktop}\Название игры; Filename: {app}\файл запуска игры; WorkingDir: место где расположен файл запуска игры

Irenis 22-05-2014 21:24 2354534

audiofeel, спасибо :) Только вроде бы и понятно, но не совсем. Я честно говоря, обычно создаю установщик через мастера, а в получившемся скрипте уже дописываю то что мне нужно, точнее копирую и вставляю необходимые коды. У меня сейчас вот так

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon

То есть ничего не убирать, а просто ниже дописать эту строчку?
Игра World of Dragons. Значит просто написать World of Dragons?
Не совсем поняла, что писать там, где файл запуска игры.
Место где расположен файл запуска игры: "C:\GameXP\AccessPoint\installed\World of Dragons\WOD.exe". То есть так и прописать путь?

audiofeel 22-05-2014 21:32 2354536

если игра устанавливается по умолчанию в C:\GameXP\AccessPoint\installed\World of Dragons\, а файл запуска "лежит" по пути
C:\GameXP\AccessPoint\installed\World of Dragons\WOD.exe, то и "рабочая папка у него находится там же = C:\GameXP\AccessPoint\installed\World of Dragons
а что у вас указанно в #define {#MyAppName} ?????
читать дальше »
; Ñêðèïò ñîçäàí ÷åðåç Ìàñòåð Inno Setup Script.
; ÈÑÏÎËÜÇÓÉÒÅ ÄÎÊÓÌÅÍÒÀÖÈÞ ÄËß ÏÎÄÐÎÁÍÎÑÒÅÉ ÈÑÏÎËÜÇÎÂÀÍÈß INNO SETUP!

#define MyAppName "World of Dragons"
#define MyAppVersion "1.5"
#define MyAppPublisher "GameXP"
#define MyAppURL "http://www.ñàéò.com/"
#define MyAppExeName "WOD.exe"

[Setup]
; Ïðèìå÷àíèå: Çíà÷åíèå AppId èäåíòèôèöèðóåò ýòî ïðèëîæåíèå.
; Íå èñïîëüçóéòå îäíî è òîæå çíà÷åíèå â ðàçíûõ óñòàíîâêàõ.
; (Äëÿ ãåíåðàöèè çíà÷åíèÿ GUID, íàæìèòå Èíñòðóìåíòû | Ãåíåðàöèÿ GUID.)
AppId={{5579DEF8-4821-43B2-B20A-F0768A5F1284}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\GameXP\AccessPoint\installed\World of Dragon
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
; Ïðèìå÷àíèå: Íå èñïîëüçóéòå "Flags: ignoreversion" äëÿ ñèñòåìíûõ ôàéëîâ
Source: WOD.exe; DestDir: {app}

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: quicklaunchicon

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



http://file.sampo.ru/nkz7n3/

Irenis 22-05-2014 21:35 2354538

Цитата:

Цитата audiofeel
надо наверняка отследить какие изменения вносит в реестр веб установщик »

То есть нужно просто все, что найду в реестре, связанное в веб установщиком, экспортировать и потом вставить в скрипт? Или что то еще делать? Просто насчет реестра мне тоже не все понятно. Я уже выше писала, что уроки всякие смотрела и читала про создание установщиков. Так где то говорится, что файлы (или значения правильно?) реестра просто вставить в скрипт. А где то сказано, что этот реестр нужно вставлять через ISTool и еще там какие то команды выполнять. :unsure:

Цитата:

Цитата audiofeel
а что у вас указанно в #define {#MyAppName} ????? »

#define MyAppName "World of Dragons"

audiofeel 22-05-2014 21:53 2354551

вот честно, про эту игру я ни чего не знаю, иногда достаточно указать один ключь, иногда необходимо наличие пристутствия определенного файла в какой нить папке, чаще скрытой
давайте сперва разберемся почему ярлык не работает, а потом уже нужно разбираться почему не видит веб установщик что игра уже установленна
выложите скрипт на файлообменник

Irenis 22-05-2014 22:12 2354557

Цитата:

Цитата audiofeel
если игра устанавливается по умолчанию в C:\GameXP\AccessPoint\installed\World of Dragons\ »

Цитата:

Цитата audiofeel
давайте сперва разберемся почему ярлык не работает »

Знаете, вы меня натолкнули на мысль, что я изначально все неправильно сделала. Просто у меня уже в C:\GameXP\AccessPoint куча папок и файлов, а сама игра ведь и правда в C:\GameXP\AccessPoint\installed\World of Dragons, а то что в AccessPoint это файлы веб установщика, я так понимаю. И архивировать нужно было все что в папке World of Dragons, а не в папке AccessPoint, как сделала я. Может поэтому не работает?

saurn 22-05-2014 22:20 2354560

Irenis, audiofeel, рабочая папка указывает на то, какая папка будет сделана текущей при запуске приложения, в которой рассположены определенные файлы. И это не всегда та папка, в которой находится ексишник.

Dodakaedr 22-05-2014 22:28 2354567

Вложений: 1
Цитата:

Цитата Kashtan007
Всем привет. Мне нужно реализовать 2 чекбокса на странице "Каталог" в установщике.
Т.е. у нас есть полоска выбора пути (куда устанавливать наши компоненты) и нужно чтобы под ней было 2 чекбокса.
1 чекбокс: Удаление старых компонентов. Т.е. у меня есть папка res_mods... Нужно чтобы при выборе этого чекбокса очищало папку res_mods от всего содержимого.
2 чекбокс: Бекап файлов. У меня есть папка res_mods, но допустим в ней нужные компоненты и я хочу их сохранить. То при выборе этого чекбокса будет создана копия папки res_mods которая будет называться old_res_mods. »

Попробуйте вот так:
читать дальше »
Код:

#include "SHFileOperation.iss"

[Setup]
AppName=Моя программа
AppVersion=1.5
DefaultDirName={pf}\Моя программа

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"

[ Code]
var
ModCheck, BackupCheck: TNewCheckBox;

procedure  InitializeWizard;
begin
  ModCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
  ModCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
  ModCheck.Parent := PageFromID(wpSelectDir).Surface;
  ModCheck.Caption:='Удалить все старые моды';
  ModCheck.left:=wizardForm.DirEdit.left;
  ModCheck.Top:=wizardForm.DirEdit.top + ScaleY(30);

  BackupCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
  BackupCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
  BackupCheck.Parent := PageFromID(wpSelectDir).Surface;
  BackupCheck.Caption:='Сохранить резервную копию старых модов';
  BackupCheck.left:=wizardForm.DirEdit.left;
  BackupCheck.Top:=ModCheck.top + ScaleY(30);
end;

procedure CurStepChanged (CurStep: TSetupStep);
begin
 if CurStep=ssInstall then
 if BackupCheck.Checked then
 begin
 CopyDir(ExpandConstant('{app}\res mods\'),ExpandConstant('{app}\old res mods'));
end;

if ModCheck.Checked then
begin
  DelTree(ExpandConstant('{app}\res mods\*'), False, True, True);
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
 if CurUninstallStep = usPostUninstall then
begin
  MoveDir(ExpandConstant('{app}\old res mods\'), ExpandConstant('{app}\res mods'));
  RemoveDir(ExpandConstant('{app}\old res mods'));
end;
end;


Kashtan007 23-05-2014 00:02 2354609

Dodakaedr, спасибо большое)

saneksanek 23-05-2014 05:48 2354662

Уважаемые форумчане.Может кто-то помочь из данного кода вырезать код плеера.Как не ковырял все с ошибкой идет
Что требуется
Сам код:http://yadi.sk/d/wSVC64JhR47hf

Dodakaedr 23-05-2014 07:51 2354677

saneksanek, Выложите все файлы необходимые для работы вашего скрипта, потому что никто не будет сам искать всякие dll-ки, mp3 файлы и т.д.

Dodakaedr 23-05-2014 08:14 2354685

Цитата:

Цитата Kashtan007
Как место серых окон (Inner Notebook и Inner Page) на страницах установщика поставить изображение (фон)? »

Цитата:

Цитата Kashtan007
А легче способа нету? »

Возможно такой подойдет:
читать дальше »
Код:

#include "WizardFormResise.iss"

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
WizardImageFile=Fon.bmp
OutputBaseFilename=2

[Files]
Source: IsPicture_for_all.dll; Flags: dontcopy
Source: Fon.bmp; Flags: dontcopy


[ Code]
procedure Initialize(AhWnd,BhWnd:hWnd);external 'Initialize@{tmp}\IsPicture_for_all.dll stdcall delayload';
procedure Deinitialize;external 'Deinitialize@{tmp}\IsPicture_for_all.dll stdcall delayload';
function NewFont(Height:Integer;thickness,italic,underline,strikeout:DWORD;name:String):hWnd;external 'NewFont@{tmp}\IsPicture_for_all.dll stdcall delayload';
function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

const
  TfonColor = $000008; // Цвет фона $000008 - не изменять!
  TfontColor = $ffffff; // Цвет тeкста

Var Font1,Font2:hWnd;


function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('IsPicture_for_all.dll');
  ExtractTemporaryFile('fon.bmp');
  Result:=True;
end;

procedure InitializeWizard();
begin
Font1:= NewFont(16,600,0,0,0,'Comic Sans MS');
Font2:= NewFont(24,900,0,0,0,'Tahoma');

    WizardForm.WizardSmallBitmapImage.Hide;
    WizardForm.WizardBitmapImage2.Hide;
    WizardForm.DirEdit.AutoSelect:=False;

    WizardForm.WelcomePage.Color:=TfonColor;// не изменять!
    WizardForm.FinishedPage.Color:=TfonColor;
    WizardForm.InnerPage.Color:=TfonColor;
    WizardForm.DirEdit.Color:=TfonColor;
    WizardForm.ReadyMemo.Color:=TfonColor;
    WizardForm.MainPanel.Color:=TfonColor;

    WizardForm.Font.Handle:=Font1;
    WizardForm.WelcomeLabel1.Font.Handle := Font2;
    WizardForm.FinishedHeadingLabel.Font.Handle := Font2;
    WizardForm.PageNameLabel.Font.Handle := Font1;
    WizardForm.PageNameLabel.Font.Color := clGreen;
    WizardForm.Font.Color:=TfontColor;

    WizardForm.SelectDirBitmapImage.BackColor := clNone;
    WizardForm.SelectDirBitmapImage.ReplaceColor := clBtnFace;

    WizardForm.WizardBitmapImage.Parent := MainForm;
    WizardForm.WizardBitmapImage.SetBounds(0, 0, WizardForm.ClientWidth, WizardForm.ClientHeight);

    Initialize(WizardForm.Handle,MainForm.Handle);
end;

procedure DeinitializeSetup();
begin
  Deinitialize;
end;


Dodakaedr 23-05-2014 08:42 2354696

saneksanek, Есть вот такой пример по вашему вопросу:
читать дальше »
Код:

#include "botva2.iss"
#include "BASS_Module.iss"

[Setup]
AppName=BassExample
AppVerName=BassExample
DefaultDirName={pf}\BassExample

[Files]
Source: compiler:Dll Pack\BASS.dll;  Flags: dontcopy
Source: compiler:Dll Pack\CallbackCtrl.dll;  Flags: dontcopy
Source: compiler:Dll Pack\botva2.dll;  Flags: dontcopy
Source: BASS_Files\*;  Flags: dontcopy
//Source: music.mp3;  DestDir: {tmp}; Flags: dontcopy

[ code]
procedure InitializeWizard();
begin
  ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('CallbackCtrl.dll');
  ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('volmax.png');
  ExtractTemporaryFile('volmin.png');
  ExtractTemporaryFile('volpb.png');
  ExtractTemporaryFile('voldote.png');
  //ExtractTemporaryFile('Music.mp3');

  //BASS_Init('{tmp}\Music.mp3')  //Запускаем музыку
  //Можно добавить в инсталл несколько песен
  //BASS_Init(ExpandConstant('{tmp}\*'))        //Поиск по маске
 
  //Создаем регулятор громкости
  BASS_CreateMediaPlayer(WizardForm, '{tmp}\volmax.png', '{tmp}\volmin.png', '{tmp}\volpb.png', '{tmp}\voldote.png', 20, 325)
end;

procedure DeinitializeSetup();
begin
  //BASS_DeInit; //Освобождаем процесс
  gdipShutdown
end;

файлы.rar

El Sanchez 23-05-2014 10:13 2354722

Цитата:

Цитата Kashtan007
Как место серых окон (Inner Notebook и Inner Page) на страницах установщика поставить изображение (фон)? »

Способов несколько:
1. Самый распространенный способ - скрыть OuterNotebook, влепить фоновую картинку на форму, сверху создать аналоги скрытых статиков (TNewStaticText -> TLabel), менять родителя остальных контролов (TBitmapImage, TEdit, TNewCheckListBox и т.д.) в нужное время для имитации перехода между страницами.
2. Сабклассинг. Переопределить оконные процедуры WizardForm, страниц OuterNotebook (включая вложенные) на свои и отрисовывать фон самому. В TWizardForm и TNewNotebookPage фон рисуется с помощью системной кисти цвета clBtnFace, которую можно представить как узорчастую кисть цвета clBtnFace размером в 1х1 пикселя. Имея картинку, можно создать узорчастую кисть на ее основе, и рисовать фон ею вместо системной в своей оконной процедуре. В примере создается кисть на основе картинки (я не стал создавать кисть на основе картинки с размерами клиентской части формы, взял WizardSmallBitmapImage, чтобы увидеть воочию как система заливает фон кистью), переопределяются оконные процедуры для TWizardForm и TNewNotebookPage, в оконных процедурах фон рисуется созданной кистью при получении сообщения WM_ERASEBKGND.
читать дальше »

Код:

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[code]
#define A = (Defined UNICODE) ? "W" : "A"
const
   
GWL_USERDATA = (-21);
    GWL_WNDPROC = (-4);
    WM_ERASEBKGND = $0014;
    GA_ROOT = 2;

var
   
g_hBackgroundBrush: THandle;
    g_pWndProc, g_pNotebookPageWndProc: Longint;

function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam: Longint; lParam: Longint): Longint; external 'CallWindowProc{#A}@user32.dll stdcall';
function CreatePatternBrush(hbmp: HBITMAP): THandle; external 'CreatePatternBrush@gdi32.dll stdcall';
function DeleteObject(hObject: THandle): BOOL; external 'DeleteObject@gdi32.dll stdcall';
function GetUpdateRect(hWnd: HWND; var lpRect: TRect; bErase: BOOL): BOOL; external 'GetUpdateRect@user32.dll stdcall';
function GetAncestor(hwnd: HWND; gaFlags: UINT): HWND; external 'GetAncestor@user32.dll stdcall';
function FillRect(hDC: Longint; const lprc: TRect; hbr: Longint): Integer; external 'FillRect@user32.dll stdcall';
function MapWindowPoints(hWndFrom, hWndTo: HWND; var lpPoints: TPoint; cPoints: UINT): Integer; external 'MapWindowPoints@user32.dll stdcall';
function SetBrushOrgEx(hdc: Longint; nXOrg, nYOrg: Integer; var lppt: TPoint): BOOL; external 'SetBrushOrgEx@gdi32.dll stdcall';

//////////////////////////////////////////////////////////////////////////
function WndProc(hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint;
var
   
rc: TRect;
begin
    case
Msg of
       
WM_ERASEBKGND: begin
           
GetUpdateRect(hWnd, rc, False);
            FillRect(wParam, rc, g_hBackgroundBrush);
            Result := 1;
        end;
    else
       
Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
    end;
end;

//////////////////////////////////////////////////////////////////////////////////////
function NotebookPageWndProc(hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint;
var
   
pt: TPoint;
    rc: TRect;
begin
    case
Msg of
       
WM_ERASEBKGND: begin
           
MapWindowPoints(hWnd, GetAncestor(hWnd, GA_ROOT), pt, 1);
            SetBrushOrgEx(wParam, -pt.x, -pt.y, pt);
            GetUpdateRect(hWnd, rc, False);
            FillRect(wParam, rc, g_hBackgroundBrush);
            Result := 1;
        end;
    else
       
Result := CallWindowProc(GetWindowLong(hWnd, GWL_USERDATA), hWnd, Msg, wParam, lParam);
    end;
end;

//////////////////////////////////////////////////////////
procedure SubclassControlProc(const Control: TWinControl);
var
   
i: Integer;
begin
    for
i := 0 to Control.ControlCount-1 do if Control.Controls[i] is TWinControl then
    begin
       
// subclass notebook page
       
if Control.Controls[i] is TNewNotebookPage then with TNewNotebookPage(Control.Controls[i]) do
            if
GetWindowLong(Handle, GWL_USERDATA) = 0 then
               
SetWindowLong(Handle, GWL_USERDATA, SetWindowLong(Handle, GWL_WNDPROC, g_pNotebookPageWndProc));

        if TWinControl(Control.Controls[i]).ControlCount > 0 then
           
SubclassControlProc(TWinControl(Control.Controls[i]));
    end;
end;

///////////////////////////////////
procedure SubclassWizardFormProc();
begin
   
// callback proc
   
if g_pWndProc = 0 then g_pWndProc := CallbackAddr('WndProc');
    if g_pNotebookPageWndProc = 0 then g_pNotebookPageWndProc := CallbackAddr('NotebookPageWndProc');

    // subclass WizardForm
   
if GetWindowLong(WizardForm.Handle, GWL_USERDATA) = 0 then
       
SetWindowLong(WizardForm.Handle, GWL_USERDATA, SetWindowLong(WizardForm.Handle, GWL_WNDPROC, g_pWndProc));

    // subclass controls
   
SubclassControlProc(WizardForm);
end;

////////////////////////////////////////////////////////////
procedure UnSubclassControlProc(const Control: TWinControl);
var
   
i: Integer;
begin
    for
i := 0 to Control.ControlCount-1 do if Control.Controls[i] is TWinControl then
    begin
       
// unsubclass notebook page
       
if (Control.Controls[i] is TNewNotebookPage) then with TNewNotebookPage(Control.Controls[i]) do
            if
GetWindowLong(Handle, GWL_USERDATA) > 0 then
               
SetWindowLong(Handle, GWL_WNDPROC, GetWindowLong(Handle, GWL_USERDATA));

        if TWinControl(Control.Controls[i]).ControlCount > 0 then
           
UnSubclassControlProc(TWinControl(Control.Controls[i]));
    end;
end;

/////////////////////////////////////
procedure UnSubclassWizardFormProc();
begin
   
// unsubclass controls
   
UnSubclassControlProc(WizardForm);

    // unsubclass WizardForm
   
if GetWindowLong(WizardForm.Handle, GWL_USERDATA) > 0 then
       
SetWindowLong(WizardForm.Handle, GWL_WNDPROC, GetWindowLong(WizardForm.Handle, GWL_USERDATA));
end;

/////////////////////////////
procedure InitializeWizard();
begin
   
// create pattern brush
   
g_hBackgroundBrush := CreatePatternBrush(WizardForm.WizardSmallBitmapImage.Bitmap.Handle);

    // subclass
   
SubclassWizardFormProc();
end;

//////////////////////////////
procedure DeinitializeSetup();
begin
   
// unsubclass
   
UnSubclassWizardFormProc();

    // delete pattern brush
   
if g_hBackgroundBrush <> 0 then DeleteObject(g_hBackgroundBrush);
end;


Цитата:

Цитата Shkutu
Когда доходит до строчки, где происходит вызов функции, падает с ошибкой "Could not call proc". Похоже на ошибку инициализации, но если смотреть в дебагере, то на этот момент все длл уже извлечены.
Не подскажете, в чем может быть проблема? »

Shkutu, с типами параметров что-то напутали в GetCRMUserGuid. Попробуйте сменить PAnsiChar на String.

Shkutu 23-05-2014 12:05 2354766

El Sanchez, в каком смысле напутала?) Библиотека моя, и в качестве параметров там pchar, который в инно как раз pansichar. А в самой библиотеке (она на fpc) юзать стринги не получается

saurn 23-05-2014 12:27 2354775

Shkutu, залейте скрипт с дллками. Гляну.

Shkutu 23-05-2014 14:32 2354833

saurn, вот, несколько обрезанный, а то там много было
http://www.ex.ua/290099597218

altef_4 23-05-2014 14:38 2354836

Shkutu
Код:

[Files]
...
Source: "mslib.dll"; Flags: dontcopy
Source: "dblib.dll"; Flags: dontcopy
Source: "libiconv.dll"; Flags: dontcopy
;2 последние длл требуются для работы функции из 1й длл, я их просто кладу рядом с 1й

[Сode]

function GetCRMUserGuid(dbname, host, user, pass:PansiChar):PansiChar;
 external 'GetCRMUserGuid@{tmp}\mslib.dll stdcall delayload setuponly';

procedure InitializeWizard;
var s: string;
begin
 ExtractTemporaryFile('dblib.dll');
 ExtractTemporaryFile('libiconv.dll');
 ExtractTemporaryFile('mslib.dll');
 s:=GetCRMUserGuid('DB', '127.0.0.1:1433', 'sa', '111');
...
end;


Alloc 23-05-2014 14:58 2354849

Приветствую всех! Уважаемые, подскажите как реализовать задачу:

Вообщем инсталлятор двуязычный: русский/английский (выберается сразу).
Необходимо как-то определить какой язык был выбран и в соответствие с этим выбором дать знать инсталлятору какой из файлов грузить в "InfoBeforeFile"

Код:

#ifdef InfoBefore
#if {language} = "english"
InfoBeforeFile=InfoB_E.rtf
 #if {language} = "russian"
InfoBeforeFile=InfoB_R.rtf
#endif

что то типо это.. надеюсь вы поняли мою мысль. Помогите разобраться пожалуйста. Заранее спасибо

Shkutu 23-05-2014 15:16 2354856

altef_4, вместо files {tmp} указать? Так я уже пробовала, не помогает
Alloc, попробуйте так
Код:

[Languages]
Name: "English"; MessagesFile: "compiler:Default.isl"; InfobeforeFile: "InfoB_E.rtf"
Name: "Russian"; MessagesFile: "compiler:Languages\Russian.isl"; InfobeforeFile:"InfoB_R.rtf


saurn 23-05-2014 15:44 2354868

Shkutu, смотрите в сторону библиотеки, что то вы напутали, при ее создании.

El Sanchez 23-05-2014 16:21 2354880

Цитата:

Цитата Shkutu
Библиотека моя, и в качестве параметров там pchar »

Shkutu, почитайте здесь, пример в конце как раз ваш случай.

Shkutu 23-05-2014 16:24 2354881

saurn, была у меня такая мысль. Хотя с fpc приложением библиотека работает, это я проверяла. Ладно, буду разбираться

Антон_Мураткин@vk 23-05-2014 16:48 2354886

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

Код:

Panel1 := TPanel.Create(WizardForm);
with Panel1 do begin
Parent := WizardForm;
SetBounds(ScaleX(0),ScaleY(-195),ScaleX(650),ScaleY(195));
Color := clblack;
ParentBackground := False;
end;

Заранее благодарю.

Alloc 23-05-2014 16:49 2354887

Shkutu, спасибо большое, это именно то, что надо. Есть еще вопросик.. не могли бы Вы мне помочь?

помогите грамотно (логично) переделать мою писанину:

Код:

[Languages]
#ifdef InfoBefore
Name: rus; MessagesFile: compiler:Languages\Russian.isl; InfoBeforeFile: "InfoB_R.rtf";
Name: eng; MessagesFile: compiler:Languages\English.isl; InfoBeforeFile: "InfoB_E.rtf";
#endif
#ifdef InfoAfter
Name: rus; MessagesFile: compiler:Languages\Russian.isl; InfoAfterFile: "InfoB_R.rtf"; InfoAfterFile: "InfoA_R.rtf";
Name: eng; MessagesFile: compiler:Languages\English.isl; InfoAfterFile: "InfoB_E.rtf"; InfoAfterFile: "InfoA_E.rtf";
#endif

#ifndef InfoBefore and  InfoAfter (если не то и не другое то загрузить:
Name: rus; MessagesFile: compiler:Languages\Russian.isl;
Name: eng; MessagesFile: compiler:Languages\English.isl;
#endif

вообщем у меня есть две константы : InfoBefore, InfoAfter;
при раскомментирование должен грузится соответствующий файл : InfoBeforeFile: InfoB_* / InfoAfterFile: InfoA_*, при этом необходимо как то сообщить инсталлятору какой язык был выбран, и исходя из этого выбора грузить русскую версию или английскую "InfoBeforeFile/InfoAfterFile"... никак не могу реализовать....

Shkutu 23-05-2014 17:06 2354892

El Sanchez, спасибо, буду смотреть
Alloc, для "спасибо" есть "полезные сообщения":))
читать дальше »

А вообще я не совсем поняла, что вам нужно. Если просто выводить различные файлы в зависимости от языка, то для InfoAfterFile это аналогично InfoBeforeFile. Т е в результате будет
Код:

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl; InfoBeforeFile: "InfoB_R.rtf"; InfoAfterFile: "InfoA_R.rtf";
Name: eng; MessagesFile: compiler:Languages\English.isl; InfoBeforeFile: "InfoB_E.rtf"; InfoAfterFile: "InfoA_E.rtf";

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

const/var InfoBefore, InfoAfter...; //задаете ваши константы или делаете глобальными переменными, если они от чего-то зависят
function ShouldSkipPage(PageID:integer):boolean;
begin
 case PageID of
  wpInfoBefore: result:=InfoBefore=<значение_при_котором_страница_пробрасывается>;
  wpInfoAfter result:=InfoAfter=<значение_при_котором_страница_пробрасывается>;
end;


Shift85 23-05-2014 17:23 2354896

Цитата:

Цитата Антон_Мураткин@vk
Вот в эту панель можно добавить прозрачность? »

Антон_Мураткин@vk, Тут ведь все подробно расписано.

Код:

procedure InitializeWizard();
begin
  // Необходимо добавлять каждую кнопку расположенную на стекле
  // до инициализации стекла для того что бы не было дыр ))
  iswin7_add_button(WizardForm.BackButton.Handle);
  iswin7_add_button(WizardForm.NextButton.Handle);
  iswin7_add_button(WizardForm.CancelButton.Handle);
  // Параметр True не трогать он для htuos ))
  iswin7_add_glass(WizardForm.Handle, 0, 0, 0, 47, True);
end;


Антон_Мураткин@vk 23-05-2014 17:31 2354899

Shift85, Что то так и не понял как это применить в текст который выше

Dodakaedr 23-05-2014 18:00 2354909

Антон_Мураткин@vk, Попробуйте так
Код:

Panel1 := TPanel.Create(WizardForm);
with Panel1 do begin
Parent := WizardForm;
SetBounds(ScaleX(0),ScaleY(-195),ScaleX(650),ScaleY(195));
ParentBackground := True;
end;


Irenis 23-05-2014 18:17 2354916

Есть несколько вопросов :)

1.Подскажите, как в скрипте прописать, если нужно, чтобы установщик распаковал два arc архива. Вот если нужно распаковать один архив, в скрипте идет такая строчка:

if not ISArcExtract ( 0, OveralPct, 0, ExpandConstant('{src}\Reborn.arc'), ExpandConstant('{app}\'),

А чтобы распаковать два архива, просто добавить такую же строчку, только с названием второго архива? Или как?

2. Вот пример скрипта. Скрипт. При установке игры внизу надпись "требуется как минимум 5.1 Мб свободного дискового пространства". Где в скрипте прописать, сколько места требуется на самом деле, например 5.4 Гб?

3. Уже задавала вопрос по поводу создания установщиков, которые состоят из веб-загрузчика и самой игры. Как совместить? Мне уже писали, что нужно найти записи из реестра. А что делать с этим реестром? Как правильно вставить в скрипт? И достаточно ли будит этого, чтоб игра и загрузчик видели друг друга?

Буду рада любым советам :yes:

saurn 23-05-2014 18:25 2354920

Цитата:

Цитата Irenis
А чтобы распаковать два архива, просто добавить такую же строчку, только с названием второго архива? Или как? »

Именно так.
Цитата:

Цитата Irenis
При установке игры внизу надпись "требуется как минимум 5.1 Мб свободного дискового пространства". Где в скрипте прописать, сколько места требуется на самом деле, например 5.4 Гб? »

Код:

[Setup]
ExtraDiskSpaceRequired=5700000000 {Значение указывается в байтах}


Антон_Мураткин@vk 23-05-2014 19:19 2354942

Dodakaedr, нет не работает.

З.Ы. Или хотя бы полу прозрачность в(%) как нибудь добавить в этот текст? Очень надо, а у самого что то не получается

З.Ы.Ы. И ещё вопросик. Установил музыку в скрипт она работает всё нормально но картинки нет чтобы вкл выкл песню (звук). Точней картинка есть но она под другой. Как мне картинку с вкл выкл музыки на передний план сделать?

Заранее благодарю!!!

saneksanek 23-05-2014 19:51 2354952

Dodakaedr,
Мой косяк,извиняюсь.http://yadi.sk/d/_H8RyqgdR7VUj

Dodakaedr 23-05-2014 20:03 2354957

saneksanek, Вы этот пост смотрели? Оно или нет?

saneksanek 23-05-2014 20:24 2354963

Dodakaedr,
С вашим предоставленным кодам выдает ошибку "Could not call proc." в чем может быть проблема?

Dodakaedr 23-05-2014 20:28 2354964

saneksanek, а файлы скачали которые прилагаются в посте?
читать дальше »
Код:

#include "botva2.iss"
#include "BASS_Module.iss"

[Setup]
AppName=BassExample
AppVerName=BassExample
DefaultDirName={pf}\BassExample

[Files]
Source: BASS.dll;  Flags: dontcopy
Source: CallbackCtrl.dll;  Flags: dontcopy
Source: botva2.dll;  Flags: dontcopy
Source: BASS_Files\*;  Flags: dontcopy
//Source: music.mp3;  DestDir: {tmp}; Flags: dontcopy

[ code]
procedure InitializeWizard();
begin
  ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('CallbackCtrl.dll');
  ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('volmax.png');
  ExtractTemporaryFile('volmin.png');
  ExtractTemporaryFile('volpb.png');
  ExtractTemporaryFile('voldote.png');
  //ExtractTemporaryFile('Music.mp3');

  //BASS_Init('{tmp}\Music.mp3')  //Запускаем музыку
  //Можно добавить в инсталл несколько песен
  //BASS_Init(ExpandConstant('{tmp}\*'))        //Поиск по маске
 
  //Создаем регулятор громкости
  BASS_CreateMediaPlayer(WizardForm, '{tmp}\volmax.png', '{tmp}\volmin.png', '{tmp}\volpb.png', '{tmp}\voldote.png', 20, 325)
end;

procedure DeinitializeSetup();
begin
  //BASS_DeInit; //Освобождаем процесс
  gdipShutdown
end;


saneksanek 23-05-2014 20:49 2354969

Dodakaedr,
Нет,проглядел.Добавил ваши модули все заработало спс

Kashtan007 23-05-2014 21:18 2354972

Dodakaedr, все отлично работает, но есть небольшой баг.
При открытии установщика проскакивает синий фон с названием установщика. С чем это может быть связано?
Вот видео, на нем все видно http://youtu.be/iRQXMh1y7g0

Dodakaedr 23-05-2014 21:51 2354981

Вложений: 1
Цитата:

Цитата Kashtan007
С чем это может быть связано? »

Не знаю, наверное это баг самой dll-ки...
Попробуйте вот это

saneksanek 23-05-2014 22:30 2354997

Теперь выходит проблема такая.
При запуске exe выходит так
Но если нажать далее а потом назад то все нормально будет
Можно-ли как-то исправить.
Конфликт я думаю идет с этим кодом.
читать дальше »
Код:

var MainImage    : TBitmapImage;
    FinishedImage: TBitmapImage;
    WelcomeLabel1, WelcomeLabel2,StartMenuLbl,FinishedLabel,Welcome1,Welcome2,NeedSpaceLabel,SelectTasksLabel, FreeSpaceLabel, FinishedHeadingLabel: TLabel;

procedure InitializeWizard3();
begin
    ExtractTemporaryFile('1.bmp');
    MainImage := TBitmapImage.Create(WizardForm);
    with MainImage do
    begin
        Parent := WizardForm;
        Left := 0;
        Top := 0;
        Width := 500;
        Height := 313;
        Bitmap.LoadFromFile(ExpandConstant('{tmp}\1.bmp'));
end;

ExtractTemporaryFile('5.bmp');
    FinishedImage := TBitmapImage.Create(WizardForm);
    with FinishedImage do
    begin
        Parent := WizardForm;
        Left := 0;
        Top := 0;
        Width := 500;
        Height := 313;
        Bitmap.LoadFromFile(ExpandConstant('{tmp}\5.bmp'));
    end;

Welcome1:= TLabel.Create(WizardForm);
  with Welcome1 do
  begin
    Left:= ScaleX(150);
    Top:= ScaleY(26);
    Width:= ScaleX(301);
    Height:= ScaleY(71);
    AutoSize:= false;
    Transparent:= true;
    WordWrap:= true;
    Font.Size:= 12;
    Font.Color:=clBlack
    Font.Style := [fsBold]
    Parent:= WizardForm;
    Font.Name:= 'Georgia'
    Caption:= ExpandConstant('{cm:Welcome1}')
 end;

Welcome2:=TLabel.Create(WizardForm);
  with Welcome2 do
  begin
    Left:= ScaleX(150);
    Top:= ScaleY(66);
    Width:= ScaleX(345);
    Height:= ScaleY(300);
    AutoSize:= false;
    WordWrap:= true;
    Font.Color:=clBlack
    Font.Name:= 'Georgia'
    Font.Size:= 10;
    Transparent:= true;
    Parent:= WizardForm;
    Caption:= ExpandConstant('{cm:Welcome2}')
end;

FinishedHeadingLabel:=TLabel.Create(WizardForm);
  with FinishedHeadingLabel do
  begin
    Left:= ScaleX(170);
    Top:= ScaleY(26);
    Width:= ScaleX(300);
    Height:= ScaleY(150);
    AutoSize:= false;
    WordWrap:= true;
    Font.Size:= 12;
    Font.Color:=clBlack
    Font.Name:= 'Georgia'
    Font.Style := [fsBold]
    Transparent:= true;
    Parent:= WizardForm;
    Caption:= WizardForm.FinishedHeadingLabel.Caption;
  end;

FinishedLabel:= TLabel.Create(WizardForm);
  with FinishedLabel do
  begin
    Left:= ScaleX(170);
    Top:= ScaleY(66);
    Width:= ScaleX(325);
    Height:= ScaleY(150);
    AutoSize:= false;
    WordWrap:= true;
    Transparent:= true;
    Font.Color:=clBlack
    Font.Size:= 10;
    Font.Name:= 'Georgia'
    Parent:= WizardForm;
    Caption:= ExpandConstant('{cm:Finished1}') + #10#13#10 + ExpandConstant('{cm:Finished2}')
end;
end;

procedure HideComponents;
begin
  Welcome1.Hide;
  Welcome2.Hide;
  FinishedHeadingLabel.Hide;
  FinishedLabel.Hide;

end;

procedure ShowComponents(CurPageID: Integer);
begin
  case CurPageID of
    wpWelcome:
    begin
      Welcome1.Show;
      Welcome2.Show;
end;
    wpFinished:
    begin
      FinishedHeadingLabel.Show;
      FinishedLabel.Show;
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  HideComponents;
  ShowComponents(CurPageID);
    if CurPageID = wpWelcome then
    begin
        WizardForm.OuterNotebook.Hide;
        FinishedImage.Hide;

    end
    else if CurPageID = wpFinished then
    begin
        WizardForm.OuterNotebook.Hide;
        MainImage.Hide;
        FinishedImage.Show;
    end
    else WizardForm.OuterNotebook.Show;
end;


Dodakaedr 24-05-2014 18:52 2355274

Подскажите как освобождать процесс программы из системы перед удалением?

saneksanek 24-05-2014 21:24 2355314

Dodakaedr,
Если правильно понял вас,
читать дальше »
Код:

[Files]
Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion
[ Code]
//**На этапе деинсталляции убивает процесс
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  if RunTask('file.exe', False) then
    begin
      // прячем форму
      UninstallProgressForm.Visible:= False;
      if MsgBox('Программа file.exe используется. Закрыть и продолжить удаление?', mbConfirmation, MB_YESNO) = IDYES then
        begin
          KillTask('file.exe');
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          // показываем форму
          UninstallProgressForm.Visible:= True;
        end
      else
        begin
          MsgBox('Завершите работу file.exe, затем снова запустите программу удаления.', mbInformation, MB_OK);
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          Abort;
        end;
    end;
end


Dodakaedr 24-05-2014 22:18 2355327

saneksanek, Почему не убивает процесс?
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program ver.1.5
DefaultDirName={pf}\My Program

[Files]
Source: "compiler:Dll Pack\ISTask.dll"; DestDir: "{app}"

[ Code]
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function KillTask(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
  if RunTask('USBSRService.exe', False) then
    begin
      // прячем форму
      UninstallProgressForm.Visible:= False;
      if MsgBox('Программа USBSRService.exe используется. Закрыть и продолжить удаление?', mbConfirmation, MB_YESNO) = IDYES then
        begin
          KillTask('USBSRService.exe');
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          // показываем форму
          UninstallProgressForm.Visible:= True;
        end
      else
        begin
          MsgBox('Завершите работу file.exe, затем снова запустите программу удаления.', mbInformation, MB_OK);
          UnloadDll(ExpandConstant('{app}\ISTask.dll'));
          Abort;
        end;
    end;
end;

И никаких сообщений не выводится, хоть процесс запущен

saneksanek 24-05-2014 23:52 2355352

Dodakaedr, Код рабочий,в чем-то у вас косяк.Может компилировали без данного кода?
Если не коммерческая тайна,можете выложить скрипт с файлом я посмотрю

Irenis 24-05-2014 23:59 2355355

При создании установщика через мастера Inno Setup в окне "файлы приложения" нужно выбрать главный исполняемый файл приложения. При этом ярлык, который появится на рабочем столе после установки игры, автоматически берется из этого запускного файла. Как поставить другой ярлык? То есть что нужно прописать в скрипте, чтобы самой задать иконку ярлыка, которая должна появится на рабочем столе после установки игры, при этом не меняя главный исполняемый файл? Спасибо))

TryRooM 25-05-2014 00:14 2355359

Irenis,
[Icons]
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" ; IconFileName: "{app}\твоя иконка.ico.";

Dodakaedr 25-05-2014 00:32 2355362

Цитата:

Цитата saneksanek
Если не коммерческая тайна,можете выложить скрипт с файлом я посмотрю »

читать дальше »
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[Files]
Source: "compiler:Dll Pack\ISTask.dll"; DestDir: "{app}"; Flags: ignoreversion

[ Code]
function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload setuponly';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload setuponly';

function KillTaskA(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';


function InitializeSetup(): Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\ISTask.dll')) then ExtractTemporaryFile('ISTask.dll');
If RunTask('USBSRService.exe', False) then  // Указываем программу, которая должна припятствовать установке.
begin
if MsgBox('Программа установки обнаружила, что программа Scanner запущена в данный момент.'#13#13'Закрыть программу и продолжить установку?', mbInformation, mb_YesNo) = idYes then
begin
  KillTask('USBSRService.exe');  // Указываем программу, которая должна будет закрыться
  Result := True;
  end else
  Exit;
  end;
  Result := True;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
    begin
      UnloadDLL(ExpandConstant('{app}\ISTask.dll'));
    end;
end;

function InitializeUninstall(): Boolean;
begin
If RunTaskA('USBSRService.exe', false) then // Указываем программу, которая должна припятствовать удалению.
begin
if MsgBox('Программа удаления обнаружила, что программа Scanner запущена в данный момент.'#13#13'Закрыть программу и продолжить удаление?', mbInformation, mb_YesNo) = idYes then
begin
  KillTaskA('USBSRService.exe');  // Указываем программу, которая должна будет закрыться
  Result := True;
  end else
  Exit;
  end;
  Result := True;
end;

установите сначала программу, а потом используйте код свыше. У меня не работает

saneksanek 25-05-2014 01:12 2355365

Этого процесса изначально нет,потому и нет диалоговых окон.Закройте программу и запустите снова,сама программа весит на USBSafelyRemove.exe

saurn 25-05-2014 01:43 2355369

Dodakaedr, он не будет работать на юникоде. Тут для юникодовой. Или пример от El Sanchez в шапке.

habib2302 25-05-2014 08:57 2355394

Всем привет. Дайте пожалуйста скрипт на создание txt файов

Irenis 25-05-2014 13:33 2355444

Скажите пожалуйста, а как делать установщики, в которых был бы сам setup, а под ним остальные файлы в формате .bin. Сейчас я просто создаю установщик, создаю arc архив, и при установке распаковывается этот архив и игра устанавливается. А как сделать, чтобы вместо arc было bin? Тоже сначала архивировать FreeArc-ом, а потом как то в bin переделывать или там вообще по другому все делается? Может кто объяснит или подскажет, где об этом почитать можно :)

vint56 25-05-2014 13:46 2355446

Irenis, просто переименуй расширения файла с arc на bin можно сразу во фриарке там есть выходной архив там есть расширения arc можеш поставить любое только в скрипте на распаковку укажи названия архива и расширения файла
Пример
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Data-A.Irenis), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;

Irenis 25-05-2014 14:01 2355451

vint56, Спасибо большое :wink:
То есть (например в игре Karos) если раньше у меня была такая строчка:

if not ISArcExtract ( 0, OveralPct, 0, ExpandConstant('{src}\Karos.arc'), ExpandConstant('{app}\'), false,CallBack, '', '', '') then break;

То теперь вот так:

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Karos.bin), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
?
И больше в скрипте ничего не нужно менять?

vint56 25-05-2014 14:36 2355456

Irenis, Да

saurn 25-05-2014 15:36 2355479

Цитата:

Цитата habib2302
Дайте пожалуйста скрипт на создание txt файов »

Код:

[Code]
procedure InitializeWizard();
begin
    //SaveStringToFile( 'test.txt', 'String', False );
    SaveStringsToFile( 'test.txt', ['String1', 'String2', 'String3'], False );
end;


nik1967 25-05-2014 15:38 2355485

Цитата:

Цитата Irenis
И больше в скрипте ничего не нужно менять? »

В скрипте - нет. Но надо будет переименовать Karos.arc в Karos.bin. Или в Karos.Irenis :). Но тогда в скрипте нужно будет переделать на ISArcExtract ( 0, 0, ExpandConstant('{src}\Karos.Irenis), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;

Irenis 25-05-2014 16:23 2355502

Цитата:

Цитата Irenis
что нужно прописать в скрипте, чтобы самой задать иконку ярлыка, которая должна появится на рабочем столе после установки игры, при этом не меняя главный исполняемый файл? »

Цитата:

Цитата TryRooM
Irenis,
[Icons]
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" ; IconFileName: "{app}\твоя иконка.ico."; »

Попробовала, что то не получается. Вот скрипт. Добавила эту строчку, так у меня теперь вообще никакой картинки, просто белый ярлык.

sergey3695 25-05-2014 17:02 2355523

Irenis,
Код:

Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; IconFileName: "{app}\{#MyAppName}"; Tasks: desktopicon
Зачем две строчки? :)
з.ы. т.к. без файлов, то не компилил.

Irenis 25-05-2014 17:52 2355551

Что то я уже совсем запуталась с этим ярлыком. Как сделать ярлык со своей картинкой? Постом выше выложила скрипт. Там есть строчка :
SetupIconFile=E:\Karos\MainIcon.ico
Вот мне нужно эту же картинку поставить и на ярлык. А у меня ярлык получается либо пустой (просто белый), либо с логотипом GameXP

Код, который мне дали выше. Куда в нем вставить свою картинку?

Irenis 25-05-2014 18:10 2355570

Тут необходимые файлы для скрипта (не знаю, может еще что надо). Картинку с названием "3" мне нужно сделать ярлыком.

vint56 25-05-2014 19:18 2355628

Irenis, http://rghost.ru/55845692

Nordek 25-05-2014 19:41 2355641

Цитата:

Цитата Irenis
Что то я уже совсем запуталась с этим ярлыком. »

Да, люди умеют объяснять - что ничего не поймёшь.

Цитата:

Цитата Irenis
SetupIconFile=E:\Karos\MainIcon.ico »

И что? Это значок для инсталлятора setup.exe. После установки, станет значком для деинсталлятора unins000.exe.

Цитата:

Цитата Irenis
А у меня ярлык получается либо пустой (просто белый) »

Ну правильно. А от куда он по вашему возьмётся?

Его наверно нужно добавить в секцию [Files] т.е:
Код:

[Files]
Source: 3.ico; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system

т.е этот значок будет помещён в каталог устанавливаемой программы.
hidden system - сделаем значок скрытым и системным, для того чтоб не было видно в каталоге установленной программы.
Если хотите видеть этот значок в каталоге установленной программы, то hidden system можно не применять т.е
Код:

[Files]
Source: 3.ico; DestDir: {app}; Flags: ignoreversion

А теперь применим этот значок к ярлыку:
Код:

[Icons]
Name: {commondesktop}\My Program; Filename: {app}\MyProg.exe; IconFilename: {app}\3.ico

Вот вам пример.

Dodakaedr 25-05-2014 20:55 2355674

Поделитесь кто-нибудь библиотекой ISTaskU.dll.

Kashtan007 27-05-2014 13:25 2356249

Всем привет.
Как в установщике ставятся приоритеты на установку.
Ну вот допустим у меня компоненты в такой структуре
Программа
-1
-2
-3
Патч для программы
-1
-2

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

saurn 27-05-2014 16:46 2356335

Kashtan007, файлы устанавливаются в том порядке, в котором указаны в секции Files, сверху вниз.

Shkutu 27-05-2014 17:18 2356351

Kashtan007, из справки - "All entries are processed by the installer in the order they appear in a section", т е все элементы обрабатываются установщиком в том порядке, в каком они указаны. По идее, чтобы патч ставился после программы, вам надо указать файлы, элементы секции Run и прочее в правильном порядке.

Shift85 27-05-2014 17:21 2356352

Вложений: 1
Цитата:

Цитата Dodakaedr
Поделитесь кто-нибудь библиотекой ISTaskU.dll. »

Dodakaedr, Юникодной нет есть обычная если пригодиться.

Dodakaedr 27-05-2014 17:25 2356355

Цитата:

Цитата Shift85
Юникодной нет есть обычная если пригодиться. »

Спасибо, но обычная у меня есть....

Mailchik 27-05-2014 17:26 2356357

Dodakaedr, http://forum.oszone.net/post-2291020-1870.html

Dodakaedr 27-05-2014 17:44 2356372

Mailchik, Знаю, уже давали, но файл удален...

Mailchik,
читать дальше »
Код:

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

[Files]
Source: "ISTaskU.dll"; Flags: dontcopy;

[ Code]
function KillTask(ExeFileName: string): Integer;
  external 'KillTask@files:ISTaskU.dll stdcall';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
  external 'RunTask@files:ISTaskU.dll stdcall';

function InitializeSetup(): Boolean;
begin
  If RunTask('aimp3.exe', false) then begin
    if MsgBox('Закрыть AIMP?', mbError, mb_YesNo) = idYes then begin
      KillTask('aimp3.exe');
      Result := True;
    end else
      Exit;
    end;
  Result := True;
end;

При использовании этого кода вместе с
Код:

procedure DeinitializeSetup();
begin
gdipShutdown;
islogo_three(WizardForm.Handle);
end;

появляется ошибка "Could not call proc." при нажатии на "Нет". Подскажите как решить эту проблему.

saurn 27-05-2014 18:18 2356394

Цитата:

Цитата Dodakaedr
появляется ошибка "Could not call proc." при нажатии на "Нет". Подскажите как решить эту проблему. »

Код:

[Code]
var
    Init: Boolean;


procedure InitializeWizard();
begin
...
    Init := True;
...
end;


procedure DeinitializeSetup();
begin
    if Init <> False then
      begin
          gdipShutdown;
          islogo_three(WizardForm.Handle);
      end;
end;


Dodakaedr 27-05-2014 18:33 2356397

saurn, Спс! Сработало. Скажите, пожалуйста, правильно ли я указываю код на удаление файла при деинсталяции? Потому что он не удаляется ни через код ни через [UninstallDelete]:
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
    begin
    if FileExists('msimg32.dll') then DeleteFile('msimg32.dll');
    end;
end;


saurn 27-05-2014 18:40 2356401

Dodakaedr, это же системный файл. По вопросу: надо указывать абсолютный путь к файлу.

habib2302 27-05-2014 19:13 2356420

всем привет. дайте пожалуйста скрипт на распаковку запароленных arc архивов. (не весь isdone т.е без всяких оформлений инстайла, без лишних файлов и т.д)

Dodakaedr 27-05-2014 19:33 2356429

Цитата:

Цитата saurn
это же системный файл. По вопросу: надо указывать абсолютный путь к файлу. »

Абсолютный??? Тоисть так тоже не пойдет?
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
    begin
    if FileExists(ExpandConstant('{app}\msimg32.dll')) then DeleteFile(ExpandConstant('{app}\msimg32.dll'));
    if FileExists(ExpandConstant('{app}\IsTaskU.dll')) then DeleteFile(ExpandConstant('{app}\IsTaskU.dll'));
    end;
end;

Как удалять такие файлы?

saneksanek 27-05-2014 22:08 2356493

Dodakaedr,
[Files]
Source: Dll\msimg32.dll;DestDir: {app}; Flags: ignoreversion; Attribs: hidden system;
Source: Dll\IsTaskU.dll;DestDir: {app}; Flags: ignoreversion; Attribs: hidden system;

sergey3695 27-05-2014 22:10 2356495

Dodakaedr, блин гугл еще робит (сам проверил :) ). (насчет что такое абсолютный путь).
По сути дела: msimg32.dll - системная библиотека, не удалять! IsTaskU.dll - как у тебя, удалять!
habib2302, справку дать?
читать дальше »

function ISArcExtract

function ISArcExtract (CurComponent: Cardinal; PctOfTotal: double; InputFile, OutputPath, ExtractedPath: string; DeleteInFile: boolean; Password, CfgFile, WorkPath: string; ExtractPCF:boolean):boolean;
распаковывает arc архив(ы), заданный(ые) папкой и именем файла в InputFile, в каталог, указанный в OutputPath.
ExtractedPath - используется для распаковки части архива. Указывается имя папки, которая будет извлечена. Если данная фитча не требуется, то оставляйте данный параметр пустой строкой. Значение '*' распаковывает весь архив с последующим извлечением всех подкаталогов из корневых папок архива (мож кому понадобится);
CfgFile - путь и имя конфигурационного файла (arc.ini). Требуется для распаковки .arc архивов, созданных с использованием внешних компрессоров;
WorkPath - рабочий путь для распаковки временных файлов freearc'ом. Если при распаковке архива freearc создает большие темп-файлы (обычно это происходит если используются внешние компрессоры), то рекомендуется устанавливать рабочую папку в {app}, а то у пользователя может не быть места на системном диске, куда по умолчанию freearc пытается поместить темп-файл;
Password - пароль для распаковки архива(ов);
ExtractPCF - может иметь значение true или false. При распаковке FreeArc архива определяет будут ли распаковываться .pcf файлы "на лету". При активации данного режима при извлечении из .arc архива для каждого распакованного файла с расширением .pcf будет запускаться precomp, извлекающий данные из этого файла в ту же папку, и после удаляющий исходный. По идее данный режим должен увеличить скорость распаковки FreeArc архивов, содержащий много небольших pcf файлов, потому как сразу после извлечения одного из них, пока он еще будет находиться в кэше винды, можно быстренько его обработать precomp'ом, с минимальным обращением к винчестеру. Но на практике у меня получалось иначе, по крайней мере на XP (возможно на Win7 такой способ и выиграет стандартный 7z(без сжатия)+precomp+freearc).
В скрипте для параметра ExtractPCF применены константы notPCFonFLY и PCFonFLY - это на самом деле просто соответственно false и true. Применение таких констант позволит избежать путаницы с другим подобным параметром в функции распаковки arc-архивов - удалением входного архива (DeleteInFile).

Например:
if not ISArcExtract (0, 100, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}\data'), '', false, 'Password', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'), notPCFonFLY) then break;
распаковывает все архивы с расширением .arc из папки {src} (сканировать подкаталоги или нет задается в функции инициализации поиска FileSearchInit) в папку {app}\data\ без удаления исходного файла, с ручным распределением процентов (без тестового прогона, распределение происходит по размерам исходных архивов), паролем «Password», файлом конфигурации {tmp}\arc.ini и рабочей папкой в {app}, без извлечения .pcf файлов "на лету".

saneksanek, это как файлы скрыть. Установка атрибута.

habib2302 27-05-2014 22:19 2356500

sergey3695, а скрипт?

Dodakaedr 27-05-2014 22:33 2356507

Цитата:

Цитата sergey3695
По сути дела: msimg32.dll - системная библиотека, не удалять! IsTaskU.dll - как у тебя, удалять! »

Мне надо оба файла удалить, чтобы не оставались следы программы. msimg32.dll - это для патча, IsTaskU.dll - вы сами знаете для чего. Если я правильно понял то надо так:
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then
    begin
    if FileExists(ExpandConstant('{pf}\My Prog\msimg32.dll')) then DeleteFile(ExpandConstant('{pf}\My Prog\msimg32.dll'));
    if FileExists(ExpandConstant('{pf}\My Prog\IsTaskU.dll')) then DeleteFile(ExpandConstant('{pf}\My Prog\IsTaskU.dll'));
    end;
end;

Или как? Дайте пример. Желательно чтобы через константу {app}, чтобы пользователь смог сам указывать куда устанавливать программу.

saneksanek 27-05-2014 22:52 2356521

Dodakaedr, Вы пробовали что я дал? добавьте флаг и секция унистал не нужна будет

Dodakaedr 27-05-2014 23:00 2356526

saneksanek, Это не то. Мне нужно их удалить, а вы предлагаете их сделать скрытыми и системными...

sergey3695 27-05-2014 23:13 2356531

habib2302, мда, например это не пример.
Password - пароль для распаковки архива(ов);
function ISArcExtract (CurComponent: Cardinal; PctOfTotal: double; InputFile, OutputPath, ExtractedPath: string; DeleteInFile: boolean; Password, CfgFile, WorkPath: string; ExtractPCF:boolean):boolean;
Например:
Код:

if not ISArcExtract (0, 100, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}\data'), '', false, 'Password', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}'), notPCFonFLY) then break;
если так с выделением непонятно. я не знаю тогда.
Dodakaedr, хочешь сказать что так не удалит
Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep = usUninstall then // Или usPostUninstall без разницы тут
    begin
    if FileExists(ExpandConstant('{app}\msimg32.dll')) then DeleteFile(ExpandConstant('{app}\msimg32.dll'));
    if FileExists(ExpandConstant('{app}\IsTaskU.dll')) then DeleteFile(ExpandConstant('{app}\IsTaskU.dll'));
    end;
end;

если {app} путь включая папку установки и там лежат файлы. твой же скрипт. поверял то хоть?
также можно флаг
Код:

Flags: uninsremovereadonly
uninsremovereadonly При удалении файла убираются все атрибуты "только для чтения" перед попыткой удаления
Это из справки.
ignoreversion Не сверять версии; перемещать существующие файлы не обращая внимание на номера версий.
Этот флаг применим только к файлам вашего приложения, но не к общедоступным файлам.
Вы проверяете код или так спрашиваете?

Dodakaedr 27-05-2014 23:16 2356535

Цитата:

Цитата sergey3695
хочешь сказать что так не удалит »

Да, не удаляет...

Цитата:

Цитата sergey3695
если {app} путь включая папку установки и там лежат файлы. »

Код:

Source: "InstallFiles\ISTaskU.dll"; DestDir: {app}; Flags: ignoreversion
Цитата:

Цитата sergey3695
поверял то хоть? »

А чего я бы спрашивал, если б не проверял....

habib2302 27-05-2014 23:18 2356538

sergey3695,

saneksanek 27-05-2014 23:59 2356569

Dodakaedr, Этот лишний мусор не выйдет удалить сразу вместе с программой,по крайне мере когда я интересовался этим вопросом мне ответили так.Так что проще будет как я написал до этого.

sergey3695 28-05-2014 08:03 2356656

Dodakaedr, был бы скрипт с файлами, я б посмотрел. А то так гадать.
Так по-любому все удалится в папке, чтобы там не было.
Код:

// Удаление каталога с содержимым
procedure DelDir(dir : string);
var
  r: Integer;
begin
  Exec('cmd.exe', ' /c rd /S /Q  ' + '"'+dir+'"',ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,r);
end;
//
if CurUninstallStep=usPostUninstall then 
if DirExists(ExpandConstant('{app}')) then
  DelDir(ExpandConstant('{app}'));
end;

habib2302, а остальной код? я думал ты функцией не умеешь пользоваться.
читать дальше »
Код:

#define NeedSize "5000000000"

#define NeedMem 512

#define SecondPB

#ifdef SecondPB
  #define PbLblCount 1
#else
  #define PbLblCount 0
#endif

;#define Components

;#define records

;#define facompress

;#define PrecompInside
;#define SrepInside
;#define MSCInside
;#define precomp "0.42"
;#define unrar
;#define XDelta
;#define PackZIP

[Setup]
AppName=ISDone
AppVerName=ISDone
DefaultDirName={pf}\ISDone
DefaultGroupName=ISDone Example
OutputDir=.
OutputBaseFilename=Setup
VersionInfoCopyright=ProFrager
SolidCompression=yes
#ifdef NeedSize
  ExtraDiskSpaceRequired={#NeedSize}
#endif

#ifdef Components
[Types]
  Name: full; Description: Full installation; Flags: iscustom

[Components]
  Name: text; Description: Язык субтитров; Types: full; Flags: fixed
  Name: text\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
  Name: text\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 200000000
  Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
  Name: voice\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 500000000
  Name: voice\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 600000000
#endif

[Registry]
Root: HKLM; Subkey: Software\ProFrager; ValueName: path; ValueType: String; ValueData: {app}; Flags: uninsdeletekey; Check: CheckError
Root: HKLM; Subkey: Software\ProFrager; ValueName: name; ValueType: String; ValueData: Data; Flags: uninsdeletekey; Check: CheckError

[Icons]
Name: {group}\Удалить пример ISDone; Filename: {app}\unins000.exe; WorkingDir: {app}; Check: CheckError
Name: {commondesktop}\Удалить пример ISDone; Filename: {app}\unins000.exe; WorkingDir: {app}; Check: CheckError

[Tasks]
Name: VCCheck; Description: Установить Microsoft Visual C++ 2005 Redist
Name: PhysXCheck; Description: Установить Nvidia PhysX

[Run]
Filename: {src}\Redist\vcredist_x86.exe; Parameters: /q; StatusMsg: Устанавливаем Microsoft Visual C++ 2005 Redist...; Flags: skipifdoesntexist; Tasks: VCCheck; Check: CheckError
Filename: {src}\Redist\PhysX.exe; Parameters: /qn; StatusMsg: Устанавливаем Nvidia PhysX...; Flags: skipifdoesntexist; Tasks: PhysXCheck; Check: CheckError

[Files]
Source: Include\English.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy

#ifdef records
  Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef PrecompInside
  Source: Include\CLS-precomp.dll; DestDir: {tmp}; Flags: dontcopy
  Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
  Source: Include\packjpg_dll1.dll; DestDir: {tmp}; Flags: dontcopy
  Source: Include\precomp.exe; DestDir: {tmp}; Flags: dontcopy
  Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef SrepInside
  Source: Include\CLS-srep.dll; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef MSCInside
  Source: Include\CLS-MSC.dll; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef facompress
  Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef precomp
  #if precomp == "0.38"
    Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
  #else
    #if precomp == "0.4"
      Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
    #else
      #if precomp == "0.41"
        Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
      #else
        #if precomp == "0.42"
          Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
        #else
          Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
          Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
          Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
          Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
        #endif
      #endif
    #endif
  #endif
#endif

#ifdef unrar
  Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef XDelta
  Source: Include\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef PackZIP
  Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
  Source: Include\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif

[CustomMessages]
russian.ExtractedFile=Извлекается файл:
russian.Extracted=Распаковка архивов...
russian.CancelButton=Отменить распаковку
russian.Error=Ошибка распаковки!
russian.ElapsedTime=Прошло:
russian.RemainingTime=Осталось времени:
russian.EstimatedTime=Всего:
russian.AllElapsedTime=Время установки:

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[UninstallDelete]
Type: filesandordirs; Name: {app}

[ Code]
const
  PCFonFLY    = true;
  notPCFonFLY = false;
  PbLblCount  = {#PbLblCount};
var
  LblTime      :  array [0..2]            of TLabel;
  LblPct      :  array [0..{#PbLblCount}] of TLabel;
  ISDonePB    :  array [0..{#PbLblCount}] of TNewProgressBar;
  ISDoneCancel :  integer;
  ISDoneError  :  boolean;
  ISDoneStopUP :  boolean;
  PCFVer      :  double;

type
  TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;

function WrapCallback(callback:TCallback; paramcount:integer):longword;
  external 'wrapcallback@files:ISDone.dll stdcall delayload';

function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean;
  external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function IS7ZipExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean;
  external 'IS7zipExtract@files:ISDone.dll stdcall delayload';
function ISRarExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean;
  external 'ISRarExtract@files:ISDone.dll stdcall delayload';
function ISPrecompExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean;
  external 'ISPrecompExtract@files:ISDone.dll stdcall delayload';
function ISSRepExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean;
  external 'ISSrepExtract@files:ISDone.dll stdcall delayload';
function ISxDeltaExtract(CurComponent:Cardinal; PctOfTotal:double; minRAM,maxRAM:integer; InName, DiffFile, OutFile: AnsiString; DeleteInFile, DeleteDiffFile:boolean):boolean;
  external 'ISxDeltaExtract@files:ISDone.dll stdcall delayload';
function ISPackZIP(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString;ComprLvl:integer; DeleteInFile:boolean):boolean;
  external 'ISPackZIP@files:ISDone.dll stdcall delayload';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):boolean;
  external 'ShowChangeDiskWindow@files:ISDone.dll stdcall delayload';

function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean;
  external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer;
  external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean;
  external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar;
  external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean;
  external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISExec(CurComponent:Cardinal; PctOfTotal,SpecifiedProcessTime:double; ExeName,Parameters,TargetDir,OutputStr:AnsiString;Show:boolean):boolean;
  external 'ISExec@files:ISDone.dll stdcall delayload';

function SrepInit(TmpPath:PAnsiChar;VirtMem,MaxSave:Cardinal):boolean;
  external 'SrepInit@files:ISDone.dll stdcall delayload';
function PrecompInit(TmpPath:PAnsiChar;VirtMem:cardinal;PrecompVers:single):boolean;
  external 'PrecompInit@files:ISDone.dll stdcall delayload';
function FileSearchInit(RecursiveSubDir:boolean):boolean;
  external 'FileSearchInit@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean;
  external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean;
  external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean;
  external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean;
  external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean;
  external 'ResumeProc@files:ISDone.dll stdcall';

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
    if OveralPct<=1000  then ISDonePB[0].Position := OveralPct;
    LblPct[0].Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
  #ifdef SecondPB
    if CurrentPct<=1000 then ISDonePB[1].Position := CurrentPct;
    LblPct[1].Caption := IntToStr(CurrentPct div 10)+'.'+chr(48 + CurrentPct mod 10)+'%';
  #endif
  WizardForm.FileNamelabel.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, WizardForm.FileNamelabel.Font, WizardForm.FileNamelabel.Width-ScaleX(100));
  LblTime[0].Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
  LblTime[1].Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
  LblTime[2].Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
  Result := ISDoneCancel;
end;

procedure WizardFormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  case ISDoneStopUP of
    True:
    begin
      SuspendProc;
      if ExitSetupMsgBox then ISDoneCancel:=1;
      ResumeProc;
    end;
    False : CanClose := True;
  end;
end;

function InitializeSetup(): Boolean;
begin
  ISDoneStopUP := False;
  Result := True;
end;

procedure HideControls;
var
  i :integer;
begin
    for i := 0 to PbLblCount do
    begin
      ISDonePB[i].Hide;
      LblPct[i].Hide;
    end;
  for i := 0 to 1 do LblTime[i].Hide;
end;

procedure CreateControls;
var
  i :integer;
begin
  WizardForm.FileNamelabel.SetBounds(ScaleX(0), ScaleY(30), ScaleX(395), ScaleY(14));
  for i := 0 to PbLblCount do
  begin
    ISDonePB[i] := TNewProgressBar.Create(WizardForm);
    with ISDonePB[i] do
    begin
      Parent  := WizardForm.InstallingPage;
      SetBounds(ScaleX(0), ScaleY(50+i*57), ScaleX(365), ScaleY(21));
      Max      := 1000;
    end;

    LblPct[i] := TLabel.Create(WizardForm);
    with LblPct[i] do
    begin
      Parent    := WizardForm.InstallingPage;
      AutoSize  := False;
      SetBounds(ScaleX(370), ScaleY(52+i*57), ScaleX(80), ScaleY(14));
    end;
  end;

  for i := 0 to 2 do
  begin
    LblTime[i] := TLabel.Create(WizardForm);
    with LblTime[i] do
    begin
      AutoSize := False;
      Alignment := taCenter;
        case i of
        0, 1 :
        begin
          Parent := WizardForm.InstallingPage;
          SetBounds(ScaleX(0), ScaleY(75+i*17), ScaleX(395), ScaleY(14));
        end;
        2 :
        begin
          Parent := WizardForm.FinishedPage;
          SetBounds(ScaleX(180), ScaleY(200), ScaleX(300), ScaleY(14));
        end;
      end;
    end;
  end;
  WizardForm.OnCloseQuery := @WizardFormCloseQuery;
  WizardForm.CancelButton.Enabled := True;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  if (CurPageID = wpFinished) and ISDoneError then
  begin
    LblTime[2].Hide;
    WizardForm.Caption:= ExpandConstant('{cm:Error}');
    WizardForm.FinishedLabel.Font.Color:= clRed;
    WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
  end;
end;

function CheckError:boolean;
begin
  result:= not ISDoneError;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  Comps1, Comps2, Comps3, TmpValue      : cardinal;
  FindHandle1, ColFiles1, CurIndex1, tmp : integer;
  ExecError                              : boolean;
  InFilePath, OutFilePath, OutFileName  : PAnsiChar;
begin
  if CurStep = ssPostInstall then //Если необходимо, можно поменять на ssInstall
  begin 
    WizardForm.ProgressGauge.Hide;
    CreateControls;
    WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
    ISDoneCancel:=0;

  // Распаковка всех необходимых файлов в папку {tmp}.

    ExtractTemporaryFile('unarc.dll');

    #ifdef PrecompInside
      ExtractTemporaryFile('CLS-precomp.dll');
      ExtractTemporaryFile('packjpg_dll.dll');
      ExtractTemporaryFile('packjpg_dll1.dll');
      ExtractTemporaryFile('precomp.exe');
      ExtractTemporaryFile('zlib1.dll');
    #endif

    #ifdef SrepInside
      ExtractTemporaryFile('CLS-srep.dll');
    #endif

    #ifdef MSCInside
      ExtractTemporaryFile('CLS-MSC.dll');
    #endif

    #ifdef facompress
      ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
    #endif
    #ifdef records
      ExtractTemporaryFile('records.inf');
    #endif

    #ifdef precomp
      #if precomp == "0.38"
        ExtractTemporaryFile('precomp038.exe');
      #else
        #if precomp == "0.4"
          ExtractTemporaryFile('precomp040.exe');
        #else
          #if precomp == "0.41"
            ExtractTemporaryFile('precomp041.exe');
          #else
            #if precomp == "0.42"
              ExtractTemporaryFile('precomp042.exe');
            #else
              ExtractTemporaryFile('precomp038.exe');
              ExtractTemporaryFile('precomp040.exe');
              ExtractTemporaryFile('precomp041.exe');
              ExtractTemporaryFile('precomp042.exe');
            #endif
          #endif
        #endif
      #endif
    #endif

    #ifdef unrar
      ExtractTemporaryFile('Unrar.dll');
    #endif

    #ifdef XDelta
      ExtractTemporaryFile('XDelta3.dll');
    #endif

    #ifdef PackZIP
      ExtractTemporaryFile('7z.dll');
      ExtractTemporaryFile('PackZIP.exe');
    #endif

    ExtractTemporaryFile('English.ini');

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
  Comps1:=0; Comps2:=0; Comps3:=0;
  #ifdef Components
    TmpValue:=1;
    if IsComponentSelected('text\rus') then Comps1 := Comps1+TmpValue;    //компонент 1
    TmpValue:=TmpValue*2;
    if IsComponentSelected('text\eng') then Comps1 := Comps1+TmpValue;    //компонент 2
    TmpValue:=TmpValue*2;
    if IsComponentSelected('voice\rus') then Comps1 := Comps1+TmpValue;    //компонент 3
    TmpValue:=TmpValue*2;
    if IsComponentSelected('voice\eng') then Comps1 := Comps1+TmpValue;    //компонент 4
//    .....
// см. справку
  #endif

  #ifdef precomp
    PCFVer:={#precomp};
  #else
    PCFVer:=0;
  #endif
    ISDoneError:=true;
    if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1, Comps2, Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then
    begin
      repeat
//        ChangeLanguage('English');
        if not SrepInit('',512,0) then break;
        if not PrecompInit('',128,PCFVer) then break;
        if not FileSearchInit(true) then break;

        if not ISArcExtract ( 0, 0, ExpandConstant('{src}\GameWAV.bin'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
//        if not ISArcExtract ( 0, 0, ExpandConstant('{src}\test1.arc'), ExpandConstant('{app}'), '', false, '123', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;

//    далее находятся закомментированые примеры различных функций распаковки (чтобы каждый раз не лазить в справку за примерами)
(*
        if not ISArcExtract    ( 0, 0, ExpandConstant('{src}\arc.arc'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
        if not IS7ZipExtract  ( 0, 0, ExpandConstant('{src}\CODMW2.7z'), ExpandConstant('{app}\data1'), false, '') then break;
        if not ISRarExtract    ( 0, 0, ExpandConstant('{src}\data_*.rar'), ExpandConstant('{app}'), false, '') then break;
        if not ISSRepExtract  ( 0, 0, ExpandConstant('{app}\data1024_1024.srep'),ExpandConstant('{app}\data1024.arc'), true) then break;
        if not ISPrecompExtract( 0, 0, ExpandConstant('{app}\data.pcf'),    ExpandConstant('{app}\data.7z'), true) then break;
        if not ISxDeltaExtract ( 0, 0, 0, 640, ExpandConstant('{app}\in.pcf'), ExpandConstant('{app}\*.diff'),  ExpandConstant('{app}\out.dat'), false, false) then break;
        if not ISPackZIP      ( 0, 0, ExpandConstant('{app}\1a1\*'), ExpandConstant('{app}\1a1.pak'), 2, false ) then break;
        if not ISExec          ( 0, 0, 0, ExpandConstant('{tmp}\Arc.exe'), ExpandConstant('x -o+ "{src}\001.arc" "{app}\"'), ExpandConstant('{tmp}'), '...',false) then break;
        if not ShowChangeDiskWindow ('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}'),'CODMW_2.arc') then break;

//    распаковка группы файлов посредством внешнего приложения

        FindHandle1:=ISFindFiles(0,ExpandConstant('{app}\*.ogg'),ColFiles1);
        ExecError:=false;
        while not ExecError and ISPickFilename(FindHandle1,ExpandConstant('{app}\'),CurIndex1,true) do
        begin
          InFilePath:=ISGetName(0);
          OutFilePath:=ISGetName(1);
          OutFileName:=ISGetName(2);
          ExecError:=not ISExec(0, 0, 0, ExpandConstant('{tmp}\oggdec.exe'), '"'+InFilePath+'" -w "'+OutFilePath+'"',ExpandConstant('{tmp}'),OutFileName,false);
        end;
        ISFindFree(FindHandle1);
        if ExecError then break;
*)
        ISDoneError:=false;
      until true;
      ISDoneStop;
    end;
    HideControls;
  end;
  if {(CurStep=ssPostInstall) and} ISDoneError then
  begin
    Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
  end;
end;


Это пример использования IsDone.dll (файлы не нужны же). Функция описана выше в сообщениях.

Dodakaedr 28-05-2014 09:28 2356677

Цитата:

Цитата sergey3695
Так по-любому все удалится в папке, чтобы там не было. »

Сработало! А такой код на удаления файла(ов) можно сделать? И можно ли как-то скрыть Msg в конце удаления в котором пишется что часть элементов не удалось удалить, вы можете их удалить самостоятельно, но при этом чтобы деинсталятор спрашивал об уверенности пользователя удалить программу. Потому что получается что деинсталятор врет пользователю, так как уже удаляется все.

sergey3695 28-05-2014 10:52 2356706

Dodakaedr, кинь лучше скрипт с файлами в лс. Я гляну че-как и сделаю. А то я половину не понял что ты написал.
Если я правильно понял, то есть такой код. (После деинсталяции удалить оставшиеся файлы)
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Files]
//Source: Files\*; DestDir:  {app}

[Code ]
const
bidDelAll = 1;
bidSkipAll = 2;
var
Form: TSetupForm;
CheckListBox: TNewCheckListBox;
AllButton, UnAllButton: TButton;
CancelButton, DelButton: TButton;

MsgForm: TSetupForm;
MsgAllButton, MsgSkipAllButton: TButton;
MsgCancelButton, MsgDelButton: TButton;

DelAllReadOnly: Boolean;
SkipAllReadOnly: Boolean;

function Size64(Hi, Lo: integer): Extended;
var
i: integer;
begin
Result:= Lo;
if Lo < 0 then
Result:= Result + 2147483647 + 2147483647 + 2;
i:= Hi;
while i > 0 do
begin
Result:= Result + 2147483647 + 2147483647 + 2;
i:= i - 1;
end;
end;

procedure FillListBox(const fromDir, fileMask: string; Level: Byte);
var
FSR, DSR: TFindRec;
FindResult: Boolean;
APath: string;
i: integer;
begin
APath := AddBackslash(fromDir);
FindResult := FindFirst(APath + fileMask, FSR);
try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
{files} i:= CheckListBox.AddCheckBox(FSR.Name,
FloatToStr(Size64(FSR.SizeHigh, FSR.SizeLow)) + '  byte',
Level, True, True, False, True, TStringList.Create);
TStrings(CheckListBox.ItemObject[i]).Text:= APath + FSR.Name;
end;
FindResult := FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
not ((DSR.Name = '.') or (DSR.Name = '..')) then
begin
{dir} i:= CheckListBox.AddCheckBox(DSR.Name,'DIR', Level,
True, True, False, True, TStringList.Create);
TStrings(CheckListBox.ItemObject[i]).Text:= APath + DSR.Name;
{Recursion} FillListBox(APath + DSR.Name, fileMask, Level+1);
end;
FindResult := FindNext(DSR);
end;
finally
FindClose(FSR);
FindClose(DSR);
end;
end;

procedure ButtonOnClick(Sender: TObject);
begin
CheckListBox.Checked[0]:= TButton(Sender).Tag = 0;
end;

procedure MsgButtonOnClick(Sender: TObject);
begin
Case TButton(Sender).Tag of
bidDelAll : DelAllReadOnly:= True;
bidSkipAll: SkipAllReadOnly:= True;
end;
MsgForm.Close;
end;

function DelMsgBox(FileName: string): Boolean;
var
MsgLabel: TLabel;
begin
MsgForm:= CreateCustomForm;
MsgForm.ClientWidth := ScaleX(400);
MsgForm.ClientHeight := ScaleY(120);
MsgForm.Caption := 'Удаляемые  файлы';
MsgForm.Center;

MsgLabel := TLabel.Create(MsgForm);
MsgLabel.Left := ScaleX(20);
MsgLabel.Top := ScaleY(20);
MsgLabel.Caption:= FileName + ' является  защищенным файлом или папкой !' + #10#10#13 +
'Вы  хотите удалить файлы с атрибутами только для чтения  ?';
MsgLabel.Parent := MsgForm;

MsgAllButton := TButton.Create(MsgForm);
MsgAllButton.Parent := MsgForm;
MsgAllButton.Width := ScaleX(85);
MsgAllButton.Height := ScaleY(23);
MsgAllButton.Left := ScaleX(20);
MsgAllButton.Top := MsgForm.ClientHeight - ScaleY(23 + 10);
MsgAllButton.Caption := 'Удалить  все';
MsgAllButton.Tag:= bidDelAll;
MsgAllButton.OnClick := @MsgButtonOnClick;

MsgSkipAllButton := TButton.Create(MsgForm);
MsgSkipAllButton.Parent := MsgForm;
MsgSkipAllButton.Width := ScaleX(85);
MsgSkipAllButton.Height := ScaleY(23);
MsgSkipAllButton.Left := MsgAllButton.Left + MsgAllButton.Width + ScaleX(10);
MsgSkipAllButton.Top := MsgForm.ClientHeight - ScaleY(23 + 10);
MsgSkipAllButton.Caption := 'Пропустить  все';
MsgSkipAllButton.Tag:= bidSkipAll;
MsgSkipAllButton.OnClick := @MsgButtonOnClick;

MsgCancelButton := TButton.Create(MsgForm);
MsgCancelButton.Parent := MsgForm;
MsgCancelButton.Width := ScaleX(75);
MsgCancelButton.Height := ScaleY(23);
MsgCancelButton.Left := MsgForm.ClientWidth - MsgCancelButton.Width - ScaleX(20);
MsgCancelButton.Top := MsgForm.ClientHeight - ScaleY(23 + 10);
MsgCancelButton.Caption := 'Пропустить';
MsgCancelButton.ModalResult := mrCancel;

MsgDelButton := TButton.Create(MsgForm);
MsgDelButton.Parent := MsgForm;
MsgDelButton.Width := ScaleX(75);
MsgDelButton.Height := ScaleY(23);
MsgDelButton.Left := MsgCancelButton.Left - MsgDelButton.Width - ScaleX(10);
MsgDelButton.Top := MsgForm.ClientHeight - ScaleY(23 + 10);
MsgDelButton.Caption := 'Удалить';
MsgDelButton.ModalResult := mrOk;

MsgForm.ActiveControl:= MsgCancelButton;

if MsgForm.ShowModal() = mrOk then
Result:= True
else
Result:= False;
end;

procedure DeleteFiles();
var
SR: TFindRec;
i: integer;
str: string;
ResultCode: Integer;
begin
DelAllReadOnly:= False;
SkipAllReadOnly:= False;
for i:= CheckListBox.Items.Count - 1 downto 0 do
begin
if CheckListBox.State[i] = cbChecked then
begin
str:= Trim(TStrings(CheckListBox.ItemObject[i]).Text);
FindFirst(str, SR);
if ((SR.Attributes and FILE_ATTRIBUTE_READONLY) = FILE_ATTRIBUTE_READONLY) then
if Not (DelAllReadOnly or SkipAllReadOnly) then
if DelMsgBox(SR.Name) then
Exec('attrib', ' -h -s -r  ' + '"' + str + '"',
'', SW_HIDE, ewWaitUntilTerminated, ResultCode);
if DelAllReadOnly then
Exec('attrib', ' -h -s -r  ' + '"' + str + '"',
'', SW_HIDE, ewWaitUntilTerminated, ResultCode);

FindClose(SR);
DeleteFile(str);
RemoveDir(str);
end;
end;
end;

procedure BrowseRemainedFiles();
begin
Form:= CreateCustomForm;
Form.ClientWidth := ScaleX(400);
Form.ClientHeight := ScaleY(400);
Form.Caption := 'Удаляемые  файлы';
Form.Center;

CheckListBox := TNewCheckListBox.Create(Form);
CheckListBox.Left:= ScaleX(20);
CheckListBox.Top:= ScaleY(20);
CheckListBox.Width:= Form.ClientWidth - ScaleX(20*2);
CheckListBox.Height:= Form.ClientHeight - ScaleY(23*2 + 20);
CheckListBox.Parent:= Form;

AllButton := TButton.Create(Form);
AllButton.Parent := Form;
AllButton.Width := ScaleX(85);
AllButton.Height := ScaleY(23);
AllButton.Left := ScaleX(20);
AllButton.Top := Form.ClientHeight - ScaleY(23 + 10);
AllButton.Caption := 'Выбрать  все';
AllButton.Tag:= 0;
AllButton.OnClick := @ButtonOnClick;

UnAllButton := TButton.Create(Form);
UnAllButton.Parent := Form;
UnAllButton.Width := ScaleX(85);
UnAllButton.Height := ScaleY(23);
UnAllButton.Left := AllButton.Left + AllButton.Width + ScaleX(10);
UnAllButton.Top := Form.ClientHeight - ScaleY(23 + 10);
UnAllButton.Caption := 'Отменить  все';
UnAllButton.Tag:= 1;
UnAllButton.OnClick := @ButtonOnClick;

CancelButton := TButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - CancelButton.Width - ScaleX(20);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := 'Отменить';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;

DelButton := TButton.Create(Form);
DelButton.Parent := Form;
DelButton.Width := ScaleX(75);
DelButton.Height := ScaleY(23);
DelButton.Left := CancelButton.Left - DelButton.Width - ScaleX(10);
DelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
DelButton.Caption := 'Удалить';
DelButton.ModalResult := mrOk;

Form.ActiveControl:= CancelButton;

CheckListBox.AddCheckBox(ExpandConstant('{app}'), '', 0, True, True, False, True, TStringList.Create);
TStrings(CheckListBox.ItemObject[0]).Text:= ExpandConstant('{app}');
FillListBox(ExpandConstant('{app}'), '*', 1);

if Form.ShowModal() = mrOk then DeleteFiles();
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if DirExists(ExpandConstant('{app}')) and (CurUninstallStep = usPostUninstall) then
BrowseRemainedFiles();
end;


habib2302 28-05-2014 12:41 2356762

sergey3695, очередная ошибка

читать дальше »
Код:

#define NeedSize "5000000000"

#define NeedMem 512

#define SecondPB

#ifdef SecondPB
  #define PbLblCount 1
#else
  #define PbLblCount 0
#endif

;#define Components

;#define records

;#define facompress

;#define PrecompInside
;#define SrepInside
;#define MSCInside
;#define precomp "0.42"
;#define unrar
;#define XDelta
;#define PackZIP

[Setup]
AppName=ISDone
AppVerName=ISDone
DefaultDirName={pf}\ISDone
DefaultGroupName=ISDone Example
OutputDir=.
OutputBaseFilename=Setup
VersionInfoCopyright=ProFrager
SolidCompression=yes
#ifdef NeedSize
  ExtraDiskSpaceRequired={#NeedSize}
#endif

[Files]
Source: Include\English.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy

#ifdef records
  Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef PrecompInside
  Source: Include\CLS-precomp.dll; DestDir: {tmp}; Flags: dontcopy
  Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
  Source: Include\packjpg_dll1.dll; DestDir: {tmp}; Flags: dontcopy
  Source: Include\precomp.exe; DestDir: {tmp}; Flags: dontcopy
  Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef SrepInside
  Source: Include\CLS-srep.dll; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef MSCInside
  Source: Include\CLS-MSC.dll; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef facompress
  Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef precomp
  #if precomp == "0.38"
    Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
  #else
    #if precomp == "0.4"
      Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
    #else
      #if precomp == "0.41"
        Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
      #else
        #if precomp == "0.42"
          Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
        #else
          Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
          Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
          Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
          Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
        #endif
      #endif
    #endif
  #endif
#endif

#ifdef unrar
  Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef XDelta
  Source: Include\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef PackZIP
  Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
  Source: Include\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif

[CustomMessages]
russian.ExtractedFile=Извлекается файл:
russian.Extracted=Распаковка архивов...
russian.CancelButton=Отменить распаковку
russian.Error=Ошибка распаковки!
russian.ElapsedTime=Прошло:
russian.RemainingTime=Осталось времени:
russian.EstimatedTime=Всего:
russian.AllElapsedTime=Время установки:

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[UninstallDelete]
Type: filesandordirs; Name: {app}

[ Code]
const
  PCFonFLY    = true;
  notPCFonFLY = false;
  PbLblCount  = {#PbLblCount};
var
  LblTime      :  array [0..2]            of TLabel;
  LblPct      :  array [0..{#PbLblCount}] of TLabel;
  ISDonePB    :  array [0..{#PbLblCount}] of TNewProgressBar;
  ISDoneCancel :  integer;
  ISDoneError  :  boolean;
  ISDoneStopUP :  boolean;
  PCFVer      :  double;

type
  TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;

function WrapCallback(callback:TCallback; paramcount:integer):longword;
  external 'wrapcallback@files:ISDone.dll stdcall delayload';

function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean;
  external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function IS7ZipExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean;
  external 'IS7zipExtract@files:ISDone.dll stdcall delayload';
function ISRarExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean;
  external 'ISRarExtract@files:ISDone.dll stdcall delayload';
function ISPrecompExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean;
  external 'ISPrecompExtract@files:ISDone.dll stdcall delayload';
function ISSRepExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean;
  external 'ISSrepExtract@files:ISDone.dll stdcall delayload';
function ISxDeltaExtract(CurComponent:Cardinal; PctOfTotal:double; minRAM,maxRAM:integer; InName, DiffFile, OutFile: AnsiString; DeleteInFile, DeleteDiffFile:boolean):boolean;
  external 'ISxDeltaExtract@files:ISDone.dll stdcall delayload';
function ISPackZIP(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString;ComprLvl:integer; DeleteInFile:boolean):boolean;
  external 'ISPackZIP@files:ISDone.dll stdcall delayload';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):boolean;
  external 'ShowChangeDiskWindow@files:ISDone.dll stdcall delayload';

function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean;
  external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer;
  external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean;
  external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar;
  external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean;
  external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISExec(CurComponent:Cardinal; PctOfTotal,SpecifiedProcessTime:double; ExeName,Parameters,TargetDir,OutputStr:AnsiString;Show:boolean):boolean;
  external 'ISExec@files:ISDone.dll stdcall delayload';

function SrepInit(TmpPath:PAnsiChar;VirtMem,MaxSave:Cardinal):boolean;
  external 'SrepInit@files:ISDone.dll stdcall delayload';
function PrecompInit(TmpPath:PAnsiChar;VirtMem:cardinal;PrecompVers:single):boolean;
  external 'PrecompInit@files:ISDone.dll stdcall delayload';
function FileSearchInit(RecursiveSubDir:boolean):boolean;
  external 'FileSearchInit@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean;
  external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean;
  external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean;
  external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean;
  external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean;
  external 'ResumeProc@files:ISDone.dll stdcall';

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
    if OveralPct<=1000  then ISDonePB[0].Position := OveralPct;
    LblPct[0].Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
  #ifdef SecondPB
    if CurrentPct<=1000 then ISDonePB[1].Position := CurrentPct;
    LblPct[1].Caption := IntToStr(CurrentPct div 10)+'.'+chr(48 + CurrentPct mod 10)+'%';
  #endif
  WizardForm.FileNamelabel.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, WizardForm.FileNamelabel.Font, WizardForm.FileNamelabel.Width-ScaleX(100));
  LblTime[0].Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
  LblTime[1].Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
  LblTime[2].Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
  Result := ISDoneCancel;
end;

procedure WizardFormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  case ISDoneStopUP of
    True:
    begin
      SuspendProc;
      if ExitSetupMsgBox then ISDoneCancel:=1;
      ResumeProc;
    end;
    False : CanClose := True;
  end;
end;

function InitializeSetup(): Boolean;
begin
  ISDoneStopUP := False;
  Result := True;
end;

procedure HideControls;
var
  i :integer;
begin
    for i := 0 to PbLblCount do
    begin
      ISDonePB[i].Hide;
      LblPct[i].Hide;
    end;
  for i := 0 to 1 do LblTime[i].Hide;
end;

procedure CreateControls;
var
  i :integer;
begin
  WizardForm.FileNamelabel.SetBounds(ScaleX(0), ScaleY(30), ScaleX(395), ScaleY(14));
  for i := 0 to PbLblCount do
  begin
    ISDonePB[i] := TNewProgressBar.Create(WizardForm);
    with ISDonePB[i] do
    begin
      Parent  := WizardForm.InstallingPage;
      SetBounds(ScaleX(0), ScaleY(50+i*57), ScaleX(365), ScaleY(21));
      Max      := 1000;
    end;

    LblPct[i] := TLabel.Create(WizardForm);
    with LblPct[i] do
    begin
      Parent    := WizardForm.InstallingPage;
      AutoSize  := False;
      SetBounds(ScaleX(370), ScaleY(52+i*57), ScaleX(80), ScaleY(14));
    end;
  end;

  for i := 0 to 2 do
  begin
    LblTime[i] := TLabel.Create(WizardForm);
    with LblTime[i] do
    begin
      AutoSize := False;
      Alignment := taCenter;
        case i of
        0, 1 :
        begin
          Parent := WizardForm.InstallingPage;
          SetBounds(ScaleX(0), ScaleY(75+i*17), ScaleX(395), ScaleY(14));
        end;
        2 :
        begin
          Parent := WizardForm.FinishedPage;
          SetBounds(ScaleX(180), ScaleY(200), ScaleX(300), ScaleY(14));
        end;
      end;
    end;
  end;
  WizardForm.OnCloseQuery := @WizardFormCloseQuery;
  WizardForm.CancelButton.Enabled := True;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  if (CurPageID = wpFinished) and ISDoneError then
  begin
    LblTime[2].Hide;
    WizardForm.Caption:= ExpandConstant('{cm:Error}');
    WizardForm.FinishedLabel.Font.Color:= clRed;
    WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
  end;
end;

function CheckError:boolean;
begin
  result:= not ISDoneError;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  TmpValue      : cardinal;
  FindHandle1, ColFiles1, CurIndex1, tmp : integer;
  ExecError                              : boolean;
  InFilePath, OutFilePath, OutFileName  : PAnsiChar;
begin
  if CurStep = ssPostInstall then //Если необходимо, можно поменять на ssInstall
  begin
    WizardForm.ProgressGauge.Hide;
    CreateControls;
    WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
    ISDoneCancel:=0;

  // Распаковка всех необходимых файлов в папку {tmp}.

    ExtractTemporaryFile('unarc.dll');

    #ifdef PrecompInside
      ExtractTemporaryFile('CLS-precomp.dll');
      ExtractTemporaryFile('packjpg_dll.dll');
      ExtractTemporaryFile('packjpg_dll1.dll');
      ExtractTemporaryFile('precomp.exe');
      ExtractTemporaryFile('zlib1.dll');
    #endif

    #ifdef SrepInside
      ExtractTemporaryFile('CLS-srep.dll');
    #endif

    #ifdef MSCInside
      ExtractTemporaryFile('CLS-MSC.dll');
    #endif

    #ifdef facompress
      ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
    #endif
    #ifdef records
      ExtractTemporaryFile('records.inf');
    #endif

    #ifdef precomp
      #if precomp == "0.38"
        ExtractTemporaryFile('precomp038.exe');
      #else
        #if precomp == "0.4"
          ExtractTemporaryFile('precomp040.exe');
        #else
          #if precomp == "0.41"
            ExtractTemporaryFile('precomp041.exe');
          #else
            #if precomp == "0.42"
              ExtractTemporaryFile('precomp042.exe');
            #else
              ExtractTemporaryFile('precomp038.exe');
              ExtractTemporaryFile('precomp040.exe');
              ExtractTemporaryFile('precomp041.exe');
              ExtractTemporaryFile('precomp042.exe');
            #endif
          #endif
        #endif
      #endif
    #endif

    #ifdef unrar
      ExtractTemporaryFile('Unrar.dll');
    #endif

    #ifdef XDelta
      ExtractTemporaryFile('XDelta3.dll');
    #endif

    #ifdef PackZIP
      ExtractTemporaryFile('7z.dll');
      ExtractTemporaryFile('PackZIP.exe');
    #endif

    ExtractTemporaryFile('English.ini');

  #ifdef precomp
    PCFVer:={#precomp};
  #else
    PCFVer:=0;
  #endif
    ISDoneError:=true;
    if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, MainForm.Handle, {#NeedMem}, @ProgressCallback) then
    begin
      repeat
//        ChangeLanguage('English');
        if not SrepInit('',512,0) then break;
        if not PrecompInit('',128,PCFVer) then break;
        if not FileSearchInit(true) then break;

        if not ISArcExtract ( 0, 0, ExpandConstant('{src}\Zuma_Deluxe.arc'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;

        ISDoneError:=false;
      until true;
      ISDoneStop;
    end;
    HideControls;
  end;
  if {(CurStep=ssPostInstall) and} ISDoneError then
  begin
    Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
  end;
end;


только я компоненты удалили т.к они мне не нужны

sergey3695 28-05-2014 13:48 2356787

habib2302, omg. ISDone 0.6 final

Bond01 29-05-2014 22:33 2357499

Всем доброго дня!
У кого сейчас есть немного времени и желание, может заинтересует вот эта программа - Ashampoo Burning Studio Free 1.14.5 [Multi Ru]
Разобрать ее, убрать все лишнее, готов помогать.
https://www.ashampoo.com/ru/usd/pin/...ng-Studio-FREE

Kashtan007 30-05-2014 14:37 2357765

Всем привет.
Как в установщике заменить кнопки? Существует ли на это скрипт?
У меня сейчас такие:

Как сделать такие:


Заранее спасибо за помощь.

Shift85 31-05-2014 18:09 2358256

Вложений: 2
Цитата:

Цитата Kashtan007
Как сделать такие »

Kashtan007, Использовать Юникод версию Inno Setup. Можно IsPicture2 или ISWin7.

Kashtan007 31-05-2014 19:17 2358276

Shift85, спасибо.
Хотелось бы узнать как изменить именно кнопки, а там меняет фон.
Есть ли скрипт только на изменение кнопок?

Shift85 31-05-2014 19:37 2358287

Вложений: 1
Цитата:

Цитата Kashtan007
Есть ли скрипт только на изменение кнопок »

Kashtan007, Базаришь http://rghost.ru/56041556 :super:

Еще

Kashtan007 31-05-2014 20:26 2358304

Shift85, спасибо этот вариант подошел. Button 2 состояния.7z

У меня установщик нестандартного размера из-за этого кнопки не в том месте и не видно текста.
Как изменить их расположение и добавить текст?
Заранее спасибо!

Shift85 31-05-2014 20:42 2358318

Цитата:

Цитата Kashtan007
Как изменить их расположение и добавить текст? »

Kashtan007, Мне кажеться лутше на ботве возьми пример там проще сам использую.

Там эти параметры просто меняй как надо.

Код:

Left-8,Top-8,Width+16,Height+16
А текст так например добавить.

Код:

BtnSetText(hAboutBtn,'О релизе');
Kashtan007, На ботве мне кажеться намного проще. :yes:

Антон_Мураткин@vk 01-06-2014 18:45 2358556

Всем Доброго время суток.
Может всё таки кто подскажет?
Вот в эту панель можно добавить прозрачность в %? Чтобы менять можно было её. Сам что то не додумаюсь не как.
Подскажите пожалуйста можно и в примере.
Код:

Panel1 := TPanel.Create(WizardForm);
with Panel1 do begin
Parent := WizardForm;
SetBounds(ScaleX(0),ScaleY(-195),ScaleX(650),ScaleY(195));
Color := clblack;
ParentBackground := False;
end;

Заранее благодарю.

sergey3695 02-06-2014 17:56 2358990

Антон_Мураткин@vk, фотошоп в помощь. больше никак. там в процентах.

Kashtan007 02-06-2014 23:10 2359165

Всем привет, как убрать это окошко в установщике.

Заранее спасибо за ответ!

Dodakaedr 02-06-2014 23:51 2359173

Kashtan007,
Код:

[Setup]
DisableDirPage=yes


Kashtan007 03-06-2014 00:43 2359185

Dodakaedr, спасибо.
Но есть проблема, у меня вообще пропускает страницу каталога. А мне нужно только это окошко о существующей папке убрать.

Habetdin 03-06-2014 01:18 2359190

Kashtan007, "Directory Exists" message
Код:

[Setup]
DirExistsWarning=no


White Rabbit 03-06-2014 14:48 2359403

А можно ли в сделать скрипт для поиска ключей в реестре? Имеется ввиду не конкретное расположение а, например, в ветке какой-нибудь. Допустим есть ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\, ключ находится здесь HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E978-E325-11CE-BFC1-08002BE10318}\0000. Но дабы не утруждать себя, поиск, чтобы проходил просто в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\.

sergey3695 03-06-2014 18:02 2359502

White Rabbit, RegKeyExists, в справке посмотришь.

White Rabbit 03-06-2014 21:05 2359582

Сэнкс. Пользую его, но не могу понять. Я его использую для конкретного параметра, а не для всей ветки. Но ладно посмотрю. Просто наткнулся на проблему, сути которой не понимаю. Упомянутая мною ветка "работает" нормально. Я пытаюсь следить за параметром в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ и здесь проблемы. В Windows XP SP3 x86 всё работает чётко, но на Windows 7 Ultimate SP1 x64 траблы. Не работает контроль параметра. В:
[code]
......
if not RegKeyExists(HKLM,'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\A360E2EA788FFC586113AFE1F2AAB F01EBE7A248') then
.....

Shkutu 04-06-2014 12:22 2359771

Цитата:

Цитата White Rabbit
Сэнкс »

Для этого есть "полезное сообщение".
Цитата:

Цитата White Rabbit
Не работает контроль параметра »

А вы уверены, что параметр прописывается именно в эту ветку? На 64х битных машинах HKLM\SOFTWARE вообще говоря указывает на HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node. Если же нужна именно HKEY_LOCAL_MACHINE\SOFTWARE ветка, то это HKLM64

White Rabbit 04-06-2014 14:55 2359848

Во-первых. Нет не уверен, но и на обратное не натыкался... Пока что. Во-вторых, для варианта HKLM\SYSTEM\CurrentControlSet\Control\Class\ это почему-то не критично. А вот для Uninstall-а - да. В-третьих, я смотрел Regedit-Ом - там ничего про HKLM64 не упоминается. В-четвёртых, проверил. Вы правы. Так и есть. Но эта фишка критична только для анинсталла.

saneksanek 05-06-2014 20:07 2360469

Знающие люди могут подсказать в чем может быть проблема?

Dodakaedr 05-06-2014 23:52 2360544

saneksanek, удалите процедуры HideComponents и ShowComponents(CurPageID: Integer), все что в них указывается укажите в CurPageChanged(CurPageID: Integer)...

diman_21Ru 06-06-2014 00:03 2360557

Собрал скрипт с Показам картинок и описанием мода , как можно чтобы если не наводишь на текст все равно пустое место было закрыто картинкой ,заранее спасибо

Dodakaedr 06-06-2014 00:10 2360563

diman_21Ru, посмотрите вот это может поможет.

diman_21Ru 06-06-2014 09:00 2360616

Dodakaedr, Не помогло даже картинки не выходят почему то

Dodakaedr 06-06-2014 10:43 2360644

diman_21Ru, без скрипта не разобратся

diman_21Ru 06-06-2014 11:04 2360656

Dodakaedr, в личку кину

ROMKA-1977 06-06-2014 11:19 2360667

Подскажите пож как решить следующую проблему:
1) На InnerPage прописал Bevel2
2) Необходимо чтобы он отображался ТОЛЬКО при отображении страницы SelectDirPage

saurn 06-06-2014 11:42 2360684

Цитата:

Цитата ROMKA-1977
Необходимо чтобы он отображался ТОЛЬКО при отображении страницы SelectDirPage »

Код:

procedure CurPageChanged(CurPageID: Integer);
begin
    Bevel2.Hide;

    case CurPageID of
        wpSelectDir: Bevel2.Show;
    end;
end;


ROMKA-1977 06-06-2014 12:56 2360715

saurn, СПС. Всё ОК!

saneksanek 06-06-2014 15:12 2360769

Dodakaedr, Все тоже самое

sergey3695 06-06-2014 21:04 2360931

saneksanek,
Код:

    if CurPageID = wpWelcome then
    begin
        WizardForm.OuterNotebook.Hide;
        FinishedImage.Hide;

    end;
    else if CurPageID = wpFinished then
    begin
        WizardForm.OuterNotebook.Hide;
        MainImage.Hide;
        FinishedImage.Show;
    end;
    else WizardForm.OuterNotebook.Show;

это сотри нафиг.
Код:

procedure InitializeWizard;
begin
WizardForm.OuterNotebook.Hide;
end;

этого вполне достаточно, чем бред писать.

saneksanek 06-06-2014 22:33 2360959

sergey3695, Тогда пропадет картинка,на в начале и конце.

Dodakaedr 06-06-2014 23:08 2360969

saneksanek,
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.OuterNotebook.Hide;
  case CurPageID of
wpWelcome:
    begin
      Welcome1.Show;
      Welcome2.Show;
      MainImage.Show;
      WizardForm.OuterNotebook.Show;
      FinishedImage.Hide;
  end;

wpFinished:
    begin
      FinishedHeadingLabel.Show;
      FinishedLabel.Show;
      WizardForm.OuterNotebook.Show;
      FinishedImage.Show;
      MainImage.Hide;
    end;
  end;
end;


saneksanek 07-06-2014 00:13 2361000

Dodakaedr, Без толку,приветствие становится стандартное,а то что должно быть вместо него идет на остальных вкладках .Может проще будет дать скрип с файлами?

Dodakaedr 07-06-2014 00:15 2361001

Цитата:

Цитата saneksanek
Без толку,приветствие становится стандартное,а то что должно быть вместо него идет на остальных вкладках .Может проще будет дать скрип с файлами? »

Ну это действительно улучшает шанс вам помочь:)

saneksanek 07-06-2014 00:22 2361003

Dodakaedr, Лс.

Raf-9600 07-06-2014 11:16 2361108

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

sergey3695 07-06-2014 14:24 2361183

Raf-9600,
Код:

if GetUILanguage = $0419 then
в справке посмотри, если я правильно понял.

Dodakaedr 08-06-2014 10:36 2361456

Как с помощью этого кода создать такое правило в Windows Firewall?
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup
OutputDir=.

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Icons]
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}

[ code]
// Вспомогательные функции для установки Inno
// Используется для добавления / удаления программ из правил брандмауэра Windows
// Код, родом из http://news.jrsoftware.org/news/innosetup/msg43799.html

const
  NET_FW_SCOPE_ALL = 0;
  NET_FW_IP_VERSION_ANY = 2;

procedure SetFirewallException(AppName,FileName:string);
var
  FirewallObject: Variant;
  FirewallManager: Variant;
  FirewallProfile: Variant;
begin
  try
    FirewallObject := CreateOleObject('HNetCfg.FwAuthorizedApplication');
    FirewallObject.ProcessImageFileName := FileName;
    FirewallObject.Name := AppName;
    FirewallObject.Scope := NET_FW_SCOPE_ALL;
    FirewallObject.IpVersion := NET_FW_IP_VERSION_ANY;
    FirewallObject.Enabled := True;
    FirewallManager := CreateOleObject('HNetCfg.FwMgr');
    FirewallProfile := FirewallManager.LocalPolicy.CurrentProfile;
    FirewallProfile.AuthorizedApplications.Add(FirewallObject);
  except
  end;
end;

procedure RemoveFirewallException( FileName:string );
var
  FirewallManager: Variant;
  FirewallProfile: Variant;
begin
  try
    FirewallManager := CreateOleObject('HNetCfg.FwMgr');
    FirewallProfile := FirewallManager.LocalPolicy.CurrentProfile;
    FireWallProfile.AuthorizedApplications.Remove(FileName);
  except
  end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep=ssPostInstall then
    SetFirewallException('My Server', ExpandConstant('{app}')+'\TCPServer.exe');
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep=usPostUninstall then
    RemoveFirewallException(ExpandConstant('{app}')+'\TCPServer.exe');
end;


diman_21Ru 08-06-2014 12:02 2361475

Помогите пожалуйста , не вставляется картинка ,в эти места , потом надо чтобы она сменевалась на картинки уже наводящие на моды.
Используется скрипт Source: Images\Внешний вид\3.bmp; DestName: "WizardForm.BitmapImage1.bmp"; Flags: dontcopy solidbreak , до появления функции теста картинка появлялась сейчас пропала .

saneksanek 09-06-2014 23:06 2362288

diman_21Ru, Много букв и мало связи.
Если понял правильно вот держи http://rghost.ru/private/56276751/41...e24d205893aabc

Dodakaedr 12-06-2014 16:17 2363298

Всем привет! Не могу понять почему не ставится картинка. Использую ботву, надо заменить стандартный WizardForm.WizardSmallBitmapImage...
Код:

ImgLoad(WizardForm.MainPanel.Handle, ExpandConstant('{tmp}\1.png'), ScaleX(0), ScaleY(0), ScaleX(160), ScaleY(50), True, True);
  ImgApplyChanges(WizardForm.MainPanel.Handle);

Спустя 5 часов 31 мин. Все разобрался)

diman_21Ru 12-06-2014 23:09 2363440

Как можно добавить чистую страницу для вторых компонентов

Dodakaedr 12-06-2014 23:47 2363449

Цитата:

Цитата diman_21Ru
Как можно добавить чистую страницу для вторых компонентов »

Код:

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

[ Code]
var
  ISCustomPage1: TWizardPage;

procedure RedesignWizardForm;
begin
  ISCustomPage1 := CreateCustomPage(wpWelcome, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;


Nordek 13-06-2014 02:10 2363477

Цитата:

Цитата diman_21Ru
Как можно добавить чистую страницу для вторых компонентов »

Используйте "Дизайнер диалогов"
Откройте "Inno Setup Compiler"
Перейдите во вкладку "Дизайнер диалогов"
С левого бока выберите страницу (Welcome Page, License Page, Password Page и т.д) под которой хотите разместить новую чистую страницу.
Вверху, где "Файл, Правка" найдите "Дизайнер"
Кликните "Дизайнер", затем "Добавить диалог"
Всё, новая страница добавлена.

diman_21Ru 13-06-2014 10:39 2363536

Dodakaedr, Мне вариант с нажатием на кнопку и спустить в низ больше понравился но с размерами запутался можете помочь скрипт вышлю , http://rghost.ru/56348041 , жду ответа =)

Dinvin4ester 13-06-2014 12:20 2363564

Ребята,делаю выбор таблеток - http://i61.fastpic.ru/big/2014/0613/...420b833cf4.png ,от али все нормально,а вот от кодекса присутсвуют такие файлы http://i64.fastpic.ru/big/2014/0613/...21ddbf1.png,но при установке exe этот не заменяется,только ини файлы пеносяться.Как быть? Пожскажите пожалуйста..

Nordek 13-06-2014 13:00 2363579

Цитата:

Цитата diman_21Ru
но с размерами запутался »

Если интересует Form_Soft, то вот:


Код:

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

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Дополнительное по; Types: full;
Name: text\DirectX; Description: DirectX 9;
Name: text\Visual; Description: Microsoft Visual C++;

[code]
var
Flag: Boolean;
SettingButton: TButton;
procedure HideShowOnClick(Sender: TObject);
begin
if
Flag = False then begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(360);
Flag:= True;
SettingButton.Caption:= '[ Показать ]';
end else begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(550);  // Высота
Flag:= False;
SettingButton.Caption:= '[ Скрыть ]';
end;
end;

procedure InitializeWizard();
begin
SettingButton:= TButton.Create(WizardForm);
//                      Слева    Сверху      Ширина      Высота
SettingButton.SetBounds(ScaleX(5),ScaleY(325), ScaleX(80), ScaleY(23))
SettingButton.Caption:= '[ Показать ]';
SettingButton.OnClick:= @HideShowOnClick;
SettingButton.Parent:= WizardForm;
Flag:=True;
with WizardForm do begin
ComponentsList.Parent:= WizardForm;
WizardForm.ComponentsList.Checked[1]:=True
WizardForm.ComponentsList.Checked[2]:=True
//                                  Слева      Сверху      Ширина      Высота
WizardForm.ComponentsList.SetBounds(ScaleX(8),ScaleY(370), ScaleX(480), ScaleY(170))
WizardForm.ComponentsList.Color := clMenu;
end;


Dodakaedr 13-06-2014 13:52 2363602

Цитата:

Цитата diman_21Ru
Мне вариант с нажатием на кнопку и спустить в низ больше понравился но с размерами запутался можете помочь »

Так сойдет? Script.iss

Dinvin4ester 13-06-2014 14:19 2363609

Подскажите мне ?

Dodakaedr 13-06-2014 14:21 2363611

Цитата:

Цитата Dinvin4ester
Подскажите мне ? »

Мало инфы, нету скрипта.....как вам помочь?

Dinvin4ester 13-06-2014 14:28 2363615

Dodakaedr,
Вот скрипт - http://multi-up.com/980008 . Не получается при установке заменить сами файлы,таблетка не встает,так как не заменяется сам ехе,буду рад помощи.

Nordek 13-06-2014 16:14 2363662

Dinvin4ester, В секции [Files]
Код:

Source: "D:\Games\NoDVD\ALI213\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: SPINTIRES\ru;
Source: "D:\Games\NoDVD\CODEX\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: SPINTIRES\en;
Source: "D:\Games\SPINTIRES\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs;

передвинь строку:
Код:

Source: "D:\Games\SPINTIRES\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs;
на уровень выше

т.е вот так:
Код:

Source: "D:\Games\SPINTIRES\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs;
Source: "D:\Games\NoDVD\ALI213\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: SPINTIRES\ru;
Source: "D:\Games\NoDVD\CODEX\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: SPINTIRES\en;


Dinvin4ester 13-06-2014 16:54 2363673

Nordek,
Спасибо.

diman_21Ru 13-06-2014 22:41 2363821

Dodakaedr, А как туда ввести компоненты не получается

habib2302 13-06-2014 23:01 2363827

Всем привет. Как добавить Radio Button 1 Изменить/Обновить и 2 Удалить и присвоить к ним задания

valyok666 13-06-2014 23:49 2363844

Цитата:

Цитата habib2302
Всем привет. Как добавить Radio Button 1 Изменить/Обновить и 2 Удалить и присвоить к ним задания »

Посмотри примеры botva

habib2302 14-06-2014 00:25 2363854

valyok666, в примерах там ничего нету

Dinvin4ester 14-06-2014 10:55 2363925

Ребята,как собственно сделать такое оформление инсталла - http://i64.fastpic.ru/big/2014/0614/...41552e7e9b.jpg , http://i62.fastpic.ru/big/2014/0614/...4a45a36d0.jpg?

Shift85 14-06-2014 12:46 2363964

Цитата:

Цитата Dinvin4ester
Ребята,как собственно сделать такое оформление инсталла »

Dinvin4ester, Через ботву. :wink:
читать дальше »
http://rghost.ru/56369219

Dodakaedr 14-06-2014 13:53 2363983

Цитата:

Цитата diman_21Ru
А как туда ввести компоненты не получается »

можете так http://forum.oszone.net/post-2351548-650.html

Dinvin4ester 14-06-2014 16:32 2364024

Shift85,
Спасибо и еще можете подсказать ..
читать дальше »
[Components]
Name: Games; Description: NoDVD; Flags: disablenouninstallwarning
Name: Games\ru; Description: парам; Flags: disablenouninstallwarning exclusive
Name: Games\en; Description: тадам; Flags: disablenouninstallwarning exclusive

и у меня получается пустое окошко http://i64.fastpic.ru/big/2014/0614/...3e86319c10.png
как побороть ?

Dodakaedr 14-06-2014 16:41 2364026

Цитата:

Цитата habib2302
Всем привет. Как добавить Radio Button 1 Изменить/Обновить »

В папке Inno что-то подобное нашел Uninstall

habib2302 14-06-2014 16:47 2364028

Dodakaedr, почти.
я просто хотел чтобы эта страница появлялась после запуска инсталлятора, а не деинсталлятора

Dodakaedr 14-06-2014 16:56 2364031

Цитата:

Цитата habib2302
я просто хотел чтобы эта страница появлялась после запуска инсталлятора, а не деинсталлятора »

Держите InstallRemove

habib2302 14-06-2014 17:09 2364037

Dodakaedr, но мне все таки хотелось чтобы при выборе remove запускался деинсталлятор через реестр и наложить изображения через ботву

Kashtan007 14-06-2014 22:56 2364130

Всем привет ребята. Возник такой вопрос...
Как сделать это:
Мне нужно, чтобы на странице компонентов, справа от компонента был допустим значок динамика и при его нажатии воспроизводился звук.
Т.е. допустим я листаю компоненты:
Прога 1
Прога 2
Прога 3
Возле проги 3 я нажимаю на маленький значок динамика и мне 1 раз воспроизводится звук заданный для проги 3.
И так к каждому компоненту. Заранее спасибо за помощь!

valyok666 15-06-2014 02:22 2364175

Цитата:

Цитата Dinvin4ester
Спасибо и еще можете подсказать ..
читать дальше »
и у меня получается пустое окошко http://i64.fastpic.ru/big/2014/0614/...3e86319c10.png
как побороть ? »

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

Dinvin4ester 15-06-2014 11:32 2364217

valyok666,
http://multi-up.com/980365 вот сам скрипт..

Dodakaedr 15-06-2014 22:08 2364477

Цитата:

Цитата Dinvin4ester
вот сам скрипт.. »

Вот Ваш скрипт. Вроде получилось сделать то что вы просили. Тестируйте...

diman_21Ru 15-06-2014 22:28 2364482

Dodakaedr, Я пытался сделать с нижней панелью открывающейся по кнопки компоненты не вставляются можете ли мне помочь http://rghost.ru/56396960 и ваша тема :http://forum.oszone.net/post-2351548-650.html

Dodakaedr 15-06-2014 22:57 2364492

Цитата:

Цитата diman_21Ru
компоненты не вставляются можете ли мне помочь »

Все вставляется Скрипт

Dinvin4ester 15-06-2014 22:59 2364495

Dodakaedr,
Все так же одна картинка,может что-то не то вписываю ?

Dodakaedr 15-06-2014 23:08 2364496

Цитата:

Цитата Dinvin4ester
Все так же одна картинка,может что-то не то вписываю ? »

Вы проверили мой скрипт, который скинул??? Должно быть как на скрине...

Dinvin4ester 15-06-2014 23:38 2364508

Dodakaedr,
Да,что-то не так и выходит эта ошибка - http://i61.fastpic.ru/big/2014/0615/...a4145e6222.png Указываешь любую папку и не пускает дальше.

Dodakaedr 15-06-2014 23:45 2364513

Цитата:

Цитата Dinvin4ester
Указываешь любую папку и не пускает дальше. »

Эта ошибка у вас была, вы мне с ней давали скрипт. Разбираться не стал... Нужно выбирать уже существующею папку.

Dinvin4ester, Исправление ошибки: в секции [Setup] удалите пробел в строке DefaultGroupName=Games \{#app}.

Dinvin4ester 15-06-2014 23:51 2364517

Dodakaedr,
Ага. все ясно мой косяк, и так я понимаю могу добавлять теперь в скрипт компоненты и оно будет ставить ? И еще не подскажите ,прогресс бар двойной,нельзя как-то на 1 перейти или стандартный поставить ? Если не использовать сторонние архиваторы,то его вовсе не видно.

Dodakaedr 15-06-2014 23:55 2364521

Цитата:

Цитата Dinvin4ester
и так я понимаю могу добавлять теперь в скрипт компоненты и оно будет ставить »

Через секцию [Components] не прокатит, нужно все вручную указывать...
Цитата:

Цитата Dinvin4ester
,нельзя как-то на 1 перейти или стандартный поставить ? »

Надо посмотреть....

Dinvin4ester 15-06-2014 23:59 2364522

Dodakaedr,
Можете хоть набросок кинуть как вручную делать..? Или что-то типо этого ?

Source: "D:\Games\Buh\ALI213\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Buf\ru;
Source: "D:\Games\Buf\Reloaded\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Buf\en;

Dodakaedr 16-06-2014 00:08 2364528

Цитата:

Цитата Dinvin4ester
Можете хоть набросок кинуть как вручную делать..? Или что-то типо этого ? »

Уже не сегодня...

Dinvin4ester 16-06-2014 00:09 2364529

Dodakaedr,
Буду ждать.

Dodakaedr 16-06-2014 00:11 2364534

Цитата:

Цитата Dinvin4ester
Source: "D:\Games\Buh\ALI213\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Buf\ru;
Source: "D:\Games\Buf\Reloaded\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Components: Buf\en; »

Попробуйте так:
Код:

Source: "D:\Games\Buh\ALI213\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: RuCheck;
Source: "D:\Games\Buf\Reloaded\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: EnCheck;


Dinvin4ester 16-06-2014 00:14 2364535

Dodakaedr,
Оооо,прям как надо.Спасибо оромное за все.Осталось только с прогресс баром проблемку решить..

Dodakaedr 16-06-2014 00:24 2364539

Цитата:

Цитата Dinvin4ester
с прогресс баром проблемку решить.. »

Замените свой модуль IsDone.iss на этот IsDone.iss

Dinvin4ester 16-06-2014 00:42 2364543

Dodakaedr,
Заменил,но только не видно его http://i61.fastpic.ru/big/2014/0616/...5b96446056.png ,как я писал ранее без сторонних архиваторов он не идет.

Dodakaedr 16-06-2014 13:10 2364682

Цитата:

Цитата Dinvin4ester
,как я писал ранее без сторонних архиваторов он не идет. »

У вас используются какие-то архивы? isDone используете?

Dinvin4ester 16-06-2014 14:19 2364700

Dodakaedr,
Неа,только инно.

Dodakaedr 16-06-2014 18:34 2364812

Цитата:

Цитата Dinvin4ester
Неа,только инно. »

Вот Скрипт Модули PB.iss и IsDone.iss не нужны. В скрипте увидите.

Dinvin4ester 16-06-2014 19:38 2364859

Dodakaedr,
Гуру , спасибо вам. Все как я и хотел...

diman_21Ru 16-06-2014 19:46 2364863

Dodakaedr, а как тут поставить чисто галочки без кружочков

ComponentsList := TNewCheckListBox.Create(WizardForm);
with ComponentsList do
begin
Parent := WizardForm;
SetBounds(ScaleX(120), ScaleY(545), ScaleX(417), ScaleY(100));
AddCheckBox('Версия', '', 0, True, False, False, True, nil);
AddCheckBox('Озвучка', '', 0, True, False, False, True, nil);
AddRadioButton('Russian', '', 1, True, True, nil);
AddRadioButton('English', '', 1, False, True, nil);
end;

Dodakaedr 16-06-2014 19:54 2364867

diman_21Ru,
читать дальше »
Код:

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

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: {win}\Help\*; DestDir: {app}; Flags: external recursesubdirs

[ Code]
Var
ComponentsList: TNewCheckListBox;

procedure InitializeWizard();
begin
ComponentsList := TNewCheckListBox.Create(WizardForm);
    with ComponentsList do
    begin
    Parent := WizardForm.WelcomePage;
    SetBounds(ScaleX(190), ScaleY(200), ScaleX(107), ScaleY(100));
    AddCheckBox('Версия', '', 0, True, True, False, True, nil);
    AddCheckBox('Озвучка', '', 0, True, True, False, True, nil);
    AddCheckBox('Russian', '', 0, True, True, False, True, nil);
    AddCheckBox('English', '', 0, True, True, False, True, nil);
    //BorderStyle := bsNone;
    end;
with WizardForm.WelcomeLabel2 do
  begin
    Height := ScaleY(111);
  end;
end;


diman_21Ru 16-06-2014 20:13 2364880

Dodakaedr, А как можно в файлах указать путь ?

Dodakaedr 16-06-2014 20:15 2364882

Цитата:

Цитата diman_21Ru
А как можно в файлах указать путь ? »

Путь на что?

diman_21Ru 16-06-2014 20:19 2364886

Dodakaedr, На файлы которые будут

Dodakaedr 16-06-2014 20:31 2364896

diman_21Ru, У вас в скрипте используется функция IsComponent(CompIndex: Integer): Boolean; это ваша чекова функция которая работает по индексу. Расчет индекса идет с первого компонента и начинается с 0 тоесть:
читать дальше »
Код:

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

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: {win}\Help\*; DestDir: {app}; Check: IsComponent(0); Flags: external recursesubdirs
Source: {win}\Help\*; DestDir: {app}2; Check: IsComponent(1);  Flags: external recursesubdirs

[ Code]
Var
ComponentsList: TNewCheckListBox;

function IsComponent(CompIndex: Integer): Boolean;
var
  i: Integer;
begin
  Result := False;
  for i := 0 to ComponentsList.ItemCount - 1 do
  begin
    if CompIndex <= (ComponentsList.ItemCount - 1) then
      Result := ComponentsList.Checked[CompIndex];
  end;
end;

procedure InitializeWizard();
begin
ComponentsList := TNewCheckListBox.Create(WizardForm);
    with ComponentsList do
    begin
    Parent := WizardForm.WelcomePage;
    SetBounds(ScaleX(190), ScaleY(200), ScaleX(107), ScaleY(100));
    AddCheckBox('Версия', '', 0, True, True, False, True, nil); //индекс №0
    AddCheckBox('Озвучка', '', 0, True, True, False, True, nil); //индекс №1
    AddCheckBox('Russian', '', 0, True, True, False, True, nil); //индекс №2
    AddCheckBox('English', '', 0, True, True, False, True, nil); //индекс №3 и так далее...
    //BorderStyle := bsNone;
    end;
with WizardForm.WelcomeLabel2 do
  begin
    Height := ScaleY(111);
  end;
end;


diman_21Ru 16-06-2014 20:47 2364910

Dodakaedr, Не правильно что ли указал путь ,проверьте пожалуйста !

Source: {win}\Mods\Программы\Отображение облаков\*; DestDir: {app}; Check: IsComponent(0); Flags: external recursesubdirs

AddCheckBox('Отображение облаков', '', 0, True, True, False, True, nil); //индекс №0

Dodakaedr 16-06-2014 20:49 2364913

Цитата:

Цитата diman_21Ru
Не правильно что ли указал путь ,проверьте пожалуйста ! »

{win} - это папка Windows. Замените её на полный путь к папке Mods и укажите флаг: Flags: ignoreversion recursesubdirs createallsubdirs

habib2302 16-06-2014 22:07 2364936

Всем привет. Как добавить Radio Button 1 Изменить/Обновить и 2 Удалить и присвоить к ним задания

Kashtan007 17-06-2014 00:04 2364972

Всем привет ребята. Возник такой вопрос...
Как сделать это:
Мне нужно, чтобы на странице компонентов, справа от компонента был допустим значок динамика и при его нажатии воспроизводился звук.
Т.е. допустим я листаю компоненты:
Прога 1
Прога 2
Прога 3
Возле проги 3 я нажимаю на маленький значок динамика и мне 1 раз воспроизводится звук заданный для проги 3.
И так к каждому компоненту. Заранее спасибо за помощь!

P.S. Допустим у меня есть папка audio в папке res, и папка res_mods. В установщике я устанавливаю компоненты в res_mods, как сделать так, чтобы при выборе определенного компонента папка audio из папки res копировалась в папку res_mods?

diman_21Ru 17-06-2014 11:56 2365095

Dodakaedr, Вроде все указал верно а обьем файла не пишет можно как то включить ?

diman_21Ru 17-06-2014 14:39 2365187

Всем привет вроде указал верно а размер мода не показывает, а мод работает ,просто так сложно предугадать без обьема какой работает какой нет и как по умолчанию убрать галочку на мод ,заранее спасибо =)

AddCheckBox('Отображение облаков', '', 0, True, True, False, True, nil); //индекс №0

Source:"Mods\Программы\Отображение облаков\*"; DestDir: "{app}"; Check: IsComponent(0); Flags: ignoreversion recursesubdirs createallsubdirs

Slivvki 17-06-2014 16:33 2365229

Ктонибудь помогите! Вот такая ботва!
http://hkar.ru/tv46
И еще как избежать зависания при запуске (в панеле запуска внизу появляется, пото через 4 сек отвисает)

Dodakaedr 17-06-2014 20:25 2365354

Цитата:

Цитата diman_21Ru
убрать галочку на мод »

AddCheckBox('Отображение облаков', '', 0, False, True, False, True, nil); //индекс №0

Цитата:

Цитата diman_21Ru
а размер мода не показывает »

и не будет, так как используется чекова функция (Check: IsComponent(0)) или что вы имели ввиду? Где не показывает? Если в компонент листе то можно так указать:
читать дальше »
Код:

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

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: {win}\Help\*; DestDir: {app}; Check: IsComponent(0); Flags: external recursesubdirs
Source: {win}\Help\*; DestDir: {app}2; Check: IsComponent(1);  Flags: external recursesubdirs

[ Code]
Var
ComponentsList: TNewCheckListBox;

function IsComponent(CompIndex: Integer): Boolean;
var
  i: Integer;
begin
  Result := False;
  for i := 0 to ComponentsList.ItemCount - 1 do
  begin
    if CompIndex <= (ComponentsList.ItemCount - 1) then
      Result := ComponentsList.Checked[CompIndex];
  end;
end;

procedure InitializeWizard();
begin
ComponentsList := TNewCheckListBox.Create(WizardForm);
    with ComponentsList do
    begin
    Parent := WizardForm.WelcomePage;
    SetBounds(ScaleX(190), ScaleY(200), ScaleX(107), ScaleY(100));
    AddCheckBox('Mod1', '12 mb', 0, False, True, False, True, nil); //индекс №0
    AddCheckBox('Mod2', '9 mb', 0, True, True, False, True, nil); //индекс №1
    AddCheckBox('Mod3', '2 mb', 0, False, True, False, True, nil); //индекс №2
    AddCheckBox('Mod4', '0,5 mb', 0, True, True, False, True, nil); //индекс №3 и так далее...
    //BorderStyle := bsNone;
    end;
with WizardForm.WelcomeLabel2 do
  begin
    Height := ScaleY(111);
  end;
end;



Цитата:

Цитата Slivvki
И еще как избежать зависания при запуске (в панеле запуска внизу появляется, пото через 4 сек отвисает) »

Скрипт покажите....

Dodakaedr 17-06-2014 21:04 2365376

Цитата:

Цитата Kashtan007
как сделать так, чтобы при выборе определенного компонента папка audio из папки res копировалась в папку res_mods? »

Это все делается в секции [Files].
Код:

Source: res\audio\*; DestDir: {app}\res_mods; Components: указываете компонент; Flags: ignoreversion recursesubdirs createallsubdirs
Цитата:

Цитата habib2302
но мне все таки хотелось чтобы при выборе remove запускался деинсталлятор через реестр и наложить изображения через ботву »

Пожалуйста: RemoveInstall
Деинсталятор запускается, но по реестру я не очень... не уверен что все правильно прописал и еще я не понимаю смысл этого кода... ругается на константу {app}:
Код:

if PerformPreviousUninstall(UninstallProgressBar) then
    begin
      Dir := ExpandConstant('{pf}\');
      if DirExists(Dir) and (not RemoveDir(Dir)) then
        RestartReplace(Dir, '');
    end;


Dodakaedr 18-06-2014 02:12 2365509

Цитата:

Цитата Kashtan007
Мне нужно, чтобы на странице компонентов, справа от компонента был допустим значок динамика и при его нажатии воспроизводился звук.
Т.е. допустим я листаю компоненты:
Прога 1
Прога 2
Прога 3
Возле проги 3 я нажимаю на маленький значок динамика и мне 1 раз воспроизводится звук заданный для проги 3. »

Пробуйте ComponentSound

Slivvki 18-06-2014 12:20 2365625

Ктонибудь помогите! Вот такая ботва!
http://hkar.ru/tv46
И еще как избежать зависания при запуске (в панеле запуска внизу появляется, пото через 4 сек отвисает)

скрипт http://rghost.ru/56443753

и помогите избавиться: такая хня на смалл аймаге вылетает на пару сек при установке (у меня арк без прекомпа) http://hkar.ru/tv46

diman_21Ru 18-06-2014 15:06 2365697

Всем привет можно скрипт на музыку с прибавлением и убавлением звука

TryRooM 18-06-2014 16:08 2365722

скрипт на музыку с прибавлением и убавлением звука
http://rghost.ru/56447740

Dodakaedr 18-06-2014 19:36 2365836

Slivvki, а dll-ки, сплэш и прочее мне самому искать? Как я могу проверить скрипт?? Скиньте все что необходимо для работы вашего скрипта.

Slivvki 18-06-2014 19:59 2365849

Извиняюсь, http://rghost.ru/56452216

Dodakaedr 18-06-2014 22:39 2365893

Цитата:

Цитата Slivvki
И еще как избежать зависания при запуске »

Это происходит из-за модуля BASS_Module.iss. Во время "зависание" происходит извлечение файлов в временную папку

Kashtan007 19-06-2014 10:55 2366058

Dodakaedr, большое спасибо за помощь. Именно это я искал)

P.S. как этот значок динамика прикрепить к определенному компоненту? На данный момент 3 динамика не прикреплены к компонентам, у меня много компонентов и соответственно когда прокручиваю бегунок то динамики двигаются вниз, а не остаются возле компонента.

Slivvki 19-06-2014 11:34 2366075

Ну а с смайл аймагом чего делать?

Dodakaedr 19-06-2014 13:54 2366130

Цитата:

Цитата Kashtan007
как этот значок динамика прикрепить к определенному компоненту? »

Для меня это сложная задача. Честно не знаю.
Цитата:

Цитата Slivvki
Ну а с смайл аймагом чего делать? »

И этого я не знаю.

Irenis 19-06-2014 15:52 2366177

Добрый день! Подскажите пожалуйста, что нужно прописать в скрипте, чтобы во время установки игры ярлык на рабочем столе создавался автоматически (без запроса "создавать ярлык на рабочем столе"). Спасибо))

Dodakaedr 19-06-2014 15:55 2366179

Цитата:

Цитата Irenis
Добрый день! Подскажите пожалуйста, что нужно прописать в скрипте, чтобы во время установки игры ярлык на рабочем столе создавался автоматически (без запроса "создавать ярлык на рабочем столе). Спасибо)) »

В секции [Tasks] удалите
Код:

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

а в секции [Icons] удалите Tasks: desktopicon
Код:

Name: "{commondesktop}\Моя программа"; Filename: "{app}\MyProg.exe";
читать дальше »
Код:

[Setup]
AppName=My programm
AppVersion=1.0
DefaultDirName={pf}\My programm
OutputDir=.

[Files]
Source: "C:\Program Files\Inno Setup 5 Ultra\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{commondesktop}\My Programm"; Filename: "{app}\MyProg.exe";


Irenis 22-06-2014 15:56 2367175

Нужна еще помощь. Как сделать так, чтобы по завершению установки, приложение запустилось автоматически? Что поправить в скрипте? Спасибо :)

Dodakaedr 22-06-2014 16:04 2367177

Цитата:

Цитата Irenis
Нужна еще помощь. Как сделать так, чтобы по завершению установки, приложение запустилось автоматически? Что поправить в скрипте? Спасибо »

удалите в флаге postinstall
Код:

[Run]
Filename: "{app}\MyProg.exe"; Flags: nowait skipifsilent

читать дальше »
Из справки:
postinstall
Действителен только в секции [Run]. Указывает инсталлятору создать задание с флажком (checkbox) на странице мастера Установка завершена. Пользователь может выбрать из предложенного списка параметры, которые он хочет запустить или отменить. Раньше этот флаг назывался showcheckbox.

dinis.grek 23-06-2014 16:00 2367480

Привет ребят. Подскажите почему никак не могу подключить isgsg.dll, можно пример посмотреть, буду благодарен.
Скриншот ошибки компиляции:
http://hostingkartinok.com/show-imag...0ba575e12e569a

Файл библиотеки isgsg.dll и картинка лежат рядом со скриптом.

Код:

[Files]
Source: "isgsg.dll"; Flags: "DontCopy";
Source: "Splash.png"; Flags: "DontCopy";

[КОД]
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer);
external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

procedure InitializeWizard;
begin
ExtractTemporaryFile('Splash.png');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.png',{#SplS},{#SplR},{#SplE},0,2 55,False,$FFFFFF,10);
end;


TryRooM 23-06-2014 16:53 2367492

dinis.grek,
http://rghost.ru/56533384

Shkutu 23-06-2014 18:28 2367517

День добрый!
Есть задача удалять все файлы определенного формата перед установкой приложения. Файлы располагаются в папках типа {app}\aaa\aaa1, {app}\aaa\aaa2 и тд, и таких пронумерованных папок может быть любое, заранее неизвестное количество. Пробовала так:
Код:

[InstallDelete]
Type: files; Name: "{app}\aaa\aaa*\*.fr3.exe"

Но этот вариант не работает. Не подскажете, чем заменить?

Dodakaedr 23-06-2014 19:17 2367542

Цитата:

Цитата Shkutu
удалять все файлы определенного формата перед установкой приложения. »

По поводу удаления по маске можно попробувать так:
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssInstall then
  begin
    DelTree(ExpandConstant('{app}') + '\aaa\aaa1\*.fr3.exe', False, True, False);
  end;
end;

Цитата:

Цитата Shkutu
таких пронумерованных папок может быть любое, заранее неизвестное количество. »

а вот с этим проблема...еще не дорос:) или посмотрите на это может что-то оттуда вырежите .

Shkutu 23-06-2014 23:55 2367655

Dodakaedr, дык вся проблема-то как раз в этом неизвестном количестве папок. само по себе удаление и секция installdelete прекрасно делает

Shkutu 24-06-2014 13:54 2367864

И еще такой вопрос, а вернее два:)
Можно ли как-то достучаться до файлов, которые упакованы в инсталлятор? Ну какая-нибудь системная константа или типа того что-нибудь, чтобы можно было скопировать файл, запакованный в инсталлятор, руками, а не через секцию [files].
И можно ли как-нибудь руками выставить значения выбранных компонентов? Ну т е компоненты есть, но пользователь страницу с компонентами не видит. А сами выбранные компоненты определяются программно, в коде.

Habetdin 24-06-2014 14:49 2367886

Shkutu, если нужно извлечение файлов из секции Code - ExtractTemporaryFile

Shkutu 24-06-2014 16:06 2367931

Habetdin, спасиб, что совсем про ExtractTemporaryFile вылетело из головы:)
А для выбора нужных компонентов можно заюзать WizardForm.ComponentsList, вроде работает)

Mayson_Noir@vk 24-06-2014 20:19 2368038

Добрый день!

Я совсем новичок в программе, только начинаю разбираться. Немного сложно конечно.
Хотел бы попросить о помощи.
У меня есть файл допустим 1.jpg мне нужно найти в определенной папке такой же файл и заменить его.
Пожалуйста помогите (если конечно не лень :).

Заранее спасибо :)

Dodakaedr 24-06-2014 21:24 2368075

через секцию [Files]
Код:

Source: 1.jpg; DestDir: {app}; Flags: ignoreversion
Source: 1.jpg; - это ваш файл;
DestDir: {app}; - папка установки (здесь можете указать определенную папку)
Flags: ignoreversion - заменить.

Mayson_Noir@vk 24-06-2014 21:51 2368088

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

saurn 25-06-2014 09:19 2368200

Цитата:

Цитата Mayson_Noir@vk
Мне нужно найти этот файл, и тогда только заменить... »

Код:

[Files]
Source: 1.jpg; DestDir: {app}\folder\subfolder; Flags: overwritereadonly ignoreversion; Check: FileExists(ExpandConstant('{app}\folder\subfolder\1.jpg'));


roman_kudin@vk 25-06-2014 12:54 2368293

Привет всем. Прошу помощи в таком деле. Как сделать копирование файлов из одной папки в папку с приложением при выборе определенного пункта инсталлятора?

Habetdin 25-06-2014 15:30 2368358

Цитата:

Цитата roman_kudin@vk
копирование файлов из одной папки в папку с приложением при выборе определенного пункта инсталлятора? »

Пример копирования из папки Uncompressed рядом с инсталлятором в папку data в папке приложения:
Код:

[Files]
Source: "{src}\Uncompressed\*"; DestDir: "{app}\data"; Flags: createallsubdirs recursesubdirs ignoreversion external skipifsourcedoesntexist; Tasks: copyfiles

[Tasks]
Name: copyfiles; Description: Скопировать файлы; GroupDescription: Дополнительные задачи

На всякий случай: проверка из секции code, выбрана ли задача - IsTaskSelected

roman_kudin@vk 25-06-2014 22:48 2368539

пример.

В папке {app} находится папка audio, ее надо скопировать по следующему адресу {app}\files. Как такое реализовать?

Dinvin4ester 25-06-2014 23:01 2368546

Ребята,можно ли поменять цвет прогресс бара ?

habib2302 25-06-2014 23:38 2368550

roman_kudin@vk, для начала нужно вырезать папку audio и поставить рядом с папкой {app}.



далее добавьте эту строку в раздел [Files]:
Код:

Source: audio\*; DestDir: {app}\files; Flags: ignoreversion recursesubdirs createallsubdirs;
Dinvin4ester, http://forum.oszone.net/post-1693828-1893.html

Dinvin4ester 25-06-2014 23:54 2368561

Еще мне надо вырезать с скрипта видео - http://sendfile.su/994651 ,просто в конце установки идет видео ненужное.. Если вам не сложно будет,то хотелось убрать его.
Спасибо.

roman_kudin@vk 25-06-2014 23:54 2368562

спасибо, усовершенствовал немного первый код получилось то, что мне надо. Еще раз спасибо)

habib2302 26-06-2014 00:19 2368570

Dinvin4ester, как-то так
https://yadi.sk/d/-xatyvr1Ut33i

Dinvin4ester 26-06-2014 00:43 2368580

habib2302,
Спасибо,но получается стандартный инсталлятор(

habib2302 26-06-2014 00:51 2368584

Dinvin4ester, sorry
https://yadi.sk/d/udm_jLu_UtBhC

Dinvin4ester 26-06-2014 00:59 2368589

habib2302,
Спасибо,а с остальными,они одинаковые,просто разные ,там доп.по и т.д.Не могли бы вы и там убрать?

habib2302 26-06-2014 01:06 2368591

Dinvin4ester, в смысле? удалить видео в других скриптах выбор озвучки по центру и На 2 ярлыка

Dinvin4ester 26-06-2014 01:07 2368592

habib2302,
Ага.

habib2302 26-06-2014 01:21 2368595

Dinvin4ester, https://yadi.sk/d/udm_jLu_UtBhC

habib2302 26-06-2014 12:28 2368717

Всем привет. Я хочу сократить команды например для тихой установки. . . т.е убрать
Код:

Components=
до
Код:

AIDA64.v4.50.3000.exe /VERYSILENT /Components=AIDA64\P\3
после
Код:

AIDA64.v4.50.3000.exe /VERYSILENT /AIDA64\P\3
и подскажите мне скрипт для закрепления ярлыка в меню "Пуск"

Dodakaedr 26-06-2014 21:00 2368902

Цитата:

Цитата habib2302
и подскажите мне скрипт для закрепления ярлыка в меню "Пуск" »

Код:

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

[Files]
Source: "C:\Program Files\Inno Setup 5 Ultra\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{userstartmenu}\My Program"; Filename: "{app}\MyProg.exe"


habib2302 26-06-2014 21:28 2368910

Dodakaedr, не то
ярлык должен закрепляться в меню пуск где выделено красным цветом


Dodakaedr 26-06-2014 21:35 2368916

habib2302, оно так и есть

Или куда надо? Зразу как нажимаешь Пуск? Попробуйте это
Код:

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

[Files]
Source: "C:\Program Files\Inno Setup 5 Ultra\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{userprograms}\My Program"; Filename: "{app}\MyProg.exe"


habib2302 26-06-2014 21:41 2368920

Цитата:

Цитата Dodakaedr
Зразу как нажимаешь Пуск »

Да. Обрати внимание на разделитель


Dodakaedr 26-06-2014 21:43 2368922

Цитата:

Цитата habib2302
Да »

{userstartmenu} & {commonstartmenu} это и есть корень меню Пуск.

habib2302 26-06-2014 21:48 2368924

Dodakaedr, Вот скрин. Указал разделитель между недавно запущенными приложениями и между закрепленными ярлыками



вот путь к закрепленным ярлыкам
Цитата:

c:\Users\Xabib\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu\

Dodakaedr 26-06-2014 23:24 2368973

Цитата:

Цитата habib2302
вот путь к закрепленным ярлыкам »

Пример от Mailchik:
читать дальше »
Код:

#define ExePath "{app}\bin\MyProg.exe"

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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}\bin;

[Tasks]
Name: PinToTaskBar; Description: {cm:cTaskBarTxt}; MinVersion: 0,6.0;
Name: PinToStartMenu; Description: {cm:cStartMenuTxt}; MinVersion: 0,6.0;

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "en"; MessagesFile: "compiler:Languages\English.isl"

[CustomMessages]
ru.cTaskBarTxt=Закрепить на панели задач
ru.cStartMenuTxt=Закрепить в меню "Пуск"
en.cTaskBarTxt=Pin to Taskbar
en.cStartMenuTxt=Pin to Start Menu

[ Code]
const
    LOAD_LIBRARY_AS_DATAFILE = $2;

#define A = (Defined UNICODE) ? "W" : "A"

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';

/////////////////////////////////////////////////////////////////////////
function PinToTaskbar(const szFilename: String; TaskBar, IsPin: Boolean): Boolean;
//szFilename: full path to executable file
//TaskBar: False - pin to StartMenu, True - pin to TaskBar
//IsPin: False - unpin from TaskBar/StartMenu, True - pin to TaskBar/StartMenu
var
    hInst: THandle;
    buf: array [0..255] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit;
    if IsPin then
    begin
        if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
        begin
            while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
            if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
        end;
        if TaskBar then res := 5386 else res := 5381;
    end else if TaskBar then res := 5387 else res := 5382;
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');
            colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
            for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
            begin
                colVerbs.Item[i].DoIt;
                Result := True;
                Break;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;

procedure CurPageChanged(CurPageID: integer);
begin
  case CurPageID of
    wpFinished: begin
      if IsTaskSelected('PinToTaskBar') then
        PinToTaskbar(ExpandConstant('{#ExePath}'), True, True);
      if IsTaskSelected('PinToStartMenu') then
        PinToTaskbar(ExpandConstant('{#ExePath}'), False, True);
    end;
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  instPath: string;
begin
    case CurUninstallStep of
      usUninstall: begin
        PinToTaskbar(ExpandConstant('{#ExePath}'), True, False);
        PinToTaskbar(ExpandConstant('{#ExePath}'), False, False);
      end;
    end;
end;


habib2302 27-06-2014 00:05 2368986

спасибо. уже видел на форуме krinkels)))

habib2302 27-06-2014 00:55 2369019

Dodakaedr, как в этом же скрите сделать так, чтобы ярлыки создавались в зависимости от битности файлов и системы

Dodakaedr 27-06-2014 01:02 2369024

Цитата:

Цитата habib2302
как в этом же скрите сделать так, чтобы ярлыки создавались в зависимости от битности файлов и системы »

используйте стандартную функцию "IsWin64" для 64 битных и "not IsWin64" для 32 битных

habib2302 27-06-2014 01:08 2369025

Dodakaedr, я так и сделал
Код:

#define MyAppExeNamex86 "CCleaner.exe"
#define MyAppExeNamex64 "CCleaner64.exe"

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

[Files]
Source: CCleaner.exe; DestDir: {app}\bin;
Source: CCleaner64.exe; DestDir: {app}\bin;

[Tasks]
Name: PinToTaskBar; Description: {cm:cTaskBarTxt}; MinVersion: 0,6.0;
Name: PinToStartMenu; Description: {cm:cStartMenuTxt}; MinVersion: 0,6.0;

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "en"; MessagesFile: "compiler:Languages\English.isl"

[CustomMessages]
ru.cTaskBarTxt=Закрепить на панели задач
ru.cStartMenuTxt=Закрепить в меню "Пуск"
en.cTaskBarTxt=Pin to Taskbar
en.cStartMenuTxt=Pin to Start Menu

[ Code]
const
    LOAD_LIBRARY_AS_DATAFILE = $2;

#define A = (Defined UNICODE) ? "W" : "A"

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';

/////////////////////////////////////////////////////////////////////////
function PinToTaskbar(const szFilename: String; TaskBar, IsPin: Boolean): Boolean;
//szFilename: full path to executable file
//TaskBar: False - pin to StartMenu, True - pin to TaskBar
//IsPin: False - unpin from TaskBar/StartMenu, True - pin to TaskBar/StartMenu
var
    hInst: THandle;
    buf: array [0..255] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit;
    if IsPin then
    begin
        if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
        begin
            while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
            if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
        end;
        if TaskBar then res := 5386 else res := 5381;
    end else if TaskBar then res := 5387 else res := 5382;
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');
            colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
            for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
            begin
                colVerbs.Item[i].DoIt;
                Result := True;
                Break;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;
     
procedure CurPageChanged(CurPageID: integer);
begin
  case CurPageID of
        wpFinished:
        begin
      if IsTaskSelected('PinToTaskBar') and not iswin64 then
        PinToTaskbar(ExpandConstant('{#MyAppExeNamex86}'), True, True);
      if IsTaskSelected('PinToStartMenu') and not iswin64 then
        PinToTaskbar(ExpandConstant('{#MyAppExeNamex86}'), False, True);
      if IsTaskSelected('PinToTaskBar') and iswin64 then
        PinToTaskbar(ExpandConstant('{#MyAppExeNamex64}'), True, True);
      if IsTaskSelected('PinToStartMenu') and iswin64 then
        PinToTaskbar(ExpandConstant('{#MyAppExeNamex64}'), False, True);
    end;
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  instPath: string;
begin
    case CurUninstallStep of
      usUninstall: begin
      if not iswin64 then
        PinToTaskbar(ExpandConstant('{#MyAppExeNamex86}'), True, False);
        if not iswin64 then
        PinToTaskbar(ExpandConstant('{#MyAppExeNamex86}'), False, False);
        if iswin64 then
        PinToTaskbar(ExpandConstant('{#MyAppExeNamex64}'), True, False);
        if iswin64 then
        PinToTaskbar(ExpandConstant('{#MyAppExeNamex64}'), False, False);
      end;
    end;
end;

но оно не работает

Dodakaedr 27-06-2014 01:23 2369031

Цитата:

Цитата habib2302
но оно не работает »

А так?
читать дальше »
Код:

#define MyAppExeName "{app}\bin\CCleaner.exe"

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

[Files]
Source: CCleaner.exe; DestDir: "{app}\bin"; Check: not IsWin64;
Source: CCleaner64.exe; DestDir: "{app}\bin"; DestName: "CCleaner.exe" Check: IsWin64;

[Tasks]
Name: PinToTaskBar; Description: {cm:cTaskBarTxt}; MinVersion: 0,6.0;
Name: PinToStartMenu; Description: {cm:cStartMenuTxt}; MinVersion: 0,6.0;

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "en"; MessagesFile: "compiler:Languages\English.isl"

[CustomMessages]
ru.cTaskBarTxt=Закрепить на панели задач
ru.cStartMenuTxt=Закрепить в меню "Пуск"
en.cTaskBarTxt=Pin to Taskbar
en.cStartMenuTxt=Pin to Start Menu

[ Code]
const
    LOAD_LIBRARY_AS_DATAFILE = $2;

#define A = (Defined UNICODE) ? "W" : "A"

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';

/////////////////////////////////////////////////////////////////////////
function PinToTaskbar(const szFilename: String; TaskBar, IsPin: Boolean): Boolean;
//szFilename: full path to executable file
//TaskBar: False - pin to StartMenu, True - pin to TaskBar
//IsPin: False - unpin from TaskBar/StartMenu, True - pin to TaskBar/StartMenu
var
    hInst: THandle;
    buf: array [0..255] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit;
    if IsPin then
    begin
        if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
        begin
            while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
            if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
        end;
        if TaskBar then res := 5386 else res := 5381;
    end else if TaskBar then res := 5387 else res := 5382;
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');
            colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
            for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
            begin
                colVerbs.Item[i].DoIt;
                Result := True;
                Break;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;

procedure CurPageChanged(CurPageID: integer);
begin
  case CurPageID of
        wpFinished:
        begin
      if IsTaskSelected('PinToTaskBar') then
        PinToTaskbar(ExpandConstant('{#MyAppExeName}'), True, True);
      if IsTaskSelected('PinToStartMenu') then
        PinToTaskbar(ExpandConstant('{#MyAppExeName}'), False, True);
      if IsTaskSelected('PinToTaskBar') then
        PinToTaskbar(ExpandConstant('{#MyAppExeName}'), True, True);
      if IsTaskSelected('PinToStartMenu') then
        PinToTaskbar(ExpandConstant('{#MyAppExeName}'), False, True);
    end;
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  instPath: string;
begin
    case CurUninstallStep of
      usUninstall: begin
      PinToTaskbar(ExpandConstant('{#MyAppExeName}'), True, False);
      PinToTaskbar(ExpandConstant('{#MyAppExeName}'), False, False);
      PinToTaskbar(ExpandConstant('{#MyAppExeName}'), True, False);
      PinToTaskbar(ExpandConstant('{#MyAppExeName}'), False, False);
      end;
    end;
end;


habib2302 27-06-2014 12:26 2369096

Dodakaedr, не то

audiofeel 27-06-2014 19:12 2369238

как организовать вот так же как на скрине (при помощи b2p), пробЫвал при помощи CreateBitmapRgn, края получаются какие то рванные, пример был, "потерял"

Dodakaedr 27-06-2014 21:35 2369293

habib2302, Что не так?

habib2302 27-06-2014 22:45 2369307

Dodakaedr, все не так

habib2302 28-06-2014 18:43 2369579

Всем привет. Мне давали код для изменения пути установки в зависимости от компонента и не работает команда /DIR
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpSelectProgramGroup:
    begin
      if IsComponentSelected('AIDA642') then
      begin
        WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultDirName")}')) + '{#AIDA642}';
        WizardForm.GroupEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultGroupName")}')) + '{#AIDA642}';
      end else begin
        WizardForm.DirEdit.Text := ExpandConstant('{#SetupSetting("DefaultDirName")}');
        WizardForm.GroupEdit.Text := ExpandConstant('{#SetupSetting("DefaultGroupName")}');
      end;
    end;
  end;
end;


Dodakaedr 28-06-2014 20:28 2369618

Цитата:

Цитата habib2302
Всем привет. Я хочу сократить команды например для тихой установки. . . т.е убрать »

Ну что-то типа этого:
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Files]
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "aida64.isl"; Check: aida64check;
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "aida32.isl"; Check: aida32check;

[Components]
Name: rut; Description: rupol;

[ Code]
var
  ComponentsList: TNewCheckListBox;

function CheckParam(s: string): boolean;
var
i: integer;
begin
  for i := 0 to ParamCount do begin
    Result := ParamStr(i) = s;
    if Result then Break;
  end;
end;

function IsComponent(CompIndex: Integer): Boolean;
var
  i: Integer;
  begin
  Result := False;
  for i := 0 to ComponentsList.ItemCount - 1 do
  begin
    if CompIndex <= (ComponentsList.ItemCount - 1) then
      Result := ComponentsList.Checked[CompIndex];
  end;
end;

function aida64check: Boolean;
begin
if CheckParam('/AIDA64') or CheckParam('/AIDA32') then
  Result := CheckParam('/AIDA64')
else
  Result := IsComponent(1);
end;

function aida32check: Boolean;
begin
if CheckParam('/AIDA64') or CheckParam('/AIDA32') then
  Result := CheckParam('/AIDA32')
else
  Result := IsComponent(2);
end;

procedure RedesignWizardForm;
begin
ComponentsList := TNewCheckListBox.Create(WizardForm);
  with ComponentsList do
  begin
    Parent := WizardForm.SelectComponentsPage;
    SetBounds(ScaleX(0), ScaleY(61), ScaleX(417), ScaleY(169));
    AddCheckBox('Версия', '', 0, True, False, False, True, nil);
      AddRadioButton('AIDA64', '1.5 GB', 1, true, True, nil);
      AddRadioButton('AIDA32', '0.8 GB', 1, false, True, nil);
    end;
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
  wpSelectcomponents:
  begin
  WizardForm.ComponentsList.Hide;
  WizardForm.TypesCombo.Hide;
  end;
  end;
 end;



При использовании стандартного компонент листа:
читать дальше »
Код:

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

[Components]
Name: "aida64"; Description: "AIDA64"; Flags: exclusive
Name: "aida32"; Description: "AIDA32"; Flags: exclusive

[Files]
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "aida64.isl"; Check: aida64check;
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "aida32.isl"; Check: aida32check;

[ Code]
function CheckParam(s: string): boolean;
var
i: integer;
begin
  for i := 0 to ParamCount do begin
    Result := ParamStr(i) = s;
    if Result then Break;
  end;
end;

function aida64check: Boolean;
begin
if CheckParam('/AIDA64') or CheckParam('/AIDA32') then
  Result := CheckParam('/AIDA64')
else
  Result := WizardForm.ComponentsList.Checked[0];
end;

function aida32check: Boolean;
begin
if CheckParam('/AIDA64') or CheckParam('/AIDA32') then
  Result := CheckParam('/AIDA32')
else
  Result := WizardForm.ComponentsList.Checked[1];
end;


valyok666 28-06-2014 20:44 2369619

Цитата:

Цитата audiofeel
как организовать вот так же как на скрине (при помощи b2p), пробЫвал при помощи CreateBitmapRgn, края получаются какие то рванные, пример был, "потерял" »

форму с нуля надо делать,остальное дело рук Фотошопа =)

habib2302 28-06-2014 23:04 2369655

Куда все подевались? Кто нибудь ответит на мой вопрос? http://forum.oszone.net/post-2369579-989.html

Dodakaedr 28-06-2014 23:18 2369661

Цитата:

Цитата habib2302
Кто нибудь ответит на мой вопрос? »

Без скрипта, или хотя бы аналогичного примера - врядли!

audiofeel 28-06-2014 23:25 2369665

Цитата:

Цитата valyok666
форму с нуля надо делать,остальное дело рук Фотошопа »

да не, графика та есть, как сделать тень?? и бмп маска есть и сама форма png, но в оригинале она получается норм, а я взял пример из CreateBitmapRgn и края какие то рваные получаются, с какой то черной обводкой
читать дальше »

;Created by South.Tver 02.2011
;пример работы с с прозрачностью изображения
#include "Modules\botva2.iss"

[Setup]
AppName=Transparent Image
AppVerName=Transparent Image
DefaultDirName={pf}\Transparent Image
SolidCompression=yes
Compression=lzma2/ultra64

[Files]
Source: Files\*; DestDir: "{tmp}"; Flags: dontcopy sortfilesbyextension

[-Code]
var
img: LongInt;

function LoadImage(hInst: THandle; ImageName: PChar; ImageType: UINT; X, Y: Integer; Flags: UINT): THandle; external 'LoadImageA@user32.dll stdcall';
function GetDC(hWnd: HWND): Longword; external 'GetDC@user32.dll stdcall';
function SetWindowRgn(hWnd: HWND; hRgn: LongWord; bRedraw: BOOL): Integer; external 'SetWindowRgn@user32.dll stdcall';
function ReleaseDC(hWnd: HWND; hDC: LongWord): Integer; external 'ReleaseDC@user32.dll stdcall';
function DeleteObject(p1: LongWord): BOOL; external 'DeleteObject@gdi32.dll stdcall';

function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll')) then ExtractTemporaryFile('CallbackCtrl.dll');
Result:=True;
end;

procedure SetRgn(h:HWND;FileName:string;Width,Height:integer);
var
dc:LongWord;
FRgn:LongWord;
bmp:HBITMAP;
begin
BMP:=LoadImage(0,PAnsiChar(ExpandConstant('{tmp}')+'\'+FileName),0,Width,Height,$10);
dc:=GetDC(h);
FRgn:=CreateBitmapRgn(dc,bmp,$FFFFFF,0,0);
SetWindowRgn(h,FRgn,True);
ReleaseDC(h,dc);
DeleteObject(BMP);
end;

procedure InitializeWizard;
var
i:integer;
begin
with WizardForm do begin
Bevel.Hide;
InnerNotebook.Hide;
OuterNotebook.Hide;
ClientWidth:=500;
ClientHeight:=550;
Position:=poScreenCenter;
NextButton.Width:=0;
CancelButton.Top:=515;
end;

ExtractTemporaryFile('mask.bmp');
SetRgn(WizardForm.Handle,'mask.bmp', 500, 550);

end;

procedure DeinitializeSetup;
begin
gdipShutdown;
end;


Dodakaedr 28-06-2014 23:44 2369671

audiofeel, Попробуйте это:
читать дальше »
Код:

[ Code]
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
function SetClassLong(hWnd: HWND; Index, NewLong: Longint): Longint; external 'SetClassLongA@user32 stdcall';
 
procedure InitializeWizard;
begin
 WizardForm.BorderStyle:= bsNone; //Скрываем границы инсталлятора
 SetClassLong(WizardForm.Handle, (-26), GetWindowLong(WizardForm.Handle, (-26)) or $00020000); //Чтобы отрисовалась тень от окна инсталлятора
end;


habib2302 28-06-2014 23:53 2369678

Dodakaedr, вот скрипт
читать дальше »

Код:

; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "Display Driver Uninstaller"
#define MyAppVersion "12.9.3.0"
#define MyAppURL "http://www.wagnardmobile.com/DDU/"
#define MyAppExeName "Display Driver Uninstaller.exe"
#include "WinTB.iss"
#include "botva2.iss"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=true
OutputBaseFilename={#MyAppName} {#MyAppVersion} RePack (& Portable) by Xabib
SetupIconFile=ico.ico
Compression=lzma/Ultra64
SolidCompression=true
InternalCompressLevel=Ultra64
DiskSpanning=false
DiskSliceSize=736000000
ShowLanguageDialog=yes
SlicesPerDisk=4
UninstallDisplayIcon={app}\ico.ico
RawDataResource=Botva:botva2.dll|b2p:b2p.dll|Logo:logo.png|bPic:bPic.png|LiPic:LiPic.png|aPic:aPic.png
AppModifyPath={app}
VersionInfoProductName={#MyAppName}
DirExistsWarning=no
AppendDefaultDirName=false
AppendDefaultGroupName=false
DisableReadyPage=true
AppID={#MyAppName}
VersionInfoDescription={#MyAppName} RePack by Xabib
AppCopyright=Xabib © 2014
VersionInfoVersion={#MyAppVersion}
VersionInfoProductVersion={#MyAppVersion}
VersionInfoCopyright=Xabib © 2014
DisableFinishedPage=false
UninstallDisplayName={#MyAppName}
ComponentsListTVStyle=true
ShowComponentSizes=false
Uninstallable=not IsComponentSelected('DDU\P')
DisableProgramGroupPage=yes
CreateUninstallRegKey=not IsComponentSelected('DDU\P')

[Languages]
Name: "Russian"; MessagesFile: "Russian.isl"

[Types]
Name: full; Description: Полная установка; Flags: iscustom

[Tasks]
Name: icons; Description: {cm:AdditionalIcons}; Components: DDU\I;
Name: icons\desktop; Description: {cm:CreateDesktopIcon}; Components: DDU\I;
Name: icons\group; Description: {cm:CreateGroupIcon}; Components: DDU\I;
Name: icons\quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; OnlyBelowVersion: 0,6.1; Components: DDU\I;
Name: icons\taskbaricon; Description: {cm:CreateQuickLaunchIcon}; MinVersion: 0.0,6.1.7600; Components: DDU\I; Flags: unchecked;

[Components]
Name: DDU; Description: {#MyAppName}; Flags: fixed disablenouninstallwarning; Types: full;
Name: DDU\I; Description: Установить {#MyAppName}; Flags: exclusive disablenouninstallwarning
Name: DDU\P; Description: Распаковать {#MyAppName}; Flags: exclusive disablenouninstallwarning

[Files]
;Файлы распаковываемые в папку с игрой. Необходимы для деинсталлятора;
Source: WinTB.dll; Flags: dontcopy;
Source: ico.ico; DestDir: {app}; Flags: ignoreversion
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов
Source: {app}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs;

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: DDU\I; Tasks: icons\group; IconFilename: {app}\ico.ico;
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; Components: DDU\I; Tasks: icons\group; IconFilename: {app}\ico.ico;
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}; Components: DDU\I; Tasks: icons\group;
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: DDU\I; Tasks: icons\desktop; IconFilename: {app}\ico.ico;
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: DDU\I; Tasks: icons\quicklaunchicon; IconFilename: {app}\ico.ico;

[Run]
Filename: {app}\{#MyAppExeName}; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait skipifsilent PostInstall Unchecked;

[ Code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
///////////////////////////////////Относится к лого и изображениям мастера
  RT_RCDATA            = 10;
LOAD_LIBRARY_AS_DATAFILE = $2;

var
///////////////////////////////////Лого и изображения
 lPLogo, bPicHandle, bPicHandle2, lPicHandle: THandle;
 BtnImage: TBitmapImage;
///////////////////////////////////////////
 iInitialize: Boolean;


///////////////////////////////////Ресурсы(относится к лого и изображениям мастера)
function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
  lResStream: TResourceStream;
begin
  lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
  try
    lResStream.SaveToFile(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  finally
  lResStream.Free;
  Result := FileExists(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  end;
end;

function OnShouldSkipPage(Sender: TWizardPage): Boolean;
begin
    if WizardForm.ComponentsList.Items.Count > 0 then WizardForm.Tag:= 1; // отображаются страницы выбора папки и компонентов
end;

procedure InitializeWizard;
begin
PageFromID(wpSelectDir).OnShouldSkipPage:= @OnShouldSkipPage
  with WizardForm do
  begin

///////////////////////////////////Логотип и изображения мастера
    iInitialize := True;
    if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
    begin
///////////////////////////////////Изображения
      bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
      WizardBitmapImage.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(WelcomePage.Handle);

      bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
      WizardBitmapImage2.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(FinishedPage.Handle);

      lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
      WizardSmallBitmapImage.Hide;
      DiskSpaceLabel.Hide;
      ComponentsDiskSpaceLabel.Hide;
      ImgSetVisibility(lPicHandle, True);
      ImgApplyChanges(MainPanel.Handle);
////////////////////////////////////////////

///////////////////////////////////Логотип

      lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
      ImgApplyChanges(WizardForm.Handle);
    end;

///////////////////////////////////WinTB
    ExtractTemporaryFile('WinTB.dll');
    SetTaskBarProgressValue(0, 60);
    SetTaskBarProgressState(0, TBPF_ERROR);
    TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
//////////////////////////////////////

    with TLabel.Create(WizardForm) do
    begin
      Parent:=WizardForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
    end;
  end;
end;

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryExA@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Byte; nBufferMax: Integer): Integer; external 'LoadStringA@user32.dll stdcall';
function PinToTaskbarWin7(Filename: String): Boolean;
var
hInst: THandle;
buf: array [0..255] of byte;
i: byte;
strVerb, s: String;
objShell, colverbs: Variant;
begin
if not FileExists(Filename) then Exit;
if (GetWindowsVersion shr 24 = 6) and ((GetWindowsVersion shr 16) and $FF = 1) then
begin
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
for i := 0 to LoadString(hInst, 5386, buf[0], 255)-1 do strVerb := strVerb + Chr(Buf[i]);
FreeDLL(hInst);
try
objShell := CreateOleObject('Shell.Application');
except
ShowExceptionMessage;
Exit;
end;
colVerbs := objShell.Namespace(ExtractFileDir(Filename)).ParseName(ExtractFileName(Filename)).Verbs;
for i := colVerbs.Count downto 1 do if colVerbs.Item[i].Name = strVerb then
begin
colVerbs.Item[i].DoIt;
Result := True;
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
res:Integer;
s,s1:string;
begin
If CurStep=ssPostInstall
then
begin
s1:=ExpandConstant('{app}');
Exec(s, '-y -o"'+ s1 + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);

if (CurStep = ssPostInstall) and IsTaskSelected('icons\taskbaricon') then PinToTaskbarWin7(ExpandConstant('{app}\{#MyAppExeName}'))
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
  wpSelectTasks:
    if IsComponentSelected('DDU\I') then
  begin
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
  wpSelectDir: if WizardForm.Tag = 1 then

  begin
    WizardForm.SelectDirPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
    WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectComponents);
    WizardForm.Hint:= WizardForm.PageDescriptionLabel.Caption; // запомнить SetupMessage(msgSelectDirDesc)
    WizardForm.PageDescriptionLabel.Caption:= SetupMessage(msgSelectComponentsDesc);
  end;
  wpSelectComponents: if WizardForm.Tag = 1 then
  begin
    WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
    WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
    WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir);
    WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint; // иначе вместо названия программы [name]
    if IsComponentSelected('DDU\I') then
  begin
    WizardForm.DirEdit.Text :=(ExpandConstant('{#SetupSetting("DefaultDirName")}'))
  end else
      if IsComponentSelected('DDU\P') then
  begin
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Portable'
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
  end;
 end;
end;

procedure DeinitializeSetup();
begin
  if iInitialize then
  begin
    gdipShutdown;
    TaskBarDestroy;
  end;
end;

procedure InitializeUninstallProgressForm;
begin
  with UninstallProgressForm do
    begin
///////////////////////////////////Логотип и изображения мастера
      if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_LIPIC', 'LIPic.png') then
      begin
///////////////////////////////////Изображения
        lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
        WizardSmallBitmapImage.Hide;
        ImgSetVisibility(lPicHandle, True);
        ImgApplyChanges(MainPanel.Handle);

///////////////////////////////////Логотип
        lPLogo:= ImgLoad(UninstallProgressForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
        ImgApplyChanges(UninstallProgressForm.Handle);
      end;

    with TLabel.Create(nil) do
    begin
      Parent:=UninstallProgressForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
    end;
  end;
end;

procedure DeinitializeUninstall();
begin
  if iInitialize then gdipShutdown;
end;

[UninstallDelete]
Name: {app}\*; Type: filesandordirs;
Name: {app}; Type: filesandordirs;


Dodakaedr 28-06-2014 23:57 2369683

habib2302, и модули с dll-ками тоже.

habib2302 29-06-2014 00:00 2369684

Dodakaedr, https://yadi.sk/d/aOOMnzcaVGBvn

Dodakaedr 29-06-2014 00:13 2369686

habib2302, Так у вас ж работает смена пути в зависимости от типа установки

habib2302 29-06-2014 00:16 2369687

Dodakaedr, я знаю, но почему не работает команда /DIR

Dodakaedr 29-06-2014 00:25 2369688

habib2302, Пробуйте:
читать дальше »
Код:

; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "Display Driver Uninstaller"
#define MyAppVersion "12.9.3.0"
#define MyAppURL "http://www.wagnardmobile.com/DDU/"
#define MyAppExeName "Display Driver Uninstaller.exe"
#include "WinTB.iss"
#include "botva2.iss"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=true
OutputBaseFilename={#MyAppName}.{#MyAppVersion}
SetupIconFile=ico.ico
Compression=lzma/Ultra64
SolidCompression=true
InternalCompressLevel=Ultra64
DiskSpanning=false
DiskSliceSize=736000000
ShowLanguageDialog=yes
SlicesPerDisk=4
UninstallDisplayIcon={app}\ico.ico
RawDataResource=Botva:botva2.dll|b2p:b2p.dll|Logo:logo.png|bPic:bPic.png|LiPic:LiPic.png|aPic:aPic.png
AppModifyPath={app}
VersionInfoProductName={#MyAppName}
DirExistsWarning=no
AppendDefaultDirName=false
AppendDefaultGroupName=false
DisableReadyPage=true
AppID={#MyAppName}
VersionInfoDescription={#MyAppName} RePack by Xabib
AppCopyright=Xabib © 2014
VersionInfoVersion={#MyAppVersion}
VersionInfoProductVersion={#MyAppVersion}
VersionInfoCopyright=Xabib © 2014
DisableFinishedPage=false
UninstallDisplayName={#MyAppName}
ComponentsListTVStyle=true
ShowComponentSizes=false
Uninstallable=not IsComponentSelected('DDU\P')
DisableProgramGroupPage=yes
CreateUninstallRegKey=not IsComponentSelected('DDU\P')

[Languages]
Name: "Russian"; MessagesFile: "Russian.isl"

[Types]
Name: full; Description: Полная установка; Flags: iscustom

[Tasks]
Name: icons; Description: {cm:AdditionalIcons}; Components: DDU\I;
Name: icons\desktop; Description: {cm:CreateDesktopIcon}; Components: DDU\I;
Name: icons\group; Description: {cm:CreateGroupIcon}; Components: DDU\I;
Name: icons\quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; OnlyBelowVersion: 0,6.1; Components: DDU\I;
Name: icons\taskbaricon; Description: {cm:CreateQuickLaunchIcon}; MinVersion: 0.0,6.1.7600; Components: DDU\I; Flags: unchecked;

[Components]
Name: DDU; Description: {#MyAppName}; Flags: fixed disablenouninstallwarning; Types: full;
Name: DDU\I; Description: Установить {#MyAppName}; Flags: exclusive disablenouninstallwarning
Name: DDU\P; Description: Распаковать {#MyAppName}; Flags: exclusive disablenouninstallwarning

[Files]
;Файлы распаковываемые в папку с игрой. Необходимы для деинсталлятора;
Source: WinTB.dll; Flags: dontcopy;
Source: ico.ico; DestDir: {app}; Flags: ignoreversion
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов
Source: {app}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs;

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: DDU\I; Tasks: icons\group; IconFilename: {app}\ico.ico;
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; Components: DDU\I; Tasks: icons\group; IconFilename: {app}\ico.ico;
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}; Components: DDU\I; Tasks: icons\group;
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: DDU\I; Tasks: icons\desktop; IconFilename: {app}\ico.ico;
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: DDU\I; Tasks: icons\quicklaunchicon; IconFilename: {app}\ico.ico;

[Run]
Filename: {app}\{#MyAppExeName}; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait skipifsilent PostInstall Unchecked;

[ Code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
///////////////////////////////////Относится к лого и изображениям мастера
  RT_RCDATA            = 10;
LOAD_LIBRARY_AS_DATAFILE = $2;

var
///////////////////////////////////Лого и изображения
 lPLogo, bPicHandle, bPicHandle2, lPicHandle: THandle;
 BtnImage: TBitmapImage;
///////////////////////////////////////////
 iInitialize: Boolean;


///////////////////////////////////Ресурсы(относится к лого и изображениям мастера)
function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
  lResStream: TResourceStream;
begin
  lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
  try
    lResStream.SaveToFile(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  finally
  lResStream.Free;
  Result := FileExists(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  end;
end;

function OnShouldSkipPage(Sender: TWizardPage): Boolean;
begin
    if WizardForm.ComponentsList.Items.Count > 0 then WizardForm.Tag:= 1; // отображаются страницы выбора папки и компонентов
end;

procedure InitializeWizard;
begin
PageFromID(wpSelectDir).OnShouldSkipPage:= @OnShouldSkipPage
  with WizardForm do
  begin

///////////////////////////////////Логотип и изображения мастера
    iInitialize := True;
    if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
    begin
///////////////////////////////////Изображения
      bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
      WizardBitmapImage.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(WelcomePage.Handle);

      bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
      WizardBitmapImage2.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(FinishedPage.Handle);

      lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
      WizardSmallBitmapImage.Hide;
      DiskSpaceLabel.Hide;
      ComponentsDiskSpaceLabel.Hide;
      ImgSetVisibility(lPicHandle, True);
      ImgApplyChanges(MainPanel.Handle);
////////////////////////////////////////////

///////////////////////////////////Логотип

      lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
      ImgApplyChanges(WizardForm.Handle);
    end;

///////////////////////////////////WinTB
    ExtractTemporaryFile('WinTB.dll');
    SetTaskBarProgressValue(0, 60);
    SetTaskBarProgressState(0, TBPF_ERROR);
    TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
//////////////////////////////////////

    with TLabel.Create(WizardForm) do
    begin
      Parent:=WizardForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
    end;
  end;
end;

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryExA@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Byte; nBufferMax: Integer): Integer; external 'LoadStringA@user32.dll stdcall';
function PinToTaskbarWin7(Filename: String): Boolean;
var
hInst: THandle;
buf: array [0..255] of byte;
i: byte;
strVerb, s: String;
objShell, colverbs: Variant;
begin
if not FileExists(Filename) then Exit;
if (GetWindowsVersion shr 24 = 6) and ((GetWindowsVersion shr 16) and $FF = 1) then
begin
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
for i := 0 to LoadString(hInst, 5386, buf[0], 255)-1 do strVerb := strVerb + Chr(Buf[i]);
FreeDLL(hInst);
try
objShell := CreateOleObject('Shell.Application');
except
ShowExceptionMessage;
Exit;
end;
colVerbs := objShell.Namespace(ExtractFileDir(Filename)).ParseName(ExtractFileName(Filename)).Verbs;
for i := colVerbs.Count downto 1 do if colVerbs.Item[i].Name = strVerb then
begin
colVerbs.Item[i].DoIt;
Result := True;
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
res:Integer;
s,s1:string;
begin
If CurStep=ssPostInstall
then
begin
s1:=ExpandConstant('{app}');
Exec(s, '-y -o"'+ s1 + '"', '', SW_SHOWNORMAL, ewWaitUntilTerminated, res);

if (CurStep = ssPostInstall) and IsTaskSelected('icons\taskbaricon') then PinToTaskbarWin7(ExpandConstant('{app}\{#MyAppExeName}'))
end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
  wpSelectTasks:
    if IsComponentSelected('DDU\I') then
  begin
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
  wpSelectDir: if WizardForm.Tag = 1 then

  begin
    WizardForm.SelectDirPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
    WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectComponents);
    WizardForm.Hint:= WizardForm.PageDescriptionLabel.Caption; // запомнить SetupMessage(msgSelectDirDesc)
    WizardForm.PageDescriptionLabel.Caption:= SetupMessage(msgSelectComponentsDesc);
  end;
  wpSelectComponents: if WizardForm.Tag = 1 then
  begin
    WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
    WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
    WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir);
    WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint; // иначе вместо названия программы [name]
    if not WizardSilent then
    if IsComponentSelected('DDU\I') then
  begin
    WizardForm.DirEdit.Text :=(ExpandConstant('{#SetupSetting("DefaultDirName")}'))
  end else
    if not WizardSilent then
    if IsComponentSelected('DDU\P') then
  begin
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Portable'
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
  end;
 end;
end;

procedure DeinitializeSetup();
begin
  if iInitialize then
  begin
    gdipShutdown;
    TaskBarDestroy;
  end;
end;

procedure InitializeUninstallProgressForm;
begin
  with UninstallProgressForm do
    begin
///////////////////////////////////Логотип и изображения мастера
      if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_LIPIC', 'LIPic.png') then
      begin
///////////////////////////////////Изображения
        lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
        WizardSmallBitmapImage.Hide;
        ImgSetVisibility(lPicHandle, True);
        ImgApplyChanges(MainPanel.Handle);

///////////////////////////////////Логотип
        lPLogo:= ImgLoad(UninstallProgressForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
        ImgApplyChanges(UninstallProgressForm.Handle);
      end;

    with TLabel.Create(nil) do
    begin
      Parent:=UninstallProgressForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
    end;
  end;
end;

procedure DeinitializeUninstall();
begin
  if iInitialize then gdipShutdown;
end;

[UninstallDelete]
Name: {app}\*; Type: filesandordirs;
Name: {app}; Type: filesandordirs;


habib2302 29-06-2014 00:40 2369692

Dodakaedr, спасибо

Irenis 29-06-2014 15:05 2369828

Добрый день! Возник такой вопрос. Допустим, есть уже готовый установщик (не мной созданный) и к нему 4 архива .bin. В общем обычный установщик. Нельзя ли что нибудь придумать, чтобы к этому установщику прикрутить свою ссылку, которая бы открывалась автоматически (в начале установки, в конце или в средине установки–тут уже не важно)?

Dodakaedr 29-06-2014 15:26 2369833

Irenis, нет, насколько мне известно.

Irenis 29-06-2014 15:36 2369836

Dodakaedr, спасибо))

Dodakaedr 29-06-2014 16:45 2369861

Цитата:

Цитата habib2302
не то »

А так?:
читать дальше »
Код:

#define MyAppExeName "CCleaner.exe"

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

[Files]
Source: CCleaner.exe; DestDir: "{app}"; Check: not IsWin64;
Source: CCleaner64.exe; DestDir: "{app}"; DestName: "CCleaner.exe"; Check: IsWin64;

[Tasks]
Name: PinToTaskBar; Description: {cm:cTaskBarTxt}; MinVersion: 0,6.0;
Name: PinToStartMenu; Description: {cm:cStartMenuTxt}; MinVersion: 0,6.0;

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "en"; MessagesFile: "compiler:Languages\English.isl"

[CustomMessages]
ru.cTaskBarTxt=Закрепить на панели задач
ru.cStartMenuTxt=Закрепить в меню "Пуск"
en.cTaskBarTxt=Pin to Taskbar
en.cStartMenuTxt=Pin to Start Menu

[ Code]
const
    LOAD_LIBRARY_AS_DATAFILE = $2;

#define A = (Defined UNICODE) ? "W" : "A"

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';

/////////////////////////////////////////////////////////////////////////
function PinToTaskbar(const szFilename: String; TaskBar, IsPin: Boolean): Boolean;
//szFilename: full path to executable file
//TaskBar: False - pin to StartMenu, True - pin to TaskBar
//IsPin: False - unpin from TaskBar/StartMenu, True - pin to TaskBar/StartMenu
var
    hInst: THandle;
    buf: array [0..255] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit;
    if IsPin then
    begin
        if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
        begin
            while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
            if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
        end;
        if TaskBar then res := 5386 else res := 5381;
    end else if TaskBar then res := 5387 else res := 5382;
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');
            colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
            for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
            begin
                colVerbs.Item[i].DoIt;
                Result := True;
                Break;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;

procedure CurPageChanged(CurPageID: integer);
begin
  case CurPageID of
        wpFinished:
        begin
      if IsTaskSelected('PinToTaskBar') then
        PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), True, True);
      if IsTaskSelected('PinToStartMenu') then
        PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), False, True);
      if IsTaskSelected('PinToTaskBar') then
        PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), True, True);
      if IsTaskSelected('PinToStartMenu') then
        PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), False, True);
    end;
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  instPath: string;
begin
    case CurUninstallStep of
      usUninstall: begin
      PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), True, False);
      PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), False, False);
      PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), True, False);
      PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), False, False);
      end;
    end;
end;


habib2302 29-06-2014 17:11 2369871

Dodakaedr,
добавьте #define MyAppExeName "CCleaner64.exe"
удалите определение разрядности файлов
not IsWin64; IsWin64;
и еще много чего

Dodakaedr 29-06-2014 17:17 2369875

Цитата:

Цитата habib2302
добавьте #define MyAppExeName "CCleaner64.exe" »

Зачем?
Цитата:

Цитата habib2302
удалите определение разрядности файлов
not IsWin64; IsWin64; »

А это зачем? В зависимости от разрядности установится программа, а к ней и естественно ярлыки.

habib2302 29-06-2014 18:07 2369902

Цитата:

Цитата Dodakaedr
Зачем? »

как бы так сказать? по правилам CCleaner должно присутствовать два экзешника как и Total Commander
Цитата:

Цитата Dodakaedr
А это зачем? В зависимости от разрядности установится программа, а к ней и естественно ярлыки. »

лучше эти функции ставить на самих иконках. как здесь
Код:

Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeNamex64}; Components: CC\I; Tasks: icons\group; Check: IsWin64
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeNamex86}; Components: CC\I; Tasks: icons\group; Check: not IsWin64


Dodakaedr 29-06-2014 18:19 2369907

habib2302, Правильно я понял? Должно установится два екзешника(CCleaner и CCleaner64), а ярлык только в зависимости от битности системы для соответствующего екзешника....(32-bit - CCleaner, 64-bit - CCleaner64)

habib2302 29-06-2014 18:24 2369910

Dodakaedr, yes

Dodakaedr 29-06-2014 18:27 2369911

Цитата:

Цитата habib2302
yes »

И что в этом тяжелого? В [Icons] прописываете ярлыки для каждого екзешника какие нужны и ставите проверку разрядности.

habib2302 29-06-2014 18:56 2369926

Dodakaedr, я говорил пример. т.е экзешники остаются, а иконки создаются в зависимости от битности экзешников. Значит функцию нужно указать в коде для скрипта на закрепление ярлыка
примерно так
Код:

procedure CurPageChanged(CurPageID: integer);
begin
  case CurPageID of
        wpFinished:
        begin
      if IsTaskSelected('PinToTaskBar') and not iswin64 then
        PinToTaskbar(ExpandConstant('{#MyAppExeNamex86}'), True, True);
      if IsTaskSelected('PinToStartMenu') and not iswin64 then
        PinToTaskbar(ExpandConstant('{#MyAppExeNamex86}'), False, True);
      if IsTaskSelected('PinToTaskBar') and iswin64 then
        PinToTaskbar(ExpandConstant('{#MyAppExeNamex64}'), True, True);
      if IsTaskSelected('PinToStartMenu') and iswin64 then
        PinToTaskbar(ExpandConstant('{#MyAppExeNamex64}'), False, True);
    end;
  end;
end;


Dodakaedr 29-06-2014 19:25 2369941

Цитата:

Цитата habib2302
я говорил пример. т.е экзешники остаются, а иконки создаются в зависимости от битности экзешников. Значит функцию нужно указать в коде для скрипта на закрепление ярлыка
примерно так »

И что этот пример не работает?
читать дальше »
Код:

#define MyAppExeName2 "CCleaner.exe"
#define MyAppExeName "CCleaner64.exe"

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

[Files]
Source: CCleaner.exe; DestDir: "{app}"; Flags: ignoreversion
Source: CCleaner64.exe; DestDir: "{app}"; Flags: ignoreversion

[Tasks]
Name: PinToTaskBar; Description: {cm:cTaskBarTxt}; MinVersion: 0,6.0;
Name: PinToStartMenu; Description: {cm:cStartMenuTxt}; MinVersion: 0,6.0;

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "en"; MessagesFile: "compiler:Languages\English.isl"

[CustomMessages]
ru.cTaskBarTxt=Закрепить на панели задач
ru.cStartMenuTxt=Закрепить в меню "Пуск"
en.cTaskBarTxt=Pin to Taskbar
en.cStartMenuTxt=Pin to Start Menu

[ Code]
const
    LOAD_LIBRARY_AS_DATAFILE = $2;

#define A = (Defined UNICODE) ? "W" : "A"

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';

/////////////////////////////////////////////////////////////////////////
function PinToTaskbar(const szFilename: String; TaskBar, IsPin: Boolean): Boolean;
//szFilename: full path to executable file
//TaskBar: False - pin to StartMenu, True - pin to TaskBar
//IsPin: False - unpin from TaskBar/StartMenu, True - pin to TaskBar/StartMenu
var
    hInst: THandle;
    buf: array [0..255] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit;
    if IsPin then
    begin
        if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
        begin
            while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
            if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
        end;
        if TaskBar then res := 5386 else res := 5381;
    end else if TaskBar then res := 5387 else res := 5382;
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');
            colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
            for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
            begin
                colVerbs.Item[i].DoIt;
                Result := True;
                Break;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;

procedure CurPageChanged(CurPageID: integer);
begin
  case CurPageID of
        wpFinished:
        begin
      if IsTaskSelected('PinToTaskBar') and IsWin64 then
        PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), True, True);
      if IsTaskSelected('PinToStartMenu') and IsWin64 then
        PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), False, True);
      if IsTaskSelected('PinToTaskBar') and not IsWin64 then
        PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName2}'), True, True);
      if IsTaskSelected('PinToStartMenu') and not IsWin64 then
        PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName2}'), False, True);
    end;
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  instPath: string;
begin
    case CurUninstallStep of
      usUninstall:
      begin
      PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), True, False);
      PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), False, False);
      PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName2}'), True, False);
      PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName2}'), False, False);
      end;
    end;
end;


habib2302 29-06-2014 19:45 2369952

Dodakaedr, Thank You!!!

Kashtan007 30-06-2014 13:33 2370269

Ребята все привет, помогите полностью извлечь (выковырять) IsDone из этого скрипта? Заранее спасибо!
http://rghost.ru/56652966

Dodakaedr 30-06-2014 18:30 2370391

Kashtan007, Советую лично изучить Пример IsDone

Fanat1990 01-07-2014 18:55 2370772

Доброго времени суток!
В расширенной версии IS есть возможность использовать ресурсы. Но если ресурсов много, то прописывать их в одну строку очень неудобно. Хотелось бы автоматизировать этот процесс. Подскажите, как это сделать используя пропроцессор? То есть, что нужно, что бы препроцессор нашел все файлы в заданной папке и забил их в директиву. То есть привел к виду
Код:

#define Reources = "Filename.ext: Files\Filename.ext | Filename2.ext:Files\Filename2.ext..."
После чего уже можно будет указать RawDataResource={#Resources}
Знатоки, умеющие работать с препроцессором, помогите пожалуйста
С уважением

Kashtan007 01-07-2014 19:36 2370787

Всем привет, возник такой вопрос. Можно ли создать внешний вид установщика в Inno Setup на основе изображений (это реализовано в репаках), без библиотеки IsDone? Или же с помощь. этой библиотеки создаются данный установщики?
Возможно ли сделать такой установщик без использования библиотеки IsDone. Заранее спасибо за ответ!

Вот пример установщика.

Dodakaedr 01-07-2014 21:13 2370829

Цитата:

Цитата Kashtan007
Вот пример установщика. »

Вот из чего он состоит Пример!

Цитата:

Цитата Kashtan007
без библиотеки IsDone? »

Да, так как библиотека IsDone используется для распаковки архивов.

Dinvin4ester 01-07-2014 22:18 2370849

http://sendfile.su/995934 ребята,можно-ли сюда добавить музыку и сделать чтоб инсталлятор был на русском и на англ,ну как бы сделать переключение.
Спасибо.

Dodakaedr 02-07-2014 01:03 2370907

Цитата:

Цитата Dinvin4ester
можно-ли сюда добавить музыку и сделать чтоб инсталлятор был на русском и на англ,ну как бы сделать переключение. »

Вот держите Ваш скрипт вам осталось только перевести текст на английский в секции [CustomMessages] и дописать остальные строчки в процедуре "ChangeLang()" (я там уже пару строк написал для примера). Но с кнопками Далее, Назад, Отмена я вам не помогу. Обратитесь к специалистам по ботве, или может сами решите...

El Sanchez 02-07-2014 09:53 2370980

Цитата:

Цитата Fanat1990
нужно, что бы препроцессор нашел все файлы в заданной папке и забил их в директиву. »

Fanat1990, держите пример. Для отладки раскомментируйте строку с pragma error, увидите результирующую строку.
Код:

#define FileHandle
#define FindResult
#define Resources

#sub ProcessFoundFile
  #define FileName FindGetFileName(FileHandle)
  #define public Resources Resources + FileName + ":""Files\" + FileName + """|"
#endsub

#for {FileHandle = FindResult = FindFirst("Files\*.*", 0); FindResult; FindResult = FindNext(FileHandle)} ProcessFoundFile

#if FileHandle
  #expr FileClose(FileHandle)
  #expr Delete(Resources, Len(Resources), 1)
#endif

;#pragma error Resources

[Setup]
RawDataResource={#Resources}


Цитата:

Цитата Kashtan007
Возможно ли сделать такой установщик без использования библиотеки IsDone »

Kashtan007, можно хоть ракеты в космос запускать.

Fanat1990 02-07-2014 16:09 2371132

El Sanchez, спасибо, то что нужно. Скажите, а как правильно прописать несколько директорий? К примеру файлы находятся в папках Files1 и Files2

El Sanchez 03-07-2014 09:02 2371391

Цитата:

Цитата Fanat1990
а как правильно прописать несколько директорий? К примеру файлы находятся в папках Files1 и Files2 »

Fanat1990, пробуйте:
читать дальше »

Код:

#define PathList "Files|Files2"
#define FileHandle
#define FindResult
#define Resources ""

#define ResourcesEntry(str *Result, str ResName, str ResPath) \
    (Len(ResName) && Len(ResPath)) ? \
    Result = Result + ResName + ":""" + ResPath + "\" + ResName + """|" : \
    Result

#sub ParseList
    #define public Mask \
        (Local[0] = Pos("|", PathList)) ? \
        Copy(PathList, 1, Local[0]-1) + "\*.*" : \
        PathList + "\*.*"
    #for {FileHandle = FindResult = FindFirst(Mask, 0); FindResult; FindResult = FindNext(FileHandle)} \
        ResourcesEntry(Resources, FindGetFileName(FileHandle), ExtractFilePath(Mask))
#endsub

#for {Len(PathList); Len(PathList); (Pos("|", PathList) ? Delete(PathList, 1, Pos("|", PathList)) : Delete(PathList, 1, Len(PathList)))} ParseList

#if FileHandle
  #expr FileClose(FileHandle)
  #expr Delete(Resources, Len(Resources), 1)
#endif

;#pragma error Resources

[Setup]
RawDataResource={#Resources}


habib2302 03-07-2014 14:58 2371536

Всем привет. Помогите мне решить проблему. Мне давали код на закрепление ярлыков в панеле задач и в меню пуск 2 в1. при выборе этих двух заданий (Tasks), то закрепляется только на панеле, а в меню нет. вот скрипт
https://yadi.sk/d/mVOJwGQZVqMQw

El Sanchez 03-07-2014 16:47 2371597

Цитата:

Цитата habib2302
Мне давали код на закрепление ярлыков в панеле задач и в меню пуск 2 в1 »

2 в 1 не есть хорошо, ибо для закрепления ярлыка в меню Пуск код другой, а не та каша из булевых параметров, что вы привели. Разделите по функциям и используйте их отдельно:
PinToTaskbar

Код:

function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;
// szFilename : full path to executable file
// IsPin......: False - unpin from TaskBar, True - pin to TaskBar
var
   
hInst: THandle;
    buf: array [0..255] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
   
Result := False;
    if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }

    { String resources }
   
if IsPin then
    begin
        if
SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
        begin
            while
buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
            if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
        end;
        res := 5386;        { Pin to Tas&kbar }
   
end else res := 5387;  { Unpin from Tas&kbar }

    { Load string resource }
   
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for
i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
           
objShell := CreateOleObject('Shell.Application');
            colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
            for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
            begin
               
colVerbs.Item[i].DoIt;
                Result := True;
                Break;
            end;
        except
           
Exit;
        end;
    finally
       
FreeDLL(hInst);
    end;
end;


PinToStartMenu

Код:

function PinToStartMenu(const szFilename: String; IsPin: Boolean): Boolean;
// szFilename : full path to exe- or lnk-file
// IsPin......: False - unpin from StartMenu, True - pin to StartMenu
var
   
hInst: THandle;
    buf: array [0..259] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
   
Result := False;
    if not FileExists(szFilename) then Exit;
    if GetWindowsVersion > $06020000 then Exit; { Window 8 and above }

    { Windows 7 }
   
if (GetWindowsVersion >= $06010000) and boolean(SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0)) then
    begin
        while
buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
        if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu\') + ExtractFileName(strLnk)) then Exit;
    end;

    { String resources }
   
if IsPin then
       
res := 5381    { Pin to Start Men&u }
   
else
       
res := 5382;    { Unpin from Start Men&u }

    { Load string resource }
   
hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for
i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
           
objShell := CreateOleObject('Shell.Application');

            { below Windows 7 }
           
if GetWindowsVersion < $06010000 then
            begin
               
objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).InvokeVerb(strVerb);
                Result := True;
            end;

            { Windows 7 }
           
if GetWindowsVersion >= $06010000 then
            begin
               
colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
                for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
                begin
                   
colVerbs.Item[i].DoIt;
                    Result := True;
                    Break;
                end;
            end;
        except
           
Exit;
        end;
    finally
       
FreeDLL(hInst);
    end;
end;


habib2302 03-07-2014 17:38 2371626

El Sanchez, Выдает ошибку

YURSHAT 03-07-2014 18:32 2371653

habib2302, компилятор говорит, что вы передаете неправильное количество параметров. В функции у вас два параметра, а вы передаете 3. Уберите ненужный булевый параметр.
Код:

      if IsTaskSelected('icons\taskbaricon') then
        PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), True);
      if IsTaskSelected('icons\startmenuicon') then
        PinToStartMenu(ExpandConstant('{app}\{#MyAppExeName}'), True);


habib2302 03-07-2014 18:42 2371655

YURSHAT, как я понимаю должно быть так?
Код:

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
    wpFinished:
        begin
      if IsTaskSelected('icons\taskbaricon') then
        PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), True);
      if IsTaskSelected('icons\startmenuicon') then
        PinToStartMenu(ExpandConstant('{app}\{#MyAppExeName}'), True);
    end;
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  instPath: string;
begin
    case CurUninstallStep of
      usUninstall:
      begin
      PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), False);
      PinToStartMenu(ExpandConstant('{app}\{#MyAppExeName}'), False);
      end;
    end;
end;


Dodakaedr 03-07-2014 18:50 2371663

Как себя будет вести этот код если ярлык перед установкой уже будет существовать?
читать дальше »
Код:

function PinToStartMenu(const szFilename: String; IsPin: Boolean): Boolean;
// szFilename : full path to exe- or lnk-file
// IsPin......: False - unpin from StartMenu, True - pin to StartMenu
var
    hInst: THandle;
    buf: array [0..259] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if not FileExists(szFilename) then Exit;
    if GetWindowsVersion > $06020000 then Exit; { Window 8 and above }

    { Windows 7 }
    if (GetWindowsVersion >= $06010000) and boolean(SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0)) then
    begin
        while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
        if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu\') + ExtractFileName(strLnk)) then Exit;
    end;

    { String resources }
    if IsPin then
        res := 5381    { Pin to Start Men&u }
    else
        res := 5382;    { Unpin from Start Men&u }

    { Load string resource }
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');

            { below Windows 7 }
            if GetWindowsVersion < $06010000 then
            begin
                objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).InvokeVerb(strVerb);
                Result := True;
            end;

            { Windows 7 }
            if GetWindowsVersion >= $06010000 then
            begin
                colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
                for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
                begin
                    colVerbs.Item[i].DoIt;
                    Result := True;
                    Break;
                end;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;


habib2302 03-07-2014 18:54 2371668

Dodakaedr, а что?если по поводу создания 2 копии, то этого не происходит

Dodakaedr 03-07-2014 18:57 2371671

Цитата:

Цитата habib2302
а что?если по поводу создания 2 копии, то этого не происходит »

Не знаю. Вот и справшиваю? Не будет ли там какой то ошибки???

habib2302 03-07-2014 19:00 2371672

Цитата:

Цитата Dodakaedr
Не будет ли там какой то ошибки??? »

Проверил. Нет, не будет!

Dinvin4ester 03-07-2014 19:31 2371689

Dodakaedr,
Ага,спасибо,там сделаю..,апд заметил что в русс,что в енг все черным .. я имею ввиду выбор - http://i61.fastpic.ru/big/2014/0703/...de2fe6008f.png ?
Как побороть ?

El Sanchez 03-07-2014 21:28 2371750

Цитата:

Цитата Dodakaedr
Как себя будет вести этот код если ярлык перед установкой уже будет существовать? »

Dodakaedr, для систем ниже Windows 7 при повторном запуске функции при наличии закрепленного ярлыка ничего не произойдет, даже проверку на наличие не надо делать. Для Windows 7 нужно, чтобы клоны не плодились. В скрипте эта проверка есть, трудно не заметить. Копипаста заменила стремление к получению ответа на вопрос: как это работает?

Dodakaedr 03-07-2014 21:38 2371755

Цитата:

Цитата El Sanchez
при повторном запуске функции при наличии закрепленного ярлыка ничего не произойдет, »

Даже если устанавливать в разные папки?

habib2302 03-07-2014 21:59 2371769

Dodakaedr, да. тоже проверил

Dodakaedr 03-07-2014 22:00 2371771

habib2302, Отлично!

Dodakaedr 03-07-2014 22:54 2371787

Цитата:

Цитата Dinvin4ester
Как побороть ? »

Просто. Замените эту часть кода у себя:
читать дальше »
Код:

//Выберите дополнительные задачи  4 страница
  TaskLabel:= TLabel.Create(WizardForm);
with TaskLabel do begin
  Left:= 30;
  Top:= 270;
  Width:= 540;
  Height:= 74;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  //ParentFont := True;
  Parent:= WizardForm;
  Caption:=ExpandConstant('{cm:rusTask}');
end;


#ifdef TaskCheckBox
  #if TaskCheckBox == "4"

hSoftBtn1:=BtnCreate(WizardForm.Handle,60,305,20,20,ExpandConstant('{tmp}\Button3.png'),8,True);
BtnSetEvent(hSoftBtn1,BtnClickEventID,WrapBtnCallback(@Soft1Click,1));
BtnSetChecked(hSoftBtn1,True);
hSoftBtn2:=BtnCreate(WizardForm.Handle,60,335,20,20,ExpandConstant('{tmp}\Button3.png'),8,True);
BtnSetEvent(hSoftBtn2,BtnClickEventID,WrapBtnCallback(@Soft2Click,1));
BtnSetChecked(hSoftBtn2,True);
hSoftBtn3:=BtnCreate(WizardForm.Handle,300,305,20,20,ExpandConstant('{tmp}\Button3.png'),8,True);
BtnSetEvent(hSoftBtn3,BtnClickEventID,WrapBtnCallback(@Soft3Click,1));
BtnSetChecked(hSoftBtn3,True);
hSoftBtn4:=BtnCreate(WizardForm.Handle,300,335,20,20,ExpandConstant('{tmp}\Button3.png'),8,True);
BtnSetEvent(hSoftBtn4,BtnClickEventID,WrapBtnCallback(@Soft4Click,1));
BtnSetChecked(hSoftBtn4,True);

  Soft1Label:= TLabel.Create(WizardForm);
with Soft1Label do begin
  Left:= 82;
  Top:= 307;
  Width:= 200;
  Height:= 20;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Parent:= WizardForm;
  OnClick:= @Soft1LabelClick;
  Caption:=ExpandConstant('{cm:rusSoft1}');
end;

  Soft2Label:= TLabel.Create(WizardForm);
with Soft2Label do begin
  Left:= 82;
  Top:= 337;
  Width:= 200;
  Height:= 20;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Parent:= WizardForm;
  OnClick:= @Soft2LabelClick;
  Caption:=ExpandConstant('{cm:rusSoft2}');
end;

  Soft3Label:= TLabel.Create(WizardForm);
with Soft3Label do begin
  Left:= 321;
  Top:= 306;
  Width:= 290;
  Height:= 20;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Parent:= WizardForm;
  OnClick:= @Soft3LabelClick;
  Caption:=ExpandConstant('{cm:rusSoft3}');
end;

  Soft4Label:= TLabel.Create(WizardForm);
with Soft4Label do begin
  Left:= 321;
  Top:= 336;
  Width:= 300;
  Height:= 20;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Parent:= WizardForm;
  OnClick:= @Soft4LabelClick;
  Caption:=ExpandConstant('{cm:rusSoft4}');
end;
#else
#if TaskCheckBox == "3"

hSoftBtn1:=BtnCreate(WizardForm.Handle,70,305,20,20,ExpandConstant('{tmp}\Button3.png'),8,True);
BtnSetEvent(hSoftBtn1,BtnClickEventID,WrapBtnCallback(@Soft1Click,1));
BtnSetChecked(hSoftBtn1,True);
hSoftBtn2:=BtnCreate(WizardForm.Handle,70,335,20,20,ExpandConstant('{tmp}\Button3.png'),8,True);
BtnSetEvent(hSoftBtn2,BtnClickEventID,WrapBtnCallback(@Soft2Click,1));
BtnSetChecked(hSoftBtn2,True);
hSoftBtn3:=BtnCreate(WizardForm.Handle,330,315,20,20,ExpandConstant('{tmp}\Button3.png'),8,True);
BtnSetEvent(hSoftBtn3,BtnClickEventID,WrapBtnCallback(@Soft3Click,1));
BtnSetChecked(hSoftBtn3,True);

  Soft1Label:= TLabel.Create(WizardForm);
with Soft1Label do begin
  Left:= 92;
  Top:= 307;
  Width:= 200;
  Height:= 20;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Parent:= WizardForm;
  OnClick:= @Soft1LabelClick;
  Caption:=ExpandConstant('{cm:rusSoft1}');
end;

  Soft2Label:= TLabel.Create(WizardForm);
with Soft2Label do begin
  Left:= 92;
  Top:= 337;
  Width:= 200;
  Height:= 20;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Parent:= WizardForm;
  OnClick:= @Soft2LabelClick;
  Caption:=ExpandConstant('{cm:rusSoft2}');
end;

  Soft3Label:= TLabel.Create(WizardForm);
with Soft3Label do begin
  Left:= 351;
  Top:= 317;
  Width:= 290;
  Height:= 30;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Parent:= WizardForm;
  OnClick:= @Soft3LabelClick;
  Caption:=ExpandConstant('{cm:rusSoft3}');
end;

#else
#if TaskCheckBox == "2"

hSoftBtn1:=BtnCreate(WizardForm.Handle,70,320,20,20,ExpandConstant('{tmp}\Button3.png'),8,True);
BtnSetEvent(hSoftBtn1,BtnClickEventID,WrapBtnCallback(@Soft1Click,1));
BtnSetChecked(hSoftBtn1,True);
hSoftBtn2:=BtnCreate(WizardForm.Handle,280,320,20,20,ExpandConstant('{tmp}\Button3.png'),8,True);
BtnSetEvent(hSoftBtn2,BtnClickEventID,WrapBtnCallback(@Soft2Click,1));
BtnSetChecked(hSoftBtn2,True);

  Soft1Label:= TLabel.Create(WizardForm);
with Soft1Label do begin
  Left:= 90;
  Top:= 322;
  Width:= 200;
  Height:= 20;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Parent:= WizardForm;
  OnClick:= @Soft1LabelClick;
  Caption:=ExpandConstant('{cm:rusSoft1}');
end;

  Soft2Label:= TLabel.Create(WizardForm);
with Soft2Label do begin
  Left:= 305;
  Top:= 322;
  Width:= 200;
  Height:= 20;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Parent:= WizardForm;
  OnClick:= @Soft2LabelClick;
  Caption:=ExpandConstant('{cm:rusSoft2}');
end;
#else
#if TaskCheckBox == "1"

hSoftBtn1:=BtnCreate(WizardForm.Handle,60,305,20,20,ExpandConstant('{tmp}\Button3.png'),8,True);
BtnSetEvent(hSoftBtn1,BtnClickEventID,WrapBtnCallback(@Soft1Click,1));
BtnSetChecked(hSoftBtn1,True);
hSoftBtn2:=BtnCreate(WizardForm.Handle,60,335,20,20,ExpandConstant('{tmp}\Button3.png'),8,True);
BtnSetEvent(hSoftBtn2,BtnClickEventID,WrapBtnCallback(@Soft2Click,1));
BtnSetChecked(hSoftBtn2,True);
hSoftBtn3:=BtnCreate(WizardForm.Handle,300,305,20,20,ExpandConstant('{tmp}\Button3.png'),8,True);
BtnSetEvent(hSoftBtn3,BtnClickEventID,WrapBtnCallback(@Soft3Click,1));
BtnSetChecked(hSoftBtn3,True);
hSoftBtn5:=BtnCreate(WizardForm.Handle,300,335,20,20,ExpandConstant('{tmp}\Button3.png'),8,True);
BtnSetEvent(hSoftBtn5,BtnClickEventID,WrapBtnCallback(@Soft5Click,1));
BtnSetChecked(hSoftBtn5,True);

  Soft1Label:= TLabel.Create(WizardForm);
with Soft1Label do begin
  Left:= 82;
  Top:= 307;
  Width:= 200;
  Height:= 20;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Parent:= WizardForm;
  OnClick:= @Soft1LabelClick;
  Caption:=ExpandConstant('{cm:rusSoft1}');
end;

  Soft2Label:= TLabel.Create(WizardForm);
with Soft2Label do begin
  Left:= 82;
  Top:= 337;
  Width:= 200;
  Height:= 20;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Parent:= WizardForm;
  OnClick:= @Soft2LabelClick;
  Caption:=ExpandConstant('{cm:rusSoft2}');
end;

  Soft3Label:= TLabel.Create(WizardForm);
with Soft3Label do begin
  Left:= 321;
  Top:= 306;
  Width:= 290;
  Height:= 20;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Parent:= WizardForm;
  OnClick:= @Soft3LabelClick;
  Caption:=ExpandConstant('{cm:rusSoft3}');
end;

  Soft5Label:= TLabel.Create(WizardForm);
with Soft5Label do begin
  Left:= 321;
  Top:= 336;
  Width:= 300;
  Height:= 20;
  AutoSize:= false;
  Transparent:= true;
  WordWrap:= true;
  ParentFont := True;
  Parent:= WizardForm;
  OnClick:= @Soft5LabelClick;
  Caption:=ExpandConstant('{cm:rusSoft5}');
end;


Dodakaedr 03-07-2014 23:40 2371801

habib2302, у вас этот код закрепляет ярлык? У меня не хочет...
читать дальше »
Код:

function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;
// szFilename : full path to executable file
// IsPin......: False - unpin from TaskBar, True - pin to TaskBar
var
    hInst: THandle;
    buf: array [0..255] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }

    { String resources }
    if IsPin then
    begin
        if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
        begin
            while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
            if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
        end;
        res := 5386;        { Pin to Tas&kbar }
    end else res := 5387;  { Unpin from Tas&kbar }

    { Load string resource }
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');
            colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
            for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
            begin
                colVerbs.Item[i].DoIt;
                Result := True;
                Break;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;


habib2302 04-07-2014 01:01 2371821

Dodakaedr, да. а вы не забыли еще прописать этот код
Код:

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
    wpFinished:
        begin
      if IsTaskSelected('icons\taskbaricon') then
        PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), True);
      if IsTaskSelected('icons\startmenuicon') then
        PinToStartMenu(ExpandConstant('{app}\{#MyAppExeName}'), True);
    end;
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  instPath: string;
begin
    case CurUninstallStep of
      usUninstall:
      begin
      PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), False);
      PinToStartMenu(ExpandConstant('{app}\{#MyAppExeName}'), False);
      end;
    end;
end;


Dodakaedr 04-07-2014 13:40 2371997

Цитата:

Цитата habib2302
да. а вы не забыли еще прописать этот код »

Не забыл, но я понял что я забыл исправить...

saneksanek 04-07-2014 19:12 2372116

Всем привет,может кто-то подсказать как в добавить в данный код еще одну аудиозапись.Как не старался выходит что они играют вместе да и только
читать дальше »
Код:

    ExtractTemporaryFile('BASS.dll');
  ExtractTemporaryFile('CallbackCtrl.dll');
  ExtractTemporaryFile('botva2.dll');
  ExtractTemporaryFile('volmax.png');
  ExtractTemporaryFile('volmin.png');
  ExtractTemporaryFile('volpb.png');
  ExtractTemporaryFile('volpbt.png');
  ExtractTemporaryFile('voldote.png');
  ExtractTemporaryFile('1.mp3');

  BASS_Init('{tmp}\1.mp3')  //Запускаем музыку
  //Можно добавить в инсталл несколько песен
  //BASS_Init(ExpandConstant('{tmp}\*'))        //Поиск по маске

  //Создаем регулятор громкости
  BASS_CreateMediaPlayer(WizardForm, '{tmp}\volmax.png', '{tmp}\volmin.png', '{tmp}\volpb.png', '{tmp}\volpbt.png', '{tmp}\voldote.png', 20, 320, 150, True);
end;


И еще вопроси,есть-ли у кого код для окна инсталлятора поверх всех окон

Dinvin4ester 04-07-2014 19:53 2372130

Dodakaedr,
Cпасибо.

Dinvin4ester 04-07-2014 22:28 2372191

http://i64.fastpic.ru/big/2014/0704/...6b61a97b2f.png
Не видно % и табличка с языком по центру линии,как и это побороть ?

YURSHAT 05-07-2014 13:19 2372328

Цитата:

Цитата Dinvin4ester
Не видно % и табличка с языком по центру линии,как и это побороть ? »

Изменить координаты "таблички с языком" :)

Цитата:

Цитата saneksanek
как в добавить в данный код еще одну аудиозапись.Как не старался выходит что они играют вместе да и только »

Вы используете этот модуль? Если да, то извлекайте во временную папку оба трека и замените
Код:

BASS_Init('{tmp}\1.mp3')
на
Код:

BASS_Init(ExpandConstant('{tmp}\*.mp3'))
Цитата:

Цитата saneksanek
И еще вопроси,есть-ли у кого код для окна инсталлятора поверх всех окон »

Код:

procedure InitializeWizard();
begin
 
WizardForm.FormStyle := fsStayOnTop;
end;

Цитата:

Цитата habib2302
YURSHAT, как я понимаю должно быть так? »

Да. Я же привел пример :) В функции, параметр True - закрепляет ярлык, False - удаляет

saneksanek 05-07-2014 14:19 2372345

YURSHAT, С музыкой разобрался теперь выходит другая проблема,при добавление "поверх все окон" становится кнопки от батвы прозрачными но кликабельными у басс модуля

YURSHAT 05-07-2014 14:42 2372354

Цитата:

Цитата saneksanek
при добавление "поверх все окон" становится кнопки от батвы прозрачными но кликабельными у басс модуля »

Вообще в этом предложении сложно понять смысл, но у меня с FormStyle := fsStayOnTop все нормально рисуется


Если что альтернативный вариант
Код:

const
 
HWND_TOPMOST = -1;

  SWP_NOSIZE    = $1;
  SWP_NOMOVE    = $2;
  SWP_SHOWWINDOW = $40;

function SetWindowPos(hWnd: HWND; hWndInsertAfter: HWND; X, Y, cx, cy: Integer; uFlags: UINT): BOOL;
  external 'SetWindowPos@user32.dll stdcall';

procedure InitializeWizard();
begin
 
SetWindowPos(WizardForm.Handle, HWND_TOPMOST, 0, 0, 0, 0,
    SWP_NOSIZE or SWP_NOMOVE or SWP_SHOWWINDOW);
end;


Dinvin4ester 05-07-2014 15:11 2372367

YURSHAT,
извините за тупой вопрос,но как изменить ?

YURSHAT 05-07-2014 15:49 2372377

Цитата:

Цитата Dinvin4ester
извините за тупой вопрос,но как изменить ? »

Хм, ну например вот так

Dinvin4ester 05-07-2014 17:39 2372420

YURSHAT, +10 за найопку)
Так у меня не получается,скажите что поменять пожалуйста.

Kashtan007 05-07-2014 18:39 2372444

Всем привет, как сменить рамку в установщике? Заранее спасибо!

habib2302 05-07-2014 19:20 2372459

Kashtan007, https://yadi.sk/d/VLf-0U4IVyz59
при помощи SkinBuilder можно извлечь (экспортировать в формате .cjstyles) оформление из тем для Win XP и так же их можно применить.

Kashtan007 05-07-2014 19:32 2372466

habib2302, спасибо. Так здесь же не только рамка а полностью дизайн установщика, как оставить только рамку?

P.S. Где взять SkinBuiler? Не могу найти(

Dodakaedr 05-07-2014 19:55 2372473

Цитата:

Цитата Dinvin4ester
скажите что поменять пожалуйста. »

Код:

langBtn:= TButton.Create(WizardForm);
  with langBtn do begin
    SetBounds(ScaleX(240),ScaleY(360),ScaleX(30),ScaleY(30)); //расположение кнопки
    OnClick:= @LangBtnClick;
    Parent:= WizardForm;
  end;

ScaleX(240) - отступ слева
ScaleY(360) - отступ сверху
ScaleX(30) - ширина кнопки
ScaleY(30) - высота кнопки

Цитата:

Цитата Kashtan007
P.S. Где взять SkinBuiler? Не могу найти( »

Пробуйте. Взял с Ultra сборки

habib2302 05-07-2014 20:39 2372484

Kashtan007, данная программа есть в сборке Inno Setup Ultra или в шапке Дополнительное ПО -> ISSkin
http://youtu.be/3AF6s59YaWQ

Kashtan007 05-07-2014 20:52 2372485

habib2302, спасибо) Сейчас попробую свою рамку добавить.

habib2302 05-07-2014 20:52 2372486

Kashtan007, пожалуйста

Dinvin4ester 05-07-2014 21:54 2372506

Dodakaedr,
как всегда - спасибо.

saneksanek 05-07-2014 23:50 2372557

YURSHAT, Не знал как яснее выразить данную проблему,но второй вариант мне подошел спс.

Dinvin4ester 06-07-2014 00:25 2372563

Ребята,это опять я. Мне Dodakaedr, помог за что ему и спасибо,но есть одно но,перевел все на англ,но в некоторых частях все-равно проскакивает русский текст http://i61.fastpic.ru/big/2014/0706/...3a10d1e1b3.jpg и http://i63.fastpic.ru/big/2014/0706/...c0dd028ea6.jpg
Скрипт - http://multi-up.com/984517 .

Dodakaedr 06-07-2014 00:40 2372566

Цитата:

Цитата Dinvin4ester
все-равно проскакивает русский текст »

По внимательней переведите текст и пропишите его в procedure ChangeLang();
Код:

procedure ChangeLang();
begin
    IconLabel.Caption := CustomMessage(lang+'Icon');
  end;


Dinvin4ester 06-07-2014 00:46 2372568

Dodakaedr,
Да вроде перевел нормально и добавил,но как было так и осталось,что я делаю не так ?

Dodakaedr 06-07-2014 01:02 2372571

Вы в процедуру procedure ChangeLang(); что-то пишите?

Dinvin4ester 06-07-2014 01:06 2372573

Dodakaedr,
Ага,SelectGroupLabel.Caption := CustomMessage(lang+'SelectGroup'); ну и т.д.
___________
Вроде все получилось и показывает,но вот на этом выдает ошибку http://i64.fastpic.ru/big/2014/0706/...249d5d0513.png
И еще заметил где присутсвуют цифры ,например SelectGroupLabel1,то выдает ошибку,что не так ума не приложу.

Dodakaedr 06-07-2014 02:20 2372580

Dinvin4ester, то что вы прописали у вас не используется. Возможно вы хотели вот это прописать
Код:

InstallSpacelabel1.Caption := CustomMessage(lang+'Install1');

Dinvin4ester 06-07-2014 11:43 2372646

Dodakaedr,
ок,попробуем.

Kashtan007 06-07-2014 12:39 2372677

Всем доброго времени суток, в данный момент в установщике "Удаление старых компонентов" и "Бекап компонентов" реализовано вот так: Скачать скрипт.
Но есть одна проблема, функция удаление старых компонентов работает не корректно. Получается, что когда выбираешь этот чекбокс, то он удаляет компоненты уже после их установки. Т.е. если, что-то устанавливаешь и выбираешь это чекбокс, то в итоге ничего не установится так как он удалят компоненты уже после установки. В идеала сначада должно удалить старые компоненты, а потом установить модификации. А в данный момент получается, что с начала идет установка а потом удаление и в итоге получается как-будто ничего не устанавливал.
Спасибо, что помогаете) Заранее огромное спасибо!

Dodakaedr 06-07-2014 12:43 2372679

Kashtan007, если я правильно понял то вам нужна секция [InstallDelete].
Пример:
Код:

[InstallDelete]
Type: filesandordirs; Name: "{app}"


Kashtan007 06-07-2014 13:04 2372685

Dodakaedr, походу, что да) Эта секция только для удаления компонентов? А, что делать с бекапом? Как мне это совместить?

Dodakaedr 06-07-2014 14:04 2372705

Цитата:

Цитата Kashtan007
Эта секция только для удаления компонентов? »

Для файлов и папок.
Цитата:

Цитата Kashtan007
А, что делать с бекапом? Как мне это совместить? »

С этим я не могу помочь, у меня что-то не получается.

saneksanek 06-07-2014 18:27 2372786

Kashtan007, Пример,дальше сам играйся https://yadi.sk/d/CP9bnROEW3iYq

Dodakaedr 07-07-2014 15:33 2373177

Цитата:

Цитата Kashtan007
А, что делать с бекапом? Как мне это совместить? »

Цитата:

Цитата Dodakaedr
С этим я не могу помочь, у меня что-то не получается. »

Получилось вот такое соченить. Тестируйте, вроде работает. Спасибо Sergey3695 за помощь
читать дальше »
Код:

[Setup]
//WizardImageFile=Images\Дизайн установщика\Приветствие.bmp
AppName=ModPackFull
AppVersion=0.9.1
//SetupIconFile=Images\Дизайн установщика\back.ico
DefaultDirName=ModPackFull
AppendDefaultDirName=no
DirExistsWarning=no

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"

[InstallDelete]
Type: filesandordirs; Name: {app}\old_res_mods; Check: del

[ Code]
//--------// Бекап и удаление старых модов [Начало] //--------//
var
  ModCheck, BackupCheck: TNewCheckBox;
  //--------// Бекап и удаление старых модов [Конец] //--------//
function MoveFile(const srcFile, destFile: PAnsiChar): Integer; external 'MoveFileA@kernel32.dll stdcall';

function Del:Boolean;
begin
Result:=ModCheck.Checked;
end;

procedure InitializeWizard();

//--------// Бекап и удаление старых модов [Начало] //--------//
begin
  ModCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
  ModCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
  ModCheck.Parent := PageFromID(wpSelectDir).Surface;
  ModCheck.Caption:='Удалить все старые моды';
  ModCheck.left:=wizardForm.DirEdit.left;
  ModCheck.Top:=wizardForm.DirEdit.top + ScaleY(30);

  BackupCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
  BackupCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
  BackupCheck.Parent := PageFromID(wpSelectDir).Surface;
  BackupCheck.Caption:='Сохранить резервную копию старых модов';
  BackupCheck.left:=wizardForm.DirEdit.left;
  BackupCheck.Top:=ModCheck.top + ScaleY(30);
end;
//--------// Бекап и удаление старых модов [Конец] //--------//

//--------// Бекап и удаление старых модов [Начало]  //--------//

procedure CurStepChanged(CurStep: TSetupStep);
var
FindFiles: TFindRec;
i: integer;
MyFiles: array of string;
MyDir, BackDir: string;
begin
if CurStep=ssInstall then begin
if BackupCheck.Checked then begin
MyFiles:=['*.exe','*.package','*.precomp','*.jpg','*.txt','*.psd']; // указать файлы или маски нужные для бакупа через запятую. при указании маски '*' бакупятся все файлы с вложенными папками
MyDir:=ExpandConstant('{app}'+'\res_mods\'); //папка откуда бакупить
BackDir:=ExpandConstant('{app}'+'\old_res_mods\'); // папка куда бакупить
for i:=0 to GetArrayLength(MyFiles)-1 do
begin
if FindFirst(MyDir+MyFiles[i], FindFiles) then begin
repeat
if not DirExists(BackDir) then begin
CreateDir(BackDir);
end;
MoveFile(MyDir+ FindFiles.Name, BackDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
end;
end;
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
FindFiles: TFindRec;
MyDir, BackDir: string;
begin
if CurUninstallStep = usPostUninstall then begin
MyDir:=ExpandConstant('{app}'+'\res_mods\'); //папка куда возвращать файлы
BackDir:=ExpandConstant('{app}'+'\old_res_mods\'); // папка откуда брать файлы
if DirExists(BackDir) then begin
if MsgBox('Восстановить данные из бэкапа?', mbConfirmation, MB_YESNO) = IDYES then begin
if FindFirst(BackDir+'*', FindFiles) then begin
repeat
MoveFile(BackDir+ FindFiles.Name, MyDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
RemoveDir(BackDir);
end;
end;
end;
end;
end;
//--------// Бекап и удаление старых модов [Конец]  //--------//


Kashtan007 07-07-2014 15:51 2373186

Dodakaedr, спасибо огромное за помощь) Передай Sergey3695 тоже спасибо)
P.S. Пойду тестировать)

Kashtan007 07-07-2014 16:30 2373214

Dodakaedr, к сожалению не работает(
Пробовал много раз, нету ни удаления, ни бекапа(

Dodakaedr 07-07-2014 17:00 2373246

Цитата:

Цитата Kashtan007
к сожалению не работает(
Пробовал много раз, нету ни удаления, ни бекапа( »

Я у себя проверил. Работает и удаление и бекап. Что-то вы напутали у себя. Скиньте в личку ваш оригинальный скрипт с которым вы работаете.....посмотрим что не так. Попробуйте еще этот пример:
читать дальше »
Код:

[Setup]
//WizardImageFile=Images\Дизайн установщика\Приветствие.bmp
AppName=ModPackFull
AppVersion=0.9.1
//SetupIconFile=Images\Дизайн установщика\back.ico
DefaultDirName=ModPackFull
AppendDefaultDirName=no
DirExistsWarning=no

[Languages]
Name: "RU"; MessagesFile: "compiler:Languages\Russian.isl"

[ Code]
//--------// Бекап и удаление старых модов [Начало] //--------//
var
  ModCheck, BackupCheck: TNewCheckBox;
//--------// Бекап и удаление старых модов [Конец] //--------//
function MoveFile(const srcFile, destFile: PAnsiChar): Integer; external 'MoveFileA@kernel32.dll stdcall';

procedure InitializeWizard();

//--------// Бекап и удаление старых модов [Начало] //--------//
begin
  ModCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
  ModCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
  ModCheck.Parent := PageFromID(wpSelectDir).Surface;
  ModCheck.Caption:='Удалить все старые моды';
  ModCheck.left:=wizardForm.DirEdit.left;
  ModCheck.Top:=wizardForm.DirEdit.top + ScaleY(30);

  BackupCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
  BackupCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
  BackupCheck.Parent := PageFromID(wpSelectDir).Surface;
  BackupCheck.Caption:='Сохранить резервную копию старых модов';
  BackupCheck.left:=wizardForm.DirEdit.left;
  BackupCheck.Top:=ModCheck.top + ScaleY(30);
end;
//--------// Бекап и удаление старых модов [Конец] //--------//

//--------// Бекап и удаление старых модов [Начало]  //--------//

procedure CurStepChanged(CurStep: TSetupStep);
var
FindFiles: TFindRec;
i: integer;
MyFiles: array of string;
MyDir, BackDir: string;
begin
if CurStep=ssInstall then begin
if ModCheck.Checked then
begin
DelTree(ExpandConstant('{app}\old_res_mods'), True, True, True);
end;
if BackupCheck.Checked then begin
MyFiles:=['*.exe','*.package','*.precomp','*.jpg','*.txt','*.psd']; // указать файлы или маски нужные для бакупа через запятую. при указании маски '*' бакупятся все файлы с вложенными папками
MyDir:=ExpandConstant('{app}'+'\res_mods\'); //папка откуда бакупить
BackDir:=ExpandConstant('{app}'+'\old_res_mods\'); // папка куда бакупить
for i:=0 to GetArrayLength(MyFiles)-1 do
begin
if FindFirst(MyDir+MyFiles[i], FindFiles) then begin
repeat
if not DirExists(BackDir) then begin
CreateDir(BackDir);
end;
MoveFile(MyDir+ FindFiles.Name, BackDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
end;
end;
end;
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
FindFiles: TFindRec;
MyDir, BackDir: string;
begin
if CurUninstallStep = usPostUninstall then begin
MyDir:=ExpandConstant('{app}'+'\res_mods\'); //папка куда возвращать файлы
BackDir:=ExpandConstant('{app}'+'\old_res_mods\'); // папка откуда брать файлы
if DirExists(BackDir) then begin
if MsgBox('Восстановить данные из бэкапа?', mbConfirmation, MB_YESNO) = IDYES then begin
if FindFirst(BackDir+'*', FindFiles) then begin
repeat
MoveFile(BackDir+ FindFiles.Name, MyDir+FindFiles.Name);
until not FindNext(FindFiles);
FindClose(FindFiles);
RemoveDir(BackDir);
end;
end;
end;
end;
end;
//--------// Бекап и удаление старых модов [Конец]  //--------//



P.S. Если вы копипастом вставляли, то надо в строчке [ Code] удалить пробел. Вы это сделали?

saneksanek 08-07-2014 10:11 2373516

Ребят,может кто-то подсказать можно как-то решить чтобы антивирус не блокировал dll?
Можно как-то добавить сертификат подпись и вообще возможно-ли его создать и прикрутить

Nordek 08-07-2014 19:13 2373775

Цитата:

Цитата Dodakaedr
P.S. Если вы копипастом вставляли, то надо в строчке [ Code] удалить пробел. Вы это сделали? »

Dodakaedr, Чтоб не было подобного у пользователя: вариант.

В Inno Setup Compiler задумано ещё проще.
Знакомьтесь с настройками Inno Setup Compiler повнимательней:
Откройте Inno Setup Compiler
Инструменты » Настройки редактора
Перейдите во вкладку Копирование текста
Найдите: При копировании текста как UBB код, переключите на Использовать тег [Code] и нажмите ОК
На этом всё.

А дальше, копируете код который хотите вставить:
Выделяете содержимое; Жмёте правую кнопку мыши и выбираете Копировать как UBB код.

И всё, вам при вставке, даже не придётся здесь нажимать т.к при копировании код будет со всеми необходимыми тегами:
[code][Code]
[/code]


Цитата:

Цитата saneksanek
Можно как-то добавить сертификат подпись и вообще возможно-ли его создать и прикрутить »

SignTool

Dodakaedr 08-07-2014 19:24 2373783

Цитата:

Цитата Nordek
В Inno Setup Compiler задумано ещё проще.
Знакомьтесь с настройками Inno Setup Compiler повнимательней:
Откройте Inno Setup Compiler
Инструменты » Настройки редактора
Перейдите во вкладку Копирование текста
Найдите: При копировании текста как UBB код, переключите на Использовать тег [code] и нажмите ОК
На этом всё. »

Спасибо! Но в не которых случаях копируется не корректно!

Dodakaedr 08-07-2014 21:20 2373833

Подскажите как реализовать эту строку в секции [code]?
Код:

Source: "{Settings}\FSSettings,eng,reg.db"; DestDir: "{app}"; DestName: "FSSettings.db"; MinVersion: "0.0,5.0"; Check: PortableCheck and RegCheck and EngCheck; Flags: ignoreversion
P.S. Суть вопроса в том что через секцию [Files] сочетание троих кнопок (радиокнопка и два чекбокса) проверка (функция Check) не работает. Хочу узнать и попробовать как это через секцию [code] проделать...особенно извлечение с переименовыванием. Спасибо!

Все разобрался в чем был косяк, но все равно интересно реально ли такое через секцию [Code] сделать. Кто знает подскажите, пожалуйста.

Shkutu 09-07-2014 02:33 2373918

Dodakaedr, может как-то так?
читать дальше »

Код:

[Files]
Source: "{Settings}\FSSettings.eng.reg.db"; MinVersion: "0.0,5.0"; Flags: ignoreversion dontcopy

[Сode]
...
ExtractTemporaryFile('FSSettings.eng.reg.db');
if (PortableCheck and RegCheck and EngCheck) then
 FileCopy(ExpandConstant('{tmp}\FSSettings.eng.reg.db'), ExpandConstant('{app}\ FSSettings.db'), false);


Irenis 09-07-2014 12:33 2374059

Добрый день! Подскажите, в чем может быть проблема. Делала установщик одной игры. Все было отлично. Потом вышло обновление игры, я обновила её. Передела архив .bin (FreeArc-ом запаковываю). В самом скрипте изменила только версию игры. Больше ничего не трогала. Так вот, теперь во время установки, распаковка доходит до 85.9 % и дальше никак, стоит на месте. Уже несколько раз и архив .bin переделывала, и скрипт заново создавала. Ничего не помогает, доходит до 85.9 % и останавливается :( Что это может быть?

А, и игру заново переустанавливала с офсайта, результат тот же.

Kashtan007 09-07-2014 17:18 2374268

Всем привет, как в установщике сделать прозрачный фон под надписями, чтобы было видно картинку?

Заранее спасибо за ответ!

P.S. у меня установщик большого размера, как сделать так, чтобы когда открываешь его он был по центру монитора, а то получается нижняя часть прячется за панель задач.

habib2302 09-07-2014 18:10 2374300

Irenis, а в скрипте поменяла расширение файла?

Shkutu 09-07-2014 18:51 2374310

Доброго времени суток!
А нет ли в инно возможности сравнивать строки по маскам или использовать регулярные выражения? Нужно проверять, что директория, задаваемая пользователем является действительно валидной директорией (с буквой диска вначале или в форме UNC). Т е нужна реализация чего-то типа стандартной проверки инно при задании директории установки. Может кто помочь советом/кодом?:)

Irenis 09-07-2014 21:53 2374404

Цитата:

Цитата habib2302
Irenis, а в скрипте поменяла расширение файла? »

Нет, расширение не меняла, так как это не требовалось. Там и так было bin. Тем более, если бы что то было не так с расширением в скрипте, то вообще ничего не распаковывалось, а выдало ошибку. А тут вроде все нормально, распаковывается, но на 85.9 % останавливается и дальше никак, сколько не жди.

Shift85 09-07-2014 21:56 2374407

Цитата:

Цитата Irenis
ничего не распаковывалось, а выдало ошибку »

Irenis, Каким методом упакован архив и через что?

Цитата:

Цитата Kashtan007
как в установщике сделать прозрачный фон под надписями, »

Kashtan007,

Код:

Transparent:=True;

Irenis 09-07-2014 22:17 2374417

Цитата:

Цитата Shift85
Каким методом упакован архив и через что? »

Ну я пока только одним методом все делала, FreeArc-ом. Просто добавляю файлы игры в архив, переименовываю в bin, сжатие ставлю либо нормальное, либо высокое, и все, больше ничего не трогаю, нажимаю ОК. Других методов, честно говоря не знаю, так как до этого никаких проблем не возникало.

Shift85 09-07-2014 22:27 2374421

Irenis, Попробуйте сжать и распаковать вот небольшой примерчик.

читать дальше »
http://rghost.ru/56811699


1- В папку packeddata закиньте файлы какие необходимо сжать.
2- Запустите lzma.bat.
3- В папке data получите готовый архив.

Irenis 09-07-2014 22:37 2374429

Shift85, спасибо, попробую))

Kashtan007 09-07-2014 22:44 2374434

Shift85, спасибо большое), а куда эту строку засунуть?

Shift85 09-07-2014 23:17 2374451

Цитата:

Цитата Kashtan007
куда эту строку засунуть? »

Kashtan007, Пример.

Код:

FreeSpaceLabel:=TLabel.Create(WizardForm);
with FreeSpaceLabel do begin
 
  Transparent:=True;

end;


Kashtan007 09-07-2014 23:53 2374474

Shift85, прости что достаю, но я никак не пойму куда эту запихнуть? Уже везде в коде пробовал вставлять... одни ошибки.

Shift85 09-07-2014 23:58 2374478

Kashtan007, Код скрипта покажи.

Johny777 10-07-2014 13:21 2374670

Shkutu,
Цитата:

Цитата Shkutu
Нужно проверять, что директория, задаваемая пользователем является действительно валидной директорией (с буквой диска вначале или в форме UNC)»

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Shkutu 10-07-2014 14:24 2374698

Johny777, спасибо, похоже то, что надо. А может еще подскажете, как этим правильно пользоваться? Там просто параметр - это вроде указатель. Пробовала объявлять функцию как
Код:

function PathFileExists(Path: pansichar): boolean;
    external 'PathFileExists@Shlwapi.dll stdcall delayload';

В этом случае ругается на "could not call proc". Обычных указателей типа pointer в инно нет, насколько я знаю, и просто запихать в параметр строку (хотя по факту она и указатель), тоже нельзя.

Johny777 10-07-2014 15:08 2374720

Shkutu, И правильно ругается. Т.к. в библиотеке нет имени функции под названием "PathFileExists".
дело в том что все WINAPI функции и процедуры где во входных аргументах есть "строка" функция задаётся двумя типами:
имя_функцииW - сокр. Wide - стока символов в который каждый символ лежит в Word-е
имя_функцииA - сокр. Ansi - стока символов в который каждый символ лежит в Byte-е
PWideChar, PAnsiChar - типизированный указатель на первый байт строки.
сама по себе типизация - это приблуда языков для упрощения адресной арифметики,
скажем адрес первого байта 1000000 и он лежит в переменной типа типизированного указателя P: PWideChar
получаешь значение по адресу в P так: P^
чтоб получить след. символ нужно прибавить к P единицу ( P + 1 ). При этом числовое значение указателя становится 1000002 тк SizeOf(WideChar) = 2 байта,
Те компилятор знает благодаря типизации на сколько байт нужно сместиться
можно и так NativeUInt(P) + SizeOf(WideChar)

в PAnsiChar смещение (или шаг) на 1 байт соответственно


при это String это самый обычный указатель
попробуй если интересно в нормальном языке сделать так:

читать дальше »
Код:

program Project3;

{$APPTYPE CONSOLE}

uses
   
SysUtils;

var
   
s: AnsiString = 'abc';

begin
   
WriteLn( NativeUInt( s ), #32#32, NativeUInt( PAnsiChar(s) ), #32#32, NativeUInt( @s[1] ) );
    WriteLn( PAnsiChar( s )^, #32#32, s[1] );

    ReadLn;
end.




и ты увидишь что и адреса и символы равны :)

если мне память не изменяет, то в Ansi версии инно все String по дефолту AnsiString , а в юникодной версии WideString
и так как мы выяснили что (Wide/Ansi)String = P(Wide/Ansi)Char = Pointer, то канает следующее:

читать дальше »
Код:

#ifdef UNICODE
   
function PathFileExists( pszPath: String ): BOOL;
      external 'PathFileExistsW@Shlwapi.dll stdcall delayload';
#else
   
function PathFileExists( pszPath: String ): BOOL;
      external 'PathFileExistsA@Shlwapi.dll stdcall delayload';
#endif

procedure InitializeWizard();
begin
    if
PathFileExists( 'C:\Program Files (x86)\OpenAL' ) then
       
MsgBox('Ok', mbInformation, MB_OK)
    else
       
MsgBox('Error', mbInformation, MB_OK);
end;


Irenis 10-07-2014 15:36 2374735

Цитата:

Цитата Shift85
1- В папку packeddata закиньте файлы какие необходимо сжать.
2- Запустите lzma.bat.
3- В папке data получите готовый архив. »

Еще раз спасибо, получилось :) Теперь при распаковке не зависает))
А можно поинтересоваться, как это вы так сделали? Как оно работает?

Nordek 10-07-2014 16:37 2374750

Irenis, Документация на FreeArc 0.40

Shkutu 10-07-2014 16:59 2374760

Johny777, спасибо за подробные объяснения.
Однако, я видимо не совсем правильно поняла значение слова "valid", когда читала описании функций. Ибо оказалось, что эти функции работают для существующих папок и файлов :(, с которыми как раз проблем вообще нет (если папка существует, очевидно, что ее имя валидно))
Мне же нужно проверять валидность как раз в случае, если такого пути не существует

Kashtan007 10-07-2014 17:25 2374775

Всем привет, как в установщике сделать прозрачный фон под надписями, чтобы было видно картинку?


P.S. У меня установщик большого размера, как сделать так, чтобы когда открываешь его он был по центру монитора, а то получается нижняя часть прячется за панель задач.

P.S.S. Как сделать иконку включения\отключения музыки поверх BitMapImage? Т.е. когда я использую BitMapImage то иконки включения\отключения музыки прячется по ним, как сделать эту иконку поверх всего.

Заранее спасибо за помощь!

Shift85 10-07-2014 18:06 2374802

Вложений: 1
Kashtan007, :butcher: :moderator :offtopic:

Вот юзай.

Kashtan007 10-07-2014 18:23 2374814

Shift85, спасибо). Это к какому из вопросов?

Shift85 10-07-2014 18:31 2374822

Цитата:

Цитата Kashtan007
Это к какому из вопросов? »

Цитата:

Цитата Kashtan007
Всем привет, как в установщике сделать прозрачный фон под надписями, чтобы было видно картинку? »


Johny777 10-07-2014 18:39 2374828

Shkutu, ну тогда нужно писать свою проверку
типа первый символ - буква диска, второй - двоеточие итд
путь не должен содержать запрещённых символов:
< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
ещё думаю нужно учесть сетевые пути
и фиг знает что ещё
прости, но у меня сейчас сессия и я не могу писать даже такую небольшую функцию. Попробуй сама! Ok?

UPD:
вот тут есть сишная имплементация подобной проверки
Изучай :)
http://codereview.stackexchange.com/...-your-critique

Shkutu 10-07-2014 19:29 2374840

Johny777, собственно уже пишу.:)) Пока сделала чисто в инно, парингом как раз на запрещенные символы и буквы диска проверяю. Но думаю все-таки, что может лучше свою библиотеку и регулярку там заюзать)
А за пример спасибо, посмотрю:)
З.Ы. Удачи на сессии! :)

Nordek 10-07-2014 19:41 2374845

Kashtan007, В юникодной версии Inno можно в редакторе форм задействовать прозрачность.

Пример (На ANSI код работать не будет):
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Languages]
Name: default; MessagesFile: compiler:Default.isl

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked


[Icons]
Name: {group}\My Program; Filename: {app}\MyProg; Flags: foldershortcut
Name: {commondesktop}\My Program; Filename: {app}\MyProg; Tasks: desktopicon; Flags: foldershortcut

[Run]
Filename: {uninstallexe}; Description: Деинсталлировать Тест; Flags: nowait postinstall skipifsilent


[Code]
procedure InitializeWizard();
begin
 
WizardForm.WizardBitmapImage.Width := ScaleX(500);
  WizardForm.WelcomeLabel1.Transparent := True;
  WizardForm.WelcomeLabel2.Transparent := True;

  WizardForm.WizardSmallBitmapImage.Left := ScaleX(0);
  WizardForm.WizardSmallBitmapImage.Width := ScaleX(495);
  WizardForm.PageDescriptionLabel.Transparent := True;
  WizardForm.PageNameLabel.Transparent := True;

  WizardForm.WizardBitmapImage2.Width := ScaleX(500);
  WizardForm.FinishedLabel.Transparent := True;
  WizardForm.FinishedHeadingLabel.Transparent := True;
end;


El Sanchez 10-07-2014 21:39 2374888

Цитата:

Цитата Shkutu
Пока сделала чисто в инно, парингом как раз на запрещенные символы и буквы диска проверяю. Но думаю все-таки, что может лучше свою библиотеку и регулярку там заюзать) »

Shkutu, PathSearchAndQualify.

saneksanek 11-07-2014 00:49 2374960

del

Kashtan007 11-07-2014 01:20 2374980

Ребята, что здесь нужно изменить, чтобы добавить стиль на Inno Setup Unicode?
На Ansi работает с этим кодом:
Код:

#ifdef UNICODE
  #define A "W"
  #define SKinDll    "ISSkin.dll"
#else
  #define A "A"
  #define SKinDll    "ISSkin.dll"
#endif

#define SKin    "Bigmusic.cjstyles"
#define SKinIni "NormalNormal.ini"

Как сделать, чтобы работало на юникоде.

P.S. У меня установщик большого размера, как сделать так, чтобы когда открываешь его он был по центру монитора, а то получается нижняя часть прячется за панель задач.

P.S.S. Как сделать иконку включения\отключения музыки поверх BitMapImage? Т.е. когда я использую BitMapImage то иконки включения\отключения музыки прячется по ним, как сделать эту иконку поверх всего.

Заранее спасибо за помощь!

Nordek 11-07-2014 06:47 2375028

Цитата:

Цитата Kashtan007
Как сделать, чтобы работало на юникоде. »

Это вопрос? Если спрашиваете, ставьте вопросительный знак.
Пример

Цитата:

Цитата Kashtan007
У меня установщик большого размера, как сделать так, чтобы когда открываешь его он был по центру монитора »

Задайте значение в Position.
Пример:
Код:

[Code]
procedure InitializeWizard();
begin
  with
WizardForm do
  begin
   
Position := poScreenCenter;
    ClientHeight := ScaleY(497);
    ClientWidth := ScaleX(856);
  end;
end;

Цитата:

Цитата Kashtan007
Как сделать иконку включения\отключения музыки поверх BitMapImage? »

Задайте значение в Parent
Пример:
Код:

[Code]
var
 
NewButton1: TNewButton;

procedure InitializeWizard();
begin
 
NewButton1 := TNewButton.Create(WizardForm);
  with NewButton1 do
  begin
   
Parent := WizardForm;
    Left := ScaleX(24);
    Top := ScaleY(325);
    Width := ScaleX(75);
    Height := ScaleY(25);
    Caption := 'NewButton1';
  end;
end;


boss911 11-07-2014 11:13 2375093

Пытаюсь реализовать следующие:
Код:

[UninstallRun]
Filename: {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{7A3C7E05-EE37-47D6-99E1-2EB05A3DA3F7%7d,ModifyPath}; Flags: skipifdoesntexist

Если "ModifyPath"="MyProg.exe", то MyProg.exe запускается. А вот если "ModifyPath"="MyProg.exe /parameter", то приложение не запускается. Как быть? С кавычками игрался, может что-то не правильно делал, не получается. Хелп, плиз.

Kashtan007 11-07-2014 11:25 2375100

Nordek, спасибо большое за помощь. Все работает!)

saneksanek 11-07-2014 13:20 2375157

Можно-ли как-то добавить в басс стартовую громкость?
То есть чтобы играло при запуске не на все 100% а только на 10% к примеру,порылся в модулях нечего не нашел.

Nordek 11-07-2014 13:44 2375170

boss911,
Код:

[UninstallRun]
Filename: {reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{7A3C7E05-EE37-47D6-99E1-2EB05A3DA3F7%7d,ModifyPath}; Parameters: /SILENT; Flags: shellexec


Kashtan007 11-07-2014 13:54 2375174

Еще возник такой вопрос, я использовал Transparent для того чтобы сделать текст без фона, но теперь я не могу изменить цвет шрифта и размер. Пробовал уже и через код и через редактор форм, но цвет остается черный, но когда я возвращаю фон то цвет текста меняется. Можно ли как-то сделать текст другого цвета? Заранее спасибо за помощь!

P.S. Как в юникоде сделать кликабельные иконки? например: на нижней панели есть значок ютуба на него нажимаешь и открывается канал на ютубе. А анси работало это:
Код:

begin
  ExtractTemporaryFile('Лого.bmp')

  BtnPanel:=TPanel.Create(WizardForm)
  with BtnPanel do begin
    Left:=562
    Top:=0
    Width:=78
    Height:=43
    Cursor:=crHand
    OnClick:=@logoOnClick
    Parent:=WizardForm;
  end
  BtnImage:=TBitmapImage.Create(WizardForm)
  with BtnImage do begin
    AutoSize:=True;
    Enabled:=False;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Лого.bmp')
    Parent:=BtnPanel
  end
end;

На юникоде этот способ не работает(
Заранее спасибо за помощь!

boss911 11-07-2014 14:20 2375188

Nordek

Если бы это было так просто, я бы так и поступил. Мне важно запустить приложение так, как это прописано в параметре "ModifyPath" в вышеуказанной ветке реестра, а там может быть что угодно, чего я предусмотреть (нужный параметр) не могу. Сдается мне, что константа {reg} слегка убога, не умеет читать строку (значение параметра) с пробелами. Может и умеет, но я не знаю как, собственно и как по-другому пояснить эту ситуацию. Видимо без [code] тут не обойтись.

Shkutu 11-07-2014 14:27 2375193

El Sanchez, спасибо, похоже на то, что нужно. Но такой момент есть. Для того, чтобы узнать, что вводимый путь был корректным, его можно сравнить с тем, что получается в результате функции и кладется во 2й параметр. Однако, для корректной работы функции, надо чтобы размер второй строки был больше длины изначальной. В итоге получается, что 2 одинаковые по содержанию (текстовому) строки, по факту отличаются и сравнение не проходит. Не подскажете, что с этим можно сделать?

Dodakaedr 12-07-2014 18:45 2375733

Kashtan007, Скрипт покажите!

Nordek 12-07-2014 19:55 2375782

Цитата:

Цитата Kashtan007
Как в юникоде сделать кликабельные иконки? »

Не буду я возиться с вашим обрубком.

Выбирайте какой больше нравится:

Код:

#define Bitmap "Logo.bmp"

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Files]
Source: {#Bitmap}; Flags: dontcopy solidbreak

[Code]
var
 
BitmapImage1: TBitmapImage;
  EC: Integer;

procedure Bitmap1Click(Sender: TObject); forward;

procedure InitializeWizard();
begin
 
BitmapImage1 := TBitmapImage.Create(WizardForm);
  with BitmapImage1 do
  begin
   
Parent := WizardForm;
    Left := ScaleX(24);
    Top := ScaleY(320);
    Width := ScaleX(105);
    Height := ScaleY(33);
    Cursor := crHand;
    OnClick := @Bitmap1Click;
    ExtractTemporaryFile('{#Bitmap}');
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\{#Bitmap}'));
  end;
end;

procedure Bitmap1Click(Sender: TObject);
begin
 
ShellExec('open', 'http://forum.oszone.net/', '', '', SW_SHOWNORMAL, ewNoWait, EC);
end;


Код:

#define Bitmap "Logo.bmp"

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Files]
Source: {#Bitmap}; Flags: dontcopy solidbreak

[Code]
var
 
Panel1: TPanel;
  BitmapImage1: TBitmapImage;
  EC: Integer;

procedure Panel1Click(Sender: TObject); forward;

procedure InitializeWizard();
begin
 
Panel1 := TPanel.Create(WizardForm);
  with Panel1 do
  begin
   
Parent := WizardForm;
    Left := ScaleX(16);
    Top := ScaleY(318);
    Width := ScaleX(185);
    Height := ScaleY(41);
  end;

  BitmapImage1 := TBitmapImage.Create(WizardForm);
  with BitmapImage1 do
  begin
   
Parent := Panel1;
    Left := ScaleX(4);
    Top := ScaleY(4);
    Width := ScaleX(178);
    Height := ScaleY(34);
    Cursor := crHand;
    OnClick := @Panel1Click;
    ExtractTemporaryFile('{#Bitmap}');
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\{#Bitmap}'));
  end;
end;

procedure Panel1Click(Sender: TObject);
begin
 
ShellExec('open', 'http://forum.oszone.net/', '', '', SW_SHOWNORMAL, ewNoWait, EC);
end;


Код работает на обеих версиях.

Kashtan007 13-07-2014 17:53 2376051

Доброго времени суток, наткнулся на такую проблему.
Как сделать эти 2 строки прозрачные?

В редакторе форм они не отображаются... Пытался через код: ModCheck.Transparent := True;, выдает ошибку (Версия Unicode). Как можно по другому сделать эти 2 строки прозрачные? Заранее спасибо за ответ!

P.S. Dodakaedr, Nordek, Shift85, habib2302. Большое спасибо за помощь! Благодаря вам я наконец-то сделал практически все, что хотел в своем установщике)

Shift85 13-07-2014 18:10 2376059

Цитата:

Цитата Kashtan007
Как сделать эти 2 строки прозрачные? »

Пример.

Код:

SoftLabel:= TLabel.Create(WizardForm);
  with SoftLabel do begin
    Parent:=WizardForm;
    SetBounds(ScaleX(280), ScaleY(316), ScaleX(450), ScaleY(17));
    AutoSize:=False
    WordWrap:=True
    Transparent:=True
    Font.Name:= 'Tahoma';
    Font.Size:= 7;
    Font.Color:= clGray;
    Font.Style := [fsBold];
    OnClick:= @SoftLabelClick;
    Caption:= ExpandConstant('{cm:SoftTask}');
  end;

Результат.

Kashtan007 13-07-2014 18:15 2376064

Shift85, спасибо, но так и не получилось применить. Выдает ошибку.
Вот эти 2 строки, которые я хочу сделать прозрачными:
Код:

begin
  ModCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
  ModCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
  ModCheck.Parent := PageFromID(wpSelectDir).Surface;
  ModCheck.Caption:='Удалить все старые моды';
  ModCheck.left:=wizardForm.DirEdit.left;
  ModCheck.Top:=wizardForm.DirEdit.top + ScaleY(30);

  BackupCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
  BackupCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
  BackupCheck.Parent := PageFromID(wpSelectDir).Surface;
  BackupCheck.Caption:='Сохранить резервную копию старых модов';
  BackupCheck.left:=wizardForm.DirEdit.left;
  BackupCheck.Top:=ModCheck.top + ScaleY(30);
end;


habib2302 13-07-2014 22:04 2376148

Kashtan007, а если так
Код:

begin
  ModCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
  ModCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
  ModCheck.Parent := PageFromID(wpSelectDir).Surface;
  ModCheck.Caption:='Удалить все старые моды';
  ModCheck.left:=wizardForm.DirEdit.left;
  ModCheck.Top:=wizardForm.DirEdit.top + ScaleY(30);
  ModCheck.Transparent:=True

  BackupCheck:= TNewCheckBox.Create(PageFromID(wpSelectDir));
  BackupCheck.Width := PageFromID(wpSelectDir).SurfaceWidth;
  BackupCheck.Parent := PageFromID(wpSelectDir).Surface;
  BackupCheck.Caption:='Сохранить резервную копию старых модов';
  BackupCheck.left:=wizardForm.DirEdit.left;
  BackupCheck.Top:=ModCheck.top + ScaleY(30);
  BackupCheck.Transparent:=True
end;


Kashtan007 13-07-2014 22:14 2376152

habib2302, пробовал уже так(
Ошибку выдает, хотя компилирую на юникоде

Shift85 13-07-2014 22:18 2376154

Цитата:

Цитата Kashtan007
Ошибку выдает, хотя компилирую на юникоде »

Kashtan007, Попробуй на анси.

habib2302 13-07-2014 22:18 2376155

Kashtan007, а если просто так
Код:

Transparent:=True
ну или юзать TransparentStatic
http://forum.oszone.net/post-2374802-1103.html

Kashtan007 13-07-2014 22:34 2376161

Shift85, на анси та же ошибка.

Shift85 13-07-2014 22:39 2376165

Kashtan007, Тогда попробуй переделать. Заменить чекбоксы на лейблы. Как у меня в примере выше.

Nordek 14-07-2014 01:24 2376210

Цитата:

Цитата Kashtan007
но теперь я не могу изменить цвет шрифта и размер. »

Как вариант:
читать дальше »
Код:

#define Bitmap2 "SmallImage.bmp"

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Files]
Source: {#Bitmap2}; Flags: dontcopy solidbreak

[Code]
var
 
Panel1: TPanel;
  BitmapImage1: TBitmapImage;
  Label1: TLabel;
  Label2: TLabel;

procedure InitializeWizard();
begin
 
WizardForm.MainPanel.Hide;

  Panel1 := TPanel.Create(WizardForm);
  with Panel1 do
  begin
   
Parent := WizardForm.InnerPage;
    Left := ScaleX(0);
    Top := ScaleY(0);
    Width := ScaleX(497);
    Height := ScaleY(59);
  end;

  BitmapImage1 := TBitmapImage.Create(WizardForm);
  with BitmapImage1 do
  begin
   
Parent := Panel1;
    Left := ScaleX(0);
    Top := ScaleY(0);
    Width := ScaleX(497);
    Height := ScaleY(57);
    ExtractTemporaryFile('{#Bitmap2}');
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\{#Bitmap2}'));
  end;

  Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
   
Font.Color := clRed;
    Font.Size := 12;
    Font.Style := [fsBold];
    Parent := Panel1;
    Transparent := True;
    Left := ScaleX(24);
    Top := ScaleY(10);
    Width := ScaleX(405);
    Height := ScaleY(14);
  end;

  Label2 := TLabel.Create(WizardForm);
  with Label2 do
  begin
   
Font.Color := clBlue;
    Font.Size := 12;
    Parent := Panel1;
    Transparent := True;
    Left := ScaleX(40);
    Top := ScaleY(26);
    Width := ScaleX(389);
    Height := ScaleY(29);
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
 
Label1.Caption:=WizardForm.PageNameLabel.Caption
  Label2.Caption:=WizardForm.PageDescriptionLabel.Caption
end;


El Sanchez 14-07-2014 12:33 2376315

Цитата:

Цитата Shkutu
похоже на то, что нужно »

Shkutu, шлак это, а не функция, как оказалось.
Цитата:

Цитата Shkutu
Для того, чтобы узнать, что вводимый путь был корректным, его можно сравнить с тем, что получается в результате функции и кладется во 2й параметр.»

Shkutu, сравнивать бестолку, например, допустимый путь С:\\\\\\test функция возвратит как C:\test.
Цитата:

Цитата Shkutu
для корректной работы функции, надо чтобы размер второй строки был больше длины изначальной. »

Shkutu, размер буфера в 260 для ANSI, 32767 для Unicode, лишнее потом отрезать.
Но, как я уже сказал, функция не годится, слишком корявый у нее принцип работы, тут нужно парсить путь с помощью регулярных выражений. У меня пока не получилось написать регулярку, учитывающую все варианты, а существующие решения далеки от идеала.

Shkutu 14-07-2014 17:28 2376401

El Sanchez, видимо недостаток образования, но не знала, что С:\\\\\\test - это корректный путь. Думала, функция как раз убирает лишние слеши и точки/запятые. На недопустимые символы, типа *,<,> и т д там проверки нет. Впрочем в комментариях сказано, что среди Вин Апи функций вообще нет ни одной для валидации пути, вводимого пользователем. Так что видимо и правда из вариантов только свою делать.
Цитата:

Цитата El Sanchez
написать регулярку, учитывающую все варианты »

Не уверена, что такое в принципе бывает. :) Там же многое зависит от системы и фиг знает чего еще.
Цитата:

Цитата El Sanchez
лишнее потом отрезать »

А вот про это можно подробнее? Или банальный copy должен прокатить?

El Sanchez 14-07-2014 19:55 2376472

Цитата:

Цитата Shkutu
А вот про это можно подробнее? Или банальный copy должен прокатить? »

Shkutu, имеется в виду, что буфер по максимуму в 260 символов, а PathSearchAndQualify заполнит его не весь (не все ж пути такие длинные), хвост нужно будет убирать. Буфер лучше всего создавать с помощью StringOfChar, хвост из нулевых символов убрать Trim-ом. Если бы PathSearchAndQualify работала по-человечески, то задачу можно было бы решить вот так:
Код:

#define A = (Defined UNICODE) ? "W" : "A"

function PathSearchAndQualify(pcszPath: String; pszFullyQualifiedPath: String; cchFullyQualifiedPath: UINT): BOOL; external 'PathSearchAndQualify{#A}@shlwapi.dll stdcall';

////////////////////////////////////////////////////////////////////////////////////////
function IsValidFileName(const FileName: String; var CorrectFileName: String): Boolean;
begin
   
CorrectFileName := StringOfChar(#0, 260);
    Result := PathSearchAndQualify(FileName, CorrectFileName, Length(CorrectFileName));
    CorrectFileName := Trim(CorrectFileName);
end;

/////////////////////////////
procedure InitializeWizard();
var
   
s: String;
begin
    if
IsValidFileName('C:\\\\\test', s) then
       
MsgBox(s, mbInformation, MB_OK);
end;


liked 15-07-2014 00:24 2376563

Народ спасайте помогите прикрутить страницу компонентов к этому скрипту с выбором компонентов и отображение картинки и описание компонента

Скрипт - Ссылка

Скрипт (примера компонентов) - Ссылка

Скриншот примерно как должна выглядит страницы https://yadi.sk/i/l8EtFfw3WcADH


Заранее большое спасибо, мучаюсь очень долго не могу понять как правильно прописать вывод компонентов страницы

Shkutu 15-07-2014 12:54 2376728

El Sanchez, пробовала тримить, хвост не убирается, ни если длину строки setlength'ом задавать, ни с помощью StringOfChar.
А вот еще вопрос. Можно как-то на страницу компонентов к этим самым компонентам хинты прикрутить?

El Sanchez 15-07-2014 17:10 2376855

Цитата:

Цитата Shkutu
пробовала тримить, хвост не убирается »

Shkutu, все там убирается, не так что-то проверяете.
Цитата:

Цитата Shkutu
ни если длину строки setlength'ом задавать »

Shkutu, SetLength вообще не рекомендую для выделения буфера, ибо строка будет инициализирована в свободном участке памяти, полном всякого мусора.
Цитата:

Цитата Shkutu
Можно как-то на страницу компонентов к этим самым компонентам хинты прикрутить? »

Shkutu, для ComponentsList установить свойство ShowHint в True, в обработчике OnItemMouseMove свойству Hint уже задавать значения в зависимости от параметра Index обработчика.

Shkutu 15-07-2014 17:57 2376872

Цитата:

Цитата El Sanchez
все там убирается, не так что-то проверяете »

Ну например вот так:
читать дальше »
Код:

    function PathSearchAndQualify(pszPath, qPath: String; qPbuf:integer): BOOL;
      external 'PathSearchAndQualifyA@Shlwapi.dll stdcall delayload';

procedure InitializeWizard;
var s:string;
i:integer;
begin
  s:=StringOfChar(#0,256);
  PathSearchAndQualify('d:\\sss', s, length(s));
  MsgBox(inttostr(length(s)), mbInformation, MB_OK);
  Trim(s);
  MsgBox(inttostr(length(s)), mbInformation, MB_OK);
end;

Оба раза выдаст 260, можете проверить.
Цитата:

Цитата El Sanchez
обработчике OnItemMouseMove »

Вот вообще не нашла такого обработчика :( Может, это в какой-то расширенной версии только есть? Или он есть и его просто в описании нет?

El Sanchez 15-07-2014 19:53 2376938

Цитата:

Цитата Shkutu
Оба раза выдаст 260, можете проверить. »

Shkutu, вы же результат от Trim ничему не присваиваете. Должно быть s := Trim(s)
Цитата:

Цитата Shkutu
Вот вообще не нашла такого обработчика Может, это в какой-то расширенной версии только есть? »

Shkutu, да, в расширенной есть.

Nordek 16-07-2014 22:10 2377356

habib2302,
Код:

[Registry]
Root: HKLM; SubKey: SOFTWARE\Classes\SystemFileAssociations\image; ValueType: string; ValueName: TitleInfo; ValueData: prop:Dimensions; Flags: uninsdeletevalue


Irenis 17-07-2014 13:30 2377523

Добрый день! Подскажите пожалуйста. Вот создала я установщик. Но мне нужно, чтобы этот установщик был в формате iso. Как это сделать попроще? Скачать любую программу для создания образов, закинуть туда файлы установщика и создать образ? А потом для установки нужно будет просто как то размонтировать этот образ и установить игру, как обычно? Или же я неправильно понимаю весь процесс? Если все верно, то какой программой лучше создавать этот образ iso? Спасибо :)

Dima2009 17-07-2014 15:41 2377571

Вложений: 1
Всем доброго дня или вечера!
Подскажите пожалуйста как написать код деинсталлятора чтобы при удаление было так

Shift85 17-07-2014 16:13 2377581

Цитата:

Цитата Irenis
какой программой лучше создавать этот образ iso? »

Irenis, Можно UltraISO например. :)

читать дальше »
http://skesov.ru/kak-sozdat-obraz-s-pomoshhyu-programmyi-ultraiso/

Irenis 17-07-2014 16:30 2377588

Цитата:

Цитата Shift85
Можно UltraISO например. »

Уже попробовала, как раз этой программкой :) Вроде бы все получилось. Спасибо :)

AlekseyPopovv 17-07-2014 17:20 2377608

Ребята помогите со скриптом. Как всё таки сделать что бы путь указанный не менялся при выборе другой папки? Я имею в виду Installer и Portable в одном файле.

saneksanek 17-07-2014 19:54 2377680

AlekseyPopovv, Если вас вообще правильно понял
Код:

[Setup]
AppendDefaultDirName=false


habib2302 18-07-2014 16:47 2378043

Всем привет. Помогите исправить тупую ошибку которая возникает не по каким причинам.

Проверил наличие файлов и они там есть. Параметры запуска тоже правильно ввел.

Shift85 18-07-2014 17:02 2378047

habib2302, Ботвой походу пользуешься да. :)

habib2302 18-07-2014 17:04 2378048

Shift85, да. а что?

Shift85 18-07-2014 17:19 2378059

Цитата:

Цитата habib2302
да. а что? »

habib2302, Походу с ботвой какие то проблемы у самого такая же ошибка.
Нужно без ботвы попробовать.

Habetdin 18-07-2014 17:22 2378060

habib2302, нельзя напрямую запускать msi-файл, нужно запускать
Код:

msiexec.exe /i файл.msi
Либо использовать shellexec :)

Nordek 18-07-2014 17:23 2378061

Вложений: 1
Цитата:

Цитата Irenis
Но мне нужно, чтобы этот установщик был в формате iso. Как это сделать попроще? »

Так.

Shift85 18-07-2014 17:31 2378066

habib2302,
Цитата:

Цитата Habetdin
Либо использовать shellexec »

Пример

Код:

function InitializeSetup(): Boolean;
var ErrorCode : Integer;

begin
ShellExec('', ExpandConstant('{src}\Redist\PhysX.msi'),'/qn', '', SW_SHOW, ewWaitUntilTerminated, ErrorCode);
Result:= True;
end;


habib2302 18-07-2014 17:38 2378070

Habetdin, а сейчас что хочет

Скрипт

Код:

; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "Java SE Runtime Environment"
#define MyAppVersion "7.0.65"
#define MyAppURL "https://href.li/?http://www.java.com/en/about/"
#include "WinTB.iss"
#include "botva2.iss"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={tmp}
DefaultGroupName={#MyAppName}
AllowNoIcons=true
OutputBaseFilename={#MyAppName} {#MyAppVersion} Final RePack by Xabib
SetupIconFile=ico.ico
Compression=lzma2/Ultra64
SolidCompression=true
InternalCompressLevel=Ultra64
DiskSpanning=false
DiskSliceSize=736000000
ShowLanguageDialog=yes
SlicesPerDisk=4
RawDataResource=Botva:botva2.dll|b2p:b2p.dll|Logo:logo.png|bPic:bPic.png|LiPic:LiPic.png|aPic:aPic.png
AppModifyPath={app}
VersionInfoProductName={#MyAppName}
DirExistsWarning=no
DisableReadyPage=true
AppID={#MyAppName} by Xabib
VersionInfoDescription={#MyAppName} RePack by Xabib
AppCopyright=Xabib © 2014
VersionInfoVersion={#MyAppVersion}
VersionInfoProductVersion={#MyAppVersion}
VersionInfoCopyright=Xabib © 2014
DisableFinishedPage=false
UninstallDisplayName={#MyAppName}
ComponentsListTVStyle=true
ShowComponentSizes=false
Uninstallable=false
DisableProgramGroupPage=yes
CreateAppDir=true
DisableDirPage=yes

[Languages]
Name: "Russian"; MessagesFile: "Russian.isl"

[Files]
;Файлы распаковываемые в папку с игрой. Необходимы для деинсталлятора;
Source: WinTB.dll; Flags: dontcopy;
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов
Source: x86\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall; Check: "not Is64BitInstallMode";
Source: x64\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs uninsneveruninstall; Check: Is64BitInstallMode;

[Run]
Filename: msiexec.exe; Parameters: /i jre1.7.0_65.msi; StatusMsg: "Установка {#MyAppName}...";

[Code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
///////////////////////////////////Относится к лого и изображениям мастера
  RT_RCDATA            = 10;
LOAD_LIBRARY_AS_DATAFILE = $2;

var
///////////////////////////////////Лого и изображения
 lPLogo, bPicHandle, bPicHandle2, lPicHandle: THandle;
 BtnImage: TBitmapImage;
///////////////////////////////////////////
 iInitialize: Boolean;


///////////////////////////////////Ресурсы(относится к лого и изображениям мастера)
function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
  lResStream: TResourceStream;
begin
  lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
  try
    lResStream.SaveToFile(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  finally
  lResStream.Free;
  Result := FileExists(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  end;
end;

function OnShouldSkipPage(Sender: TWizardPage): Boolean;
begin
    if WizardForm.ComponentsList.Items.Count > 0 then WizardForm.Tag:= 1; // отображаются страницы выбора папки и компонентов
end;



procedure InitializeWizard;
begin
PageFromID(wpSelectDir).OnShouldSkipPage:= @OnShouldSkipPage
  with WizardForm do
  begin

///////////////////////////////////Логотип и изображения мастера
    iInitialize := True;
    if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
    begin
///////////////////////////////////Изображения
      bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
      WizardBitmapImage.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(WelcomePage.Handle);

      bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
      WizardBitmapImage2.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(FinishedPage.Handle);

      lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
      WizardSmallBitmapImage.Hide;
      DiskSpaceLabel.Hide;
      ComponentsDiskSpaceLabel.Hide;
      ImgSetVisibility(lPicHandle, True);
      ImgApplyChanges(MainPanel.Handle);
////////////////////////////////////////////

///////////////////////////////////Логотип

      lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
      ImgApplyChanges(WizardForm.Handle);
    end;

///////////////////////////////////WinTB
    ExtractTemporaryFile('WinTB.dll');
    SetTaskBarProgressValue(0, 60);
    SetTaskBarProgressState(0, TBPF_ERROR);
    TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
//////////////////////////////////////

    with TLabel.Create(WizardForm) do
    begin
      Parent:=WizardForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
    end;
  end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
  wpWelcome:
  begin
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
  end;
 end;

procedure DeinitializeSetup();
begin
  if iInitialize then
  begin
    gdipShutdown;
    TaskBarDestroy;
  end;
end;


Habetdin 19-07-2014 00:25 2378219

habib2302, msiexec не находит msi-файл. Если честно, то я тоже не вижу где он распаковывается в скрипте :)
Вот пример из базы знаний Inno Setup, в Run указан полный путь к файлу (с кавычками на случай наличия пробелов в пути) и распаковкой в секции Files:
Код:

[Files]
Source: "Your-MSI-File.msi"; DestDir: "{tmp}"

[Run]
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\Your-MSI-File.msi"""


Dinvin4ester 19-07-2014 02:15 2378245

Ребята,подскажите чтоб инсталлятор ставил в стим что нужно прописать ?

Habetdin 19-07-2014 21:59 2378604

Dinvin4ester, для большинства игр достаточно папки игры в папке %steamapps%\common и файла appmanifest_%GameID%.acf в папке %steamapps%.

Правда для облегчения первого запуска можно прописать компоненты в ветке реестра HKLM\SOFTWARE\Valve\Steam\Apps\%GameID% (как - зависит от игры, лучше экспортировать ветку) - например, DirectX и библиотеки Visual C++, которые и так почти с каждой игрой в стиме идут :not-me:

%GameID% - ID игры в магазине стим. %steamapps% по умолчанию - параметр InstallPath из HKLM\SOFTWARE\Valve\Steam + "\steamapps".

Dodakaedr 21-07-2014 17:23 2379381

Можете кто-нибудь подсказать? В данном куске секции [Registry] есть чековые проверки RUPTracedRegExclExists, RUPJFCExcludeExists, RUPTracedProcInclExists, RUVerIs2. Как их можно реализовать? Спасибо!
Код:

Root: HKCU; Subkey: "Software\VS Revo Group\Revo Uninstaller Pro\Uninstaller\Traced\RegExclude"; ValueName: "HKEY_LOCAL_MACHINE\SYSTEM\*\services\Tcpip\Parameters"; ValueType: Dword; ValueData: "$C"; Check: "RUPTracedRegExclExists"; MinVersion: 0.0,5.01.2600 Service Pack 1; Flags: createvalueifdoesntexist
Root: HKCU; Subkey: "Software\VS Revo Group\Revo Uninstaller Pro\Uninstaller\Traced\RegExclude"; ValueName: "HKEY_USERS\*\Local Settings\MuiCache"; ValueType: Dword; ValueData: "$C"; Check: "RUPTracedRegExclExists"; MinVersion: 0.0,5.01.2600 Service Pack 1; Flags: createvalueifdoesntexist
Root: HKCU; Subkey: "Software\VS Revo Group\Revo Uninstaller Pro\Junk Files\Exclude"; ValueName: "%CommonProgramFiles(x86)%/"; ValueType: Dword; ValueData: "$1"; Check: "RUPJFCExcludeExists"; MinVersion: 0.0,5.01.2600 Service Pack 1; Flags: createvalueifdoesntexist
Root: HKCU; Subkey: "Software\VS Revo Group\Revo Uninstaller Pro\Junk Files\Exclude"; ValueName: "%ProgramFiles(x86)%/uninstall information/"; ValueType: Dword; ValueData: "$1"; Check: "RUPJFCExcludeExists"; MinVersion: 0.0,5.01.2600 Service Pack 1; Flags: createvalueifdoesntexist
Root: HKCU; Subkey: "Software\VS Revo Group\Revo Uninstaller Pro\Junk Files\General\Extensions"; ValueName: "*.??~"; ValueType: Dword; ValueData: "$1"; Check: "RUPJFCExtExists"; MinVersion: 0.0,5.01.2600 Service Pack 1; Flags: createvalueifdoesntexist
Root: HKCU; Subkey: "Software\VS Revo Group\Revo Uninstaller Pro\Uninstaller\Traced\ProcInclude"; ValueName: "%windir%\system32\rundll32.exe"; ValueType: Dword; ValueData: "$1"; Check: "RUPTracedProcInclExists"; MinVersion: 0.0,5.01.2600 Service Pack 1; Flags: createvalueifdoesntexist
Root: HKCU; Subkey: "Software\VS Revo Group\Revo Uninstaller Pro\Uninstaller\Traced\ProcInclude"; ValueName: "%windir%\system32\svchost.exe"; ValueType: Dword; ValueData: "$1"; Check: "RUPTracedProcInclExists"; MinVersion: 0.0,5.01.2600 Service Pack 1; Flags: createvalueifdoesntexist
Root: HKCU; Subkey: "Software\VS Revo Group\Revo Uninstaller Pro\ProfUIS\Profiles\Revo Uninstaller Pro\ControlBar"; Check: "RUVerIs2"; MinVersion: 0.0,5.01.2600 Service Pack 1; Flags: deletekey
Root: HKCU; Subkey: "Software\VS Revo Group\Revo Uninstaller Pro\ProfUIS\Profiles\Revo Uninstaller Pro\ReportGrid\TracedProgramsReportGridSettings"; Check: "RUVerIs2"; MinVersion: 0.0,5.01.2600 Service Pack 1; Flags: deletekey
Root: HKCU; Subkey: "Software\VS Revo Group\Revo Uninstaller Pro\ProfUIS\Profiles\Revo Uninstaller Pro\ReportGrid\AllProgramsReportGridSettings"; Check: "RUVerIs2"; MinVersion: 0.0,5.01.2600 Service Pack 1; Flags: deletekey
Root: HKCU; Subkey: "Software\VS Revo Group\Revo Uninstaller Pro\View"; ValueName: "Theme"; ValueType: Dword; ValueData: "$8"; Check: "RUVerIs2"; MinVersion: 0.0,5.01.2600 Service Pack 1;
Root: HKCU; Subkey: "Software\VS Revo Group\Revo Uninstaller Pro\General"; ValueName: "Ver3"; ValueType: String; ValueData: "3"; MinVersion: 0.0,5.01.2600 Service Pack 1;


R.i.m.s.k.y. 21-07-2014 17:26 2379383

Цитата:

Цитата Dodakaedr
есть чековые проверки RUPTracedRegExclExists... Как их можно реализовать? »

Код:

[code]
Function RUPTracedRegExclExists () : boolean;
begin
 ...
 if ... then result:= true else result := false;
end;

после Check в секции Registry кавычки не нужны

Dodakaedr 21-07-2014 17:28 2379384

R.i.m.s.k.y., ну это как-бы понятно. "..." - что там нужно указывать? Вот что интересует.

Shkutu 21-07-2014 17:36 2379391

Цитата:

Цитата Dodakaedr
Как их можно реализовать? »

Это вроде как не какие-то стандартные проверки. Для их реализации надо знать, что они в принципе делают, а названия у проверок не сказать, что сильно интуитивно-понятные.
И если вы сами не представляете, что там проверяется, то тут у автора скрипта надо спрашивать, я думаю:)

Dodakaedr 21-07-2014 17:39 2379394

Shkutu, у меня мало опыта в этом и для этого я кусок секции показал, может кто и знает что там за проверка осуществляется, может кто более опытен в таких делах.

bosenkov5 21-07-2014 17:50 2379400

Помогите как в скрипте сделать так чтобы в ярлыки были в пуске и на рабочем столе
 
Помогите как в скрипте сделать так чтобы в ярлыки были в пуске и на рабочем столе

вот скрипт

Код:

#define NeedSize "6315"
#define exeName "Valiant Hearts.exe"
#define NeedMem 512
#define SecondProgressBar

;#define Components

;#define records

;#define facompress
;#define precomp "0.4"
;#define SrepInside
;#define unrar
;#define XDelta
;#define PackZIP





[Setup]

#define skin
//#define splash
//#define bass
[Setup]
AppName={#MyAppName}
AppVerName={#MyAppName}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
SolidCompression=true
DisableReadyPage=false
VersionInfoCompany=
DiskSpanning=true
AppPublisher=
AppVersion={#MyAppName}
AppPublisherURL=www.inno.at.ua
AppUpdatesURL=http://www.inno.at.ua
AppID={{CC2B42B4-FD74-4A23-B2C6-D3A694F2D395}
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif
SetupIconFile=C:\Users\Bosenok\Desktop\MAY SKRIPT\files\ac2.ico
#ifdef Components


[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
Name: text\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 200000000
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 500000000
Name: voice\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 600000000
#endif






[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
russian.t1=Папка установки:
russian.t2=Папка в меню «Пуск»:
russian.t3={#MyAppName}
russian.t4=Дополнительные задачи:%n  Добавить ярлык на Рабочий стол%n  Установить DirectX




russian.Welcome1=Вас приветствует Мастер установки игры
russian.Welcome2=Программа установит игру {#MyAppName} на Ваш компьютер.%n%nРекомендуется закрыть антивирусные пакеты, а также все прочие приложения перед тем, как продолжить.%n%nНажмите «Далее», чтобы продолжить, или  «Отмена», чтобы выйти из программы установки.
russian.Space=Доступно места на диске:
russian.Space1=Требуется места на диске:
russian.Status=Пожалуйста, подождите, пока игра установится на Ваш компьютер.
russian.DescrLbl1=В какую папку Вы хотите установить {#MyAppName}?
russian.Language=Выберите язык игры
russian.StartMenuLbl=Нажмите «Далее», чтобы продолжить. Если Вы хотите выбрать другую папку, нажмите «Обзор».
russian.Finished1=Установка игры {#MyAppName} успешно завершена.%n
russian.Finished2=Игра {#MyAppName} была успешно установлена на Ваш компьютер. Для ее запуска выберите соответствующий ярлык в меню «Пуск» или ярлык на Рабочем столе.
russian.Finished3=Нажмите «Завершить», чтобы выйти из программы установки.
russian.DirectX=Обновить DirectX
russian.DirectXInstall=Идет обновление DirectX...
russian.Icons=Добавить ярлыки на Рабочий стол
russian.Uninstall=Удалить {#MyAppName}
russian.p1=Программа создаст ярлыки в следующей папке меню «Пуск».
russian.p2=Выберите дополнительные задачи, которые должны выполниться при установке%n{#MyAppName}, после этого нажмите «Далее»:
russian.p3=Нажмите «Установить», чтобы продолжить, или «Назад», если Вы хотите%nпросмотреть или изменить опции установки.
russian.p4=Игра {#MyAppName} была успешно установлена на Ваш компьютер.%nДля ее запуска выберите соответствующий ярлык в меню «Пуск» или%nярлык на Рабочем столе.%n%nНажмите «Завершить», чтобы выйти из программы установки.

russian.ExtractedFile=Извлекается файл:
russian.Extracted=Распаковка архивов...
russian.CancelButton=Отмена
russian.Error=Ошибка распаковки!
russian.ElapsedTime=Прошло:
russian.RemainingTime=Осталось времени:
russian.EstimatedTime=Всего:
russian.AllElapsedTime=Время установки:


[Files]

Source: files\GDIPlus.dll; DestDir: {tmp}; Flags: nocompression
Source: files\30.png; DestDir: {tmp}
Source: files\4.png; DestDir: {tmp}
Source: files\5.png; DestDir: {tmp}
Source: files\1.png; DestDir: {tmp}
Source: files\6.jpg; DestDir: {tmp}
Source: files\2.png; DestDir: {tmp}

#ifdef bass
Source: files\bass.dll; DestDir: {tmp}; Flags: dontcopy noencryption
Source: files\sound.mp3; DestDir: {tmp}; Flags: dontcopy noencryption nocompression
Source: files\MusicButton.bmp; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef skin
Source: files\ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: files\tiger_v2.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
#endif
#ifdef splash
Source: files\splash.png; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: files\isgsg.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
#endif
Source: files\button.bmp; DestDir: {tmp}; Flags: dontcopy
Source: files\ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef facompress
Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef SrepInside
Source: Include\arc.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\srep.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp
  #if precomp == "0.38"
  ; Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
  #else
    #if precomp == "0.4"
    ; Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
    #else
      #if precomp == "0.41"
      ; Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
      #else
      ; Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
      ; Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
      ; Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
      #endif
    #endif
  #endif
#endif
#ifdef unrar
Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef XDelta
Source: Include\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PackZIP
Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif





[Tasks]
Name: icon; Description: Добавить ярлык на Рабочий стол
Name: VCCheck; Check: InstallDirectX; Description: Установить DirectX


[Icons]
Name: {userdesktop}\{#MyAppName}; Filename: {app}{#exeName}; Check: CreateIcons


Shift85 21-07-2014 18:02 2379407

Цитата:

Цитата bosenkov5
Помогите как в скрипте сделать так чтобы в ярлыки были в пуске и на рабочем столе »

bosenkov5, Как то так.

Код:

Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeWorkingDir}{#MyAppExeName}"; Workingdir: "{app}\{#MyAppExeWorkingDir}"; IconFilename: "{app}{#UninstallFolder}\Game.ico"; Check: "NoIcons";
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeWorkingDir}{#MyAppExeName}"; Workingdir: "{app}\{#MyAppExeWorkingDir}"; IconFilename: "{app}{#UninstallFolder}\Game.ico"; Check: "CheckError";

Или так.

Код:

Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon


bosenkov5 21-07-2014 18:06 2379410

Shift85, Это делать в разделе:[Icons] ?я так понял?

Shift85 21-07-2014 18:08 2379411

Цитата:

Цитата bosenkov5
Это делать в разделе:[Icons] »

bosenkov5, Так точно.

bosenkov5 21-07-2014 18:11 2379413

Shift85, нет ошибку пишет

bosenkov5 21-07-2014 18:18 2379421

Вложений: 1
Shift85, сделал вот так
Name: {userdesktop}\{#MyAppName}; Filename: {app}{#exeName}; Check: CreateIcons
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#exeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#exeName}"; Tasks: desktopicon

но выдает ошибку:

bosenkov5 21-07-2014 18:40 2379430

Сделал вот так
[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#exeName}"
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#exeName}";

на рабочем столе появился ярлык а в пуске появились но без картинки но запускаются
как картинки поставить?

Dima2009 21-07-2014 20:29 2379466

Люди добрые помогите накидать срипт в распаковке 7z под паролем рядом с инстал.
чтоб вот так было.

R.i.m.s.k.y. 22-07-2014 09:37 2379607

bosenkov5, он у тебя ругается на секцию tasks, скорее всего desktopicon не определен в секции tasks

R.i.m.s.k.y. 22-07-2014 10:07 2379615

Цитата:

Цитата bosenkov5
на рабочем столе появился ярлык а в пуске появились но без картинки но запускаются »

попробуй
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#exeName}"; IconFilename: ""{app}\{#exeName}"; IconIndex: 0
но вообще че-то мне кажется что кеш иконок у тебя глючит, перегрузи комп

R.i.m.s.k.y. 22-07-2014 12:22 2379656

строчка
Код:

  if ('1.0.0.6' < '1.0.0.20')  then  MsgBox('www', mbInformation, MB_OK);
ошибка при компиляции
Код:

---------------------------
Ошибка компиляции
---------------------------
Строка 136:

Column 34:

Type mismatch.
---------------------------
ОК 
---------------------------

Column 34 это then


даже if ('a' < 'b') - та же ошибка.
что я делаю не так? ведь инно должен сравнивать текстовые строки
расширенный юникод компилятор

saurn 22-07-2014 13:37 2379699

R.i.m.s.k.y., да вроде работает
Код:

[Setup]
AppName=My Program
AppVersion=1.5
VersionInfoVersion=1.0.0.20
CreateAppDir=no
OutputDir=...

[Code]
function CompareVer(): Boolean;
var
    str: String;
begin
    GetVersionNumbersString( ExpandConstant( '{srcexe}' ), str );

    if (str < '1.0.0.20')  then  MsgBox('www', mbInformation, MB_OK);
end;


procedure InitializeWizard();
begin
    CompareVer();
end;


Shift85 22-07-2014 13:43 2379701

Цитата:

Цитата R.i.m.s.k.y.
расширенный юникод компилятор »

R.i.m.s.k.y., На анси работает :yes:

R.i.m.s.k.y. 22-07-2014 13:47 2379704

Цитата:

Цитата saurn
да вроде работает »

:FACEPALM.JPG:
этот if ('a' < 'b') был в initializeSetup
Код:

Function InitializeSetup : boolean;
var
  VersionMS0x86, VersionLS0x86 : Cardinal;
  i : integer;
begin
  if ('a' > 'b')  then  MsgBox('www', mbInformation, MB_OK);
result := false;
end;

вынес в другую функцию, как в примере - заработал

saurn 22-07-2014 13:51 2379711

R.i.m.s.k.y., так тоже работает, и на юникоде
Код:

[Code]
function CompareVer( const str1, str2: String ): Boolean;
begin
    if ( str1 > str2 ) then MsgBox('www', mbInformation, MB_OK);
end;


procedure InitializeWizard();
begin
    CompareVer( '1.0.0.6', '1.0.0.20' );
end;


El Sanchez 22-07-2014 16:30 2379780

R.i.m.s.k.y., saurn, неужели '1.0.0.6' "больше", чем '1.0.0.20'? Обсуждалось ведь уже, что так сравнивать версии в виде строк некорректно.

R.i.m.s.k.y. 22-07-2014 16:44 2379791

El Sanchez, нет, конечно 1,0,0,6 меньше 1,0,0,20
это просто эксперимент по сравнению строк в инно от выхлопа GetVersionNumbers

как тогда правильно сравнивать версии?

sergey3695 23-07-2014 14:11 2380217

R.i.m.s.k.y.,
Код:

function CompareTextI(const str1, str2: String): Boolean;
var
  stri1,stri2: integer;
begin
  stri1:= strtoint(str1);
  stri2:= strtoint(str2);
  Result:= false;
if stri1 > stri2 then
begin
  MsgBox('первое больше', mbInformation, MB_OK);
  Result:= true;
end;
if stri1 < stri2 then
begin
  MsgBox('второе больше', mbInformation, MB_OK);
  Result:= true;
end;
end;

procedure CompareVer(const str1, str2: String);
var
  stri1,stri2: string;
begin
if CompareText(str1,str2)= 0 then MsgBox('равны', mbInformation, MB_OK)
else begin
while Pos('.',str1) > 0 do
begin
  stri1:= copy(str1,0,Pos('.',str1)-1);
  delete(str1,1,Pos('.',str1));
  stri2:= copy(str2,0,Pos('.',str2)-1);
  delete(str2,1,Pos('.',str2));
if CompareTextI(stri1,stri2) then
  Break;
end;
  CompareTextI(str1,str2);
end;
end;

procedure InitializeWizard();
begin
  CompareVer('1.0.0.6', '1.2.0.20' );
end;

может так как-нибудь. сравнивать числа по отдельности до точки. вот только интересно если будет скажем 02 и 2. то как считать? равно. или нет.

R.i.m.s.k.y. 23-07-2014 14:16 2380221

sergey3695,
спасибо, но кмк пример эль санчеза более изящный
////////////////////////////////////////////////////
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;

sergey3695 23-07-2014 14:46 2380235

R.i.m.s.k.y., ну там просто не было ответа на твой вопрос.
Интересно то, что подобный вопрос ты уже задавал http://forum.oszone.net/thread-278998-3.html
и StringChangeEx(Result, ',', '.', True); можно удалить.

Dima2009 23-07-2014 18:59 2380342

Вложений: 1
Помогите разобраться вот такая ошибка...

Irenis 23-07-2014 20:17 2380373

Добрый вечер! Подскажите пожалуйста, при создании установщика я архивирую необходимые файлы при помощи FreeArc. Там есть разные степени сжатия (нормальный, высокий и т.д.) Вопрос, как можно заархивировать файлы тем же FreeArc-ом, но чтобы без сжатия, т.е. чтобы размер архива был такой же, как и размер архивируемых файлов?

sergey3695 23-07-2014 21:59 2380411

Irenis,
батник.
Код:

arc a data -m0 -ep1 -r -s -dsp "packeddata\*"

pause

Dima2009, файл и скрипт приложи. распаковку 7zip отдельно искать неохотно.

Dinvin4ester 24-07-2014 05:41 2380514

Ребята что делаю не так ? Не видно прогресс бара,скрипт - http://rghost.ru/57061315

White Rabbit 24-07-2014 08:43 2380546

Не нашёл на скорую руку такой момент, хочу проконсультироваться. Есь секция [icons]. С её помощью создаю значки/ярлычки на столе и меню "Программы". Так вот мне нужно в зависимости от языка системы (региона) чтобы некоторые из них были на русском языке для русскоязычной винды и на английском для англоязычной. Можно это как-то лёгким движением руки сделать?

Kashtan007 24-07-2014 14:24 2380739

Всем привет, как сделать прозрачными эти окна?

И это


Заранее спасибо за помощь.

bosenkov5 24-07-2014 16:02 2380796

Вложений: 1
Уважаемые гуру подскажите пожалуйста.нашол скрипт и при компиляции выдаёт вот это:

R.i.m.s.k.y. 24-07-2014 16:52 2380832

Цитата:

Цитата sergey3695
Интересно то, что подобный вопрос ты уже задавал »

тогда захлохло а теперь опять всплыла надобность кверху брюхом :)

bosenkov5, скрипт то покажи
скорее всего путь не туда прописан

Shift85 24-07-2014 17:29 2380847

Цитата:

Цитата White Rabbit
Можно это как-то лёгким движением руки сделать? »

White Rabbit, Базаришь. =)

Dodakaedr 24-07-2014 19:13 2380908

bosenkov5, Не знаю что у вас, но у меня такая ошибка появилась на проверенном скрипте при использовании Inno Setup 5.5.5

sergey3695 24-07-2014 22:05 2380966

R.i.m.s.k.y., там ответ есть от nik1967. (в самом конце).
Dinvin4ester, function SevenZipCommand(const hWnd: HWND; szParams: AnsiString;
White Rabbit, то есть в зависимости от языка винды, указывались на нужном языке надписи. если так, то есть GetUILanguage. в справке почитай.
bosenkov5, Kashtan007, кидай-те скрипты с файлами.

bosenkov5 24-07-2014 22:19 2380970

R.i.m.s.k.y.,
[code]#define GameName "Mafia II" /*Навзание игры*/
#define PathGameName "Mafia II" /* Название папки игры (без /:*?"<>|)*/
#define GameEXE "launcher.exe" /*Название экзешника*/
;#define GameEXE2 "Data2.exe" /*Название экзешника 2*/
#define GameVersion "1.0.0.1u5" /*Версия Игры*/
#define InstallVersion "1.0.0.1" /*Версия Инсталла*/
#define RePacker "Unknown" /*Имя Репакера */
#define NeedSize "7343" /*Необходимое св.место для Игры */
#define NeedInstallSize "7353" /*Необходимое св.место для установки */
#define NeedMem "512" /*Необходимое ОЗУ для установки */

;#define Components /* Компоненты */

#define Tasks /* Задачи */
#define Splash /* Сплешь */

#define Russophobia /* Русофобия (Запрет русских символов в пути установки) */

;Папка сохранений. Если нету, то перед "#define" поставить ";"
;#define SAVES1 "{userdocs}\Euro Truck Simulator 2"

;Вторая и третья папки сохранений. Если нету, то перед "#define" поставить ";"
;З.Ы. Если таки есть, то начинать обязательно с SAVES1
;#define SAVES2 "{userdocs}\BioWare\Mass Effect"
;#define SAVES3 "{userdocs}\BioWare\Mass Effect"

;Настройка ISDone
#define records /* Раскомментировать после "тестового прогона" */
;#define PrecompInside /* Распаковка PRECOMP'а "на лету" */
;#define SrepInside /* Распаковка SREP'а "на лету" */
#define facompress /* Ускоряет распаковку FreeArc-архивов */
;#define precomp "0.38" /* Указать какую версию precomp'а использовать. */
;#define unrar /* Раскомментируйте, если необходима распаковка rar-файлов */
;#define XDelta /* Раскомментируйте, если необходима распаковка diff архивов, созданных с помощью xdelta3. */
;#define PackZIP /* Раскомментируйте, если необходима поддержка упаковки файлов в архивы zip. */


[Setup]
AppName={#GameName}
AppPublisher=RePack by {#RePacker}
AppVerName={#GameName}
AppCopyright=© RePack by {#RePacker}
DefaultDirName={pf}\{#PathGameName}
DefaultGroupName={#PathGameName}
VersionInfoDescription=Installer - {#GameName}
VersionInfoTextVersion={#GameVersion}
VersionInfoVersion={#InstallVersion}
InternalCompressLevel=ultra64
SolidCompression=true
SetupIconFile="Output/icon.ico"
ShowTasksTreeLines=Yes
Compression=lzma/ultra64
OutputBaseFilename=Setup
UninstallDisplayIcon={app}\{#GameEXE}
UninstallFilesDir={app}\Uninstall

[Files]
//////Файлы графики и инсталлятора///////////
Source: InstallFiles\*; Flags: dontcopy
Source: dllFiles\*; Flags: dontcopy
//////////////файлы сплеша/////////////
#ifdef Splash
Source: Splash\*; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
#endif
///////////////////////////Файлы ISDone\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Source: Include\russian.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: Include\records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef PrecompInside
Source: Include\CLS-precomp.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll1.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef SrepInside
Source: Include\CLS-srep.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef facompress
Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp
#if precomp == "0.38"
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.4"
Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.41"
Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
#else
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#endif
#endif
#endif
#ifdef unrar
Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef XDelta
Source: Include\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PackZIP
Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif


[Icons]
Name: {commondesktop}\{#PathGameName}; Filename: {app}\{#GameEXE}; Parameters: "lng>russian"; WorkingDir: {app}\; IconFilename: {app}\{#GameEXE}; Tasks: Icons\DesktopIcon; Check: CheckError
#ifdef GameEXE2
Name: {commondesktop}\{#PathGameName}.(Настройки); Filename: {app}\{#GameEXE2}; WorkingDir: {app}\; IconFilename: {app}\{#GameEXE2}; Tasks: Icons\DesktopIcon2; Check: CheckError
#endif
Name: {group}\{#PathGameName}; Filename: {app}\{#GameEXE}; WorkingDir: {app}\; IconFilename: {app}\{#GameEXE}; Tasks: Icons\QuickLaunchIcon; Check: CheckError
Name: {group}\{cm:UninstallProgram,{#PathGameName}}; Filename: {uninstallexe}; IconFilename: {app}\{#GameEXE}; Tasks: Icons\QuickLaunchIcon; Check: CheckError


#ifdef Components
[Types]
Name: full; Description: Полная установка; Flags: iscustom

[Components]
Name: InterfaceLanguage; Description: Язык Интерфейса:; Flags: fixed; Types: Full;
Name: InterfaceLanguage\Russian; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
Name: InterfaceLanguage\English; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 200000000
Name: SoundLanguage; Description: Язык Озвучки:; Flags: fixed; Types: Full;
Name: SoundLanguage\Russian; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 500000000
Name: SoundLanguage\English; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 600000000
;Name: Crack; Description: Таблетка:; Flags: fixed; Types: Full;
;Name: Crack\ALI213; Description: ALI213(Рекомендуется); Flags: exclusive; ExtraDiskSpaceRequired: 5000520
;Name: Crack\THETA; Description: THETA; Flags: exclusive; ExtraDiskSpaceRequired: 5000900
;Name: Crack\Reloaded; Description: Reloaded; Flags: exclusive; ExtraDiskSpaceRequired: 6000842
#endif

#ifdef Tasks
[Tasks]
Name: Icons; Description: {cm:Icons}; Flags: unchecked;
Name: Icons\DesktopIcon; Description: {cm:CreateDesktopIcon};
#ifdef GameEXE2
Name: Icons\DesktopIcon2; Description: {cm:CreateDesktopIcon2};
#endif
Name: Icons\QuickLaunchIcon; Description: {cm:CreateQuickLaunchIcon};
Name: Soft; Description: {cm:Soft};
Name: Soft\DirectX; Description: DirectX.;
Name: Soft\VCCheck; Description: Microsoft Visual C++ 2010.; Flags:
//Name: Soft\Net; Description: Microsoft NET Framework 4.0 ; Flags:
Name: Soft\PhysXCheck; Description: NVIDIA PhysX
//Name: Soft\UbisoftGameLauncher; Description: Ubisoft Game Launcher; Flags:
//Name: Soft\WinLive; Description: Установить Windows Live; Flags:
#endif

[Run]
Filename: {src}\Soft\DirectX\DXSETUP.exe; WorkingDir: {src}\Soft\DirectX\; Flags: waituntilterminated; Tasks: Soft\DirectX; StatusMsg: Установка DirectX...; Check: CheckError
Filename: {src}\Soft\Redist\vcredist_x86.exe; StatusMsg: Устанавливаем Microsoft Visual C++ 2010 Redist...; Flags: skipifdoesntexist; Tasks: Soft\VCCheck; Components: ; Check: CheckError and not IsWin64;
Filename: {src}\Soft\Redist\vcredist_x64.exe; StatusMsg: Устанавливаем Microsoft Visual C++ 2010 Redist...; Flags: skipifdoesntexist; Tasks: Soft\VCCheck; Components: ; Check: CheckError and IsWin64


[UninstallDelete]
Type: filesandordirs; Name: {app}

Код:

#ifdef Splash
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
#endif
#include "Modules\Messages.iss"
#include "Modules\botva2.iss"
#include "Modules\PB.iss"
#include "Modules\botva2u.iss"
#include "Modules\Header.iss"
#include "Modules\ISDone.iss"

procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

#ifdef Russophobia
const
  A1='А';
  Z1='Я';
  A2='а';
  Z2='я';
  X1='ё';
  X2='Ё';
function NextButtonClick(CurPageID: Integer): Boolean;
var i: integer;
    c: char;
begin
  Result := True;
  if CurPageID = wpSelectDir then begin
      for i:=1 to length(WizardForm.DirEdit.text) do begin
        c:=WizardForm.DirEdit.text[i];
        if (c>=A1)and(c<=Z1) or (c>=A2)and(c<=Z2) or (c=X1) or (c=X2) then begin
            MsgBox( 'В пути установки присутствуют русские буквы, что недопустимо'#13#13'Пожалуйста, повторите ввод.', mbError, mb_Ok);
            Result := False ;
            exit;
        end;
      end;
  end;
end;
#endif
////////////////////////////////////////////////////////////Текстура кнопок\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
procedure SetStateNewButtons;
begin
  with WizardForm.BackButton do begin
    BtnSetText(hBackBtn,PAnsiChar(Caption));
    BtnSetVisibility(hBackBtn,Visible);
    BtnSetEnabled(hBackBtn,Enabled);
  end;
  with WizardForm.NextButton do begin
    BtnSetText(hNextBtn,PAnsiChar(Caption));
    BtnSetVisibility(hNextBtn,Visible);
    BtnSetEnabled(hNextBtn,Enabled);
  end;
  with WizardForm.CancelButton do begin
    BtnSetText(hCancelBtn,PAnsiChar(Caption));
    BtnSetVisibility(hCancelBtn,Visible);
    BtnSetEnabled(hCancelBtn,Enabled);
  end;
  BtnSetText(hDirBrowseBtn,PAnsiChar(WizardForm.DirBrowseButton.Caption));
  BtnSetText(hGroupBrowseBtn,PAnsiChar(WizardForm.GroupBrowseButton.Caption));
end;

procedure WizardFormBtnClick(hBtn:HWND);
var
  Btn:TButton;
begin
    case hBtn of
    hCancelBtn: Btn:=WizardForm.CancelButton;
    hNextBtn: Btn:=WizardForm.NextButton;
    hBackBtn: Btn:=WizardForm.BackButton;
    hDirBrowseBtn: Btn:=WizardForm.DirBrowseButton;
    hGroupBrowseBtn: Btn:=WizardForm.GroupBrowseButton;
  end;
  Btn.OnClick(Btn);
  SetStateNewButtons;
  BtnRefresh(hBtn);
end;

procedure WFBtnEnter(hBtn:HWND);
begin
end;

procedure ButtonsTextures;
begin
  with WizardForm.BackButton do begin
    hBackBtn:=BtnCreate(WizardForm.Handle,447,364,80,24,ExpandConstant('Btn.png'),0,False);
    BtnSetEvent(hBackBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
    BtnSetEvent(hBackBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
    BtnSetFont(hBackBtn,WFButtonFont.Handle);
    BtnSetFontColor(hBackBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
    BtnSetCursor(hBackBtn,GetSysCursorHandle(32649));
    Width:=0;
    Height:=0;
  end;

  with WizardForm.NextButton do begin
    hNextBtn:=BtnCreate(WizardForm.Handle,530,364,80,24,ExpandConstant('Btn.png'),1,False);
    BtnSetEvent(hNextBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
    BtnSetEvent(hNextBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
    BtnSetFont(hNextBtn,WFButtonFont.Handle);
    BtnSetFontColor(hNextBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
    BtnSetCursor(hNextBtn,GetSysCursorHandle(32649));
    Width:=0;
    Height:=0;
  end;

  with WizardForm.CancelButton do begin
    hCancelBtn:=BtnCreate(WizardForm.Handle,613,364,80,24,ExpandConstant('Btn.png'),1,False);
    BtnSetEvent(hCancelBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
    BtnSetEvent(hCancelBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
    BtnSetFont(hCancelBtn,WFButtonFont.Handle);
    BtnSetFontColor(hCancelBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
    BtnSetCursor(hCancelBtn,GetSysCursorHandle(32649));
    Width:=0;
    Height:=0;
  end;

  with WizardForm.DirBrowseButton do begin
    hDirBrowseBtn:=BtnCreate(WizardForm.Handle,530,269,73,24,ExpandConstant('browse.png'),1,False);
    BtnSetEvent(hDirBrowseBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
    BtnSetEvent(hDirBrowseBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
    BtnSetFont(hDirBrowseBtn,WFButtonFont.Handle);
    BtnSetFontColor(hDirBrowseBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
    BtnSetCursor(hDirBrowseBtn,GetSysCursorHandle(32649));
    Width:=0;
    Height:=0;
  end;

  with WizardForm.GroupBrowseButton do begin
    hGroupBrowseBtn:=BtnCreate(WizardForm.Handle,530,269,73,24,ExpandConstant('browse.png'),1,False);
    BtnSetEvent(hGroupBrowseBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
    BtnSetEvent(hGroupBrowseBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
    BtnSetFont(hGroupBrowseBtn,WFButtonFont.Handle);
    BtnSetFontColor(hGroupBrowseBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
    BtnSetCursor(hGroupBrowseBtn,GetSysCursorHandle(32649));
    Width:=0;
    Height:=0;
  end;
end;

/////////////////////////////////////////////////конец\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
////////////////////////////////////////////////Вставка изображений\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

procedure CreateWizardForm;
var
  n: Integer;
begin
  with WizardForm do begin
    InnerNotebook.Hide;
    OuterNotebook.Hide;
    Bevel.Hide;
    ClientWidth:=ScaleX(700);
    ClientHeight:=ScaleY(394);
    DirEdit.OnChange:=@ObjectFunc;
    GroupEdit.OnChange:= @ObjectFunc
    OnMouseDown:=@LabelOnMouseDown;
    Center;
  end;

  WFButtonFont:=TFont.Create;
  with WFButtonFont do begin
    Style:=[fsBold];
    Size:=10;
    Name:='Tahoma';
  end;

  BGImageStream := TMemoryStream.Create;
  ExtractTemporaryFileToStream('BMPImage.bmp', BGImageStream);
  BGImageStream.Position := 0;

  BTNImageStream := TMemoryStream.Create;
  ExtractTemporaryFileToStream('btnimage.bmp', BTNImageStream);
  BTNImageStream.Position := 0;

  BGImage := TBitmapImage.Create(WizardForm);
  BGImage.Bitmap.LoadFromStream(BGImageStream);

  BTNImage := TBitmapImage.Create(WizardForm);
  BTNImage.Bitmap.LoadFromStream(BTNImageStream);

  ImgLoad(WizardForm.Handle,ExpandConstant('MainImage.png'),0,0,0,0,False,True);

  //////////////////////////////////////////!!!\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 
/////////////////////////////////////////////////// ст. Главная\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  WelcomeLabel1:= CreateLabel(WizardForm, ScaleX(0), ScaleY(245), ScaleX(700), ScaleY(80), ExpandConstant('{cm:WelcomeLabel1}'), False);
  LabelSetFont(WelcomeLabel1, 10, 'Tahoma', $FFFFFF, [fsBold]);
  WelcomeLabel1.Alignment := taCenter;

  WelcomeLabel2:= CreateLabel(WizardForm, ScaleX(0), ScaleY(275), ScaleX(700), ScaleY(150), ExpandConstant('{cm:WelcomeLabel2}'), False);
  LabelSetFont(WelcomeLabel2, 8, 'Tahoma', $FFFFFF, [fsBold]);
  WelcomeLabel2.Alignment := taCenter;
//////////////////////////////////////////////////ст.Выбор Дириктории\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  DirFolder:=ImgLoad(WizardForm.Handle,ExpandConstant('DirFolder.png'),ScaleX(106),ScaleY(210),ScaleX(60),ScaleY(59),True,True);
  DirEditImg:=ImgLoad(WizardForm.Handle,ExpandConstant('DirEditImg.png'),ScaleX(105),ScaleY(270),ScaleX(420),ScaleY(22),True,True);
  HDD:=ImgLoad(WizardForm.Handle,ExpandConstant('HDD.png'),ScaleX(105),ScaleY(297),ScaleX(57),ScaleY(57),True,True);

  SelectDirLabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(219), ScaleX(0), ScaleY(0), ExpandConstant('{cm:SelectDirLabel}'), true);
  LabelSetFont(SelectDirLabel, 9, 'Tahoma', $FFFFFF, [fsBold]);
 
  SelectDirBrowseLabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(238), ScaleX(0), ScaleY(0), ExpandConstant('{cm:SelectDirBrowseLabel}'), true);
  LabelSetFont(SelectDirBrowseLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);
  SelectDirBrowseLabel.Alignment := taLeftJustify;
 
  DirEditLabel:= CreateLabel(WizardForm, ScaleX(110), ScaleY(272), ScaleX(450), ScaleY(20), '', false);
  LabelSetFont(DirEditLabel, 10, 'Tahoma', $FFFFFF, [fsBold]);
  DirEditLabel.Caption := MinimizePathName(WizardForm.DirEdit.Text, DirEditLabel.Font, DirEditLabel.Width);
 
  TotalSpaceLabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(295), ScaleX(0), ScaleY(0), ExpandConstant('{cm:TotalSpaceLabel}'), true);
  LabelSetFont(TotalSpaceLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);

  FreeSpaceLabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(310), ScaleX(0), ScaleY(0), ExpandConstant('{cm:FreeSpaceLabel}'), true);
  LabelSetFont(FreeSpaceLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);

  InstallSpacelabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(325), ScaleX(0), ScaleY(0), ExpandConstant('{cm:InstallSpacelabel}'), true);
  LabelSetFont(InstallSpacelabel, 8, 'Tahoma', $FFFFFF, [fsBold]);

  NeedSpaceLabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(340), ScaleX(0), ScaleY(0), ExpandConstant('{cm:NeedSpaceLabel}'), true);
  LabelSetFont(NeedSpaceLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);

  TotalSpaceLabel2:= CreateLabel(WizardForm, ScaleX(520), ScaleY(295), ScaleX(0), ScaleY(0), '', true);
  LabelSetFont(TotalSpaceLabel2, 8, 'Tahoma', $FFFFFF, [fsBold]);
  TotalSpaceLabel2.Alignment := taRightJustify;

  FreeSpaceLabel2:= CreateLabel(WizardForm, ScaleX(520), ScaleY(310), ScaleX(0), ScaleY(0), '', true);
  LabelSetFont(FreeSpaceLabel2, 8, 'Tahoma', $FFFFFF, [fsBold]);
  FreeSpaceLabel2.Alignment := taRightJustify;

  InstallSpacelabel2:= CreateLabel(WizardForm, ScaleX(520), ScaleY(325), ScaleX(0), ScaleY(0), '', true);
  LabelSetFont(InstallSpacelabel2, 8, 'Tahoma', $FFFFFF, [fsBold]);
  InstallSpacelabel2.Alignment := taRightJustify;

  NeedSpaceLabel2:= CreateLabel(WizardForm, ScaleX(520), ScaleY(340), ScaleX(0), ScaleY(0), '', true);
  LabelSetFont(NeedSpaceLabel2, 8, 'Tahoma', $FFFFFF, [fsBold]);
  NeedSpaceLabel2.Alignment := taRightJustify;

  #ifdef Components
//////////////////////////////////////////ст.Компонентов\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    SelectComponentsLabel:= CreateLabel(WizardForm, ScaleX(345), ScaleY(208), ScaleX(0), ScaleY(0), ExpandConstant('{cm:SelectComponentsLabel}'), true);
    LabelSetFont(SelectComponentsLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);
    SelectComponentsLabel.Alignment := taLeftJustify;
    with WizardForm.ComponentsList do begin
      Parent:= WizardForm;
      SetBounds(ScaleX(5), ScaleY(208), ScaleX(335), ScaleY(148));
      Color:=$000000;
      Font.Name:='Tahoma';
      Font.Size:= 8;
      Font.Color:=$FFFFFF;
      for n:=0 to ItemCount-1 do begin
        ItemFontStyle[n]:= [fsBold];
        SubItemFontStyle[n]:= [fsBold];
      end;
      BorderWidth := (WizardForm.ComponentsList.Width-WizardForm.ComponentsList.ClientWidth) div 2;
      LoadBGBmpFromBitmap(BGImage.Bitmap,  WizardForm.ComponentsList.Left+BorderWidth, WizardForm.ComponentsList.Top+BorderWidth);
      LoadBtnBmpFromBitmap(btnimage.Bitmap);
    end;
  #endif

/////////////////////////////////////////////////ст.Выбор Группы\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  GroupFolder:=ImgLoad(WizardForm.Handle,ExpandConstant('GroupFolder.png'),ScaleX(106),ScaleY(210),ScaleX(60),ScaleY(59),True,True);

  SelectStartMenuFolderLabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(219), ScaleX(0), ScaleY(0), ExpandConstant('{cm:SelectStartMenuFolderLabel}'), true);
  LabelSetFont(SelectStartMenuFolderLabel, 9, 'Tahoma', $FFFFFF, [fsBold]);
  SelectStartMenuFolderLabel.Alignment := taLeftJustify;
 
  SelectStartMenuFolderBrowseLabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(238), ScaleX(0), ScaleY(0), ExpandConstant('{cm:SelectDirBrowseLabel}'), true);
  LabelSetFont(SelectStartMenuFolderBrowseLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);
  SelectStartMenuFolderBrowseLabel.Alignment := taLeftJustify;
 
  GroupEditLabel:= CreateLabel(WizardForm, ScaleX(110), ScaleY(272), ScaleX(450), ScaleY(20), WizardForm.GroupEdit.Text, false);
  LabelSetFont(GroupEditLabel, 10, 'Tahoma', $FFFFFF, [fsBold]);
 
  NoIconsCheck:=BtnCreate(WizardForm.Handle,ScaleX(110),ScaleY(305),ScaleX(13),ScaleY(13),ExpandConstant('CheckBox.png'),1,True);
  BtnSetEvent(NoIconsCheck,BtnClickEventID,WrapBtnCallback(@NoIconsClick,1));
  BtnSetCursor(NoIconsCheck,GetSysCursorHandle(32649));

  NoIconsLabel:= CreateLabel(WizardForm, ScaleX(126), ScaleY(305), ScaleX(0), ScaleY(0), ExpandConstant('{cm:NoIconsCheck}'), true);
  LabelSetFont(NoIconsLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);
  with NoIconsLabel do begin
    Cursor := crHand;
    OnClick:= @ObjectFunc;
  end;
/////////////////////////////////////////////ст.Задачь\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  #ifdef Tasks
    SelectTasksLabel:= CreateLabel(WizardForm, ScaleX(345), ScaleY(208), ScaleX(0), ScaleY(0), ExpandConstant('{cm:SelectTasksLabel}'), true);
    LabelSetFont(SelectTasksLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);
    SelectTasksLabel.Alignment := taLeftJustify;
   
    with WizardForm.TasksList do begin
      Parent:= WizardForm;
      SetBounds(ScaleX(5), ScaleY(208), ScaleX(335), ScaleY(148));
      Color:=$000000;
      Font.Name:='Tahoma';
      Font.Size:= 8;
      Font.Color:=$FFFFFF;
      BorderStyle := bsSingle;
      //TreeViewStyle := True;
      BorderWidth := (WizardForm.TasksList.Width-WizardForm.TasksList.ClientWidth) div 2;
      LoadBGBmpFromBitmap(BGImage.Bitmap,  WizardForm.TasksList.Left+BorderWidth, WizardForm.TasksList.Top+BorderWidth);
      LoadBtnBmpFromBitmap(btnimage.Bitmap);
    end;
  #endif

/////////////////////////////////////////////////ст.Итого\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  BGImageStream.position:=0;

  ReadyLabel:= CreateLabel(WizardForm, ScaleX(345), ScaleY(208), ScaleX(0), ScaleY(0), ExpandConstant('{cm:ReadyLabel}'), true);
  LabelSetFont(ReadyLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);
  ReadyLabel.Alignment := taLeftJustify;

  ReadyPanel := TPanel.Create(WizardForm);
  with ReadyPanel do begin
    Parent := WizardForm;
    SetBounds(ScaleX(5), ScaleY(208), ScaleX(335), ScaleY(148));
    BorderStyle := bsSingle;
  end;

  ReadyBitmap := TBitmapImage.Create(WizardForm);
  with ReadyBitmap do begin
    Parent := ReadyPanel;
    SetBounds(ScaleX(-7), ScaleY(-210), ScaleX(700), ScaleY(394));
    Bitmap.LoadFromStream(BGImageStream);
  end;

  ReadyScrollBar := TScrollBar.Create(WizardForm);
  with ReadyScrollBar do begin
    Parent := ReadyPanel;
    SetBounds(ScaleX(315), ScaleY(0), ScaleX(144), ScaleY(16));
    Kind := sbVertical;
    OnScroll:=@ScrollText3Scroll;
  end;

  ReadyPanelLabel := TLabel.Create(WizardForm);
  with ReadyPanelLabel do begin
    Parent := ReadyPanel;
    WordWrap := true;
    Transparent:=true;
    Font.Name:='Tahoma';
    Font.Size:= 8;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold];
    SetBounds(ScaleX(5), ScaleY(5), ScaleX(325), ScaleY(130));
    Caption := WizardForm.ReadyMemo.Lines.Text;
  end;
////////////////////////////////////////////ст.Установка\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

  IsDoneAddComponents

  InstallingLabel:= CreateLabel(WizardForm, ScaleX(105), ScaleY(220), ScaleX(0), ScaleY(0), ExpandConstant('{cm:InstallingLabel}'), true);
  LabelSetFont(InstallingLabel, 9, 'Tahoma', $FFFFFF, [fsBold]);

  StatusLabel:= CreateLabel(WizardForm, ScaleX(105), ScaleY(240), ScaleX(0), ScaleY(0), ExpandConstant('{cm:Extracted}'), true);
  LabelSetFont(StatusLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);

/////////////////////////////////////////////ст.Конец\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

  FinishedHeadingLabel:= CreateLabel(WizardForm, ScaleX(0), ScaleY(245), ScaleX(700), ScaleY(80), ExpandConstant('{cm:FinishedHeadingLabel}'), false);
  LabelSetFont(FinishedHeadingLabel, 10, 'Tahoma', $FFFFFF, [fsBold]);
  FinishedHeadingLabel.Alignment := taCenter;

  FinishedLabel:= CreateLabel(WizardForm, ScaleX(0), ScaleY(275), ScaleX(700), ScaleY(150), ExpandConstant('{cm:FinishedLabel}'), false);
  LabelSetFont(FinishedLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);
  FinishedLabel.Alignment := taCenter;
end;


Dinvin4ester 25-07-2014 06:06 2381028

Цитата:

Цитата Dinvin4ester
- Ребята что делаю не так ? Не видно прогресс бара,скрипт - http://rghost.ru/57061315»


Nordek 25-07-2014 07:01 2381032

bosenkov5, Захватите ваше произведение искусства в тег [code][/code] (информация по обработке тегов) и скройте под спойлер.

Kashtan007 25-07-2014 09:20 2381053

Всем доброго времени суток. Возникла проблема, я использую библиотеку ISSkin.dll, но после установки компонентов, мой скин skin.cjstyles распаковывается в ту же папку куда и компоненты. Т.е. у меня есть папка "Программы"я устанавливаю туда компоненты и помимо этих компонентов, там каким-то непонятным образом появляется мой скин skin.cjstyles. Как решить эту проблему? Заранее спасибо за ответ!

R.i.m.s.k.y. 25-07-2014 09:24 2381054

Цитата:

Цитата Kashtan007
Как решить эту проблему? »

не распаковывать в папку программы
щито неясно?




bosenkov5,
а) проверь пути чтобы по ним все лежало
б) extractTemrorrayFileSize у тебя вызывается раньше чем объявляется, ищи его во вторичных iss (которые #include...) и ставь botva2.iss ниже iss с extractTemrorrayFileSize
в) компилятор какой? у нас тут у всех расширенный китайский :) (юзаем innoultra)

Kashtan007 25-07-2014 09:34 2381056

R.i.m.s.k.y., В том и дело, что я не распаковывая в папку программы этот файл. Файл скина находиться у меня в [Files], но для того, чтобы он работал. Тем более, я выбираю компоненты.

R.i.m.s.k.y. 25-07-2014 09:40 2381059

Kashtan007, c такой постановкой вопроса лучше обращаться сюда

Kashtan007 25-07-2014 09:57 2381063

R.i.m.s.k.y., скинул скрипт в ЛС, посмотрите пожалуйста.

R.i.m.s.k.y. 25-07-2014 10:10 2381066

Kashtan007,

на тематику в личке не отвечаю, для этого есть форум

зы: тем более что в скрипте ничего экстраординарного

зыы: флаг dontcopy пропущен или раскидывай по папкам как нужно
Код:

//--------// Рамка и кнопки [Начало]  //--------//
Source: Модули\ISSkin.dll; DestDir: {app}; Flags: ignoreversion
Source: {#SKin}; DestDir: {app}; Flags: ignoreversion
//--------// Рамка и кнопки [Конец]  //--------//

зыыы: эти файлы нужны при удалении так что все правильно - должны копироваться

зыыыы: про оформление смотри подпись

Kashtan007 25-07-2014 11:01 2381084

R.i.m.s.k.y., а можно сделать, чтобы при удалении рамки не было и соответственно стиль не копировало?

nik1967 25-07-2014 11:23 2381095

Цитата:

Цитата Kashtan007
а можно сделать »

Можно. Делай.

Kashtan007 25-07-2014 11:41 2381103

nik1967, мда, еще и издеваетесь..
Нет бы помочь..

R.i.m.s.k.y. 25-07-2014 11:57 2381111

Kashtan007, а) можно удалять в стандартном скине (т.е. без него)
б) хз как выкрутиться, я делал дистры со шкурками но не заморачивался на "тайну" скина, в папке назначения делал "свою" папку куда клал что нужно и как-то проблемы не возникало, только по коду растыкивал "IfFileExists (шкурка)" чтобы работало хотя бы в стандартном виде и без ошибок
вощем смотри подпись :)

Kashtan007 25-07-2014 12:05 2381113

R.i.m.s.k.y., спасибо, а куда вписывать путь к своей папке, чтобы туда добавлялся скин?

R.i.m.s.k.y. 25-07-2014 12:06 2381114

Kashtan007, ищи поиском и сам поймешь, у тебя по всему скрипту раскиданы вызовы шкурки
ну и заменяй на какую хочешь папку
если хочешь сделать хороший дистр поставь перед вызовом шкурки проверку на наличие файлов, а то может антивирь блочить при установке и тогда не поставится, или при удалении - тогда не удалится

nik1967 25-07-2014 13:58 2381152

Цитата:

Цитата Kashtan007
мда, еще и издеваетесь.. »

Это был сарказм.
Цитата:

Цитата Kashtan007
Нет бы помочь.. »

Извини, я не экстрасенс. При отсутствии скрипта и всех сопутствующих файлов задача почти невыполнимая.

R.i.m.s.k.y. 25-07-2014 14:03 2381157

nik1967, да там ничего особенного
"примерный" скрипт
не понимаю чего из него тайну делать
Ну, каштан007 захочет - ссылку выложит

Kashtan007 25-07-2014 14:52 2381177

R.i.m.s.k.y., пытался сделать, чтобы скин распаковывался в отдельную папку, но не получилось. Как можно это сделать?
Заранее спасибо!

Shift85 25-07-2014 15:36 2381199

Цитата:

Цитата Kashtan007
Как можно это сделать? »

Kashtan007, Элементарно.

Код:

Source: InstallFiles\*; DestDir: {app}\Skin; Flags: ignoreversion; Attribs: hidden system;

Kashtan007 25-07-2014 16:03 2381214

Shift85, спасибо.

Есть еще проблема, как сделать прозрачными эти окна?

И это


Заранее спасибо за помощь.

P.S. Как можно максимально сжать размер установщика?

Shift85 25-07-2014 16:48 2381230

Вложений: 1
Цитата:

Цитата Kashtan007
Как можно максимально сжать размер установщика? »

Код:

Compression=lzma2/ultra64
InternalCompressLevel=ultra64

Цитата:

Цитата Kashtan007
как сделать прозрачными эти окна? »

Kashtan007, Попробуй по этому примеру.

Nordek 25-07-2014 17:16 2381240

bosenkov5, Я так и понял что вы это сообщение не читали.
Это прочтите на досуге.

bosenkov5,
1. В скрипте не хватает: Messages.iss, botva2.iss, PB.iss, botva2u.iss, Header.iss, ISDone.iss и связанных с ними файлов.
В секции [Files], хорошо видно то, что присутствует это:
Код:

Source: InstallFiles\*; Flags: dontcopy
Source: dllFiles\*; Flags: dontcopy
//////////////файлы сплеша/////////////
#ifdef Splash
Source: Splash\*; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
#endif

Это значит то, что никому неизвестно: какие файлы могут быть включены при компиляции.

Далее видно то, что в скрипт включены файлы: russian.ini, unarc.dll, ISDone.dll, records.inf, CLS-precomp.dll, packjpg_dll.dll, packjpg_dll1.dll, precomp.exe, zlib1.dll, CLS-srep.dll, facompress.dll, precomp038.exe, precomp040.exe, precomp041.exe, Unrar.dll, XDelta3.dll, 7z.dll, packZIP.exe

Сами посудите: Если вам лень что либо читать, то каково тем кто может вам помочь: создавать картинки, искать аналогичные скрипты, подставлять скины, музыку - в общем полностью подстраиваться под ваше чудо-творение.
Поверьте, тем кто вам может помочь - это абсолютно ненужно. Помогать таким людям не будут: Будут просто игнорировать.

Ведь перед выкладыванием чего либо нужно проверить, чтоб не было ошибок. Правильно?
Тогда нужно представлять все файлы.

И ещё раз: вы не читаете.
Это:
Цитата:

Цитата sergey3695
кидай-те скрипты с файлами. »

написано для всех. Подчеркну если не заметили: с файлами

Нужно понимать разницу между: помощью и сделать все за вас. Так ещё вы заставляете страдать геморроем - которого без вас хватает.

Ещё один нюанс: Старайтесь чтоб размер был максимально мал.
Не нужно выкладывать скрипты с файлами под 100мб (что там, щебёнки насыпали или пару кубов песка?).
Смотришь: вес картинки 5 мб (порой их бывает много 10-20 шт, а то и больше) + аудио-файл 10-15 мб + скин от 1 до 5 мб = итого: от 20 до 100 мб.
Вот уместил в 375 кб (картинки, аудио файл, скины)

bosenkov5, Выше написано не только для вас, но и для всех - кто решил повторить ошибку.


Цитата:

Цитата R.i.m.s.k.y.
тем более что в скрипте ничего экстраординарного »

в большинстве случаев как правило "скрипты-г". Ничего кроме ошибок и повторяющихся процедур там не увидишь. По этому: Действительно прятать нечего.

Цитата:

Цитата nik1967
задача почти невыполнимая. »

Я бы сказал очень геморройная.

nik1967 25-07-2014 17:30 2381249

Цитата:

Цитата Nordek
И ещё раз: вы не читаете. »

Чукча не читатель, чукча писатель, однако.

Dinvin4ester 25-07-2014 19:26 2381292

Цитата:

Цитата sergey3695
Dinvin4ester, function SevenZipCommand(const hWnd: HWND; szParams: AnsiString; »

не найду где находится строка.

sergey3695 25-07-2014 21:17 2381323

Dinvin4ester, 90 строка.
Kashtan007, скинь с файлами. на картинке у тебя одно. а скинул. одни белые картинки. если размер большой, то заливай. не принципиально. я скачаю.

Kashtan007 25-07-2014 23:02 2381377

sergey3695, скинул скрипт в ЛС.
Спасибо за помощь)

Антон_Мураткин@vk 26-07-2014 13:54 2381549

Доброе время суток! Подскажите пожалуйста как в скрипте прописать 2 шт Splash'a чтобы показывались по очереди? Заранее благодарю!

Shift85 26-07-2014 14:13 2381555

Цитата:

Цитата Антон_Мураткин@vk
Подскажите пожалуйста как в скрипте прописать 2 шт Splash'a чтобы показывались по очереди? »

Как то так.

Добавь свои файлы. (isgsg.dll,Splash1.png,Splash2.png)

Антон_Мураткин@vk 26-07-2014 14:42 2381564

Shift85, Не показывает Splash. Есть ещё какие нибудь способы?

Nordek 26-07-2014 15:09 2381577

Цитата:

Цитата Антон_Мураткин@vk
Не показывает Splash. »

Всё дело в том, что кто-то использует Unicode версию.

Gnom_aka_Lexander 26-07-2014 15:14 2381578

Цитата:

Цитата Антон_Мураткин@vk
Не показывает Splash »

в строке
Код:

procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer);
  external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';

string заменить на AnsiString и все будет показывать.
Вот так:
Код:

procedure ShowSplashScreen(p1:HWND;p2:AnsiString;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer);
  external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';


Dinvin4ester 26-07-2014 21:11 2381704

Цитата:

Цитата sergey3695
Dinvin4ester, 90 строка. »

на 90 строке у меня прекомп.Можно поточнее ? Спасибо.

sergey3695 26-07-2014 22:50 2381728

Dinvin4ester,
Код:

function SevenZipCommand(const hWnd: HWND; szParams: AnsiString; const lpArchiverCallback: Longint): Longint;
begin
    Result := SZ_ERROR;
    case szParams[1] of
        'a': ProgressPage.Description := 'Создание архива';
        'b': ProgressPage.Description := 'Тестирование производительности';
        'd': ProgressPage.Description := 'Удаление файлов из архива';
        'e': ProgressPage.Description := 'Извлечение файлов из архива';
        'l': ProgressPage.Description := 'Список файлов архива';
        't': ProgressPage.Description := 'Тестирование файлов архива';
        'u': ProgressPage.Description := 'Обновление файлов в архиве';
        'x': ProgressPage.Description := 'Извлечение файлов из архива с полными путями';
    end;
    if lpArchiverCallback <> 0 then szParams := Format('%s -hide', [szParams]);
    CharToOemBuff(szParams);
    try
        if lpArchiverCallback <> 0 then
        begin
            hMsg1Label := ProgressPage.Msg1Label.Handle;
            hMsg2Label := ProgressPage.Msg2Label.Handle;
            //show progress page
            ProgressPage.Show;
            ProgressPage.ProgressBar.Show;
            //set callback
            SevenZipSetOwnerWindowEx(hWnd, lpArchiverCallback);
        end;
        Result := SevenZip(hWnd, szParams, '', 0);
    finally
        if lpArchiverCallback <> 0 then
        begin
            ProgressPage.Hide;
            SevenZipKillOwnerWindowEx(hWnd);
        end;
    except
        Result := SZ_DLLERROR;
    end;
end;

куда уж точнее? в том что мне кидал, там 90 строка.

Dinvin4ester 27-07-2014 11:02 2381795

sergey3695,
Хоть убейте,но не найду этого.

Антон_Мураткин@vk 27-07-2014 17:28 2381879

Gnom_aka_Lexander, Благодарю, это слово всё исправило.

Dinvin4ester 27-07-2014 17:44 2381883

sergey3695,
Или я что-то не то смотрю или вы скачали другой скрипт. Я не использую внешние упаковщики,а скрипт расчитан на них и из-за этого не видно прогресс бара,пользуюсь только средствами инно.
Поэтому и прошу помощи и подсказки.

El Sanchez 28-07-2014 12:06 2382153

Цитата:

Цитата Dinvin4ester
Я не использую внешние упаковщики,а скрипт расчитан на них и из-за этого не видно прогресс бара »

Dinvin4ester, с чего вдруг такое утверждение? Внешние упаковщики вообще никак не влияют на отображение элементов управления.
Цитата:

Цитата Dinvin4ester
пользуюсь только средствами инно »

Dinvin4ester, а ботва уже стандартное средство? Используя ботву, все скрывают OuterNotebook с почти всеми элементами управления, используемых в установщике, потом имеют геморрой в виде имитации перехода между страницами инсталлятора и поиска пропавших элементов. Если хотите видеть ProgressGauge, то меняйте ему родителя на WizardForm, в нужный момент показывайте/скрывайте. Это подсказка.

Nordek 28-07-2014 14:42 2382221

Цитата:

Цитата Антон_Мураткин@vk
это слово всё исправило. »

Упоминалось ранее - это говорит о том, что люди не читают тему.

Антон_Мураткин@vk 28-07-2014 15:29 2382239

Доброе время суток! Подскажите пожалуйста установил в скрипт музыку, всё играет нормально кнопка вкл выкл есть работает. Но при отмене или завершение установки, музыка ещё играет секунд 3-4. Как с этим бороться? Может кто знает! Заранее благодарю!!!

Dinvin4ester 28-07-2014 15:52 2382248

El Sanchez,
убрал и поменял , но все-равно не видно прогрессбара,помогите!

Dodakaedr 28-07-2014 17:24 2382331

Цитата:

Цитата Антон_Мураткин@vk
при отмене или завершение установки, музыка ещё играет секунд 3-4. »

Знаю, что такое бывает если не указывать BASS_DeInit в процедуре DeinitializeSetup.
Код:

procedure DeinitializeSetup;
begin
BASS_DeInit;
end;


sergey3695 28-07-2014 18:15 2382364

Dinvin4ester, вот что вы кидали http://www.oszone.net/go.php?url=htt...1&d=1406151895
там 90 строка. кусок скрипта отсюда. да и в шапке тот же скрипт для работы с zip архивами. прям незнаю. потерялся что-ли.

El Sanchez 28-07-2014 18:22 2382368

Цитата:

Цитата Dinvin4ester
убрал и поменял , но все-равно не видно прогрессбара,помогите! »

Dinvin4ester, нечего там убирать, там добавлять надо. Алгоритм решения задачи примерно такой: 1) ProgressGauge не виден, т.к. его прародитель OuterNotebook скрыт, делаем родителем ProgressGauge форму WizardForm - после OuterNotebook.Hide пишем ProgressGauge.Parent := WizardForm; 2) Запускаем инсталлятор, видим его сразу на стартовой странице. Если размер формы нестандартный, то видим его еще и не там, где хотелось бы. Задаем новые координаты там же, где и задавали ему родителя, пишем ProgressGauge.Left := 100500; ProgressGauge.Top := 100500;
3) На стартовой странице ему делать нечего, поэтому там, где задавали координаты, скрываем его, пишем ProgressGauge.Hide. Где он должен быть показан в первый раз? Правильно, на странице InstallingPage. В какой стандартной процедуре можно что-либо делать в зависимости от того, какая в данный момент текущая страница? Правильно, в CurPageChanged. Пишем условие любыми способами, при котором на странице InstallingPage ProgressGauge будет показан, а на FinishedPage (либо InfoAfterPage, если используется) будет скрыт, например, if CurPage = wpInstalling then WizardForm.ProgressGauge.Show; if CurPage = wpFinished then WizardForm.ProgressGauge.Hide;

alenov 28-07-2014 21:07 2382419

Добрый день!

Для меня программа Inno Setup еще незнакомая. Пытаюсь использовать ее для создания дистрибутива своей программы. Возникла проблема, что при записи в дистрибутив файлов в папку, они не инсталируются, если использовать следующий тэг:

Код:

Source: "C:\Science\Equilibrium\Code\Crono_sources\Modeling scenarios\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
а если такой:

Код:

Source: "C:\Science\Equilibrium\Code\Crono_sources\Modeling scenarios\Test.ini"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
то файл ini инсталируется в корень. Как правильно записывать файлы во вложенную папку?

Антон_Мураткин@vk 28-07-2014 21:20 2382427

Dodakaedr, Такие строчки были только чуть-чуть в другом месте. Благодарю за подсказку!

alenov 28-07-2014 22:06 2382450

С задачей описанной выше я справился (прописал загрузку каждого файла в специальную папку), но столкнулся с другой проблемой. В системной папке с программами, куда я предполагаю по умалчанию устанавливать свою программу, у нее ограниченная функциональность. Если то же самое просто перекопировать в любую другую папку, то все работает, а в этой системной происходят разные ошибки. Как это исправить?

Если права не администратора, то в Program Files разрешено только чтение, а мне нужно делать создание и удаление файлов. Это вообще можно релизовать?

R.i.m.s.k.y. 29-07-2014 07:32 2382584

Цитата:

Цитата alenov
Если права не администратора, то в Program Files разрешено только чтение, а мне нужно делать создание и удаление файлов. Это вообще можно релизовать? »

для этого в системе есть папки {appdata} и {commonappdata}
ставь туда

Nordek 29-07-2014 09:03 2382602

Цитата:

Цитата alenov
то в Program Files разрешено только чтение »

Хотите чтоб например в папке "My Program" (C:\Program Files\My Program) можно было перемещать из папки, редактировать в папке что либо без запроса администратора?

Например: Программа создаёт файл конфигурации ini
Условие: Файл конфигурации ini создаётся рядом с программой.
Если в Windows 7 запустить программу из под администратора, то файл может перезаписываться.
Если в Windows 7 запустить программу обычным способом, то файл не перезапишется а далее может последовать ошибка. В лучшем случае если файл конфигурации ini будет создан в "C:\Users\%UserName%\AppData\Local\VirtualStore".

Цитата:

Цитата alenov
Это вообще можно релизовать? »

Средствами Inno? Конечно. Но небезопасно по отношению к системе, т.е неправильным действием можно нарушить безопасность всей системы.

По этому поводу с El Sanchez-ом можно так сказать уже обсуждали примерно отсюда. Тогда, либо меня не поняли, либо я не правильно написал - что в итоге ни к чему хорошему не привело.

В справке написано, про Permissions почитайте.

alenov, В вашем случае: если будете применять Permissions, то чтобы избежать проблем с нарушением безопасности системы, нужно либо Запретить пользователю менять место установки приложения
Код:

DisableDirPage=yes


либо жёстко привязывать папку:
Код:

[Files]
Source: MyProg.exe; DestDir: {app}\My Program; Flags: ignoreversion

а затем к My Program применять Permissions.
Код:

[Dirs]
Name: {app}\My Program

Рекомендую сначала почитать справку, прежде чем что-то предпринимать.

habib2302 29-07-2014 17:45 2382860

Доброе время суток. В моем репаке AIDA64 присутствуют 4 редакции т.е 4 программы и дело в том, что если использовать параметр установки
Код:

[Setup]
AppendDefaultDirName=yes

и этот код для изменение пути установки в зависимости от выбранного компонента
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpSelectComponents:
    begin
if IsComponentSelected('AIDA64\I\1') then
  begin
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultDirName")}')) + '{#AIDA641}'
    WizardForm.GroupEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultGroupName")}')) + '{#AIDA641}'
  end else
  if IsComponentSelected('AIDA64\I\3') then
  begin
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultDirName")}')) + '{#AIDA642}'
    WizardForm.GroupEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultGroupName")}')) + '{#AIDA642}'
  end else
  if IsComponentSelected('AIDA64\I\2') then
  begin
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultDirName")}')) + '{#AIDA643}'
    WizardForm.GroupEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultGroupName")}')) + '{#AIDA643}'
    end else
      if IsComponentSelected('AIDA64\I\4') then
  begin
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultDirName")}')) + '{#AIDA644}'
    WizardForm.GroupEdit.Text := AddBackslash(ExpandConstant('{#SetupSetting("DefaultGroupName")}')) + '{#AIDA644}'
    end else
      if IsComponentSelected('AIDA64\P\1') then
  begin
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#AIDA641} Portable'
  end else
  if IsComponentSelected('AIDA64\P\3') then
  begin
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#AIDA642} Portable'
  end else
  if IsComponentSelected('AIDA64\P\2') then
  begin
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#AIDA643} Portable'
  end else
    if IsComponentSelected('AIDA64\P\4') then
  begin
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#AIDA644} Portable'
      end;
    end;
  end;
end;

работать не будет если изменить путь установки через кнопку обзор

было так


а после выбора другого каталога стало так


http://rghost.ru/57153259

Антон_Мураткин@vk 30-07-2014 01:48 2383034

Доброе время суток!!
Возможно ли добавить в категорию [Tasks] без создания нового лейбла, пару слов? И что бы они были без чекбокса?
Заранее благодарю.

Антон_Мураткин@vk 30-07-2014 02:27 2383035

Всё спасибо. Решение нашёл сам.

habib2302 31-07-2014 11:57 2383575

мне хоть кто-нибудь ответит на мой вопрос http://forum.oszone.net/post-2382860-1242.html

Антон_Мураткин@vk 31-07-2014 22:33 2383851

Доброе время суток. Ребят кто знает как прописать путь главной папки и под-папок вот в этом примере.

Код:

-ep1 -dses --dirs -s; -lc- -di -i2 -r -w.\ -msrep+delta+lzma:a1:mfbt4:d32m:fb273:mc10000:lc8#@Data1.lst#Setup-1.bin
-ep1 -dses --dirs -s; -lc- -di -i2 -r -w.\ -msrep+delta+lzma:a1:mfbt4:d32m:fb273:mc10000:lc8#@Data2.lst#Setup-2.bin

Какие тут ошибки, кто знает?
Заранее благодарю!

R.i.m.s.k.y. 31-07-2014 22:46 2383856

Цитата:

Цитата Антон_Мураткин@vk
Если тут ошибки? Кто знает под скажите. »

Есть ли тут ошибки? Кто знает, подскажите




это были не опята не инно

habib2302, секция компонентов идет после выбора директории, вызов некорректен

habib2302 31-07-2014 23:14 2383873

R.i.m.s.k.y., как раз таки нет. мой скрипт изучи (ссылка в моем прошлом посте http://rghost.ru/57153259).
поменять страницы SelectDirPage и SelectComponentsPage местами

Код:

[Setup]
AppName=My program
AppVerName=My program 1.5
DefaultDirName={pf}\My program
;DisableDirPage=True

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Components]
Name: WB; Description: 'Мой компьютер' - Настройки; ExtraDiskSpaceRequired: 1048576

[code]
function OnShouldSkipPage(Sender: TWizardPage): Boolean;
begin
    if WizardForm.ComponentsList.Items.Count > 0 then WizardForm.Tag:= 1; // отображаются страницы выбора папки и компонентов
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
  wpSelectDir: if WizardForm.Tag = 1 then
    begin
        WizardForm.SelectDirPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
        WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectComponents)
        WizardForm.Hint:= WizardForm.PageDescriptionLabel.Caption; // запомнить SetupMessage(msgSelectDirDesc)
        WizardForm.PageDescriptionLabel.Caption:= SetupMessage(msgSelectComponentsDesc)
    end;
  wpSelectComponents: if WizardForm.Tag = 1 then
    begin
        WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
        WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
        WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir)
        WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint // иначе вместо названия программы [name]
    end;
  end;
End;

Procedure InitializeWizard;
Begin
    PageFromID(wpSelectDir).OnShouldSkipPage:= @OnShouldSkipPage
end;


Антон_Мураткин@vk 31-07-2014 23:20 2383874

R.i.m.s.k.y., А вы тут находитесь по поиску ошибок орфографии?

R.i.m.s.k.y. 01-08-2014 08:07 2383958

habib2302, кмк ошибка в том что ты жеско задаешь путь, я бы попробовал AddBackslash(ExpandConstant('{app}')) + '{#AIDA641}'

Антон_Мураткин@vk, http://www.bfm.ru/news/261172

Цитата:

Цитата Антон_Мураткин@vk
Какие тут ошибки, кто знает? »

непонятный код в иннотеме

habib2302 01-08-2014 09:43 2384007

R.i.m.s.k.y., причем тут это. я говорю, что при выборе другого каталога установки изначальный путь сбивается (посмотри скриншоты в этом посте http://forum.oszone.net/post-2382860-1242.html)
в коде прописано так
Код:

AddBackslash(ExpandConstant('{app}')) + '{#AIDA641}'
а в разделе Setup прописано так
Код:

DefaultDirName={pf}\FinalWire
и еще в добавок стоит параметр установки
Код:

AppendDefaultDirName=yes

R.i.m.s.k.y. 01-08-2014 10:03 2384016

Цитата:

Цитата habib2302
в коде прописано так »

хм
я видел
AddBackslash(ExpandConstant('{defaultdirname}')) + '{#AIDA641}' (по памяти, пишу с работы)
это и смутило

sergey3695 01-08-2014 11:02 2384031

Цитата Антон_Мураткин@vk:
Какие тут ошибки, кто знает? »
это батник. темой ошибся.
может так?
Код:

arc.exe a -ep1 -dses --dirs -s; -lc- -di -i2 -r -w.\ -msrep+delta+lzma:a1:mfbt4:d32m:fb273:mc10000:lc8 Data-1.bin packeddata\*
@pause

packeddata\* из этой папки берет для запаковки. Data-1.bin название запакованного. я справку не открывал и уже не помню что там точно что обозначает. поэтому запаковывает, но может что лишнее. где-то бред может быть.
Цитата R.i.m.s.k.y.:
секция компонентов идет после выбора директории, вызов некорректен »
я б руки оторвал за то что ботву туда запихнул....
Цитата R.i.m.s.k.y.:
кмк ошибка в том что ты жеско задаешь путь, я бы попробовал AddBackslash(ExpandConstant('{app}')) + '{#AIDA641}' »
да не задает он путь как нужно. а тупо меняется надпись в эдите. а выбор папки так не сделать.
Цитата habib2302:
мне хоть кто-нибудь ответит на мой вопрос »
Вот...

R.i.m.s.k.y. 01-08-2014 11:17 2384036

Цитата:

Цитата sergey3695
а тупо меняется надпись в эдите. »

это меня тоже смутило
но т.к я не знаю как править путь после выбора - решил не возбухать :)

Цитата:

Цитата sergey3695
это батник. темой ошибся. »

я воще подумал что nsis

saurn 01-08-2014 14:11 2384101

Цитата:

Цитата sergey3695
а тупо меняется надпись в эдите »

Текст в эдите и есть путь.

habib2302 01-08-2014 15:26 2384134

sergey3695, огромное спасибо. хоть один человек меня понял

sergey3695 01-08-2014 17:06 2384179

saurn, там нужно было сделать чтобы и при нажатии "обзор" измененялась прибавляемая часть пути.

habib2302 01-08-2014 19:14 2384208

sergey3695, один нюанс появился. не работает команда /DIR

astafev_roma 01-08-2014 20:27 2384225

Доброго времени суток уважаемые пользователи.

Хотел бы попросить у опытных пользователей помощи:

Возможно ли добавить на страницу выбора заданий (tasks) небольшое окошко и чтобы в нем выводилась дополнительная информация (инструкция) из .rtf файла?

Habetdin 01-08-2014 21:45 2384246

Цитата:

Цитата astafev_roma
Возможно ли добавить на страницу выбора заданий (tasks) небольшое окошко и чтобы в нем выводилась дополнительная информация (инструкция) из .rtf файла? »


Показать исходный код »
Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[Files]
// Можно и .rtf
Source: compiler:Examples\Readme.txt; Flags: dontcopy ignoreversion solidbreak

[Tasks]
Name: example1; Description: Первый пошёл; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: example2; Description: Второй...; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: example3; Description: Третий...; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
Name: example4; Description: Кто все эти люди?; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Code]
{ RedesignWizardFormBegin } // Don't remove this line!
// Don't modify this section. It is generated automatically.
var
  RichEditViewer1: TRichEditViewer;
  // сохраняйте следующую переменную при редактировании элементов в FormDesigner'е, а то потеряется при перезаписи :)
  RichEditViewer1Text: AnsiString;

procedure RedesignWizardForm;
begin
  with WizardForm.TasksList do
  begin
    Height := ScaleY(128);
  end;

  { RichEditViewer1 }
  RichEditViewer1 := TRichEditViewer.Create(WizardForm);
  with RichEditViewer1 do
  begin
    Name := 'RichEditViewer1';
    Parent := WizardForm.SelectTasksPage;
    Left := ScaleX(0);
    Top := ScaleY(168);
    Width := ScaleX(417);
    Height := ScaleY(65);
    ScrollBars := ssVertical;
  end;

  RichEditViewer1.TabOrder := 2;

{ ReservationBegin }
  ExtractTemporaryFile('Readme.txt');
  LoadStringFromFile(ExpandConstant('{tmp}/Readme.txt'), RichEditViewer1Text);
  RichEditViewer1.RTFText := RichEditViewer1Text;
{ ReservationEnd }
end;
// Don't modify this section. It is generated automatically.
{ RedesignWizardFormEnd } // Don't remove this line!

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D0030106B02000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E744865696768740368010B436C69656E74576964746803F1010C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C6963697457696474680301020E4578706C69636974486569676874038E010D506978656C73506572496E636802600A54657874486569676874020D00F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C69636974576964746803F1010E4578706C696369744865696768740339010000F110544E65774E6F7465626F6F6B5061676509496E6E6572506167650D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724E6F7465626F6F6B00F110544E65774E6F7465626F6F6B506167650B4C6963656E7365506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED000000F110544E65774E6F7465626F6F6B506167650F53656C6563745461736B73506167650D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED0000F110544E6577436865636B4C697374426F78095461736B734C697374064865696768740380000E4578706C6963697448656967687403800000000F5452696368456469745669657765720F526963684564697456696577657231044C656674020003546F7003A80005576964746803A101064865696768740241085461624F72646572020200000000000000

Внешний вид можно отредактировать с помощью FormDesigner'а в расширенной версии Inno Setup

roman_kudin@vk 01-08-2014 23:18 2384284

Подскажите еще один момент.
DefaultDirName=MyApplication
И пры выборе папки, оно везде лепит .../MyApplication
Пример: Я вы бираю папку с программой куда нужно установить файлы, то есть я выбираю уже папку MyApplication, но выходит:"C:/Soft/MyApplication/MyApplication".
Буду очень благодарен если поможете новичку.

Dodakaedr 01-08-2014 23:20 2384285

Цитата:

Цитата roman_kudin@vk
DefaultDirName=MyApplication »

Код:

DefaultDirName={pf}\MyApplication

roman_kudin@vk 01-08-2014 23:45 2384298

Всеравно выходит:"C:/Soft/MyApplication/MyApplication"

Dodakaedr 01-08-2014 23:50 2384299

roman_kudin@vk, В секции [Files] в "DestDir:" нужно указать {app}.
Пример:
Код:

Source: "icon.ico"; DestDir: "{app}";
а у вас наверное DestDir: "{app}\MyApplication"

roman_kudin@vk 01-08-2014 23:55 2384300

Я понимаю, у меня стоит.
Код:

[Setup]
DefaultDirName={sd}\MyApplication

[Files]
Source: "D:\3.9.2\*"; DestDir: "{app}\path\3.9.2"; Components: g0\c01; Flags:  ignoreversion recursesubdirs createallsubdirs


saurn 02-08-2014 00:01 2384303

roman_kudin@vk, в секции [Setup]
Код:

AppendDefaultDirName=no
Рекомендую чаще обращатся к справке Inno

roman_kudin@vk 02-08-2014 00:13 2384305

Цитата:

Цитата saurn
roman_kudin@vk, в секции [Setup]
Код:
AppendDefaultDirName=no
Рекомендую чаще обращатся к справке Inno »

Спасибо огромное

Еще одна проблемка. Как вообще убрать выбор типа установок? То есть выбор "Полная, выборочная". Через редактор форм не выходит.

Dodakaedr 02-08-2014 00:23 2384311

Цитата:

Цитата roman_kudin@vk
Еще одна проблемка. Как вообще убрать выбор типа установок? То есть выбор "Полная, выборочная". Через редактор форм не выходит. »

Секция [Types]. Она определяет типы установки, которые инсталлятор покажет на странице Выбор компонентов.

astafev_roma 02-08-2014 08:51 2384366

Цитата:

Цитата Habetdin
Внешний вид можно отредактировать с помощью FormDesigner'а в расширенной версии Inno Setup »

Огромное спасибо вам.

roman_kudin@vk 02-08-2014 10:29 2384379

Цитата:

Цитата Dodakaedr
Секция [Types]. Она определяет типы установки, которые инсталлятор покажет на странице Выбор компонентов. »

Это я знаю, меня интересует как вообще убрать выбор типов установки, что бы в установщике не было возможности выбирать.

Уже получилось. Просто оставил один тип установки и оно ищезло. Еще раз пасибо за помощь.

Raz3r 03-08-2014 07:47 2384600

Как разблокировать все формы в IS Form Desiner?

Dodakaedr 03-08-2014 09:00 2384610

Raz3r, Справку откройте, там все расписано.

Raz3r 03-08-2014 09:25 2384615

Dodakaedr, у меня Inno Setup Ultra я не знаю где там в справке искать
Я правда не могу найти, там нету!!

saurn 03-08-2014 11:14 2384639

Raz3r, все страницы мастера там присутствуют в полном объёме, за исключением формы деинсталятора, выбора дисков, выбора папок и другие.
А справка, вот она:

Raz3r 03-08-2014 11:34 2384642

saurn, да знаю я где справка))) Где там написано про то как разблокировать формы в Form Desiner?

saurn 03-08-2014 11:37 2384645

Raz3r, о каких формах идет речь?

Raz3r 03-08-2014 11:57 2384654

saurn, ну в редакторе форм лежат стандартные формы типо "Установка программы ...". Они не удаляются, их надо удалить.

saurn 03-08-2014 12:01 2384657

Raz3r, удалить предустановленные страницы мастера нельзя. Можно лишь исключить(пропустить)
Код:

function ShouldSkipPage(PageID: Integer): Boolean;
begin
    case PageID of
        wpSelectDir, wpReady: Result := True;
    end;
//в данном случае пропускаются страница выбора папки и страница готовности
end;

ID страниц:
Код:

wpWelcome = 1;
wpLicense = 2;
wpPassword = 3;
wpInfoBefore = 4;
wpUserInfo = 5;
wpSelectDir = 6;
wpSelectComponents = 7;
wpSelectProgramGroup = 8;
wpSelectTasks = 9;
wpReady = 10;
wpPreparing = 11;
wpInstalling = 12;
wpInfoAfter = 13;
wpFinished = 14;


habib2302 03-08-2014 13:00 2384679

Как конвертировать .reg в .iss в большом объеме.
Надеюсь видео будет полезным!

Raz3r 03-08-2014 15:03 2384721

Цитата:

удалить предустановленные страницы мастера нельзя. Можно лишь исключить(пропустить)
А если я например окно растягиваю, а фон не растягивается так же, удалить его не могу, что делать?

Nordek 03-08-2014 17:03 2384754

Raz3r, У меня жуткая лень перепечатывать, предоставлю ссылки: Сообщения: #2115, #1665.

Поиск конечно не работает. Когда-то надо начинать пользоваться фильтрами и поиском. А ещё в помощь заглядывать.

Для поиска: растянуть форму, расширить форму, увеличить форму, растянуть страницу, расширить страницу, увеличить страницу, удалить форму, скрыть форму, спрятать форму, исключить форму, пропустить форму, удалить страницу, скрыть страницу, спрятать страницу, исключить страницу, пропустить страницу.

Le9ent 03-08-2014 17:09 2384756

-delete-

Raz3r 03-08-2014 17:35 2384765

Nordek, вводил в поиске и перерыл всё что можно не нашел

Raz3r 04-08-2014 18:00 2385150

Цитата:

with WizardForm.WelcomePage do
begin
Height := ScaleY(10);
Width := ScaleX(10);
end;
не помогает, лист не убирается и не изменяется всё-равно. А как удалить или отключить этот WelcomePage?

Raz3r 04-08-2014 20:17 2385190

И ещё параллельно возникло два вопроса: Как сделать, чтоб во время установки была кнопка, нажав на которую можно было бы поставить на паузу распаковку, а потом вновь запустить?
Как сделать, чтоб во время установки было +два прогресс бара, которые отображали бы установку компонентов(установка компонентов должна проходить одновременно с основной установкой и только по завершению всех установок выводилось окно завершения)?

Raz3r 05-08-2014 16:32 2385393

Неужели никто не может подсказать? С WelсomePage наконец-то разобрался, а вот что делать с остальным?

nik1967 05-08-2014 17:39 2385413

Цитата:

Цитата Raz3r
Как сделать, чтоб во время установки была кнопка, нажав на которую можно было бы поставить на паузу распаковку, а потом вновь запустить? »

Зачем? Смысл? При нажатии на отмену происходит то-же самое - распаковка ставится на паузу, и если не подтвердить отмену - продолжается дальше.
Цитата:

Цитата Raz3r
установка компонентов должна проходить одновременно с основной установкой »

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

Raz3r 05-08-2014 18:03 2385420

nik1967, просто если на паузу поставить это как-то посолиднее выглядит, допустим приостановить, чтоб временно отключить нагрузку на систему. Как при копирование в Windows 8.1 неплохо реализована задумка.

Цитата:

Ну это вы батенька завернули - инно не может параллельно выполнять несколько действий, только последовательно.
Хорошо, а то же самое только последовательно можно?

Raz3r 05-08-2014 20:21 2385462

Отлично, теперь SelectDirPage не изменяется, зажимаю я shift+мышка на SelectDirPage, затем отпускаю Shift и пытаюсь изменить размер, а ничего не получается( Капец, Inno Setup убивает уже такими выходками.

Nordek 05-08-2014 21:16 2385494

#1283, #1284, #1285, #1286
#1288, #1289
Raz3r
, Может хватит уже? Это форум а не чат - Об использовании конференции в качестве чата.. Используйте функцию редактирования: Могу ли я редактировать свои сообщения?

Цитата:

Цитата Raz3r
Отлично, теперь SelectDirPage не изменяется, зажимаю я shift+мышка на SelectDirPage, затем отпускаю Shift и пытаюсь изменить размер »

Ничего не понял.
Код:

[Code]
procedure RedesignWizardForm;
begin
  with
WizardForm.DirEdit do
  begin
   
Width := ScaleX(236);
    Height := ScaleY(45);
  end;
end;

procedure InitializeWizard();
begin
 
RedesignWizardForm;
end;


Raz3r 06-08-2014 08:38 2385599

Nordek, лучшеб помогли мне чем 100 раз одно и тоже копировать вставлять.
В дизайнере форм в Inno Setup Ultra 5.5.1 во вкладке SelectDirPage есть такой лист, на котором лежат все остальные элементы. Называется он SelectDirPage. Он заблокирован, то есть я не могу его не удалить не растянуть, когда удаляю пишет "Компонент SelectDirPage или его части заблокированы". Ваш код я прописывал 100 раз, он не помогает, в ручную растягивать тоже не помогает. Ссылки, которые вы мне кидаете, я уже изучил наизусть и они тоже не помогают!
Я растянул основное окно и мне очень нужно растянуть этот SelectDirPage, потому что все остальные элементы дальше его границ не выходят.

nik1967 06-08-2014 10:13 2385620

Цитата:

Цитата Raz3r
Я растянул основное окно и мне очень нужно растянуть этот SelectDirPage, потому что все остальные элементы дальше его границ не выходят. »

Ну дак Nordek же давал ссылку, где всё расписано, как надо делать, куда уж ещё проще?

Так, что ли?
Код:

[ISFormDesigner]
WizardForm=FF0A005457495A415244464F524D003010FD03000054504630F10B5457697A617264466F726D0A57697A617264466F726D0C436C69656E7448656967687403C5010B436C69656E7457696474680329030C4578706C696369744C65667402000B4578706C69636974546F7002000D4578706C6963697457696474680339030E4578706C6963697448656967687403EB010D506978656C73506572496E636802600A54657874486569676874020D00F10A544E6577427574746F6E0C43616E63656C427574746F6E044C65667403BC0203546F700397010C4578706C696369744C65667403BC020B4578706C69636974546F700397010000F10A544E6577427574746F6E0A4E657874427574746F6E044C65667403670203546F700397010C4578706C696369744C6566740367020B4578706C69636974546F700397010000F10A544E6577427574746F6E0A4261636B427574746F6E044C656674031C0203546F700397010C4578706C696369744C656674031C020B4578706C69636974546F700397010000F10C544E65774E6F7465626F6F6B0D4F757465724E6F7465626F6F6B055769647468032903064865696768740391010D4578706C6963697457696474680329030E4578706C6963697448656967687403910100F110544E65774E6F7465626F6F6B506167650B57656C636F6D65506167650D4578706C69636974576964746803F1010E4578706C696369744865696768740339010000F110544E65774E6F7465626F6F6B5061676509496E6E6572506167650C4578706C696369744C65667402100B4578706C69636974546F7002080D4578706C69636974576964746803F1010E4578706C6963697448656967687403390100F10C544E65774E6F7465626F6F6B0D496E6E65724E6F7465626F6F6B05576964746803D902064865696768740335010D4578706C69636974576964746803D9020E4578706C6963697448656967687403350100F110544E65774E6F7465626F6F6B506167650B4C6963656E7365506167650D4578706C69636974576964746803D9020E4578706C696369744865696768740335010000F110544E65774E6F7465626F6F6B506167650D53656C656374446972506167650C4578706C696369744C65667402C00D4578706C69636974576964746803A1010E4578706C6963697448656967687403ED0000F10E544E6577537461746963546578740E4469736B53706163654C6162656C03546F700318010B4578706C69636974546F700318010000F10A544E6577427574746F6E0F44697242726F777365427574746F6E044C65667403760203546F7002440C4578706C696369744C6566740376020B4578706C69636974546F7002440000F10554456469740744697245646974055769647468036C020D4578706C696369745769647468036C0200000000000000

[Code]
{ RedesignWizardFormBegin } // Не удалять эту строку!
// Не изменять эту секцию. Она создана автоматически.
procedure RedesignWizardForm;
begin
  with WizardForm do
  begin
    AutoScroll := False;
    ClientHeight := ScaleY(453);
    ClientWidth := ScaleX(809);
  end;

  with WizardForm.CancelButton do
  begin
    Left := ScaleX(700);
    Top := ScaleY(407);
  end;

  with WizardForm.NextButton do
  begin
    Left := ScaleX(615);
    Top := ScaleY(407);
  end;

  with WizardForm.BackButton do
  begin
    Left := ScaleX(540);
    Top := ScaleY(407);
  end;

  with WizardForm.OuterNotebook do
  begin
    Width := ScaleX(809);
    Height := ScaleY(401);
  end;

  with WizardForm.InnerNotebook do
  begin
    Width := ScaleX(729);
    Height := ScaleY(309);
  end;

  with WizardForm.DiskSpaceLabel do
  begin
    Top := ScaleY(280);
  end;

  with WizardForm.DirBrowseButton do
  begin
    Left := ScaleX(630);
    Top := ScaleY(68);
  end;

  with WizardForm.DirEdit do
  begin
    Width := ScaleX(620);
  end;

{ ReservationBegin }
  // Вы можете добавить ваш код здесь.

{ ReservationEnd }
end;
// Не изменять эту секцию. Она создана автоматически.
{ RedesignWizardFormEnd } // Не удалять эту строку!

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;


Если так, то это всё делается в редакторе форм.

Цитата:

Цитата Raz3r
Как сделать, чтоб во время установки была кнопка, нажав на которую можно было бы поставить на паузу распаковку, а потом вновь запустить? »

Переделал стандартный скрипт от IsDone для примера - с кнопкой пауза, хотя зачем это, так до сих пор и не пойму
Код:

#define NeedSize "5000000000"

#define NeedMem 512

#define SecondProgressBar

;#define Components

;#define records

;#define facompress

;#define PrecompInside
;#define SrepInside
;#define MSCInside
;#define precomp "0.42"
;#define unrar
;#define XDelta
;#define PackZIP

[Setup]
AppName=ISDone
AppVerName=ISDone
DefaultDirName={pf}\ISDone
DefaultGroupName=ISDone Example
OutputDir=.
OutputBaseFilename=Setup
VersionInfoCopyright=ProFrager
SolidCompression=yes
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif

#ifdef Components
[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
Name: text\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 200000000
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 500000000
Name: voice\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 600000000
#endif

[Registry]
Root: HKLM; Subkey: Software\ProFrager; ValueName: path; ValueType: String; ValueData: {app}; Flags: uninsdeletekey; Check: CheckError
Root: HKLM; Subkey: Software\ProFrager; ValueName: name; ValueType: String; ValueData: Data; Flags: uninsdeletekey; Check: CheckError

[Icons]
Name: {group}\Удалить пример ISDone; Filename: {app}\unins000.exe; WorkingDir: {app}; Check: CheckError
Name: {commondesktop}\Удалить пример ISDone; Filename: {app}\unins000.exe; WorkingDir: {app}; Check: CheckError

[Tasks]
Name: VCCheck; Description: Установить Microsoft Visual C++ 2005 Redist
Name: PhysXCheck; Description: Установить Nvidia PhysX

[Run]
Filename: {src}\Redist\vcredist_x86.exe; Parameters: /q; StatusMsg: Устанавливаем Microsoft Visual C++ 2005 Redist...; Flags: skipifdoesntexist; Tasks: VCCheck; Check: CheckError
Filename: {src}\Redist\PhysX.exe; Parameters: /qn; StatusMsg: Устанавливаем Nvidia PhysX...; Flags: skipifdoesntexist; Tasks: PhysXCheck; Check: CheckError

[Files]
Source: Include\English.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef PrecompInside
Source: Include\CLS-precomp.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll1.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef SrepInside
Source: Include\CLS-srep.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef MSCInside
Source: Include\CLS-MSC.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef facompress
Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp
  #if precomp == "0.38"
  Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
  #else
    #if precomp == "0.4"
    Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
    #else
      #if precomp == "0.41"
      Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
      #else
        #if precomp == "0.42"
        Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
        #else
        Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
        Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
        Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
        Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
        #endif
      #endif
    #endif
  #endif
#endif
#ifdef unrar
Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef XDelta
Source: Include\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PackZIP
Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif

[CustomMessages]
russian.ExtractedFile=Извлекается файл:
russian.Extracted=Распаковка архивов...
russian.CancelButton=Отменить распаковку
russian.Error=Ошибка распаковки!
russian.ElapsedTime=Прошло:
russian.RemainingTime=Осталось времени:
russian.EstimatedTime=Всего:
russian.AllElapsedTime=Время установки:
; пауза по русски
russian.Pause=Пауза
; продолжить по русски
russian.Resume=Продолжить

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[UninstallDelete]
Type: filesandordirs; Name: {app}

[Code]
const
  PCFonFLY=true;
  notPCFonFLY=false;
var
  LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2,LabelTime3: TLabel;
  ISDoneProgressBar1: TNewProgressBar;
#ifdef SecondProgressBar
  LabelPct2: TLabel;
  ISDoneProgressBar2:TNewProgressBar;
#endif
  MyCancelButton:TButton;
  PauseButton:TButton;    // объявляем свою кнопку пауза
  PauseFlag:boolean;      // объявляем флаг для разных состояний кнопки пауза
  ISDoneCancel:integer;
  ISDoneError:boolean;
  PCFVer:double;

type
  TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;

function WrapCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:ISDone.dll stdcall delayload';

function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function IS7ZipExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'IS7zipExtract@files:ISDone.dll stdcall delayload';
function ISRarExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'ISRarExtract@files:ISDone.dll stdcall delayload';
function ISPrecompExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISPrecompExtract@files:ISDone.dll stdcall delayload';
function ISSRepExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISSrepExtract@files:ISDone.dll stdcall delayload';
function ISxDeltaExtract(CurComponent:Cardinal; PctOfTotal:double; minRAM,maxRAM:integer; InName, DiffFile, OutFile: AnsiString; DeleteInFile, DeleteDiffFile:boolean):boolean; external 'ISxDeltaExtract@files:ISDone.dll stdcall delayload';
function ISPackZIP(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString;ComprLvl:integer; DeleteInFile:boolean):boolean; external 'ISPackZIP@files:ISDone.dll stdcall delayload';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):boolean; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall delayload';

function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean; external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer; external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean; external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar; external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean; external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISExec(CurComponent:Cardinal; PctOfTotal,SpecifiedProcessTime:double; ExeName,Parameters,TargetDir,OutputStr:AnsiString;Show:boolean):boolean; external 'ISExec@files:ISDone.dll stdcall delayload';

function SrepInit(TmpPath:PAnsiChar;VirtMem,MaxSave:Cardinal):boolean; external 'SrepInit@files:ISDone.dll stdcall delayload';
function PrecompInit(TmpPath:PAnsiChar;VirtMem:cardinal;PrecompVers:single):boolean; external 'PrecompInit@files:ISDone.dll stdcall delayload';
function FileSearchInit(RecursiveSubDir:boolean):boolean; external 'FileSearchInit@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean; external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean; external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean; external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean; external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean; external 'ResumeProc@files:ISDone.dll stdcall';

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct<=1000 then ISDoneProgressBar1.Position := OveralPct;
  LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
#ifdef SecondProgressBar
  if CurrentPct<=1000 then ISDoneProgressBar2.Position := CurrentPct;
  LabelPct2.Caption := IntToStr(CurrentPct div 10)+'.'+chr(48 + CurrentPct mod 10)+'%';
#endif
  LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-ScaleX(100));
  LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
  if PauseFlag = false then begin  // переделываем строки: прошло, осталось для кнопки пауза
    LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
    LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
  end else begin
    LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+ExpandConstant('{cm:Pause}');
    LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+'?';
  end;
  Result := ISDoneCancel;
end;

procedure CancelButtonOnClick(Sender: TObject);    // переделываем обработчик кнопки отмена, что бы не было ошибки при отмене во время паузы
begin
  if PauseFlag = false then begin
      SuspendProc;
      ISDoneProgressBar1.State:= npbsPaused;                // это чтобы красивше было :)
#ifdef SecondProgressBar
      ISDoneProgressBar2.State:= npbsPaused;
#endif
    if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then begin
      ISDoneCancel:=1;
      ResumeProc;
    end else begin
      ISDoneProgressBar1.State:= npbsNormal;
#ifdef SecondProgressBar
      ISDoneProgressBar2.State:= npbsNormal;
#endif
      ResumeProc;
    end;
  end else begin
        ResumeProc;
        SuspendProc;
    if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then begin
        ISDoneCancel:=1;
        ResumeProc;
    end else begin
        ResumeProc;
        SuspendProc;
    end;
  end;
end;

procedure PauseButtonOnClick(Sender: TObject);  // обработчик нажатия кнопки пауза
begin
  if PauseFlag = false then begin
    SuspendProc;
    PauseButton.Caption:=ExpandConstant('{cm:Resume}');
    ISDoneProgressBar1.State:= npbsPaused;      // это чтобы красивше было :)
#ifdef SecondProgressBar
    ISDoneProgressBar2.State:= npbsPaused;
#endif
    PauseFlag:= true;
  end else begin
    ResumeProc;
    PauseButton.Caption:=ExpandConstant('{cm:Pause}');
    ISDoneProgressBar1.State:= npbsNormal;
#ifdef SecondProgressBar
    ISDoneProgressBar2.State:= npbsNormal;
#endif
    PauseFlag:= false;
  end;
end;

procedure HideControls;
begin
  WizardForm.FileNamelabel.Hide;
  ISDoneProgressBar1.Hide;
  LabelPct1.Hide;
  LabelCurrFileName.Hide;
  LabelTime1.Hide;
  LabelTime2.Hide;
  MyCancelButton.Hide;
  PauseButton.Hide;  // скрываем свою скнопку пауза
#ifdef SecondProgressBar
  ISDoneProgressBar2.Hide;
  LabelPct2.Hide;
#endif
end;

procedure CreateControls;
var PBTop:integer;
begin
  PBTop:=ScaleY(50);
  ISDoneProgressBar1 := TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar1 do begin
    Parent  := WizardForm.InstallingPage;
    Height  := WizardForm.ProgressGauge.Height;
    Left    := ScaleX(0);
    Top      := PBTop;
    Width    := ScaleX(365);
    Max      := 1000;
  end;
  LabelPct1 := TLabel.Create(WizardForm);
  with LabelPct1 do begin
    Parent    := WizardForm.InstallingPage;
    AutoSize  := False;
    Left      := ISDoneProgressBar1.Width+ScaleX(5);
    Top      := ISDoneProgressBar1.Top + ScaleY(2);
    Width    := ScaleX(80);
  end;
  LabelCurrFileName := TLabel.Create(WizardForm);
  with LabelCurrFileName do begin
    Parent  := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := ISDoneProgressBar1.Width+ScaleX(30);
    Left    := ScaleX(0);
    Top      := ScaleY(30);
  end;
#ifdef SecondProgressBar
  PBTop:=PBTop+ScaleY(25);
  ISDoneProgressBar2 := TNewProgressBar.Create(WizardForm);
  with ISDoneProgressBar2 do begin
    Parent  := WizardForm.InstallingPage;
    Left    := ScaleX(0);
    Top      := PBTop+ScaleY(8);
    Width    := ISDoneProgressBar1.Width;
    Max      := 1000;
    Height  := WizardForm.ProgressGauge.Height;
  end;
  LabelPct2 := TLabel.Create(WizardForm);
  with LabelPct2 do begin
    Parent    := WizardForm.InstallingPage;
    AutoSize  := False;
    Left      := ISDoneProgressBar2.Width+ScaleX(5);
    Top      := ISDoneProgressBar2.Top + ScaleY(2);
    Width    := ScaleX(80);
  end;
#endif
  LabelTime1 := TLabel.Create(WizardForm);
  with LabelTime1 do begin
    Parent  := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := ISDoneProgressBar1.Width div 2;
    Left    := ScaleX(0);
    Top      := PBTop + ScaleY(35);
  end;
  LabelTime2 := TLabel.Create(WizardForm);
  with LabelTime2 do begin
    Parent  := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := LabelTime1.Width+ScaleX(40);
    Left    := ISDoneProgressBar1.Width div 2;
    Top      := LabelTime1.Top;
  end;
  LabelTime3 := TLabel.Create(WizardForm);
  with LabelTime3 do begin
    Parent  := WizardForm.FinishedPage;
    AutoSize := False;
    Width    := 300;
    Left    := 180;
    Top      := 200;
  end;
  MyCancelButton:=TButton.Create(WizardForm);
  with MyCancelButton do begin
    Parent:=WizardForm;
    Width:=ScaleX(135);
    Caption:=ExpandConstant('{cm:CancelButton}');
    Left:=ScaleX(355);
    Top:=WizardForm.cancelbutton.top;
    OnClick:=@CancelButtonOnClick;
  end;
  PauseButton:=TButton.Create(WizardForm);  // добавляем кнопку паузы
  with PauseButton do begin
    Parent:=WizardForm;
    Left:= ScaleX(8);
    Top:= ScaleY(327);
    Width:= ScaleX(75);
    Height:= ScaleY(23);
    Caption:=ExpandConstant('{cm:Pause}');
    OnClick:=@PauseButtonOnClick;
  end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
    PauseFlag:= false;    // устанавливаем флаг кнопки пауза в нужное состояние
  if (CurPageID = wpFinished) and ISDoneError then
  begin
    LabelTime3.Hide;
    WizardForm.Caption:= ExpandConstant('{cm:Error}');
    WizardForm.FinishedLabel.Font.Color:= clRed;
    WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
  end;
end;

function CheckError:boolean;
begin
  result:= not ISDoneError;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var Comps1,Comps2,Comps3, TmpValue:cardinal;
    FindHandle1,ColFiles1,CurIndex1,tmp:integer;
    ExecError:boolean;
    InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
  if CurStep = ssInstall then begin  //Если необходимо, можно поменять на ssPostInstall
    WizardForm.ProgressGauge.Hide;
    WizardForm.CancelButton.Hide;
    CreateControls;
    WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
    ISDoneCancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.

ExtractTemporaryFile('unarc.dll');

#ifdef PrecompInside
ExtractTemporaryFile('CLS-precomp.dll');
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('packjpg_dll1.dll');
ExtractTemporaryFile('precomp.exe');
ExtractTemporaryFile('zlib1.dll');
#endif
#ifdef SrepInside
ExtractTemporaryFile('CLS-srep.dll');
#endif
#ifdef MSCInside
ExtractTemporaryFile('CLS-MSC.dll');
#endif
#ifdef facompress
    ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
#endif
#ifdef records
    ExtractTemporaryFile('records.inf');
#endif
#ifdef precomp
  #if precomp == "0.38"
    ExtractTemporaryFile('precomp038.exe');
  #else
    #if precomp == "0.4"
      ExtractTemporaryFile('precomp040.exe');
    #else
      #if precomp == "0.41"
        ExtractTemporaryFile('precomp041.exe');
      #else
        #if precomp == "0.42"
          ExtractTemporaryFile('precomp042.exe');
        #else
          ExtractTemporaryFile('precomp038.exe');
          ExtractTemporaryFile('precomp040.exe');
          ExtractTemporaryFile('precomp041.exe');
          ExtractTemporaryFile('precomp042.exe');
        #endif
      #endif
    #endif
  #endif
#endif
#ifdef unrar
    ExtractTemporaryFile('Unrar.dll');
#endif
#ifdef XDelta
    ExtractTemporaryFile('XDelta3.dll');
#endif
#ifdef PackZIP
    ExtractTemporaryFile('7z.dll');
    ExtractTemporaryFile('PackZIP.exe');
#endif

    ExtractTemporaryFile('English.ini');

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
    Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
    TmpValue:=1;
    if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue;    //компонент 1
    TmpValue:=TmpValue*2;
    if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue;    //компонент 2
    TmpValue:=TmpValue*2;
    if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue;    //компонент 3
    TmpValue:=TmpValue*2;
    if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue;    //компонент 4
//    .....
// см. справку
#endif

#ifdef precomp
  PCFVer:={#precomp};
#else
  PCFVer:=0;
#endif
    ISDoneError:=true;
    if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
      repeat
//        ChangeLanguage('English');
        if not SrepInit('',512,0) then break;
        if not PrecompInit('',128,PCFVer) then break;
        if not FileSearchInit(true) then break;

        if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data1.cst'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;

//    далее находятся закомментированые примеры различных функций распаковки (чтобы каждый раз не лазить в справку за примерами)
(*
        if not ISArcExtract    ( 0, 0, ExpandConstant('{src}\arc.arc'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
        if not IS7ZipExtract  ( 0, 0, ExpandConstant('{src}\CODMW2.7z'), ExpandConstant('{app}\data1'), false, '') then break;
        if not ISRarExtract    ( 0, 0, ExpandConstant('{src}\data_*.rar'), ExpandConstant('{app}'), false, '') then break;
        if not ISSRepExtract  ( 0, 0, ExpandConstant('{app}\data1024_1024.srep'),ExpandConstant('{app}\data1024.arc'), true) then break;
        if not ISPrecompExtract( 0, 0, ExpandConstant('{app}\data.pcf'),    ExpandConstant('{app}\data.7z'), true) then break;
        if not ISxDeltaExtract ( 0, 0, 0, 640, ExpandConstant('{app}\in.pcf'), ExpandConstant('{app}\*.diff'),  ExpandConstant('{app}\out.dat'), false, false) then break;
        if not ISPackZIP      ( 0, 0, ExpandConstant('{app}\1a1\*'), ExpandConstant('{app}\1a1.pak'), 2, false ) then break;
        if not ISExec          ( 0, 0, 0, ExpandConstant('{tmp}\Arc.exe'), ExpandConstant('x -o+ "{src}\001.arc" "{app}\"'), ExpandConstant('{tmp}'), '...',false) then break;
        if not ShowChangeDiskWindow ('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}'),'CODMW_2.arc') then break;

//    распаковка группы файлов посредством внешнего приложения

        FindHandle1:=ISFindFiles(0,ExpandConstant('{app}\*.ogg'),ColFiles1);
        ExecError:=false;
        while not ExecError and ISPickFilename(FindHandle1,ExpandConstant('{app}\'),CurIndex1,true) do begin
          InFilePath:=ISGetName(0);
          OutFilePath:=ISGetName(1);
          OutFileName:=ISGetName(2);
          ExecError:=not ISExec(0, 0, 0, ExpandConstant('{tmp}\oggdec.exe'), '"'+InFilePath+'" -w "'+OutFilePath+'"',ExpandConstant('{tmp}'),OutFileName,false);
        end;
        ISFindFree(FindHandle1);
        if ExecError then break;
*)

        ISDoneError:=false;
      until true;
      ISDoneStop;
    end;
    HideControls;
    WizardForm.CancelButton.Visible:=true;
    WizardForm.CancelButton.Enabled:=false;
  end;
  if (CurStep=ssPostInstall) and ISDoneError then begin
    Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
  end;
end;


Цитата:

Цитата Raz3r
Как сделать, чтоб во время установки было +два прогресс бара, которые отображали бы установку компонентов(установка компонентов должна проходить одновременно с основной установкой и только по завершению всех установок выводилось окно завершения)? »

А вот это так и не понял - в стандартном примере IsDone и так вроде 2 прогрессбара?

OtherNickname 06-08-2014 15:33 2385748

Доброго времени суток. Пожалуйста, помогите найти решение. Как отменить автоматическое закрытие страницы с процессом установки InstallingPage после завершения установки?

Raz3r 06-08-2014 20:53 2385880

nik1967,
Цитата:

Ну дак Nordek же давал ссылку, где всё расписано, как надо делать, куда уж ещё проще?
В том то и дело, что пробовал как он советовал и не помогло, ну да ладно, это уже не важно.

Благодарю за IsDone, но можно написать отдельно куда вносились изменения, просто у меня уже задействован по своему измененный isdone?

Цитата:

А вот это так и не понял
Я думал сделать второй прогресс бар рядом с основным, который отображал бы установку компонентов.

nik1967 06-08-2014 21:52 2385898

Цитата:

Цитата Raz3r
но можно написать отдельно куда вносились изменения »

Так вообще то я всё, что добавил, отметил комментами - посмотри скрипт внимательно.
Цитата:

Цитата Raz3r
Я думал сделать второй прогресс бар рядом с основным, который отображал бы установку компонентов. »

Типа моего в инсталле Каталистов, что ли? И не компонентов, а доп.по?

habib2302 06-08-2014 22:23 2385910

Доброе время суток. Помогите мне со скриптом для удаления других версий приложения при старте.
дело в том, что во время тихой установки появляется
Код:

MsgBox('Перед установкой необходимо удалить все старые версии приложения, вызвать программы удаления сейчас?')
как организовать, чтобы это уведомление и деинсталляторы других версий запускались скрыто при тихой установки
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

AppId=TheBestAidaInstallEver

[code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
    APPID_AIDA_EXTREME = 'AIDA64 Extreme Edition';
    APPID_AIDA_BUISNES = 'AIDA64 Business Edition';

    WAIT_OBJECT_0 = $0;
    STARTF_USESHOWWINDOW  = 1;
    NORMAL_PRIORITY_CLASS = $00000020;
    INFINITE = $FFFFFFFF;    { Infinite timeout }

type
    _STARTUPINFO = record
        cb: DWORD;
        #ifdef UNICODE
            lpReserved, lpDesktop, lpTitle: PAnsiChar;
        #else
            lpReserved, lpDesktop, lpTitle: PChar;
        #endif
        dwX, dwY, dwXSize, dwYSize, dwXCountChars, dwYCountChars, dwFillAttribute, dwFlags: DWORD;
        wShowWindow, cbReserved2: Word;
        lpReserved2: Byte;
        hStdInput, hStdOutput, hStdError: THandle;
    end;

    _PROCESS_INFORMATION = record
        hProcess: THandle;
        hThread: THandle;
        dwProcessId: DWORD;
        dwThreadId: DWORD;
    end;


function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function WaitForSingleObject(hHandle: THandle; dwMilliseconds: DWORD): DWORD; external 'WaitForSingleObject@kernel32.dll stdcall';
#ifdef UNICODE
function CreateProcess(lpApplicationName, lpCommandLine: PAnsiChar; lpProcessAttributes, lpThreadAttributes: Longint; bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment, lpCurrentDirectory: PAnsiChar; const lpStartupInfo: _STARTUPINFO; var lpProcessInformation: _PROCESS_INFORMATION): BOOL; external 'CreateProcess{#A}@kernel32.dll stdcall';
#else
function CreateProcess(lpApplicationName, lpCommandLine: PChar; lpProcessAttributes, lpThreadAttributes: Longint; bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment, lpCurrentDirectory: PChar; const lpStartupInfo: _STARTUPINFO; var lpProcessInformation: _PROCESS_INFORMATION): BOOL; external 'CreateProcess{#A}@kernel32.dll stdcall';
#endif


function GetUninstallPath(const AppIds: array of String): array of String;
var
    StringList: TStringList;
    i, Len: Integer;
    Buff: String;
begin
    for i := 0 to GetArrayLength(AppIds)-1 do
    begin
        Buff := RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + AppIds[i] + '_is1,UninstallString|}'));
        if Buff <> '' then
        begin
            Len := GetArrayLength(Result);
            SetArrayLength(Result, Len+1);
            Result[Len] := Buff;
        end;
    end;
end;


procedure UninstallApps(const UninstallPathes: array of String);
var
    pi: _PROCESS_INFORMATION;
    si: _STARTUPINFO;
    i: Integer;
begin
    for i := 0 to GetArrayLength(UninstallPathes)-1 do
    begin
        si.cb := SizeOf(si);
        si.dwFlags := STARTF_USESHOWWINDOW;
        si.wShowWindow := SW_SHOWNORMAL;
        #ifdef UNICODE
        if not CreateProcess('', PAnsiChar(UninstallPathes[i]), 0, 0, False, NORMAL_PRIORITY_CLASS, '', '', si, pi) then
        #else
        if not CreateProcess('', PChar(UninstallPathes[i]), 0, 0, False, NORMAL_PRIORITY_CLASS, '', '', si, pi) then
        #endif
        begin
            MsgBox(SysErrorMessage(DLLGetLastError), mbCriticalError, MB_OK);
            Exit;
        end;
        try
            while WaitForSingleObject(pi.hProcess, INFINITE) <> WAIT_OBJECT_0 do Application.ProcessMessages;
        finally
            CloseHandle(pi.hProcess);
            CloseHandle(pi.hThread);
        end;
    end;
end;


function InitializeSetup(): Boolean;
var
    i, Len: Integer;
    uArray: array of String;
begin
    uArray := GetUninstallPath( ['{#SetupSetting("AppID")}', APPID_AIDA_EXTREME, APPID_AIDA_BUISNES] );
    Len := GetArrayLength(uArray);
    Result := Len = 0;
    if not Result then if MsgBox('Перед установкой необходимо удалить все старые версии приложения, вызвать программы удаления сейчас?', mbError, MB_YESNO) = IDYES then
    begin
        UninstallApps(uArray);
        Result := InitializeSetup();
    end;
end;


Habetdin 06-08-2014 22:39 2385918

habib2302, сделайте в нужном месте проверку:
Код:

if Pos('silent', Lowercase(GetCmdTail)) = 0 then
        // обычное удаление
else
        // тихое удаление


Raz3r 07-08-2014 07:10 2385990

Цитата:

Типа моего в инсталле Каталистов, что ли? И не компонентов, а доп.по?
Да, именно такой.

Nordek 07-08-2014 10:06 2386031

Цитата:

Цитата Raz3r
лучшеб помогли мне чем 100 раз одно и тоже копировать вставлять. »

А вы внимательно читайте и принимайте во внимание.

Цитата:

Цитата Raz3r
Он заблокирован, то есть я не могу его не удалить не растянуть, когда удаляю пишет "Компонент SelectDirPage или его части заблокированы". »

Раз уж непонятно - поверьте, я это приму во внимание.

Цитата:

Цитата nik1967
Ну дак Nordek же давал ссылку, где всё расписано, как надо делать, куда уж ещё проще? »

В этом сообщении отражена вся правда.
Кроме всего прочего есть просто ленивые люди: в этом неоднократно был убеждён.

Это ещё раз доказывает:
Цитата:

Цитата Raz3r
ну да ладно, это уже не важно. »

т.е сделали за них и хорошо, остальное не волнует. Это вместо того, чтоб разобраться.

Что удивительно. Когда говоришь или пишешь человеку о том что он "ленивый" - то этот человек обижается и считает за оскорбление. Либо пытается доказать обратное.

Raz3r 07-08-2014 10:29 2386036

Nordek, думаешь мне в прикол сидеть 3 дня и пытаться растянуть это дурацкую забагованую форму в дизайнере, вместо того, что бы перерыть все твои сообщения сначала, до конца? Это по твоему говорит о моей лени? Если не работает, значит ты чего-то недописал там, либо какой-то баг. И я тебе в лс писал просил сразу помочь, чтобы тут не превращать форум в чат, потому что проект, который я задумал большой, а я один, помочь мне кроме вас некому. Но ты решил проигнорить мою просьбу, а теперь говоришь, что мне лень, молодец!

P.S: Я уже 3 месяца обновляю свою сборку толком не отрываясь от работы, это называется лень мне да?

Цитата:

Что удивительно. Когда говоришь или пишешь человеку о том что он "ленивый" - то этот человек обижается и считает за оскорбление. Либо пытается доказать обратное.
Не суди о человеке по пару предложений, написанных на форуме.

Nordek 07-08-2014 10:56 2386037

Перейдите в Дизайнер диалогов:


Выберите SelectDirPage (хотя, не обязательно т.к действует для всех форм):


Кликните левой кнопкой мыши в область WizardForm:


Ухватите левой кнопкой мыши, правый нижний край основной формы:


и не отпуская левой кнопкой мыши, растяните основную форму:


Теперь: в зависимости от размера основной формы, вам понадобится перенести нужные вам элементы (если имеется в этом необходимость).
Например: "Кнопки" и "Bevel".
Для того чтоб перенести сразу несколько элементов: на клавиатуре зажмите клавишу SHIFT.
Не отпуская клавиши SHIFT, левой кнопкой мыши выберите нужные вам элементы; Ухватите левой кнопкой мыши элемент и передвиньте в нужную вам область:


Как видите на рисунке, элементы перенесены:


Теперь: справа из списка выберите OuterNotebook:


ухватите за правый нижний край выбранной формы, левой кнопкой мыши:


и не отпуская левую кнопку мыши, растяните форму:


Вот что получилось:


Теперь, из списка выберите InnerNotebook:


ухватите за правый нижний край выбранной формы, левой кнопкой мыши:


и не отпуская левую кнопку мыши, растяните форму:


Полученный итог:

Raz3r 07-08-2014 11:13 2386043

Nordek, вот теперь получилось! Пока не начал выделять их именно в правом окне. До этого нажимал на окно мышкой и пытался передвинуть. Сразу бы написали, что в самом окне их выделять не нужно, иначе они не разблокируются. Откуда мне было знать, что есть разница.

Irenis 07-08-2014 14:00 2386121

Добрый день! Подскажите пожалуйста, в чем может быть причина. Я делаю установщики игр, файлы запаковываю FreeArc-ом в формате bin. Но последнее время что то пошло не так. Практически любой созданный установщик при распаковке зависает на определенном проценте и все, дальше никак не хочет распаковываться. Уже и саму программу FreeArc переустанавливала, не помогло. Не могу понять, в чем может быть причина, ведь раньше все делала точно так же и все было отлично. Может подскажите.
И посоветуйте, пожалуйста, какую еще программу можно использовать для создания архива с расширением bin? И если использовать другую программу, то тогда получается и скрипт нужен другой?

vint56 07-08-2014 14:09 2386128

Irenis, укажи метод сжатия

Irenis 07-08-2014 14:40 2386141

Да метод обычный. Захожу в папку с игрой, выделяю все файлы–>добавить в архив, arc меняю на bin и жму ОК. Запаковка происходит нормально, но при распаковке зависает.
Если же делать другим методом Файл 115892, то все получается. Этот файл мне тоже тут на форуме дали, за что огромное спасибо. Но так запаковка происходит намного дольше. Поэтому и спрашиваю, альтернативные методы создания этих bin. :blush2:

Raz3r 07-08-2014 15:01 2386151

Подскажите как сделать аналогичный чекбокс?
читать дальше »
var
DpoLabel: TLabel;
dpo :HWND;
hBtn: TObject

function DpoChecks: Boolean;
begin
Result:= BtnGetChecked(dpo);
end;

procedure DpoOnClick(hBtn: TObject);
begin
BtnSetChecked(dpo, not BtnGetChecked(dpo));
if BtnGetChecked(dpo) then dpolbl.Font.Color:= ${#Color} else dpolbl.Font.Color:= clgray;
end;

procedure DpoOnClick1(hBtn:HWND);
var
Check:boolean;
begin
Check:=BtnGetChecked(hBtn);
if Check then DpoLabel.Font.Color:=${#Color} else DpoLabel.Font.Color:=-16777199;
end;

procedure DpoLblClick(hBtn: TObject);
begin
BtnSetChecked(dpo, not BtnGetChecked(dpo));
DpoOnClick1(dpo);
end;

procedure Wzf;
DpoLabel:=TLabel.Create(WizardForm);
with DpoLabel do
begin
Top:= ScaleY(207);
Left:= ScaleX(405);
Width:= ScaleX(400);
Height:= ScaleY(15);
AutoSize:= false;
WordWrap:= true;
Font.Name:= 'Arial';
Font.Size:= 10
Font.Style := [fsBold];
Font.Color:=${#Color};
Transparent:= true;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:DPO}');
OnClick:= @DpoLblClick;
end;


Какой ключ указать в командной строке, чтоб автоматический запустилась установка DirectX с отображением прогресс-бара. Ввожу /SILENT установка проходит полностью скрытой.
Как узнать где в реестре Steam прописывает пути к файлам игр? Собираюсь сделать автоустановку в эту библиотеку.
Извините что вопросами засыпал, но я лазил в гугле и ничего вразумительного не нашел, мож здесь кто знает?

vint56 07-08-2014 16:10 2386180

Irenis, но там есть профили по методу сжатия
пример
Максимальное (требует 1 гб ОЗУ для распаковки): -mx -ld800m
Ультра (требует 2 гб ОЗУ для распаковки): -mx -ld1600m
Высокое: -m5
Нормальное: -m4
Быстрое: -m3
Нормальное: -m2
Со скоростью HDD: -m2

Le9ent 07-08-2014 18:10 2386243

Вот возник вопрос еще один.

К примеру в системе масштаб шрифтов - 100%
Есть выставить 125 - 150% то некоторые элементы масштабируются а вот фоновое изображение нет.

Кнопки, лейболы, полоса прокрутки - масштабируются:

читать дальше »


with WizardForm.NextButton do begin
Left:=ScaleX(10);
Top:=ScaleY(565);
Width:=ScaleX(90);
Height:=ScaleY(25);
Parent:=WizardForm;
end;



Фоновое изображение не масштабируется:

читать дальше »


var
Logo, Fon:TBitmapimage;

ExtractTemporaryFile('Fon.bmp');
WizardForm.Width:=ScaleX(600);
WizardForm.Height:=ScaleY(600);

Fon:=TBitmapImage.Create(WizardForm);
with Fon do begin
Left:=ScaleX(0);
Top:=ScaleY(0);
Width:=ScaleX(600);
Height:=ScaleY(600);
Parent:=WizardForm;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\Fon.bmp'));
end;



Какие параметры можно добавить для изображения что бы фоновый рисунок масштабировался с остальными элементами?

Irenis 07-08-2014 19:29 2386268

Цитата:

Цитата vint56
Irenis, но там есть профили по методу сжатия »

А, ну это я видела. В принципе ничего не меняю, стоит нормальное сжатие, вот этим методом и сжимаю. Удивляет то, что раньше ведь работало все. Сейчас делаю все аналогично, но что то идет не так при распаковке.

vint56 07-08-2014 19:33 2386270

Irenis,
1 что за игра
2 как я понял ты сжимаеш Нормальное: -m4
3 через распаковываеш файлы пример через isdone

Можеш использовать вот эту строчку для сжатия это чистый lzma без внешних External compressor такие как precomp и srep
Требуется 512 мегабайт для сжатий и также для распаковки
lzma:512mb:normal:128:mc64:lc8

Kashtan007 07-08-2014 20:15 2386286

Всем привет, посоветуйте несколько способов, как правильно использовать собственный скин в установщике (.cjstyles) на юникоде.

Заранее спасибо за ответ.

Raz3r 07-08-2014 20:29 2386302

Прошу помочь с вопросами.
читать дальше »
1. Подскажите как сделать второй чекбокс с такими же параметрами?
читать дальше »
var
DpoLabel: TLabel;
dpo :HWND;
hBtn: TObject

function DpoChecks: Boolean;
begin
Result:= BtnGetChecked(dpo);
end;

procedure DpoOnClick(hBtn: TObject);
begin
BtnSetChecked(dpo, not BtnGetChecked(dpo));
if BtnGetChecked(dpo) then dpolbl.Font.Color:= ${#Color} else dpolbl.Font.Color:= clgray;
end;

procedure DpoOnClick1(hBtn:HWND);
var
Check:boolean;
begin
Check:=BtnGetChecked(hBtn);
if Check then DpoLabel.Font.Color:=${#Color} else DpoLabel.Font.Color:=-16777199;
end;

procedure DpoLblClick(hBtn: TObject);
begin
BtnSetChecked(dpo, not BtnGetChecked(dpo));
DpoOnClick1(dpo);
end;

procedure Wzf;
DpoLabel:=TLabel.Create(WizardForm);
with DpoLabel do
begin
Top:= ScaleY(207);
Left:= ScaleX(405);
Width:= ScaleX(400);
Height:= ScaleY(15);
AutoSize:= false;
WordWrap:= true;
Font.Name:= 'Arial';
Font.Size:= 10
Font.Style := [fsBold];
Font.Color:=${#Color};
Transparent:= true;
Parent:= WizardForm;
Caption:= ExpandConstant('{cm:DPO}');
OnClick:= @DpoLblClick;
end;


2. Какой ключ указать в командной строке, чтоб автоматический запустилась установка DirectX с отображением прогресс-бара. Ввожу /SILENT установка проходит полностью скрытой.
3. Как узнать где в реестре Steam прописывает пути к файлам игр? Собираюсь сделать автоустановку в эту библиотеку.
Извините что вопросами засыпал, но я лазил в гугле и ничего вразумительного не нашел, мож здесь кто знает?

Irenis 07-08-2014 22:12 2386353

Цитата:

Цитата vint56
lzma:512mb:normal:128:mc64:lc8 »

В общем, так тоже ничего не получается, при запуске установщика пишет что то типа неверно задан входной файл. Я так понимаю, что просто в скрипте тоже что то нужно править. В общем ладно, если ставить такое сжатие, то тоже медленно сжимается, а мне нужно как можно быстрее :)
Если нету другого способа сделать архив bin, то может кто поможет сделать такое же
Цитата:

Цитата Irenis
Если же делать другим методом Arc.7z, »

только чтобы создавалось быстрее. У меня вообще на ноутбуке ОЗУ 6Гб, поэтому я так понимаю, можно же сделать такой же архив, в котором создание bin файла делалось бы быстрее, но в то же время распаковывалось как и прежде. Спасибо :)

vint56 07-08-2014 22:30 2386361

Irenis, вообще то зависит не от памяти а от процессора но у lzma можно поставить всего 2 потока тогда используй 7zip там есть lzma2 можно поставить все потоки isdone 7z тоже поддерживает

Irenis 07-08-2014 23:17 2386376

vint56, Спасибо большое, что помогаете, но мне все равно не все понятно. Если использовать 7zip, то тогда и скрипт нужен другой? Где его можно взять?
И вот еще
Цитата:

Цитата vint56
7z тоже поддерживает »

мне как бы 7z и не надо. В предыдущем сообщении цитированием себя же я просто хотела дать ссылку на это сообщение
Цитата:

Цитата Irenis
... »

. Там есть вложение (повторно его почему то не получилось залить), мне когда то дали этот архив тут же на форуме. И вот хотелось бы, если это возможно, такой же архив, но такой, в котором бы запаковка происходила быстрее.
Извините за сумбур, просто мне тех элементарных знаний по созданию установщиков было вполне достаточно, больше как бы и не нужно. А сейчас столкнулась с проблемой и даже не знаю, как это все правильно объяснить :unsure:

habib2302 07-08-2014 23:43 2386388

Доброе время суток. Как сделать паузу между двумя функциями пока 1 первая функция не завершит свою работу?
Код:

function UninstallMyApp1(): Boolean;
var
    Buff: String;
    i: Integer;
begin
    Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}', 'UninstallString', Buff );
    if not Result then Result := not FileExists(RemoveQuotes(Buff));
    if not Result then if MsgBox('Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?', mbError, MB_YESNO) = IDYES then
    try
        Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
    finally
        Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}', 'UninstallString', Buff );
    end;
end;

function UninstallMyApp2(): Boolean;
var
    Buff: String;
    i: Integer;
begin
    Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
    if not Result then Result := not FileExists(RemoveQuotes(Buff));
    if not Result then if MsgBox('Перед установкой необходимо удалить предыдущую версию приложения. Продолжить?', mbError, MB_YESNO) = IDYES then
    try
        Exec(RemoveQuotes(Buff), '', ExtractFilePath(RemoveQuotes(Buff)), SW_SHOW, ewWaitUntilTerminated, i);
    finally
        Result := not RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1', 'UninstallString', Buff );
    end;
end;

function InitializeSetup(): Boolean;
begin
    Result := UninstallMyApp1();
    Result := UninstallMyApp2();
end;

как сделать что не появлялись MsgBox во время тихой установки и деинсталляторы запускались в тихом режиме

vint56 07-08-2014 23:59 2386399

Irenis, ты просиш чтобы быстре сжимать ну 7 zip есть режим lzma2 что дает использовать не 1 ядро если есть 4 или 8 соответственно значит и сжатие будет быстрее
еслиты используеш isdone скрипт менять не надо когда будет паковать смениш просто расширения файла 7z на bin
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\Data-A.bin'), ExpandConstant('{app}'), false, '') then break;
И еще тебя интересует хорошое сжатие или просто немного пожать Быстрое: -m3 или Нормальное: -m4

Raz3r 08-08-2014 00:14 2386403

Ладно, всё ясно с вами, игнор включили, в падлу помочь значит. Пускай Nordek и дальше тут несёт всякую чушь про "лень"и копипастит это каждым сообщением, вместо того, чтобы адекватную помощь оказать. Проще самому всё сделать! Нахера этот форум нужен...

Irenis 08-08-2014 12:06 2386516

Цитата:

Цитата Raz3r
Ладно, всё ясно с вами, игнор включили, в падлу помочь значит »

Ну вы не обижайтесь :) Я думаю еще кто то обязательно подскажет. Я бы вам с радостью помогла, если бы сама что то понимала :)

R.i.m.s.k.y. 08-08-2014 12:13 2386518

Raz3r,
я ответа на вопрос "зачем использовать фриарк если такие же алгоритмы 7зип использованы в инно" не знаю
и на остальные тоже
дирекс ставится только так, можешь еще попробовать с параметром /Q но это теже фаберже

Цитата:

Цитата habib2302
как сделать что не появлялись MsgBox во время тихой установки и деинсталляторы запускались в тихом режиме »

if not WizardSilent then msgbox...
к тому же выше же ответили

Цитата:

Цитата habib2302
Как сделать паузу между двумя функциями пока 1 первая функция не завершит свою работу? »

оно так и есть: пока предыдущая функция не отработает следующая не начнется, если конешно ничего не накручено для одновременного запуска
а флаг ewWaitUntilTerminated у тебя уже стоит

Цитата:

Цитата Raz3r
Подскажите как сделать второй чекбокс с такими же параметрами? »

я юзаю inno form designer из расширенного китайского компилятора
все есть в инноультра

vint56 08-08-2014 13:28 2386554

Raz3r,
читать дальше »
#include "Modules\botva2.iss"

[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

[Languages]
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
rus.Desktop=Soft номер 1
rus.Desktop1=Soft номер 2
[Files]
Source: "InstallFiles\*"; Flags: dontcopy;

[Icons]
Name: "{commondesktop}\Soft номер 1"; Filename: "{app}\MyProg.exe"; Check: Dop;
Name: "{commondesktop}\Soft номер 2"; Filename: "{app}\MyProg.exe"; Check: Dop1;

[code]
var
DopCheck,DopCheck1: HWND;
DopLabel, DopLabel1: TLabel;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function Dop: Boolean;
begin
Result:= BtnGetChecked(DopCheck);
end;

procedure DopClick(hBtn:HWND);
begin
if BtnGetChecked(hBtn) then DopLabel.Font.Color:=$0000FF else DopLabel.Font.Color:=$000000;
end;

procedure DopLabelClick(Sender:TObject);
begin
BtnSetChecked(DopCheck, not BtnGetChecked(DopCheck));
DopClick(DopCheck);
end;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function Dop1: Boolean;
begin
Result:= BtnGetChecked(DopCheck1);
end;

procedure DopClick1(hBtn:HWND);
begin
if BtnGetChecked(hBtn) then DopLabel1.Font.Color:=$0000FF else DopLabel1.Font.Color:=$000000;
end;

procedure DopLabelClick1(Sender:TObject);
begin
BtnSetChecked(DopCheck1, not BtnGetChecked(DopCheck1));
DopClick1(DopCheck1);
end;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function InitializeSetup: Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
if not FileExists(ExpandConstant('{tmp}\CallbackCtrl.dll')) then ExtractTemporaryFile('CallbackCtrl.dll');
Result:=True;
end;

procedure InitializeWizard;
begin
DopCheck:=BtnCreate(WizardForm.SelectDirPage.Handle,ScaleX(10),ScaleY(120),ScaleX(23),ScaleY(23),Exp andConstant('{tmp}\CheckBox.png'),8,True);
BtnSetEvent(DopCheck,BtnClickEventID,WrapBtnCallback(@DopClick,1));
BtnSetCursor(DopCheck,GetSysCursorHandle(32649));
BtnSetChecked(DopCheck,True);

DopLabel := TLabel.Create(WizardForm);
with DopLabel do begin
AutoSize:=False;
SetBounds(ScaleX(35), ScaleY(124), ScaleX(270), ScaleY(17));
OnClick:= @DopLabelClick;
Cursor:= CrHand;
Transparent:=True;
Caption := ExpandConstant('{cm:Desktop}');
Parent := WizardForm.SelectDirPage;
Font.Color:=$0000FF;
end;

DopCheck1:=BtnCreate(WizardForm.SelectDirPage.Handle,ScaleX(10),ScaleY(150),ScaleX(23),ScaleY(23),Ex pandConstant('{tmp}\CheckBox.png'),8,True);
BtnSetEvent(DopCheck1,BtnClickEventID,WrapBtnCallback(@DopClick,1));
BtnSetCursor(DopCheck1,GetSysCursorHandle(32649));
BtnSetChecked(DopCheck1,True);

DopLabel1 := TLabel.Create(WizardForm);
with DopLabel1 do begin
AutoSize:=False;
SetBounds(ScaleX(35), ScaleY(154), ScaleX(270), ScaleY(17));
OnClick:= @DopLabelClick1;
Cursor:= CrHand;
Transparent:=True;
Caption := ExpandConstant('{cm:Desktop1}');
Parent := WizardForm.SelectDirPage;
Font.Color:=$0000FF;
end;

end;

procedure DeinitializeSetup;
begin
gdipShutdown;
end;

Kashtan007 08-08-2014 14:12 2386587

Всем привет, посоветуйте несколько способов, как правильно использовать скин в установщике (.cjstyles) на юникоде.

Заранее спасибо за ответ.

Irenis 08-08-2014 14:56 2386612

Цитата:

Цитата vint56
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\Data-A.bin'), ExpandConstant('{app}'), false, '') then break; »

Вставила эту строчку, не получается, именно на этой строчке ошибка. Может где то что подправить нужно? Или может у меня каких dll не хватает? В общем тут http://my-files.ru/2c6x1r пример скрипта игры и все остальное, может подскажите.

vint56 08-08-2014 16:12 2386644

Irenis,
http://rghost.ru/57360119
Kashtan007
http://rghost.ru/57361849

habib2302 08-08-2014 19:19 2386746

И можно сделать так чтобы после нажатия кнопки запускались два деинсталлятора. 1 это деинсталлятор который был создан моим инсталлятором и 2 это деинсталлятор от flash player т.к через реестр не очень
Код:

procedure RedesignWizardForm;
begin
  with WizardForm.ComponentsList do
  begin
    Height := ScaleY(141);
  end;
end;

var
  ISCustomPage1: TWizardPage;
  NewButton1: TNewButton;
  ResultCode: Integer;
  lpBuff: String;

procedure NewButton1Click(Sender: TObject);
begin
  shellexec('open', ExpandConstant('{tmp}\un.exe'), '', '',SW_SHOWNORMAL, ewnowait, ResultCode)
end;

function InitializeSetup(): Boolean;
var ResultCode:integer;
begin
ExtractTemporaryFile('un.exe');
 if WizardSilent then
  if FileExists (ExpandConstant('{tmp}\un.exe')) then //имхо, если при установке вы что-то пишете в реестр, то перед удалением неплохо было бы еще проверять наличие в реестре данных об уже установленной версии
  Exec(ExpandConstant('{tmp}\un.exe'), '/uninstall /force', '', SW_SHOW,ewWaitUntilTerminated, ResultCode);
 result:=true;
end;

procedure InitializeWizard;
begin
  RedesignWizardForm;
    NewButton1 := TNewButton.Create(WizardForm);
  with NewButton1 do
  begin
    Parent := WizardForm.SelectComponentsPage;
    Left := ScaleX(0);
    Top := ScaleY(200);
    Width := ScaleX(417);
    Height := ScaleY(33);
    Caption := CustomMessage('NewButton1');
    OnClick := @NewButton1Click;
  end;
end;


Irenis 08-08-2014 21:12 2386791

vint56, Спасибо за скрипт. Вроде бы разобралась, пока единственный вопрос остался. Во время распаковки ниже процесс бара две надписи: прошло времени и осталось времени. И вот с надписью осталось времени что то не то, вместо минут там вот так "осталось времени: тестовый прогон". И в конце установки тоже надпись "время установки: тестовый прогон". Можно ли это как то исправить?

Nordek 08-08-2014 21:34 2386801

Цитата:

Цитата Irenis
"время установки: тестовый прогон". Можно ли это как то исправить? »

Всё верно. Вы когда только создаёте инсталлятор со всеми вытикающими, то первоночально тестовый прогрон необходим для более точного отображения процентов и времени при установке.
Т.е у вас например всё готово к завершению.
Имеются архивы bin.arc1, bin.arc2, bin.arc3 и т.д.
Делаете первую установку для того, чтоб рядом создался файл records.inf - где будут прописаны значения для архивов "bin.arc1, bin.arc2, bin.arc3 и т.д.".
после того как файл records.inf создался, то для окончательной компиляции раскомментируйте в скрипте #define records.

Если захотите пережать или добавить какое либо содержимое в свои архивы bin.arc1, bin.arc2, bin.arc3 и т.д., то понадобиться опять закомментировать #define records. Сделать тестовый прогон и раскомментировать.




Цитата:

Цитата Irenis
осталось времени: тестовый прогон »

А в справке к ISDone разве нет?

Я даже процитирую (а то не поверите, скажите там такого нет или не нашли):

ISDone » Описание скрипта:
Цитата:

Цитата Описание скрипта
Код:

#define records
определяет будет ли включен в компиляцию файл records.inf. Он служит для автоматического определения процентных соотношений между операциями. Создается в первом прогоне установки, далее включается в установщик раскомментированием выше указанной строки. Более подробную информацию об этом файле и тестовом прогоне см. раздел "Работа с библиотекой";


ISDone » Работа с библиотекой:
Цитата:

Цитата Описание режимов работы библиотеки
Для осуществения работоспособности библиотеки существует 2 вида определения процентных соотношений между операциями на всем прогрессбаре:
  • Автоматическая расстановка процентных соотношений в операциях.
    При автоматической расстановке необходим тестовый проход для определения времени выполнения каждой операции относительно других.
    Для включения данного режима необходимо заполнить вторые значения всех функций извлечения архивов нулями.
    Краткая инструкция:
    1. первым делом убедитесь, что в начале скрипта закомментирована строка
      Код:

      #define records
      (т.е. необходимо поставить точку с запятой в начале этой строки);
    2. компилим проект и запускаем на установку. Это и будет нашим тестовым проходом. Все операции должны дойти до конца и завершиться удачно. Прогрессбар будет зашкаливать и все компоненты будут извлечены вне зависимости от того выбраны они, или нет. Все так и должно быть!
    3. после тестового прогона в указанной папке создастся файл records.inf (имя и путь назначается в процедуре инициализации. О ней см. "подробное описание функций" ниже), его необходимо добавить в проект, раскомметировав, или добавив в начале скрипта строку:
      Код:

      #define records
      Так же стоит отметить, что если сам скрипт находится в папке отличной от той, в которую компилится проект (например в скрипте NFS:Undercover откомпиленный файл сохраняется в Output\setup.exe), то records.inf создастся в папке с setup.exe и его необходимо будет перенести непосредственно к скрипту, или же подправить в секции [Files] его истинное расположение, например:
      Код:

      #ifdef records
      Source: Output\records.inf; DestDir: {tmp}; Flags: dontcopy
      #endif

    4. снова откомпилить проект.
      После этого инсталлер готов к работе.
      При запуске процесс выполнения операций будет равномерно и корректно отображаться на прогрессбаре.

  • Ручная расстановка процентов на каждую операцию.
    При ручной расстановке если в проекте множество операций, все расчеты необходимо производить вручную. Т.е. сумма процентов всех выполненных операций должна равняться 100%, иначе корректного отображения на прогрессбаре не будет.
    Для включения данного режима необходимо заполнить вторые значения всех функций извлечения архивов значениями процентов, отличными от 0 (числа могут быть дробными).
    При групповой распаковке архивов по маске (типа *.pcf) для операции задается общий процент на все распаковываемые файлы данной командой, а уж каждый из найденных файлов будет разбивать указанный кусок прогрессбара еще на части пропорциональные размерам файлов. Например строка:
    Код:

    if not ISArcExtract (0, 100, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'), false, '', '', '') then break;
    ...

    распакует все *.arc архивы из {src} в {app}, при чем весь прогрессбар будет поделен на кусочки пропрорциональные размерам архивов. В общем тут все так же как в скрипте распаковки FreeArc.iss и ему подобным. Таким образом при распаковке нескольких архивов одного типа проще пользоваться ручной расстановкой, т.к. отличие расперделения процентов от автоматической будет совсем небольшим, но за то не требуется тестовый проход.

    Вот некоторые правила, которые неоходимо выполнять при ручной расстановке:
    1. сумма процентов учитывая ветвления (использование компонентов, условий) в скрипте должна составлять 100;
    2. у компонентов, для которых возможен выбор только одного из нескольких, должны быть одинаковые значения процентов;
    3. НЕЛЬЗЯ использовать компоненты, которые можно выбирать одновременно с другими в одной группе (например несколько рядом стоящих компонент без флага exclusive), потому что сумма процентов при различном выборе пользователя может отличаться от 100.

  • Примечание
    Стоит упомянуть функцию ISExec, в которой третьим параметром задается время выполнения текущей операции. При автоматической расстановке время на операцию расчитывается приближенное к реальному (при условии, что данная операция не первая, иначе время выполнения берется равное тому, которое было в тестовом проходе). При ручной же расстановке: если машина пользователя быстрее обработает данную операцию, чем расчитано автором инсталла, то прогресс будет немного скачкообразным в моменты переходов между функциями распаковки; если машина пользователя медленнее - прогресс наоборот будет задерживаться между операциями.


vint56 08-08-2014 21:49 2386807

Irenis, я же в скрипте сделал комментарий справка в архиве называется readme.CHM
; описаний в справке там все описано
;#define records

Irenis 08-08-2014 22:04 2386813

Nordek, Ясно, спасибо большое. А чтобы не делать эти тестовые прогоны, можно ли в скрипте просто удалить какие то строчки, чтобы надпись "осталось времени" вообще убрать? Ну и в конце чтобы убрать "время установки"?

vint56, Ну да, теперь поняла)) Но все таки хотелось бы как то убрать эти строчки.

Irenis 09-08-2014 00:15 2386852

vint56, Nordek, Спасибо огромное за участие, спасибо за помощь :) Конечно, в первую очередь нужно читать инструкции, а потом уже спрашивать, что не понятно. Но когда не знаешь, где в инструкции находится именно то, что тебе нужно, чаще всего до инструкций не доходит дело, а с маленьким ребенком еще сложнее найти время на инструкции :blush: Поэтому уж не судите строго, если потом как нибудь еще обращусь за помощью :)

Dinvin4ester 09-08-2014 21:04 2387139

Как решить эту проблемку - http://i68.fastpic.ru/big/2014/0802/...3b6aa26fc3.png ?
http://rghost.ru/57234254?r=3678 - сам скрипт
вот где три кнопки,нужно чтоб из трёх выбор один был,а так выходит два.
Название скрипта - выбор озвучки по центру.iss

nik1967 10-08-2014 22:50 2387479

Цитата:

Цитата Dinvin4ester
Как решить эту проблемку »


Dinvin4ester 10-08-2014 23:03 2387483

nik1967,
Огромное спасибо вам.

Imperor 11-08-2014 09:40 2387605

Здравствуйте, нашел код прогресс бара для isdone:
Модуль ProgressBar.iss
читать дальше »
type
TImgPB = record h: HWND; Left, Top, Width, Height, MaxWidth: Integer; img1, img2: Longint; end;

function ImgPBCreate(hParent: HWND; bk, pb: AnsiString; Left, Top, Width, Height: Integer): TImgPB;
begin
Result.Left:=Left;
Result.Top:=Top;
Result.Width:=0;
Result.Height:=Height;
Result.MaxWidth:=Width;
Result.h:= hParent;
if Length(pb)>0 then Result.img1:=ImgLoad(hParent, pb, Result.Left, Result.Top, 0, Result.Height, True,True) else Result.img1:= 0;
if Length(bk)>0 then Result.img2:=ImgLoad(hParent, bk, Left, Top, Width, Height, True, True) else Result.img2:=0;
ImgApplyChanges(Result.h);
end;

procedure ImgPBSetPosition(PB: TImgPB; Percent: Extended);
var
NewWidth: Integer;
begin
if PB.img1<>0 then begin
NewWidth:=Round(PB.MaxWidth*Percent/1000);
if PB.Width<>NewWidth then begin
PB.Width:=NewWidth;
ImgSetPosition(PB.img1,PB.Left,PB.Top,PB.Width,PB.Height);
ImgSetVisiblePart(PB.img1, ScaleX(0), ScaleY(0), ScaleX(PB.Width), ScaleY(PB.Height));
ImgApplyChanges(PB.h);
end;
end;
end;

procedure ImgPBDelete(PB: TImgPB);
begin
if PB.img1<>0 then ImgRelease(PB.img1);
if PB.img2<>0 then ImgRelease(PB.img2);
PB.img1:=0;
PB.img2:=0;
ImgApplyChanges(PB.h);
end;

procedure ImgPBVisibility(var PB :TImgPB; Visible :boolean);
begin
ImgSetVisibility(PB.img1,Visible);
ImgSetVisibility(PB.img2,Visible);
end;

Модуль ISDone:
читать дальше »
[Files]
Source: Include\English.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\Russian.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\ISDone.dll; DestDir: {tmp}; Flags: dontcopy

#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef PrecompInside
Source: Include\CLS-precomp.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll1.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef SrepInside
Source: Include\CLS-srep.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef MSCInside
Source: Include\CLS-MSC.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef facompress
Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp
#if precomp == "0.38"
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.4"
Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.41"
Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.42"
Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
#else
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#endif
#endif
#endif
#endif
#ifdef unrar
Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef XDelta
Source: Include\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PackZIP
Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif

[code]
type
TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;

const
PCFonFLY=true;
notPCFonFLY=false;

var
LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2,LabelTime3: TLabel;

ISDoneProgressBar1: TImgPB;
ISDoneCancel:integer;
ISDoneError:boolean;
PCFVer:double;

function WrapCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:ISDone.dll stdcall delayload';

function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function IS7ZipExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'IS7zipExtract@files:ISDone.dll stdcall delayload';
function ISRarExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'ISRarExtract@files:ISDone.dll stdcall delayload';
function ISPrecompExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISPrecompExtract@files:ISDone.dll stdcall delayload';
function ISSRepExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISSrepExtract@files:ISDone.dll stdcall delayload';
function ISxDeltaExtract(CurComponent:Cardinal; PctOfTotal:double; minRAM,maxRAM:integer; InName, DiffFile, OutFile: AnsiString; DeleteInFile, DeleteDiffFile:boolean):boolean; external 'ISxDeltaExtract@files:ISDone.dll stdcall delayload';
function ISPackZIP(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString;ComprLvl:integer; DeleteInFile:boolean):boolean; external 'ISPackZIP@files:ISDone.dll stdcall delayload';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):boolean; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall delayload';

function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean; external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer; external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean; external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar; external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean; external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISExec(CurComponent:Cardinal; PctOfTotal,SpecifiedProcessTime:double; ExeName,Parameters,TargetDir,OutputStr:AnsiString;Show:boolean):boolean; external 'ISExec@files:ISDone.dll stdcall delayload';

function SrepInit(TmpPath:PAnsiChar;VirtMem,MaxSave:Cardinal):boolean; external 'SrepInit@files:ISDone.dll stdcall delayload';
function PrecompInit(TmpPath:PAnsiChar;VirtMem:cardinal;PrecompVers:single):boolean; external 'PrecompInit@files:ISDone.dll stdcall delayload';
function FileSearchInit(RecursiveSubDir:boolean):boolean; external 'FileSearchInit@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean; external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean; external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean; external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean; external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean; external 'ResumeProc@files:ISDone.dll stdcall';

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
if OveralPct<=1000 then ImgPBSetPosition(ISDoneProgressBar1,OveralPct);
LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-ScaleX(100));
Result := ISDoneCancel;
ImgApplyChanges(WizardForm.Handle);
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
SuspendProc;
if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
ResumeProc;
end;

procedure IsDoneAddComponents();
var PBTop:integer;
begin
PBTop:=ScaleY(50);

ISDoneProgressBar1:=ImgPBCreate(WizardForm.Handle, ExpandConstant('{tmp}\pbbkg.png'), ExpandConstant('{tmp}\pb.png'),7,430,646, 4);

LabelPct1 := TLabel.Create(WizardForm);
with LabelPct1 do begin
Parent := WizardForm;
Font.Name := 'Arial';
Font.Size := 10;
Font.Style := [fsBold];
Transparent := true;
Font.Color := $e1cc70;
AutoSize := False;
Left := ScaleX(540);
Top := ScaleY(255);
Width := ScaleX(180);
end;

LabelCurrFileName := TLabel.Create(WizardForm);
with LabelCurrFileName do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := ISDoneProgressBar1.Width+ScaleX(30);
Left := ScaleX(0);
Top := ScaleY(30);
end;

LabelTime1 := TLabel.Create(WizardForm);
with LabelTime1 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := ISDoneProgressBar1.Width div 2;
Left := ScaleX(0);
Top := PBTop + ScaleY(35);
end;
LabelTime2 := TLabel.Create(WizardForm);
with LabelTime2 do begin
Parent := WizardForm.InstallingPage;
AutoSize := False;
Width := LabelTime1.Width+ScaleX(40);
Left := ISDoneProgressBar1.Width div 2;
Top := LabelTime1.Top;
end;
LabelTime3 := TLabel.Create(WizardForm);
with LabelTime3 do begin
Parent := WizardForm.FinishedPage;
AutoSize := False;
Width := 300;
Left := 180;
Top := 200;
end;
end;

procedure IsDoneHide();
begin
LabelPct1.Hide;
LabelCurrFileName.Hide;
LabelTime1.Hide;
LabelTime2.Hide;
LabelTime3.Hide;
ImgPBVisibility(ISDoneProgressBar1, False);
end;

procedure IsDoneShow();
begin
LabelPct1.Show;
LabelCurrFileName.Show;
LabelTime1.Show;
LabelTime2.Show;
ImgPBVisibility(ISDoneProgressBar1, true);
end;


procedure IsDoneUnpack(CurStep: TSetupStep);
var
Comps1,Comps2,Comps3, TmpValue:cardinal;
FindHandle1,ColFiles1,CurIndex1,tmp:integer;
ExecError:boolean;
InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
if CurStep = ssInstall then begin //Если необходимо, можно поменять на ssPostInstall
WizardForm.ProgressGauge.Hide;
WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
WizardForm.CancelButton.OnClick := @CancelButtonOnClick;
ISDoneCancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.

ExtractTemporaryFile('unarc.dll');

#ifdef PrecompInside
ExtractTemporaryFile('CLS-precomp.dll');
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('packjpg_dll1.dll');
ExtractTemporaryFile('precomp.exe');
ExtractTemporaryFile('zlib1.dll');
#endif
#ifdef SrepInside
ExtractTemporaryFile('CLS-srep.dll');
#endif
#ifdef MSCInside
ExtractTemporaryFile('CLS-MSC.dll');
#endif
#ifdef facompress
ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
#endif
#ifdef records
ExtractTemporaryFile('records.inf');
#endif
#ifdef precomp
#if precomp == "0.38"
ExtractTemporaryFile('precomp038.exe');
#else
#if precomp == "0.4"
ExtractTemporaryFile('precomp040.exe');
#else
#if precomp == "0.41"
ExtractTemporaryFile('precomp041.exe');
#else
#if precomp == "0.42"
ExtractTemporaryFile('precomp042.exe');
#else
ExtractTemporaryFile('precomp038.exe');
ExtractTemporaryFile('precomp040.exe');
ExtractTemporaryFile('precomp041.exe');
ExtractTemporaryFile('precomp042.exe');
#endif
#endif
#endif
#endif
#endif
#ifdef unrar
ExtractTemporaryFile('Unrar.dll');
#endif
#ifdef XDelta
ExtractTemporaryFile('XDelta3.dll');
#endif
#ifdef PackZIP
ExtractTemporaryFile('7z.dll');
ExtractTemporaryFile('PackZIP.exe');
#endif

ExtractTemporaryFile('English.ini');
ExtractTemporaryFile('Russian.ini');

// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
TmpValue:=1;
if BtnGetChecked(LanguagetextButton[1]) then Comps1:=Comps1+TmpValue; //компонент 1
TmpValue:=TmpValue*2;
if BtnGetChecked(LanguagetextButton[2]) then Comps1:=Comps1+TmpValue; //компонент 2
TmpValue:=TmpValue*2;
if BtnGetChecked(LanguagevoiceButton[1]) then Comps1:=Comps1+TmpValue; //компонент 3
TmpValue:=TmpValue*2;
if BtnGetChecked(LanguagevoiceButton[2]) then Comps1:=Comps1+TmpValue; //компонент 4
#endif

#ifdef precomp
PCFVer:={#precomp};
#else
PCFVer:=0;
#endif
ISDoneError:=true;
if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
repeat
case ActiveLanguage of
'eng': ChangeLanguage('English');
'rus': ChangeLanguage('Russian');
end;
if not SrepInit('',512,0) then break;
if not PrecompInit('',128,PCFVer) then break;
if not FileSearchInit(true) then break;

#ifdef Data1
if not ISArcExtract ( 0, 20, ExpandConstant('{src}\{#Data1}'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
#endif
#ifdef Data2
if not ISArcExtract ( 0, 20, ExpandConstant('{src}\{#Data2}'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
#endif
#ifdef Data3
if not ISArcExtract ( 0, 20, ExpandConstant('{src}\{#Data3}'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
#endif
#ifdef Data4
if not ISArcExtract ( 0, 20, ExpandConstant('{src}\{#Data4}'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
#endif
#ifdef Data5
if not ISArcExtract ( 0, 20, ExpandConstant('{src}\{#Data5}'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
#endif

// далее находятся закомментированые примеры различных функций распаковки (чтобы каждый раз не лазить в справку за примерами)
(*
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\arc.arc'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
if not IS7ZipExtract ( 0, 0, ExpandConstant('{src}\CODMW2.7z'), ExpandConstant('{app}\data1'), false, '') then break;
if not ISRarExtract ( 0, 0, ExpandConstant('{src}\data_*.rar'), ExpandConstant('{app}'), false, '') then break;
if not ISSRepExtract ( 0, 0, ExpandConstant('{app}\data1024_1024.srep'),ExpandConstant('{app}\data1024.arc'), true) then break;
if not ISPrecompExtract( 0, 0, ExpandConstant('{app}\data.pcf'), ExpandConstant('{app}\data.7z'), true) then break;
if not ISxDeltaExtract ( 0, 0, 0, 640, ExpandConstant('{app}\in.pcf'), ExpandConstant('{app}\*.diff'), ExpandConstant('{app}\out.dat'), false, false) then break;
if not ISPackZIP ( 0, 0, ExpandConstant('{app}\1a1\*'), ExpandConstant('{app}\1a1.pak'), 2, false ) then break;
if not ISExec ( 0, 0, 0, ExpandConstant('{tmp}\Arc.exe'), ExpandConstant('x -o+ "{src}\001.arc" "{app}\"'), ExpandConstant('{tmp}'), '...',false) then break;
if not ShowChangeDiskWindow ('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}'),'CODMW_2.arc') then break;

// распаковка группы файлов посредством внешнего приложения

FindHandle1:=ISFindFiles(0,ExpandConstant('{app}\*.ogg'),ColFiles1);
ExecError:=false;
while not ExecError and ISPickFilename(FindHandle1,ExpandConstant('{app}\'),CurIndex1,true) do begin
InFilePath:=ISGetName(0);
OutFilePath:=ISGetName(1);
OutFileName:=ISGetName(2);
ExecError:=not ISExec(0, 0, 0, ExpandConstant('{tmp}\oggdec.exe'), '"'+InFilePath+'" -w "'+OutFilePath+'"',ExpandConstant('{tmp}'),OutFileName,false);
end;
ISFindFree(FindHandle1);
if ExecError then break;
*)

ISDoneError:=false;
until true;
ISDoneStop;
end;
end;
if (CurStep=ssPostInstall) and ISDoneError then begin
IsDoneHide;
BtnSetEnabled(hCancelBtn, False);
ImgApplyChanges(WizardForm.Handle);
ImgApplyChanges(WizardForm.Handle);
Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
end;
end;


Тестовый прогон сделал, проценты загрузки идут как положено, однако не отображается полоса загрузки прогресс-бара. Прогресс-бар отображается, но нету загрузки? В чем может быть проблема?

AlekseyPopovv 11-08-2014 09:49 2387608

Ребята помогите решить проблему: скрипт собирается, но файл не запускается пишет ошибку. Ошибка возникает из-за if Installer.Checked then и if Portable.Checked then. Как решить эту проблему?

procedure LangClick(Sender: TObject);
begin
case TNewRadioButton(Sender) of
LangBus:
begin
if Installer.Checked then
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{pf32}')) + '{#MyAppName} Business';
begin
if Portable.Checked then
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Business Portable';
end;
end;
LangEng:
begin
if Installer.Checked then
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{pf32}')) + '{#MyAppName} Engineer';
begin
if Portable.Checked then
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Engineer Portable';
end;
end;
LangExt:
begin
if Installer.Checked then
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{pf32}')) + '{#MyAppName} Extreme';
begin
if Portable.Checked then
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Extreme Portable';
end;
end;
LangNet:
begin
if Installer.Checked then
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{pf32}')) + '{#MyAppName} Network Audit';
begin
if Portable.Checked then
WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Network Audit Portable';
end;
end;
end;
end;

Решение нашёл!

odminius 11-08-2014 18:18 2387835

Всем доброго времени суток. Есть задача, сделать прогу, которая будет ставить очень маленький и легкий софт. В программировании не шарю, поэтому решил воспользоваться программой InnoSetup.
Прошел по мастеру, в общем установщик все делает как надо, за 1 исключением. Не добавляется ярлык в автозагрузку на Win 8\Win 8.1. (на "Семерке все работат как надо").
Вот скрипт, который у меня получился:

Код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Электронная очередь"
#define MyAppVersion "1.1"
#define MyAppPublisher "HCB"
#define MyAppURL "mberezhnoy@homecredit.kz"
#define MyAppExeName "eqop.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.)
AppId={{D0187399-732B-4F91-B94C-096F37A6F324}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=C:\eqop\
DisableDirPage=yes
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputDir=C:\Users\Odmin\Desktop\Новая папка
OutputBaseFilename=setup_eqop
Compression=lzma
SolidCompression=yes

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
Source: "C:\Users\Odmin\Desktop\Новая папка\eqop\eqop.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\Users\Odmin\Desktop\Новая папка\eqop\*"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
Name: "{commonstartup}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"

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

Помогите плиз сделать так, чтобы ярлык программы добавлялся в автозагрузку на любой версии ОС.

Imperor 11-08-2014 19:51 2387868

odminius, попробуй так:
[Icons]
Name: "{userstartup}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"

{userstartup} - Путь к папке Автозагрузка меню Пуск

odminius 11-08-2014 20:22 2387880

Imperor, спасибо. Жаль потестить сразу не получается, в наличии только win7... Так что помогло или нет, расскажу завтра.

Imperor 11-08-2014 20:26 2387884

odminius, между 7 и 8 особых различий нету и константы подходят и туда, и туда.

odminius 11-08-2014 20:39 2387887

Imperor, и тем не менее, предыдущий скрипт, который я описал, на 7 работает, а на 8 нет.

Habetdin 11-08-2014 23:19 2387974

odminius, на stackoverflow пишут, что данный способ не работает из-за отсутствия меню "Пуск" в Windows 8 (что логично) и рекомендуют прописывать программы в реестр.
Код:

[Registry]
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\Run"; ValueType: string; ValueName: "{#MyAppName}"; ValueData: "{app}\{#MyAppExeName}"

Imperor, а чем должна была помочь смена общей автозагрузки на сею же, только для текущего пользователя? :tomato2:

Imperor 12-08-2014 07:55 2388046

Habetdin, хз, я думал в этом причина. Все константы, которые прописывал работали одинаково и на 7 и на 8.

Вы разбираетесь в прогресс барах для isdone? Несколькими сообщениями ранее я выложил код, можете подсказать почему прогресс бар отображается, но не движется? Что там нужно исправить? Уже всё перепробовал, ничего не помогло.

Цитата:

ISDoneProgressBar1 :=ImgPBCreate(WizardForm.Handle, ExpandConstant('{tmp}\pbbkg.png'), ExpandConstant('{tmp}\pb.png'),7,430,646, 4);
Путь к ресурсам прогресс бара указал, ошибок это не вызвало, но всё-равно не отображается ход установки. :lamer: :gulp:
Вся работа на этом встала, перерыл весь инет в поисках решения - ничего. Isdone 0.6 final. Не понимаю, всё ведь правильно прописано, почему не работает? :shot:

odminius 12-08-2014 14:28 2388220

Habetdin, Imperor, Спасибо огромное, за помощь, зря Вас потревожил. Наши криворукие "тестировщики" просто не смогли найти ярлык в папке автозагрузки (или саму папку) на win 8, и сказали что нифига не работает. Сюрприз был сегодня утром, когда программулина как надо, после старта винды показала всем приветственные окошки :biggrin: .
Всем еще раз спасибо за помосч)

AlekseyPopovv 12-08-2014 15:31 2388245

Ребята помогите решить проблему: скрипт собирается, файл запускается всё устанавливается. Ошибка возникает при удалении после окошка "Нажмите кнопку "OK" и удалите не нужные Вам параметры программы {#MyAppName} {#MyAppVersion}.". Скрипт на две программы (Beauty.Checked и Brightness.Checked). Как решить эту проблему?

[Messages]
UninstalledAll=Нажмите кнопку "OK" и удалите не нужные Вам параметры программы {#MyAppName} {#MyAppVersion}.

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if (CurUninstallStep = usDone) then
begin
if Beauty.Checked then
RegDeleteKeyIncludingSubkeys(HKCR, 'bmp_auto_file\shell\Beauty Guide');
if Beauty.Checked then
RegDeleteKeyIncludingSubkeys(HKCR, 'jpegfile\shell\Beauty Guide');
if Beauty.Checked then
RegDeleteKeyIncludingSubkeys(HKCR, 'pngfile\shell\Beauty Guide');
if Beauty.Checked then
RemoveDir(ExpandConstant('{group}'));
end;
begin
if (CurUninstallStep = usDone) then
begin
if Beauty.Checked then
if MsgBox('Удалить Ваши настройки Beauty Guide?',mbconfirmation, mb_yesno) = IDYES then
begin
if Beauty.Checked then
DelTree(ExpandConstant('{userappdata}\BeautyGuide'), True, True, True);
end;
begin
if (CurUninstallStep = usDone) then
begin
if Beauty.Checked then
if MsgBox('Удалить плагины Beauty Guide?',mbconfirmation, mb_yesno) = IDYES then
begin
if Beauty.Checked then
DeleteFile(ExpandConstant('{pf32}\Tint Guide\Photo Plugins\BeautyGuidePlugin.8bf'));
DeleteFile(ExpandConstant('{pf}\Tint Guide\Photo Plugins64\BeautyGuidePlugin64.8bf'));
RemoveDir(ExpandConstant('{pf32}\Tint Guide\Photo Plugins'));
RemoveDir(ExpandConstant('{pf32}\Tint Guide'));
RemoveDir(ExpandConstant('{pf}\Tint Guide\Photo Plugins64'));
RemoveDir(ExpandConstant('{pf}\Tint Guide'));
begin
if (CurUninstallStep = usDone) then
begin
if Beauty.Checked then
if MsgBox('Программа {#MyAppNameBeauty} {#MyAppBeautyVersion} удалена!',mbconfirmation, mb_ok) = IDYES then
end;
end;
end;
end;
end;
end;
end;
begin
if (CurUninstallStep = usDone) then
begin
if Brightness.Checked then
RegDeleteKeyIncludingSubkeys(HKCR, 'bmp_auto_file\shell\Brightness Guide');
if Brightness.Checked then
RegDeleteKeyIncludingSubkeys(HKCR, 'jpegfile\shell\Brightness Guide');
if Brightness.Checked then
RegDeleteKeyIncludingSubkeys(HKCR, 'pngfile\shell\Brightness Guide');
if Brightness.Checked then
RemoveDir(ExpandConstant('{group}'));
end;
begin
if (CurUninstallStep = usDone) then
begin
if Brightness.Checked then
if MsgBox('Удалить Ваши настройки Brightness Guide?',mbconfirmation, mb_yesno) = IDYES then
begin
if Brightness.Checked then
DelTree(ExpandConstant('{userappdata}\BrightnessGuide'), True, True, True);
end;
begin
if (CurUninstallStep = usDone) then
begin
if Brightness.Checked then
if MsgBox('Удалить плагины Brightness Guide?',mbconfirmation, mb_yesno) = IDYES then
begin
if Brightness.Checked then
DeleteFile(ExpandConstant('{pf32}\Tint Guide\Photo Plugins\BrightnessGuidePlugin.8bf'));
DeleteFile(ExpandConstant('{pf}\Tint Guide\Photo Plugins64\BrightnessGuidePlugin64.8bf'));
RemoveDir(ExpandConstant('{pf32}\Tint Guide\Photo Plugins'));
RemoveDir(ExpandConstant('{pf32}\Tint Guide'));
RemoveDir(ExpandConstant('{pf}\Tint Guide\Photo Plugins64'));
RemoveDir(ExpandConstant('{pf}\Tint Guide'));
begin
if (CurUninstallStep = usDone) then
begin
if Brightness.Checked then
if MsgBox('Программа {#MyAppNameBrightness} {#MyAppBrightnessVersion} удалена!',mbconfirmation, mb_ok) = IDYES then
end;
end;
end;
end;
end;
end;
end;
end;

Imperor 12-08-2014 20:16 2388383

Помогите! Второй день сижу в ожидание чуда( Не отображается ход прогресс бара...

Модуль ProgressBar.iss

читать дальше »
Код:

type
  TImgPB = record  h: HWND; Left, Top, Width, Height, MaxWidth: Integer; img1, img2: Longint; end;

function ImgPBCreate(hParent: HWND; bk, pb: AnsiString; Left, Top, Width, Height: Integer): TImgPB;
begin
  Result.Left:=Left;
  Result.Top:=Top;
  Result.Width:=0;
  Result.Height:=Height;
  Result.MaxWidth:=Width;
  Result.h:= hParent;
  if Length(pb)>0 then Result.img1:=ImgLoad(hParent, pb, Result.Left, Result.Top, 0, Result.Height, True,True) else Result.img1:= 0;
  if Length(bk)>0 then Result.img2:=ImgLoad(hParent, bk, Left, Top, Width, Height, True, True) else Result.img2:=0;
  ImgApplyChanges(Result.h);
end;

procedure ImgPBSetPosition(PB: TImgPB; Percent: Extended);
var
  NewWidth: Integer;
begin
  if PB.img1<>0 then begin
    NewWidth:=Round(PB.MaxWidth*Percent/1000);
    if PB.Width<>NewWidth then begin
      PB.Width:=NewWidth;
      ImgSetPosition(PB.img1,PB.Left,PB.Top,PB.Width,PB.Height);
      ImgSetVisiblePart(PB.img1, ScaleX(0), ScaleY(0), ScaleX(PB.Width), ScaleY(PB.Height));
      ImgApplyChanges(PB.h);
    end;
  end;
end;

procedure ImgPBDelete(PB: TImgPB);
begin
  if PB.img1<>0 then ImgRelease(PB.img1);
  if PB.img2<>0 then ImgRelease(PB.img2);
  PB.img1:=0;
  PB.img2:=0;
  ImgApplyChanges(PB.h);
end;

procedure ImgPBVisibility(var PB :TImgPB; Visible :boolean);
begin
  ImgSetVisibility(PB.img1,Visible);
  ImgSetVisibility(PB.img2,Visible);
end;


Модуль ISDone:
читать дальше »
Код:

[Files]
Source: Include\English.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\Russian.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\ISDone.dll; DestDir: {tmp}; Flags: dontcopy

#ifdef records
Source: records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef PrecompInside
Source: Include\CLS-precomp.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll1.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef SrepInside
Source: Include\CLS-srep.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef MSCInside
Source: Include\CLS-MSC.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef facompress
Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp
  #if precomp == "0.38"
  Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
  #else
    #if precomp == "0.4"
    Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
    #else
      #if precomp == "0.41"
      Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
      #else
        #if precomp == "0.42"
        Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
        #else
        Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
        Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
        Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
        Source: Include\precomp042.exe; DestDir: {tmp}; Flags: dontcopy
        #endif
      #endif
    #endif
  #endif
#endif
#ifdef unrar
Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef XDelta
Source: Include\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PackZIP
Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif

(code)
type
  TCallback = function (OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;

const
  PCFonFLY=true;
  notPCFonFLY=false;

var
  LabelPct1,LabelCurrFileName,LabelTime1,LabelTime2,LabelTime3: TLabel;

  ISDoneProgressBar1: TImgPB;
  ISDoneCancel:integer;
  ISDoneError:boolean;
  PCFVer:double;

function WrapCallback(callback:TCallback; paramcount:integer):longword;external 'wrapcallback@files:ISDone.dll stdcall delayload';

function ISArcExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath, ExtractedPath: AnsiString; DeleteInFile:boolean; Password, CfgFile, WorkPath: AnsiString; ExtractPCF: boolean ):boolean; external 'ISArcExtract@files:ISDone.dll stdcall delayload';
function IS7ZipExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'IS7zipExtract@files:ISDone.dll stdcall delayload';
function ISRarExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutPath: AnsiString; DeleteInFile:boolean; Password: AnsiString):boolean; external 'ISRarExtract@files:ISDone.dll stdcall delayload';
function ISPrecompExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISPrecompExtract@files:ISDone.dll stdcall delayload';
function ISSRepExtract(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString; DeleteInFile:boolean):boolean; external 'ISSrepExtract@files:ISDone.dll stdcall delayload';
function ISxDeltaExtract(CurComponent:Cardinal; PctOfTotal:double; minRAM,maxRAM:integer; InName, DiffFile, OutFile: AnsiString; DeleteInFile, DeleteDiffFile:boolean):boolean; external 'ISxDeltaExtract@files:ISDone.dll stdcall delayload';
function ISPackZIP(CurComponent:Cardinal; PctOfTotal:double; InName, OutFile: AnsiString;ComprLvl:integer; DeleteInFile:boolean):boolean; external 'ISPackZIP@files:ISDone.dll stdcall delayload';
function ShowChangeDiskWindow(Text, DefaultPath, SearchFile:AnsiString):boolean; external 'ShowChangeDiskWindow@files:ISDone.dll stdcall delayload';

function Exec2 (FileName, Param: PAnsiChar;Show:boolean):boolean; external 'Exec2@files:ISDone.dll stdcall delayload';
function ISFindFiles(CurComponent:Cardinal; FileMask:AnsiString; var ColFiles:integer):integer; external 'ISFindFiles@files:ISDone.dll stdcall delayload';
function ISPickFilename(FindHandle:integer; OutPath:AnsiString; var CurIndex:integer; DeleteInFile:boolean):boolean; external 'ISPickFilename@files:ISDone.dll stdcall delayload';
function ISGetName(TypeStr:integer):PAnsichar; external 'ISGetName@files:ISDone.dll stdcall delayload';
function ISFindFree(FindHandle:integer):boolean; external 'ISFindFree@files:ISDone.dll stdcall delayload';
function ISExec(CurComponent:Cardinal; PctOfTotal,SpecifiedProcessTime:double; ExeName,Parameters,TargetDir,OutputStr:AnsiString;Show:boolean):boolean; external 'ISExec@files:ISDone.dll stdcall delayload';

function SrepInit(TmpPath:PAnsiChar;VirtMem,MaxSave:Cardinal):boolean; external 'SrepInit@files:ISDone.dll stdcall delayload';
function PrecompInit(TmpPath:PAnsiChar;VirtMem:cardinal;PrecompVers:single):boolean; external 'PrecompInit@files:ISDone.dll stdcall delayload';
function FileSearchInit(RecursiveSubDir:boolean):boolean; external 'FileSearchInit@files:ISDone.dll stdcall delayload';
function ISDoneInit(RecordFileName:AnsiString; TimeType,Comp1,Comp2,Comp3:Cardinal; WinHandle, NeededMem:longint; callback:TCallback):boolean; external 'ISDoneInit@files:ISDone.dll stdcall';
function ISDoneStop:boolean; external 'ISDoneStop@files:ISDone.dll stdcall';
function ChangeLanguage(Language:AnsiString):boolean; external 'ChangeLanguage@files:ISDone.dll stdcall delayload';
function SuspendProc:boolean; external 'SuspendProc@files:ISDone.dll stdcall';
function ResumeProc:boolean; external 'ResumeProc@files:ISDone.dll stdcall';

function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct<=1000 then ImgPBSetPosition(ISDoneProgressBar1,OveralPct);
  LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
  LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-ScaleX(100));
  Result := ISDoneCancel;
  ImgApplyChanges(WizardForm.Handle);
end;

procedure CancelButtonOnClick(Sender: TObject);
begin
  SuspendProc;
  if MsgBox(SetupMessage(msgExitSetupMessage), mbConfirmation, MB_YESNO) = IDYES then ISDoneCancel:=1;
  ResumeProc;
end;

procedure IsDoneAddComponents();
var PBTop:integer;
begin
  PBTop:=ScaleY(50);
 
  ISDoneProgressBar1:=ImgPBCreate(WizardForm.Handle, ExpandConstant('{tmp}\pbbkg.png'), ExpandConstant('{tmp}\pb.png'),7,430,646, 4);

  LabelPct1 := TLabel.Create(WizardForm);
  with LabelPct1 do begin
    Parent      := WizardForm;
    Font.Name    := 'Arial';
    Font.Size    := 10;
    Font.Style  := [fsBold];
    Transparent  := true;
    Font.Color  := $e1cc70;
    AutoSize    := False;
    Left        := ScaleX(540);
    Top          := ScaleY(255);
    Width        := ScaleX(180);
  end;
 
  LabelCurrFileName := TLabel.Create(WizardForm);
  with LabelCurrFileName do begin
    Parent      := WizardForm.InstallingPage;
    AutoSize    := False;
    Width        := ISDoneProgressBar1.Width+ScaleX(30);
    Left        := ScaleX(0);
    Top          := ScaleY(30);
  end;

  LabelTime1 := TLabel.Create(WizardForm);
  with LabelTime1 do begin
    Parent  := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := ISDoneProgressBar1.Width div 2;
    Left    := ScaleX(0);
    Top      := PBTop + ScaleY(35);
  end;
  LabelTime2 := TLabel.Create(WizardForm);
  with LabelTime2 do begin
    Parent  := WizardForm.InstallingPage;
    AutoSize := False;
    Width    := LabelTime1.Width+ScaleX(40);
    Left    := ISDoneProgressBar1.Width div 2;
    Top      := LabelTime1.Top;
  end;
  LabelTime3 := TLabel.Create(WizardForm);
  with LabelTime3 do begin
    Parent  := WizardForm.FinishedPage;
    AutoSize := False;
    Width    := 300;
    Left    := 180;
    Top      := 200;
  end;
end;

procedure IsDoneHide();
begin
  LabelPct1.Hide;
  LabelCurrFileName.Hide;
  LabelTime1.Hide;
  LabelTime2.Hide;
  LabelTime3.Hide;
  ImgPBVisibility(ISDoneProgressBar1, False);
end;

procedure IsDoneShow();
 begin
  LabelPct1.Show;
  LabelCurrFileName.Show;
  LabelTime1.Show;
  LabelTime2.Show;
  ImgPBVisibility(ISDoneProgressBar1, true);
 end;


procedure IsDoneUnpack(CurStep: TSetupStep);
var
  Comps1,Comps2,Comps3, TmpValue:cardinal;
  FindHandle1,ColFiles1,CurIndex1,tmp:integer;
  ExecError:boolean;
  InFilePath,OutFilePath,OutFileName:PAnsiChar;
begin
  if CurStep = ssInstall then begin  //Если необходимо, можно поменять на ssPostInstall
    WizardForm.ProgressGauge.Hide;
    WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:Extracted}');
    WizardForm.CancelButton.OnClick := @CancelButtonOnClick;
    ISDoneCancel:=0;

// Распаковка всех необходимых файлов в папку {tmp}.

ExtractTemporaryFile('unarc.dll');

#ifdef PrecompInside
ExtractTemporaryFile('CLS-precomp.dll');
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('packjpg_dll1.dll');
ExtractTemporaryFile('precomp.exe');
ExtractTemporaryFile('zlib1.dll');
#endif
#ifdef SrepInside
ExtractTemporaryFile('CLS-srep.dll');
#endif
#ifdef MSCInside
ExtractTemporaryFile('CLS-MSC.dll');
#endif
#ifdef facompress
    ExtractTemporaryFile('facompress.dll'); //ускоряет распаковку .arc архивов.
#endif
#ifdef records
    ExtractTemporaryFile('records.inf');
#endif
#ifdef precomp
  #if precomp == "0.38"
    ExtractTemporaryFile('precomp038.exe');
  #else
    #if precomp == "0.4"
      ExtractTemporaryFile('precomp040.exe');
    #else
      #if precomp == "0.41"
        ExtractTemporaryFile('precomp041.exe');
      #else
        #if precomp == "0.42"
          ExtractTemporaryFile('precomp042.exe');
        #else
          ExtractTemporaryFile('precomp038.exe');
          ExtractTemporaryFile('precomp040.exe');
          ExtractTemporaryFile('precomp041.exe');
          ExtractTemporaryFile('precomp042.exe');
        #endif
      #endif
    #endif
  #endif
#endif
#ifdef unrar
    ExtractTemporaryFile('Unrar.dll');
#endif
#ifdef XDelta
    ExtractTemporaryFile('XDelta3.dll');
#endif
#ifdef PackZIP
    ExtractTemporaryFile('7z.dll');
    ExtractTemporaryFile('PackZIP.exe');
#endif

    ExtractTemporaryFile('English.ini');
    ExtractTemporaryFile('Russian.ini');
                         
// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
    Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
    TmpValue:=1;
    if BtnGetChecked(LanguagetextButton[1]) then Comps1:=Comps1+TmpValue;    //компонент 1
    TmpValue:=TmpValue*2;
    if BtnGetChecked(LanguagetextButton[2]) then Comps1:=Comps1+TmpValue;    //компонент 2
    TmpValue:=TmpValue*2;
    if BtnGetChecked(LanguagevoiceButton[1]) then Comps1:=Comps1+TmpValue;    //компонент 3
    TmpValue:=TmpValue*2;
    if BtnGetChecked(LanguagevoiceButton[2]) then Comps1:=Comps1+TmpValue;    //компонент 4
#endif

#ifdef precomp
  PCFVer:={#precomp};
#else
  PCFVer:=0;
#endif
    ISDoneError:=true;
    if ISDoneInit(ExpandConstant('{src}\records.inf'), $F777, Comps1,Comps2,Comps3, MainForm.Handle, {#NeedMem}, @ProgressCallback) then begin
      repeat
  case ActiveLanguage of
  'eng': ChangeLanguage('English');
  'rus': ChangeLanguage('Russian');
  end;
        if not SrepInit('',512,0) then break;
        if not PrecompInit('',128,PCFVer) then break;
        if not FileSearchInit(true) then break;

        #ifdef Data1
        if not ISArcExtract ( 0, 20, ExpandConstant('{src}\{#Data1}'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
        #endif
        #ifdef Data2
        if not ISArcExtract ( 0, 20, ExpandConstant('{src}\{#Data2}'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
        #endif
        #ifdef Data3
        if not ISArcExtract ( 0, 20, ExpandConstant('{src}\{#Data3}'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
        #endif
        #ifdef Data4
        if not ISArcExtract ( 0, 20, ExpandConstant('{src}\{#Data4}'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
        #endif
        #ifdef Data5
        if not ISArcExtract ( 0, 20, ExpandConstant('{src}\{#Data5}'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
        #endif
       
//    далее находятся закомментированые примеры различных функций распаковки (чтобы каждый раз не лазить в справку за примерами)
(*
        if not ISArcExtract    ( 0, 0, ExpandConstant('{src}\arc.arc'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;
        if not IS7ZipExtract  ( 0, 0, ExpandConstant('{src}\CODMW2.7z'), ExpandConstant('{app}\data1'), false, '') then break;
        if not ISRarExtract    ( 0, 0, ExpandConstant('{src}\data_*.rar'), ExpandConstant('{app}'), false, '') then break;
        if not ISSRepExtract  ( 0, 0, ExpandConstant('{app}\data1024_1024.srep'),ExpandConstant('{app}\data1024.arc'), true) then break;
        if not ISPrecompExtract( 0, 0, ExpandConstant('{app}\data.pcf'),    ExpandConstant('{app}\data.7z'), true) then break;
        if not ISxDeltaExtract ( 0, 0, 0, 640, ExpandConstant('{app}\in.pcf'), ExpandConstant('{app}\*.diff'),  ExpandConstant('{app}\out.dat'), false, false) then break;
        if not ISPackZIP      ( 0, 0, ExpandConstant('{app}\1a1\*'), ExpandConstant('{app}\1a1.pak'), 2, false ) then break;
        if not ISExec          ( 0, 0, 0, ExpandConstant('{tmp}\Arc.exe'), ExpandConstant('x -o+ "{src}\001.arc" "{app}\"'), ExpandConstant('{tmp}'), '...',false) then break;
        if not ShowChangeDiskWindow ('Пожалуйста, вставьте второй диск и дождитесь его инициализации.', ExpandConstant('{src}'),'CODMW_2.arc') then break;

//    распаковка группы файлов посредством внешнего приложения

        FindHandle1:=ISFindFiles(0,ExpandConstant('{app}\*.ogg'),ColFiles1);
        ExecError:=false;
        while not ExecError and ISPickFilename(FindHandle1,ExpandConstant('{app}\'),CurIndex1,true) do begin
          InFilePath:=ISGetName(0);
          OutFilePath:=ISGetName(1);
          OutFileName:=ISGetName(2);
          ExecError:=not ISExec(0, 0, 0, ExpandConstant('{tmp}\oggdec.exe'), '"'+InFilePath+'" -w "'+OutFilePath+'"',ExpandConstant('{tmp}'),OutFileName,false);
        end;
        ISFindFree(FindHandle1);
        if ExecError then break;
*)

        ISDoneError:=false;
      until true;
      ISDoneStop;
    end;
  end;
  if (CurStep=ssPostInstall) and ISDoneError then begin
    IsDoneHide;
    BtnSetEnabled(hCancelBtn, False);
    ImgApplyChanges(WizardForm.Handle);
    ImgApplyChanges(WizardForm.Handle);
    Exec2(ExpandConstant('{uninstallexe}'), '/VERYSILENT', false);
  end;
end;



Это часть скрипта, в котором я уверен сидит ошибка! :lamer:

Dodakaedr 12-08-2014 20:42 2388397

Imperor, возьмите ваше сообщение в тег [code] и занесите под спойлер.
читать дальше »
Прогресс бар не показывает, потому что он скрыт. Нужно изменить родителя
Код:

with WizardForm.ProgressGauge do
  begin
  Parent:=WizardForm;
  SetBounds(ScaleX(108),ScaleY(283),ScaleX(488),ScaleY(15));
  end;

потом скрыть в процедуре HideComponents
Код:

procedure HideComponents;
begin;
  WizardForm.ProgressGauge.Hide;
end;

а в процедуре ShowComponents(CurPageID: Integer) показать
Код:

procedure ShowComponents(CurPageID: Integer);
begin
  case CurPageID of
      wpInstalling:
      begin
      WizardForm.ProgressGauge.Show;
    end;
  end;
end;

Инфо в общих чертах, все зависит от самого скрипта

Imperor 12-08-2014 20:55 2388411

Dodakaedr, вы не правильно меня поняли. Прогресс бар отображается, но загрузка в нем не отображается. Сама установка идет как положено.
Прогресс бар Isdone'ий, такие хитрости с ним не прокатят.
Модуль ProgressBar.iss задействует модуль Isdone.iss b всё это под командованием основного скрипта, на который смысла смотреть нету. так как там только прописаны две строки, которые задействуют эти модули.
В ProgressBar лежат ссылки на png файлы прогресс бара, первый отображает его шаблон, второй ход процесса загрузки. Второй почему то не отображается. Я голову ломаю над этим, никак не помогу выяснить причину. Могу скинуть весь скрипт целиком, если есть желание помочь разобраться. Так то скрипт закончен, только вот эта визуальная неувязочка не даёт мне покоя(

nik1967 12-08-2014 22:29 2388447

Imperor,
Цитата:

Цитата Nordek
Сами посудите: Если вам лень что либо читать, то каково тем кто может вам помочь: создавать картинки, искать аналогичные скрипты, подставлять скины, музыку - в общем полностью подстраиваться под ваше чудо-творение.
Поверьте, тем кто вам может помочь - это абсолютно ненужно. Помогать таким людям не будут: Будут просто игнорировать.
Ведь перед выкладыванием чего либо нужно проверить, чтоб не было ошибок. Правильно?
Тогда нужно представлять все файлы.
И ещё раз: вы не читаете.
Это:
Цитата sergey3695:
кидай-те скрипты с файлами. »
написано для всех. Подчеркну если не заметили: с файлами »


Imperor 12-08-2014 22:39 2388449

nik1967, нету ошибок, есть только проблема с прогресс баром. Вот весь мой скрипт(с файлами). http://rghost.ru/57434129
Есть отдельно модулем прогресс-бар, думаю там где-то что-то не так прописано.

Если лень оказать услугу за просто так, то просто сразу так и скажите, я могу и заплатить(в пределах разумного конечно) раз уж на то пошло.

Nordek 13-08-2014 03:54 2388531

Цитата:

Цитата Imperor
Если лень оказать услугу за просто так, то просто сразу так и скажите »

Imperor, Лень значит? Всё ясно.
Ненужно давить. (Как это говориться?): "Брать на понт" (Если не ошибаюсь) - тоже ненужно.
Раз на то дело пошло: мистер, вы темой ошиблись.
Нужно учитывать то, что не все пользуются "ISDone", а значит в идеале - с этим мало знакомы (т.е ISDone использовали как есть с меньшими изменениями) или не знакомы (т.е не пользовались).
Так же нужно учесть что у людей может не быть как времени, так и желания.
На сколько известно, автор: Profrager. Довольно позволительно предположить что автор более грамотен в данной сфере.
Проявите терпение. Не хотите ждать, нужно срочно » сами сообразите куда направить вопрос.
Не знаете? Google.
Не получается найти или скажете что "не находит ничего"? Ложь. "Поиск всегда и везде работает - это просто вы не умеете пользоваться".
Как называется архив который вы скачали, не "ISDone0.6final"? Почему его название не использовать в поиске?

Исследовав ссылки в поисковике, пришёл к выводу:
  1. ISDone 0.6 final
    (в данном варианте, перейдите в Обсуждение)
  2. ISDone.dll

Imperor 13-08-2014 08:20 2388571

Nordek, вас не понять, то вы про лень пользователей говорите, то за просто так вам лень помогать, ну я и предложил оплатить работу. В ответ я получаю сообщение, что я типо на вас "наезжаю" и "беру на понт")) Спасибо за тему, которую дали, там последнее сообщение в июне было. Может туда уже никто и не заглядывает с того месяца. Да и вообще сложно найти то, не зная чего. В моём случае нужна реальная помощь человека, который в этом разбирается. Если не можете помочь, лучше промолчите или найдите того, кто поможет. Это вам не в реестре стринги прописывать.

zaza5 13-08-2014 09:21 2388598

очень нужна помощь в создании инсталлятора, похожего нигде не нашел, сам тоже слабоват в написании скриптов, ни разу не программист, готов заплатить, напишите кто хорошо разбирается ICQ 693128042 или в личку

El Sanchez 13-08-2014 10:46 2388633

Цитата:

Цитата Imperor
В ProgressBar лежат ссылки на png файлы прогресс бара, первый отображает его шаблон, второй ход процесса загрузки. Второй почему то не отображается »

Imperor, давно б уже избавились бы от модульной системы скрипта, написали бы скрипт все в одном, попутно выкидывая килограммы неиспользуемого кода, а то отладку толком не сделать. В теле функции ImgPBCreate при получении дескриптора картинки прогрессбара (где Result.img1) значение последнего параметра IsBkg функции ImgLoad должно быть False.

nik1967 13-08-2014 12:20 2388672

Imperor, забыл добавить, что ещё и на ботве - а это важно. Как уже написал El Sanchez нужно поменять значение в модуле ProgressBar.iss с True на False:
с
Код:

if Length(pb)>0 then Result.img1:=ImgLoad(hParent, pb, Result.Left, Result.Top, 0, Result.Height, True, True) else Result.img1:= 0;
на
Код:

if Length(pb)>0 then Result.img1:=ImgLoad(hParent, pb, Result.Left, Result.Top, 0, Result.Height, True, False) else Result.img1:= 0;
Вот готовый вариант.

Ты видимо взял вариант с прогрессбаром из скрипта, где использовался прозрачный pbbkg.png. В таком случае (если pbbkg.png прозрачный) можно оставить значение True.

Цитата:

Цитата Imperor
Если лень оказать услугу за просто так, то просто сразу так и скажите, я могу и заплатить(в пределах разумного конечно) раз уж на то пошло. »

Ну не такой уж я крахобор. Мне лень, просто лень. Когда бывает настроение, то помогаю, чем могу.


zaza5, попробуй спросить в этой теме.

killer000 13-08-2014 16:10 2388779

Привет помогите
как мне прицепить компоненты


читать дальше »
;InnoSetupVersion=5.5.0 (Unicode)
[Setup]
AppName=Autorun Organizer
AppVerName=Autorun Organizer 1.22
AppVersion=1.22
AppPublisher=RePack by Killer000.
DefaultDirName={pf}\Autorun Organizer
DefaultGroupName=Autorun Organizer
UninstallDisplayIcon={app}\mischief.exe
UninstallDisplayName=Autorun Organizer 1.22 RePack
OutputBaseFilename=Autorun Organizer 1.22
Compression=lzma2/ultra64
Uninstallable=not IsComponentSelected('Portable')
DisableProgramGroupPage=yes
DisableReadyPage=yes
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Files]
Source: "{app}\AutorunOrganizer.exe"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\ChemtableStartupChecker.exe"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\HardwareConstant.dll"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\ProgramDataStorage.const"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Reg64Call.exe"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Updater.exe"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\UpdaterDll.dll"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Languages\Russian.sib"; DestDir: "{src}\Autorun Organizer Portable\Languages\"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\images\line.gif"; DestDir: "{src}\Autorun Organizer Portable\Documentation\images\"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\index_eng.htm"; DestDir: "{src}\Autorun Organizer Portable\Documentation\"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\index_rus.htm"; DestDir: "{src}\Autorun Organizer Portable\Documentation\"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\styles.css"; DestDir: "{src}\Autorun Organizer Portable\Documentation\"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\AutorunOrganizer.exe"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\ChemtableStartupChecker.exe"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\HardwareConstant.dll"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\ProgramDataStorage.const"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Reg64Call.exe"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Updater.exe"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\UpdaterDll.dll"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Languages\Russian.sib"; DestDir: "{app}\Languages\"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\images\line.gif"; DestDir: "{app}\Documentation\images\"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\index_eng.htm"; DestDir: "{app}\Documentation\"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\index_rus.htm"; DestDir: "{app}\Documentation\"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\styles.css"; DestDir: "{app}\Documentation\"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: embedded\descctrl.dll; Flags: dontcopy

[Run]
Filename: "{app}\AutorunOrganizer.exe"; Description: "{cm:LaunchProgram,Autorun Organizer}"; Components: Install; MinVersion: 0.0,5.0; Flags: postinstall skipifsilent nowait

[Icons]
Name: "{group}\{cm:LaunchProgram,Autorun Organizer}"; Filename: "{app}\AutorunOrganizer.exe"; Components: Install; Tasks: Group; MinVersion: 0.0,5.0;
Name: "{group}\{cm:UninstallProgram,Autorun Organizer}"; Filename: "{uninstallexe}"; Components: Install; Tasks: Group; MinVersion: 0.0,5.0;
Name: "{userdesktop}\{cm:LaunchProgram,Autorun Organizer}"; Filename: "{app}\AutorunOrganizer.exe"; Components: Install; Tasks: Desktopicon; MinVersion: 0.0,5.0;

[code]
const
LoremIpsum =
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin mauris ' +
'lorem, ullamcorper sit amet tincidunt ac, varius at ante. Aenean pretium, ' +
'tortor non congue pharetra, ante urna consectetur mi, vitae congue arcu est ' +
'eleifend nisl.';
LoremIpsum2 =
'Распаковка портативной версии (рядом с инсталлятором) ' +
'lorem, ullamcorper sit amet tincidunt ac, varius at ante. Aenean pretium, ' +
'tortor non congue pharetra, ante urna consectetur mi, vitae congue arcu est ' +
'eleifend nisl.';

procedure InitializeWizard;
var
CustomPage: TWizardPage;
StandardDescLabel: TLabel;
StandardRadioButton: TNewRadioButton;
AdvancedDescLabel: TLabel;
AdvancedRadioButton: TNewRadioButton;
begin
CustomPage := CreateCustomPage(wpWelcome, 'Тип установки', '');
StandardRadioButton := TNewRadioButton.Create(WizardForm);
StandardRadioButton.Parent := CustomPage.Surface;
StandardRadioButton.Checked := True;
StandardRadioButton.Top := 16;
StandardRadioButton.Width := CustomPage.SurfaceWidth;
StandardRadioButton.Font.Style := [fsBold];
StandardRadioButton.Font.Size := 9;
StandardRadioButton.Caption := 'Установка обычной версии'
StandardDescLabel := TLabel.Create(WizardForm);
StandardDescLabel.Parent := CustomPage.Surface;
StandardDescLabel.Left := 8;
StandardDescLabel.Top := StandardRadioButton.Top + StandardRadioButton.Height + 8;
StandardDescLabel.Width := CustomPage.SurfaceWidth;
StandardDescLabel.Height := 40;
StandardDescLabel.AutoSize := False;
StandardDescLabel.Wordwrap := True;
StandardDescLabel.Caption := LoremIpsum;
AdvancedRadioButton := TNewRadioButton.Create(WizardForm);
AdvancedRadioButton.Parent := CustomPage.Surface;
AdvancedRadioButton.Top := StandardDescLabel.Top + StandardDescLabel.Height + 16;
AdvancedRadioButton.Width := CustomPage.SurfaceWidth;
AdvancedRadioButton.Font.Style := [fsBold];
AdvancedRadioButton.Font.Size := 9;
AdvancedRadioButton.Caption := 'Распаковка портативной версии'
AdvancedDescLabel := TLabel.Create(WizardForm);
AdvancedDescLabel.Parent := CustomPage.Surface;
AdvancedDescLabel.Left := 8;
AdvancedDescLabel.Top := AdvancedRadioButton.Top + AdvancedRadioButton.Height + 8;
AdvancedDescLabel.Width := CustomPage.SurfaceWidth;
AdvancedDescLabel.Height := 40;
AdvancedDescLabel.AutoSize := False;
AdvancedDescLabel.Wordwrap := True;
AdvancedDescLabel.Caption := LoremIpsum2;
end;

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Components: "Install"; MinVersion: 0.0,5.0;
Name: "group"; Description: "{cm:Shortcut}"; GroupDescription: "{cm:AdditionalIcons}"; Components: "Install"; MinVersion: 0.0,5.0;

[Components]
Name: "install"; Description: "{cm:Install}"; Types: "full"; MinVersion: 0.0,5.0; Flags: exclusive
Name: "portable"; Description: "{cm:Portable}"; Types: "compact"; MinVersion: 0.0,5.0; Flags: exclusive

[Types]
Name: "full"; Description: "{cm:Install}"; MinVersion: 0.0,5.0;
Name: "compact"; Description: "{cm:Portable}"; MinVersion: 0.0,5.0;

[CustomMessages]
ru.NameAndVersion=%1, версия %2
ru.AdditionalIcons=Дополнительно:
ru.CreateDesktopIcon=Ярлык на &Рабочем столе
ru.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
ru.ProgramOnTheWeb=Сайт %1 в Интернете
ru.UninstallProgram=Удалить
ru.LaunchProgram=Запустить %1
ru.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
ru.AssocingFileExtension=Связывание %1 с файлами %2...
ru.AutoStartProgramGroupDescription=Автозапуск:
ru.AutoStartProgram=Автоматически запускать %1
ru.AddonHostProgramNotFound=%1 не найден в указанной вами папке.%n%nВы всё равно хотите продолжить?
ru.Shortcut=Ярлыки в меню «Пуск»
ru.ContextMenu=Пункт контекстного меню
ru.Install=Установка обычной версии
ru.Portable=Распаковка портативной версии (рядом с инсталлятором)

[Languages]
; These files are stubs
; To achieve better results after recompilation, use the real language files
Name: "ru"; MessagesFile: "embedded\Russian.isl";

andy.zubov@vk 13-08-2014 16:32 2388794

Ребята, порекомендуйте как лучше организовать следующее.

В программе около 20 компонентов (опций) каждая из которых не зависит от остальных. И каждая из этих опций добавляет в программу определенный функционал который бы хотелось отобразить в виде скриншота, т.е чтобы пользователь в выборе компонентов для установки мог увидеть текстовое описание и скриншот программы детализирующий эту самую опцию.
Сам выбор я уже давно сделал, интересует именно текстовое и графическое описание к компонентам, как это можно реализовать?

nik1967 13-08-2014 16:53 2388805

andy.zubov@vk, здесь. А так то про это много писали и в данной ветке. Пользуйтесь поиском.
killer000, не понял вопроса.

killer000 13-08-2014 17:56 2388840

nik1967,
всё сделал по другому
есть другой вопрос
как скрыть DirPage при выбранном компоненте
хочу сделать что бы при обручной установки, можно было выбрать папку установки
а при распаковке паративки, скрыть выбор папки, чтобы сразу приступал к распаковке



читать дальше »
;InnoSetupVersion=5.5.0 (Unicode)
[Setup]
AppName=Autorun Organizer
AppVerName=Autorun Organizer 1.22
AppVersion=1.22
AppPublisher=RePack by Killer000.
DefaultDirName={pf}\Autorun Organizer
DefaultGroupName=Autorun Organizer
UninstallDisplayIcon={app}\mischief.exe
UninstallDisplayName=Autorun Organizer 1.22 RePack
OutputBaseFilename=Autorun Organizer 1.22
Compression=lzma2/ultra64
Uninstallable=not IsComponentSelected('Portable')
DisableProgramGroupPage=yes
DisableReadyPage=yes
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Files]
Source: "{app}\AutorunOrganizer.exe"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\ChemtableStartupChecker.exe"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\HardwareConstant.dll"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\ProgramDataStorage.const"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Reg64Call.exe"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Updater.exe"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\UpdaterDll.dll"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Languages\Russian.sib"; DestDir: "{src}\Autorun Organizer Portable\Languages\"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\images\line.gif"; DestDir: "{src}\Autorun Organizer Portable\Documentation\images\"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\index_eng.htm"; DestDir: "{src}\Autorun Organizer Portable\Documentation\"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\index_rus.htm"; DestDir: "{src}\Autorun Organizer Portable\Documentation\"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\styles.css"; DestDir: "{src}\Autorun Organizer Portable\Documentation\"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\AutorunOrganizer.exe"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\ChemtableStartupChecker.exe"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\HardwareConstant.dll"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\ProgramDataStorage.const"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Reg64Call.exe"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Updater.exe"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\UpdaterDll.dll"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Languages\Russian.sib"; DestDir: "{app}\Languages\"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\images\line.gif"; DestDir: "{app}\Documentation\images\"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\index_eng.htm"; DestDir: "{app}\Documentation\"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\index_rus.htm"; DestDir: "{app}\Documentation\"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\styles.css"; DestDir: "{app}\Documentation\"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion

[Run]
Filename: "{app}\AutorunOrganizer.exe"; Description: "{cm:LaunchProgram,Autorun Organizer}"; Components: Install; MinVersion: 0.0,5.0; Flags: postinstall skipifsilent nowait

[Icons]
Name: "{group}\{cm:LaunchProgram,Autorun Organizer}"; Filename: "{app}\AutorunOrganizer.exe"; Components: Install; Tasks: Group; MinVersion: 0.0,5.0;
Name: "{group}\{cm:UninstallProgram,Autorun Organizer}"; Filename: "{uninstallexe}"; Components: Install; Tasks: Group; MinVersion: 0.0,5.0;
Name: "{userdesktop}\{cm:LaunchProgram,Autorun Organizer}"; Filename: "{app}\AutorunOrganizer.exe"; Components: Install; Tasks: Desktopicon; MinVersion: 0.0,5.0;

[code]
var
Components: TLabel; ComponentPage: TWizardPage;
SelectComponentsLabel: TLabel;


procedure InitializeWizard();
begin
ComponentPage := CreateCustomPage(wpLicense, 'Выбор компонентов',
'Какие компоненты должны быть установлены?');
WizardForm.DiskSpaceLabel.Hide
WizardForm.TypesCombo.Parent:= ComponentPage.Surface;
WizardForm.ComponentsList.Parent:= ComponentPage.Surface
WizardForm.ComponentsDiskSpaceLabel.Parent:= ComponentPage.Surface
WizardForm.TypesCombo.Parent:= ComponentPage.Surface;
WizardForm.TypesCombo.Top:= ScaleY(45)
WizardForm.ComponentsList.Top:= ScaleY(45)
WizardForm.ComponentsDiskSpaceLabel.Hide;
WizardForm.ComponentsList.Height := ScaleY(165);
SelectComponentsLabel:= TLabel.Create(WizardForm)
with SelectComponentsLabel do
begin
Left:= ScaleX(40);
Width:= WizardForm.SelectComponentsLabel.Width;
Height:= WizardForm.SelectComponentsLabel.Height;
Autosize:= false;
WordWrap:= true;
Transparent:= true;
Caption:= WizardForm.SelectComponentsLabel.Caption;
WizardForm.SelectComponentsLabel.Parent:= ComponentPage.Surface;
end
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = wpSelectComponents) then
Result:= True;
end;

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Components: "Install"; MinVersion: 0.0,5.0;
Name: "group"; Description: "{cm:Shortcut}"; GroupDescription: "{cm:AdditionalIcons}"; Components: "Install"; MinVersion: 0.0,5.0;

[Components]
Name: "install"; Description: "{cm:Install}"; Types: "custom"; MinVersion: 0.0,5.0; Flags: exclusive
Name: "portable"; Description: "{cm:Portable}"; Types: "custom"; MinVersion: 0.0,5.0; Flags: exclusive

[Types]
Name: "custom"; Description: "Выборочная установка"; Flags: iscustom

[CustomMessages]
ru.NameAndVersion=%1, версия %2
ru.AdditionalIcons=Дополнительно:
ru.CreateDesktopIcon=Ярлык на &Рабочем столе
ru.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
ru.ProgramOnTheWeb=Сайт %1 в Интернете
ru.UninstallProgram=Удалить
ru.LaunchProgram=Запустить %1
ru.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
ru.AssocingFileExtension=Связывание %1 с файлами %2...
ru.AutoStartProgramGroupDescription=Автозапуск:
ru.AutoStartProgram=Автоматически запускать %1
ru.AddonHostProgramNotFound=%1 не найден в указанной вами папке.%n%nВы всё равно хотите продолжить?
ru.Shortcut=Ярлыки в меню «Пуск»
ru.ContextMenu=Пункт контекстного меню
ru.Install=Установка обычной версии
ru.Portable=Распаковка портативной версии (рядом с инсталлятором)

[Languages]
; These files are stubs
; To achieve better results after recompilation, use the real language files
Name: "ru"; MessagesFile: "embedded\Russian.isl";

saurn 13-08-2014 19:01 2388869

Цитата:

Цитата killer000
а при распаковке паративки, скрыть выбор папки, чтобы сразу приступал к распаковке »

читать дальше »
Код:

;InnoSetupVersion=5.5.0 (Unicode)
[Setup]
AppName=Autorun Organizer
AppVerName=Autorun Organizer 1.22
AppVersion=1.22
AppPublisher=RePack by Killer000.
DefaultDirName={pf}\Autorun Organizer
DefaultGroupName=Autorun Organizer
UninstallDisplayIcon={app}\mischief.exe
UninstallDisplayName=Autorun Organizer 1.22 RePack
OutputBaseFilename=Autorun Organizer 1.22
Compression=lzma2/ultra64
Uninstallable=not IsComponentSelected('Portable')
DisableProgramGroupPage=yes
DisableReadyPage=yes
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Files]
Source: "{app}\AutorunOrganizer.exe"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\ChemtableStartupChecker.exe"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\HardwareConstant.dll"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\ProgramDataStorage.const"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Reg64Call.exe"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Updater.exe"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\UpdaterDll.dll"; DestDir: "{src}\Autorun Organizer Portable"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Languages\Russian.sib"; DestDir: "{src}\Autorun Organizer Portable\Languages\"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\images\line.gif"; DestDir: "{src}\Autorun Organizer Portable\Documentation\images\"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\index_eng.htm"; DestDir: "{src}\Autorun Organizer Portable\Documentation\"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\index_rus.htm"; DestDir: "{src}\Autorun Organizer Portable\Documentation\"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\styles.css"; DestDir: "{src}\Autorun Organizer Portable\Documentation\"; Components: Portable; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\AutorunOrganizer.exe"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\ChemtableStartupChecker.exe"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\HardwareConstant.dll"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\ProgramDataStorage.const"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Reg64Call.exe"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Updater.exe"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\UpdaterDll.dll"; DestDir: "{app}"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Languages\Russian.sib"; DestDir: "{app}\Languages\"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\images\line.gif"; DestDir: "{app}\Documentation\images\"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\index_eng.htm"; DestDir: "{app}\Documentation\"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\index_rus.htm"; DestDir: "{app}\Documentation\"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion
Source: "{app}\Documentation\styles.css"; DestDir: "{app}\Documentation\"; Components: install; MinVersion: 0.0,5.0; Flags: ignoreversion

[Run]
Filename: "{app}\AutorunOrganizer.exe"; Description: "{cm:LaunchProgram,Autorun Organizer}"; Components: Install; MinVersion: 0.0,5.0; Flags: postinstall skipifsilent nowait

[Icons]
Name: "{group}\{cm:LaunchProgram,Autorun Organizer}"; Filename: "{app}\AutorunOrganizer.exe"; Components: Install; Tasks: Group; MinVersion: 0.0,5.0;
Name: "{group}\{cm:UninstallProgram,Autorun Organizer}"; Filename: "{uninstallexe}"; Components: Install; Tasks: Group; MinVersion: 0.0,5.0;
Name: "{userdesktop}\{cm:LaunchProgram,Autorun Organizer}"; Filename: "{app}\AutorunOrganizer.exe"; Components: Install; Tasks: Desktopicon; MinVersion: 0.0,5.0;

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Components: "Install"; MinVersion: 0.0,5.0;
Name: "group"; Description: "{cm:Shortcut}"; GroupDescription: "{cm:AdditionalIcons}"; Components: "Install"; MinVersion: 0.0,5.0;

[Components]
Name: "install"; Description: "{cm:Install}"; Types: "custom"; MinVersion: 0.0,5.0; Flags: exclusive
Name: "portable"; Description: "{cm:Portable}"; Types: "custom"; MinVersion: 0.0,5.0; Flags: exclusive

[Types]
Name: "custom"; Description: "Выборочная установка"; Flags: iscustom

[Languages]
; These files are stubs
; To achieve better results after recompilation, use the real language files
Name: "ru"; MessagesFile: "embedded\Russian.isl";

[CustomMessages]
ru.NameAndVersion=%1, версия %2
ru.AdditionalIcons=Дополнительно:
ru.CreateDesktopIcon=Ярлык на &Рабочем столе
ru.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
ru.ProgramOnTheWeb=Сайт %1 в Интернете
ru.UninstallProgram=Удалить
ru.LaunchProgram=Запустить %1
ru.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
ru.AssocingFileExtension=Связывание %1 с файлами %2...
ru.AutoStartProgramGroupDescription=Автозапуск:
ru.AutoStartProgram=Автоматически запускать %1
ru.AddonHostProgramNotFound=%1 не найден в указанной вами папке.%n%nВы всё равно хотите продолжить?
ru.Shortcut=Ярлыки в меню «Пуск»
ru.ContextMenu=Пункт контекстного меню
ru.Install=Установка обычной версии
ru.Portable=Распаковка портативной версии (рядом с инсталлятором)

[code]
var
Components: TLabel; ComponentPage: TWizardPage;
SelectComponentsLabel: TLabel;


procedure InitializeWizard();
begin
ComponentPage := CreateCustomPage(wpLicense, 'Выбор компонентов',
'Какие компоненты должны быть установлены?');
WizardForm.DiskSpaceLabel.Hide
WizardForm.TypesCombo.Parent:= ComponentPage.Surface;
WizardForm.ComponentsList.Parent:= ComponentPage.Surface
WizardForm.ComponentsDiskSpaceLabel.Parent:= ComponentPage.Surface
WizardForm.TypesCombo.Parent:= ComponentPage.Surface;
WizardForm.TypesCombo.Top:= ScaleY(45)
WizardForm.ComponentsList.Top:= ScaleY(45)
WizardForm.ComponentsDiskSpaceLabel.Hide;
WizardForm.ComponentsList.Height := ScaleY(165);
SelectComponentsLabel:= TLabel.Create(WizardForm)
with SelectComponentsLabel do
begin
Left:= ScaleX(40);
Width:= WizardForm.SelectComponentsLabel.Width;
Height:= WizardForm.SelectComponentsLabel.Height;
Autosize:= false;
WordWrap:= true;
Transparent:= true;
Caption:= WizardForm.SelectComponentsLabel.Caption;
WizardForm.SelectComponentsLabel.Parent:= ComponentPage.Surface;
end
end
;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
    case
PageID of
       
wpSelectComponents: Result := True;
        wpSelectDir: Result := IsComponentSelected('portable') <> False;
    end;
end;


Imperor 13-08-2014 21:39 2388928

El Sanchez, nik1967, Спасибо парни вы лучшие, особенно Ник! Который не поленился перелопатить мой скрипт и найти источник всех бед)) Без вас бы я ещё месяц мучался, так бы и не смог ничего сделать, даже еслиб все форумы перерыл по Inno Setup, что я собственно почти и сделал)) Вообщем всех вам самых лучших пожеланий и поменьше проблемных новичков вроде меня, которые задумывают проект, который им не по силам)

AlekseyPopovv 14-08-2014 12:52 2389157

Ребята помогите решить проблему: скрипт собирается, файл запускается всё устанавливается. Ошибка возникает при удалении после окошка "Нажмите кнопку "OK" и удалите не нужные Вам параметры программы {#MyAppName} {#MyAppVersion}.". Скрипт на две программы (Beauty.Checked и Brightness.Checked). Как решить эту проблему?

[Messages]
UninstalledAll=Нажмите кнопку "OK" и удалите не нужные Вам параметры программы {#MyAppName} {#MyAppVersion}.

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if (CurUninstallStep = usDone) then
begin
if Beauty.Checked then
RegDeleteKeyIncludingSubkeys(HKCR, 'bmp_auto_file\shell\Beauty Guide');
if Beauty.Checked then
RegDeleteKeyIncludingSubkeys(HKCR, 'jpegfile\shell\Beauty Guide');
if Beauty.Checked then
RegDeleteKeyIncludingSubkeys(HKCR, 'pngfile\shell\Beauty Guide');
if Beauty.Checked then
RemoveDir(ExpandConstant('{group}'));
end;
begin
if (CurUninstallStep = usDone) then
begin
if Beauty.Checked then
if MsgBox('Удалить Ваши настройки Beauty Guide?',mbconfirmation, mb_yesno) = IDYES then
begin
if Beauty.Checked then
DelTree(ExpandConstant('{userappdata}\BeautyGuide'), True, True, True);
end;
begin
if (CurUninstallStep = usDone) then
begin
if Beauty.Checked then
if MsgBox('Удалить плагины Beauty Guide?',mbconfirmation, mb_yesno) = IDYES then
begin
if Beauty.Checked then
DeleteFile(ExpandConstant('{pf32}\Tint Guide\Photo Plugins\BeautyGuidePlugin.8bf'));
DeleteFile(ExpandConstant('{pf}\Tint Guide\Photo Plugins64\BeautyGuidePlugin64.8bf'));
RemoveDir(ExpandConstant('{pf32}\Tint Guide\Photo Plugins'));
RemoveDir(ExpandConstant('{pf32}\Tint Guide'));
RemoveDir(ExpandConstant('{pf}\Tint Guide\Photo Plugins64'));
RemoveDir(ExpandConstant('{pf}\Tint Guide'));
begin
if (CurUninstallStep = usDone) then
begin
if Beauty.Checked then
if MsgBox('Программа {#MyAppNameBeauty} {#MyAppBeautyVersion} удалена!',mbconfirmation, mb_ok) = IDYES then
end;
end;
end;
end;
end;
end;
end;
begin
if (CurUninstallStep = usDone) then
begin
if Brightness.Checked then
RegDeleteKeyIncludingSubkeys(HKCR, 'bmp_auto_file\shell\Brightness Guide');
if Brightness.Checked then
RegDeleteKeyIncludingSubkeys(HKCR, 'jpegfile\shell\Brightness Guide');
if Brightness.Checked then
RegDeleteKeyIncludingSubkeys(HKCR, 'pngfile\shell\Brightness Guide');
if Brightness.Checked then
RemoveDir(ExpandConstant('{group}'));
end;
begin
if (CurUninstallStep = usDone) then
begin
if Brightness.Checked then
if MsgBox('Удалить Ваши настройки Brightness Guide?',mbconfirmation, mb_yesno) = IDYES then
begin
if Brightness.Checked then
DelTree(ExpandConstant('{userappdata}\BrightnessGuide'), True, True, True);
end;
begin
if (CurUninstallStep = usDone) then
begin
if Brightness.Checked then
if MsgBox('Удалить плагины Brightness Guide?',mbconfirmation, mb_yesno) = IDYES then
begin
if Brightness.Checked then
DeleteFile(ExpandConstant('{pf32}\Tint Guide\Photo Plugins\BrightnessGuidePlugin.8bf'));
DeleteFile(ExpandConstant('{pf}\Tint Guide\Photo Plugins64\BrightnessGuidePlugin64.8bf'));
RemoveDir(ExpandConstant('{pf32}\Tint Guide\Photo Plugins'));
RemoveDir(ExpandConstant('{pf32}\Tint Guide'));
RemoveDir(ExpandConstant('{pf}\Tint Guide\Photo Plugins64'));
RemoveDir(ExpandConstant('{pf}\Tint Guide'));
begin
if (CurUninstallStep = usDone) then
begin
if Brightness.Checked then
if MsgBox('Программа {#MyAppNameBrightness} {#MyAppBrightnessVersion} удалена!',mbconfirmation, mb_ok) = IDYES then
end;
end;
end;
end;
end;
end;
end;
end;

El Sanchez 15-08-2014 08:54 2389518

AlekseyPopovv,
читать дальше »

Код:

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
    if
(CurUninstallStep = usDone) then
    begin
        if
Beauty.Checked then
           
RegDeleteKeyIncludingSubkeys(HKCR, 'bmp_auto_file\shell\Beauty Guide');
            RegDeleteKeyIncludingSubkeys(HKCR, 'jpegfile\shell\Beauty Guide');
            RegDeleteKeyIncludingSubkeys(HKCR, 'pngfile\shell\Beauty Guide');
            RemoveDir(ExpandConstant('{group}'));
           
            if MsgBox('Удалить Ваши настройки Beauty Guide?',mbconfirmation, mb_yesno) = IDYES then
               
DelTree(ExpandConstant('{userappdata}\BeautyGuide'), True, True, True);
               
            if MsgBox('Удалить плагины Beauty Guide?',mbconfirmation, mb_yesno) = IDYES then
            begin
               
DeleteFile(ExpandConstant('{pf32}\Tint Guide\Photo Plugins\BeautyGuidePlugin.8bf'));
                DeleteFile(ExpandConstant('{pf}\Tint Guide\Photo Plugins64\BeautyGuidePlugin64.8bf'));
                RemoveDir(ExpandConstant('{pf32}\Tint Guide\Photo Plugins'));
                RemoveDir(ExpandConstant('{pf32}\Tint Guide'));
                RemoveDir(ExpandConstant('{pf}\Tint Guide\Photo Plugins64'));
                RemoveDir(ExpandConstant('{pf}\Tint Guide'));
            end;
            MsgBox('Программа {#MyAppNameBeauty} {#MyAppBeautyVersion} удалена!',mbconfirmation, mb_ok);
        end;
       
        if Brightness.Checked then
        begin
           
RegDeleteKeyIncludingSubkeys(HKCR, 'bmp_auto_file\shell\Brightness Guide');
            RegDeleteKeyIncludingSubkeys(HKCR, 'jpegfile\shell\Brightness Guide');
            RegDeleteKeyIncludingSubkeys(HKCR, 'pngfile\shell\Brightness Guide');
            RemoveDir(ExpandConstant('{group}'));
           
            if MsgBox('Удалить Ваши настройки Brightness Guide?',mbconfirmation, mb_yesno) = IDYES then
               
DelTree(ExpandConstant('{userappdata}\BrightnessGuide'), True, True, True);

            if MsgBox('Удалить плагины Brightness Guide?',mbconfirmation, mb_yesno) = IDYES then
            begin
               
DeleteFile(ExpandConstant('{pf32}\Tint Guide\Photo Plugins\BrightnessGuidePlugin.8bf'));
                DeleteFile(ExpandConstant('{pf}\Tint Guide\Photo Plugins64\BrightnessGuidePlugin64.8bf'));
                RemoveDir(ExpandConstant('{pf32}\Tint Guide\Photo Plugins'));
                RemoveDir(ExpandConstant('{pf32}\Tint Guide'));
                RemoveDir(ExpandConstant('{pf}\Tint Guide\Photo Plugins64'));
                RemoveDir(ExpandConstant('{pf}\Tint Guide'));
            end;
            MsgBox('Программа {#MyAppNameBrightness} {#MyAppBrightnessVersion} удалена!',mbconfirmation, mb_ok);
        end;
    end;
end;


Raf-9600 15-08-2014 22:34 2389940

Можно ли сделать так, чтобы Description одного из компонентов брался из определённой переменной?

Dodakaedr 17-08-2014 16:54 2390434

Подскажите, как через секцию [code] провести регистрацию OLE-сервера (он же ActiveX control), по иному как сделать через секцию [code] тоже самое что и флаг regserver в секции [Files]?

R.i.m.s.k.y. 17-08-2014 17:12 2390445

Dodakaedr,
Exec(ExpandConstant('{sys}\regsvr32.exe'), ' /s ' + 'полный_путь_до_файла', ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilTerminated, ResultCode)

Raf-9600,
# define SVPDefDir "SVP 3.1.6"
[Components]
Name: SVP; Description: {#SVP};

Dodakaedr 17-08-2014 17:23 2390448

R.i.m.s.k.y., А как на счет встроенной процедуры RegisterServer? Не подскажите как правильно её использовать для регистрации для 32bit и 64bit? И как с помощью regsvr32.exe дерегистрировать?

R.i.m.s.k.y. 17-08-2014 17:31 2390451

Dodakaedr,
(un)registerServer (False для х86 true для х64, 'полный_путь_до_файла',True)

Exec(ExpandConstant('{sys}\regsvr32.exe'), ' /u /s ' + 'полный_путь_до_файла', ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilTerminated, ResultCode)

кнопка F1 западает? :gigi:

Dodakaedr 17-08-2014 17:53 2390463

Цитата:

Цитата R.i.m.s.k.y.
кнопка F1 западает? »

Нет, отсутствует :gigi: Спасибо!

Raf-9600 17-08-2014 18:18 2390472

Цитата:

Цитата R.i.m.s.k.y.
# define SVPDefDir "SVP 3.1.6" »

Но define это ведь что-то вроде константы, т.е. далее в коде его менять нельзя, или я ошибаюсь? Мне нужно чтобы название компонента бралось из ini-файла, код для чтения из ini имею, а вот как дальше сделать...

nik1967 17-08-2014 20:04 2390503

Raf-9600,
Код:

[Setup]
AppName=test
AppVerName=test
DefaultDirName={pf}\test

[Components]
Name: SVP; Description: {code:ReadIni};                               

[Code]       
function ReadIni(IniFile: String): String;
begin
  IniFile:= ExpandConstant('{src}\test.ini'); // расположение ini файла
  Result:= GetIniString('test'{Название секции}, 'test1'{Подключ}, '', IniFile);
end;


Kashtan007 17-08-2014 23:09 2390536

Всем привет.
Нужна ваша помощь!

Первый вопрос:
На странице каталога нужно 2 чекбокса.
1 чекбокс - будет удалять содержимое в res_mods\0.9.2\* и удалять папку xvm по пути res_mods\xvm.
2 чекбокс - должен делать бекап папки res_mods, по пути IB\old_res_mods, а после удаление репака возвращал бекап в папку res_mods.
Как это реализовать?

Второй вопрос:
Как сделать, чтобы файлы unins000.exe помещало по пути IB\Uninstall\* ?

Третий вопрос:
У меня в репаке есть файл "bin" и в папке куда я ставлю репак он тоже есть. В следствии чего если я ставлю репак, то файл заменяется, а когда удаляешь репак то файл тоже удаляется и не запускается игра. Как сделать, чтобы когда устанавливаешь репак, то файл "bin" из папки куда ставишь репак копировался по пути IB\BackUp, а после удаление возвращался на свое место.

P.S. Пользуюсь юникодом. Всем заранее спасибо за помощь!

amohax 19-08-2014 08:35 2391083

Всем привет!

Вопрос 1: Как дать пользователю возможность выбирать произвольную папку для установки(т.е. не дописывать к пути папку по умолчанию)?

Пример: Папка по умолчанию "{pf}/myapplication"
Нужно что бы пользователь мог поставить приложение в папку "c:\app"

Gnom_aka_Lexander 19-08-2014 09:06 2391088

amohax, можно. В секцию Setup добавить строчку AppendDefaultDirName=False. Только это очень опасно - при безответственном подходе пользователя можно похерить системные файлы. А безответственный подход последнее время замечен не только за пользователями, но и за производителями, то-есть теми, кому безответственное отношение просто запрещено. эт я к чему - при таком подходе к выбору пути, нужно обязательно проверять, что конечная папка приложения не является никакой из множества системных папок.

andy.zubov@vk 19-08-2014 09:36 2391096

Разобрался с описанием и картинками к компонентам. Но понял что такого размера изображения мне просто не хватает для детального пояснения пользователю, нужен полноценный скриншот размером хотя бы в разрешении 1024*768.
Появилась идея сделать опции с описанием в виде текста в котором размещена гиперссылка на изображение лежащее на внешнем сервере в интернете (это уже есть). Но как полноценно отобразить html в описании компонента? попробовал richview, но он ссылки некорректно отображает, есть какие-то доп. модули под это дело или что можете посоветовать?

Gnom_aka_Lexander 19-08-2014 09:48 2391101

andy.zubov@vk, IsWebCtrl поможет.

Антон_Мураткин@vk 19-08-2014 18:54 2391404

Ребят подскажите пожалуйста как добавить WizardForm.TasksList 2-ую штуку? Что то не пойму как это сделать! Желательно на примере Заранее благодарю

Irenis 20-08-2014 17:19 2391851

Добрый день! При создании установщика, я все необходимые файлы запаковываю программой 7zip, но запаковываю все одним архивом (то есть в итоге получается один архив .bin), иногда этот архив получается слишком большой. Уважаемые форумчане, подскажите пожалуйста, как тем же 7zip запаковать файлы так, чтобы в итоге получилось несколько архивов bin? И что нужно прописать в скрипте, чтобы потом при установке все правильно распаковалось и установилось? Спасибо.

R.i.m.s.k.y. 20-08-2014 17:21 2391852

Irenis, даю наводку: многотомный архив

vint56 20-08-2014 17:26 2391856

Irenis, либо самому разделить файлы на архивы

Irenis 20-08-2014 18:09 2391879

Спасибо, с созданием многотомного архива разобралась :) А в скрипте что добавить? Вот например, при распаковке одного архива:

Цитата:

if not IS7ZipExtract ( 0, 100, ExpandConstant('{src}\client.bin'), ExpandConstant('{app}\'), false, '') then break;
То теперь, если нужно распаковывать два (три) архива, просто добавить такую же строчку? Например, получилось так:

client.bin.001
client.bin.002
client.bin.003

В скрипте так должно быть?

Цитата:

if not IS7ZipExtract ( 0, 100, ExpandConstant('{src}\client.bin.001'), ExpandConstant('{app}\'), false, '') then break;
if not IS7ZipExtract ( 0, 100, ExpandConstant('{src}\client.bin.002'), ExpandConstant('{app}\'), false, '') then break;
if not IS7ZipExtract ( 0, 100, ExpandConstant('{src}\client.bin.003'), ExpandConstant('{app}\'), false, '') then break;

R.i.m.s.k.y. 20-08-2014 18:13 2391881

Цитата:

Цитата Irenis
А в скрипте что добавить? »

ничего
указывать для распаковки первый файл многотомного архива .001

vint56 20-08-2014 18:13 2391882

Irenis, только первый остальные он сам подхватит немного опоздал R.i.m.s.k.y. уже ответил тебе

Irenis 20-08-2014 18:18 2391886

Спасибо большое :)

Irenis 20-08-2014 22:03 2391964

Вложений: 1
Что то я наверное рано радовалась. При распаковке ошибка
Файл 116212

vint56 20-08-2014 22:57 2392008

Irenis, покажи строчки на распаковку и названия архивов

Irenis 20-08-2014 23:03 2392009

Строчка распаковки:

if not IS7ZipExtract ( 0, 100, ExpandConstant('{src}\fwclient.bin.001'), ExpandConstant('{app}\'), false, '') then break;

Названия архивов:

fwclient.bin.001
fwclient.bin.002
fwclient.bin.003
fwclient.bin.004

vint56 20-08-2014 23:17 2392016

Irenis, у меня тоже ошибка открытия архива 7z а вот rar распаковывает нормально
ISDone не подерживает распаковку 7z многотомных только у rar а просто 7z без проблем распаковывает
Вариант делить файлы руками

Irenis 21-08-2014 00:26 2392043

vint56, Ясно, спасибо, а то уж думала, что это я как всегда что то делаю не так :)
Только мне rar не подходит, нужно, чтобы архивы были обязательно с расширением bin.
Что можете посоветовать? Паковать чем то другим?

vint56 21-08-2014 00:30 2392045

Irenis, вот вариант
[Files]
Source: Include\7z.exe; DestDir: {tmp}; Flags: dontcopy

procedure CurStepChanged(CurStep: TSetupStep);

ExtractTemporaryFile('7z.exe');

if not ISExec ( 0, 0, 0, ExpandConstant('{tmp}\7z.exe'), '-o"' + ExpandConstant('{app}') + '" x -y -pPASSWORD "' + ExpandConstant('{src}\bundles.7z.001') + '" ', ExpandConstant('{tmp}'), '...',false) then break;
Будет проблема с делениями на диски что он не будет видет сразу все файлы установка пробежит без распаковки это вариант не поидет


Паковать 7z но файлы делить руками
читать дальше »
Относительно каталога app
Создать папку назвать Data-A в ней создать папку fwclient и resources весит она 6.10 GB 1 архив
и в папку положить файлы вот первый архив чтобы он весил 4 гига
models.pck 1.99 GB (2147483392)
litmodels.pck 1006.16 MB (1055045243)
surfaces.pck 871.75 MB (914100077)
textures.pck 108.87 MB (114163463)
Создать папку Data-B в ней создать папку fwclient и resources 2 архив
building.pck 687.84 MB (721262764)
configs.pck 14.03 MB (14717964)
gfx.pck 214.04 MB (224439976)
grasses.pck 1.98 MB (2079923)
interfaces.pck 11.00 MB (11538963)
loddata.pck 64.52 MB (67657600)
models.pkx 524.88 MB (550378794)
script.pck 5.76 MB (6049439)
sfx.pck 674.65 MB (707423377)
shaders.pck 6.72 MB (7050168)
папка help
book.pck 6.55 MB (6877879)
script.pck 22.61 KB (23160

killer000 22-08-2014 03:40 2392540

помогите скрыть выбор папки при распаковке

вот это убрать

посмотрите скрипт всё правильно
читать дальше »

Код:

[Setup]
AppName=VideoCacheView 2.70
AppVerName=VideoCacheView 2.70
AppVersion=2.70
AppPublisher=RePack by Killer000.
DefaultDirName={pf}\VideoCacheView
DefaultGroupName=VideoCacheView
SetupIconFile={app}\SetupIconFile.ico
UninstallDisplayIcon={app}\Uninstall-8.ico
UninstallDisplayName=VideoCacheView 2.70 RePack by Killer000
OutputBaseFilename=VideoCacheView 2.70
Compression=lzma2/ultra64
SolidCompression=yes
ArchitecturesInstallIn64BitMode=x64
Uninstallable=not IsComponentSelected('portab')
DisableProgramGroupPage=yes
DisableReadyPage=yes
DisableWelcomePage=yes
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Files]
Source: "{app}\VideoCacheView64.exe"; DestDir: "{src}\VideoCacheView Portable"; DestName: "VideoCacheView.exe"; MinVersion: 0.0,5.0; Flags: ignoreversion 64bit; Check: Lang1 and portab
Source: "{app}\VideoCacheView.chm"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Lang1 and portab;
Source: "{app}\VideoCacheView_lng.ini"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Lang1 and portab;
Source: "{app}\VideoCacheView64.exe"; DestDir: "{src}\VideoCacheView Portable"; DestName: "VideoCacheView.exe"; MinVersion: 0.0,5.0; Flags: ignoreversion 64bit; Check: Lang2 and portab
Source: "{app}\VideoCacheView.chm"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Lang2 and portab
;Source: "{app}\VideoCacheView.exe"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion 32bit; Check: Lang2 and portab
;Source: "{app}\VideoCacheView.exe"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion 32bit; Check: Lang2 and portab
Source: "{app}\VideoCacheView64.exe"; DestDir: "{app}"; DestName: "VideoCacheView.exe"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Lang1 and install
Source: "{app}\VideoCacheView.chm"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Lang1 and install
Source: "{app}\VideoCacheView_lng.ini"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Lang1 and install
Source: "{app}\VideoCacheView64.exe"; DestDir: "{app}"; DestName: "VideoCacheView.exe"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Lang2 and install
Source: "{app}\VideoCacheView.chm"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Lang2 and install
;Source: "{app}\VideoCacheView.exe"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: not Is64BitInstallMode
;Source: "{app}\VideoCacheView.exe"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: not Is64BitInstallMode
Source: "{tmp}\rus.bmp"; Flags: dontcopy solidbreak
Source: "{tmp}\eng.bmp"; Flags: dontcopy solidbreak
Source: "{tmp}\ISSkin.dll"; Flags: dontcopy solidbreak
Source: "{tmp}\skin.cjstyles"; Flags: dontcopy solidbreak

[Run]
Filename: "{app}\VideoCacheView.exe"; Description: "{cm:LaunchProgram,VideoCacheView}"; MinVersion: 0.0,5.0; Flags: postinstall skipifsilent nowait; Check: Lang1 and install
Filename: "{app}\VideoCacheView.exe"; Description: "{cm:LaunchProgram,VideoCacheView}"; MinVersion: 0.0,5.0; Flags: postinstall skipifsilent nowait; Check: Lang2 and install

[Icons]
Name: "{group}\{cm:LaunchProgram,VideoCacheView}"; Filename: "{app}\VideoCacheView.exe"; MinVersion: 0.0,5.0; Check: Comp2
Name: "{group}\{cm:UninstallProgram,VideoCacheView}"; Filename: "{uninstallexe}"; MinVersion: 0.0,5.0; Check: Comp2
Name: "{userdesktop}\{cm:LaunchProgram,VideoCacheView}"; Filename: "{app}\VideoCacheView.exe"; MinVersion: 0.0,5.0; Check: Comp1

[Languages]
Name: "ru"; MessagesFile: "embedded\Russian.isl";

[CustomMessages]
ru.NameAndVersion=%1, версия %2
ru.AdditionalIcons=Дополнительно:
ru.CreateDesktopIcon=Ярлык на &Рабочем столе
ru.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
ru.ProgramOnTheWeb=Сайт %1 в Интернете
ru.UninstallProgram=Удалить
ru.LaunchProgram=Запустить %1
ru.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
ru.AssocingFileExtension=Связывание %1 с файлами %2...
ru.AutoStartProgramGroupDescription=Автозапуск:
ru.AutoStartProgram=Автоматически запускать %1
ru.AddonHostProgramNotFound=%1 не найден в указанной вами папке.%n%nВы всё равно хотите продолжить?
ru.Shortcut=Ярлыки в меню «Пуск»
ru.ContextMenu=Пункт контекстного меню
ru.Install=Установка обычной версии Русский
ru.Installen=Установка обычной версии Англиский
ru.Portable=Распаковка портативной версии (рядом с инсталлятором) Русский
ru.Portableen=Распаковка портативной версии (рядом с инсталлятором) Англиский

Код:

procedure WizardFormCreate(Sender: TObject); forward;

procedure RedesignWizardForm;
begin
  with WizardForm do
  begin
    Color := $121212;
    OnCreate := @WizardFormCreate;
  end;
end;

procedure WizardFormCreate(Sender: TObject);
begin

end;

var
  Component: TWizardPage;
  portable,installer,LangRus,LangEng: TNewRadioButton;
  FlagImage: TBitmapImage;
  Lang,Copmp: TLabel;
  CompPanel: TPanel;
  Icons,PuskIcons: TNewCheckBox;

procedure LoadSkin(lpszPath: PAnsiChar; lpszIniFileName: PAnsiChar); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload';
procedure UnloadSkin; external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload';
 
function InitializeSetup(): Boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\rus.bmp')) then ExtractTemporaryFile('rus.bmp');
  if not FileExists(ExpandConstant('{tmp}\eng.bmp')) then ExtractTemporaryFile('eng.bmp');
  if not FileExists(ExpandConstant('{tmp}\isskin.dll')) then ExtractTemporaryFile('isskin.dll');
  if not FileExists(ExpandConstant('{tmp}\Skin.cjstyles')) then ExtractTemporaryFile('Skin.cjstyles');
  LoadSkin(ExpandConstant('{tmp}\Skin.cjstyles'), '');
  Result := True;
end;
 
 function Lang1: Boolean;
begin
  Result:= LangRus.Checked;
end;
 
function Lang2: Boolean;
begin
  Result:= LangEng.Checked;
end;
 
function Comp1: Boolean;
begin
  Result:= Icons.Checked;
end;
 
function Comp2: Boolean;
begin
  Result:= PuskIcons.Checked;
end;
 
function install: Boolean;
begin
  Result := installer.Checked;
end;
 
function portab: Boolean;
begin
  Result := portable.Checked;
end;
 
procedure CopmpClick(Sender: TObject);
begin
  case TNewRadioButton(Sender) of
    portable:
    begin
    Icons.Checked:=False;
    Icons.Enabled:= Icons.Checked;
    PuskIcons.Checked:=False;
    PuskIcons.Enabled:= PuskIcons.Checked;
    end;
    installer:
    begin
    Icons.Checked:=True;
    Icons.Enabled:= Icons.Checked;
    PuskIcons.Checked:=True;
    PuskIcons.Enabled:= PuskIcons.Checked;
  end;
end;
end;
 
procedure LangClick(Sender: TObject);
begin
  case TNewRadioButton(Sender) of
    LangRus:
    begin
    FlagImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\rus.bmp'));
    FlagImage.Left := ScaleX(216);
    FlagImage.Top := ScaleY(15);
    end;
    LangEng:
    begin
    FlagImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\eng.bmp'));
    FlagImage.Left := ScaleX(216);
    FlagImage.Top := ScaleY(15);
    end;
  end;
end;
 
 
procedure InitializeWizard();

begin
  RedesignWizardForm;
  Component := CreateCustomPage(wpLicense, 'Выбор компонентов', 'Какие компоненты должны быть установлены?');
  FlagImage := TBitmapImage.Create(WizardForm);
  with FlagImage do
  begin
    Name := 'FlagImage';
    Parent := Component.Surface;
    Left := ScaleX(300);
    Top := ScaleY(15);
    Width := ScaleX(220);
    Height := ScaleY(220); 
  end;
 
  CompPanel := TPanel.Create(WizardForm);
  with CompPanel do
  begin
    Parent := Component.Surface;
    Left := ScaleX(0);
    Top := ScaleY(0);
    Width := ScaleX(200);
    Height := ScaleY(100);
    BevelOuter := bvNone;
  end;
 
  Copmp := TLabel.Create(WizardForm);
  with Copmp do
  begin
    Parent := CompPanel;
    Caption := 'Тип и компоненты:';
    Left := ScaleX(0);
    Top := ScaleY(5);
    Width := ScaleX(150);
    Height := ScaleY(13);
  end;
 
  portable := TNewRadioButton.Create(WizardForm);
  with portable do
  begin
    Parent := CompPanel;
    Left := ScaleX(5);
    Top := ScaleY(25);
    Width := ScaleX(200);
    Height := ScaleY(17);
    Caption := 'Распаковка портативной версий';
    OnClick:=@CopmpClick;
  end;
 
  Icons := TNewCheckBox.Create(WizardForm);
  with Icons do
  begin
    Parent := CompPanel;
    Left := ScaleX(25);
    Top := ScaleY(65);
    Width := ScaleX(200);
    Height := ScaleY(17);
    Caption := 'Ярлык(и) на «Рабочем столе»';
    Checked:=True;
  end;
 
  PuskIcons := TNewCheckBox.Create(WizardForm);
  with PuskIcons do
  begin
    Parent := CompPanel;
    Left := ScaleX(25);
    Top := ScaleY(85);
    Width := ScaleX(200);
    Height := ScaleY(17);
    Caption := 'Ярлык в «Пуск меню»';
    Checked:=True;
  end;
 
  installer := TNewRadioButton.Create(WizardForm);
  with installer do
  begin
    Parent := CompPanel;
    Left := ScaleX(5);
    Top := ScaleY(45);
    Width := ScaleX(200);
    Height := ScaleY(17);
    Caption := 'Установка обычной версий';
    OnClick:=@CopmpClick;
    Checked:=True;
  end;
 
  Lang := TLabel.Create(WizardForm);
  with Lang do
  begin
    Parent := Component.Surface;
    Caption := 'Язык интерфейса:';
    Left := ScaleX(0);
    Top := ScaleY(120);
    Width := ScaleX(150);
    Height := ScaleY(13);
  end;
 
  LangRus := TNewRadioButton.Create(WizardForm);
  with LangRus do
  begin
    Parent := Component.Surface;
    Left := ScaleX(5);
    Top := ScaleY(135);
    Width := ScaleX(200);
    Height := ScaleY(17);
    Caption := 'Язык интерфейса Русский';
    OnClick:=@LangClick;
    Checked:=True;
  end;
 
  LangEng := TNewRadioButton.Create(WizardForm);
  with LangEng do
  begin
    Parent := Component.Surface;
    Left := ScaleX(5);
    Top := ScaleY(155);
    Width := ScaleX(200);
    Height := ScaleY(17);
    Caption := 'Язык интерфейса Английский';
    OnClick:=@LangClick;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
    case PageID of
        wpSelectComponents: Result := True;
        wpSelectDir: Result := IsComponentSelected('portab') <> False;
    end;
end;



И как прикрутить в этот скрипт
авто определеннее разрядности системы
вот так работало Check: Is64BitInstallMode для x64
для x32 not Is64BitInstallMode

в Check можно прописывать несколько значений
так не выходит Check: Is64BitInstallMode, Lang1 and portab
помогите

nik1967 22-08-2014 10:57 2392615

killer000,
Цитата:

Цитата Nordek
Сами посудите: Если вам лень что либо читать, то каково тем кто может вам помочь: создавать картинки, искать аналогичные скрипты, подставлять скины, музыку - в общем полностью подстраиваться под ваше чудо-творение.
Поверьте, тем кто вам может помочь - это абсолютно ненужно. Помогать таким людям не будут: Будут просто игнорировать.
Ведь перед выкладыванием чего либо нужно проверить, чтоб не было ошибок. Правильно?
Тогда нужно представлять все файлы.
И ещё раз: вы не читаете.
Это:
Цитата sergey3695:
кидай-те скрипты с файлами. »
написано для всех. Подчеркну если не заметили: с файлами »

Я уже переписал тебе скрипт, но нужны файлы, чтобы
Цитата:

Цитата Nordek
Ведь перед выкладыванием чего либо нужно проверить, чтоб не было ошибок. Правильно?


killer000 22-08-2014 15:04 2392715

nik1967,
спасибо тебе, не могу загрузить исходящая скорость плохая у билайн

nik1967 22-08-2014 15:31 2392734

killer000,
ну тогда сам проверяй
Код:

;InnoSetupVersion=5.5.1.ee2(u)
[Setup]
AppName=VideoCacheView 2.70 RePack by Killer000
AppVerName=VideoCacheView 2.70
AppVersion=2.70
AppPublisher=RePack by Killer000.
DefaultDirName={pf}\VideoCacheView
DefaultGroupName=VideoCacheView
SetupIconFile={app}\SetupIconFile.ico
UninstallDisplayIcon={app}\Uninstall-8.ico
UninstallDisplayName=VideoCacheView 2.70 RePack by Killer000
OutputBaseFilename=VideoCacheView 2.70
Compression=lzma2/ultra64
SolidCompression=yes
ArchitecturesInstallIn64BitMode=x64
Uninstallable=not Uninstallable
DisableProgramGroupPage=yes
DisableReadyPage=yes
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl";
 
[Files]
Source: "{tmp}\rus.bmp"; Flags: dontcopy solidbreak
Source: "{tmp}\eng.bmp"; Flags: dontcopy solidbreak
Source: "{tmp}\ISSkin.dll"; Flags: dontcopy solidbreak
Source: "{tmp}\skin.cjstyles"; Flags: dontcopy solidbreak

Source: "{app}\VideoCacheView64.exe"; DestDir: "{src}\VideoCacheView Portable"; DestName: "VideoCacheView.exe"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Is64BitInstallMode and Portableru
Source: "{app}\VideoCacheView.chm"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Portableru
Source: "{app}\VideoCacheView_lng.ini"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Portableru
Source: "{app}\VideoCacheView64.exe"; DestDir: "{src}\VideoCacheView Portable"; DestName: "VideoCacheView.exe"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Is64BitInstallMode and Portableen
Source: "{app}\VideoCacheView.chm"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Portableen
Source: "{app}\VideoCacheView.exe"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: not Is64BitInstallMode and Portableru
Source: "{app}\VideoCacheView.exe"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: not Is64BitInstallMode and Portableen
Source: "{app}\VideoCacheView64.exe"; DestDir: "{app}"; DestName: "VideoCacheView.exe"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Is64BitInstallMode and Normalru
Source: "{app}\VideoCacheView.chm"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Normalru
Source: "{app}\VideoCacheView_lng.ini"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Normalru
Source: "{app}\VideoCacheView64.exe"; DestDir: "{app}"; DestName: "VideoCacheView.exe"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Is64BitInstallMode and Normalen
Source: "{app}\VideoCacheView.chm"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Normalen
Source: "{app}\VideoCacheView.exe"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: not Is64BitInstallMode and Normalru
Source: "{app}\VideoCacheView.exe"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: not Is64BitInstallMode and Normalen

[Icons]
Name: "{group}\{cm:LaunchProgram,VideoCacheView}"; Filename: "{app}\VideoCacheView.exe"; MinVersion: 0.0,5.0; Check: groupru;
Name: "{group}\{cm:UninstallProgram,VideoCacheView}"; Filename: "{uninstallexe}"; MinVersion: 0.0,5.0; Check: groupru;
Name: "{userdesktop}\{cm:LaunchProgram,VideoCacheView}"; Filename: "{app}\VideoCacheView.exe"; MinVersion: 0.0,5.0; Check: desktopru;
Name: "{group}\{cm:LaunchProgram,VideoCacheView}"; Filename: "{app}\VideoCacheView.exe"; MinVersion: 0.0,5.0; Check: groupen;
Name: "{group}\{cm:UninstallProgram,VideoCacheView}"; Filename: "{uninstallexe}"; MinVersion: 0.0,5.0; Check: groupen;
Name: "{userdesktop}\{cm:LaunchProgram,VideoCacheView}"; Filename: "{app}\VideoCacheView.exe"; MinVersion: 0.0,5.0; Check: desktopen;
 
[Run]
Filename: "{app}\VideoCacheView.exe"; Description: "{cm:LaunchProgram,VideoCacheView}"; MinVersion: 0.0,5.0; Check: Normalru; Flags: postinstall skipifsilent nowait
Filename: "{app}\VideoCacheView.exe"; Description: "{cm:LaunchProgram,VideoCacheView}"; MinVersion: 0.0,5.0; Check: Normalen; Flags: postinstall skipifsilent nowait
Filename: "{src}\VideoCacheView Portable\VideoCacheView.exe"; Description: "{cm:LaunchProgram,VideoCacheView}"; MinVersion: 0.0,5.0; Check: Portableru; Flags: postinstall skipifsilent nowait
Filename: "{src}\VideoCacheView Portable\VideoCacheView.exe"; Description: "{cm:LaunchProgram,VideoCacheView}"; MinVersion: 0.0,5.0; Check: Portableen; Flags: postinstall skipifsilent nowait

[Messages]
FinishedLabelNoIcons=Программа [name] распакована на ваш компьютер.
 
;[CustomMessages]
;ru.NameAndVersion=%1, версия %2
;ru.AdditionalIcons=Дополнительно:
;ru.CreateDesktopIcon=Ярлык на &Рабочем столе
;ru.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
;ru.ProgramOnTheWeb=Сайт %1 в Интернете
;ru.UninstallProgram=Удалить
;ru.LaunchProgram=Запустить %1
;ru.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
;ru.AssocingFileExtension=Связывание %1 с файлами %2...
;ru.AutoStartProgramGroupDescription=Автозапуск:
;ru.AutoStartProgram=Автоматически запускать %1
;ru.AddonHostProgramNotFound=%1 не найден в указанной вами папке.%n%nВы всё равно хотите продолжить?
;ru.Shortcut=Ярлыки в меню «Пуск»
;ru.ContextMenu=Пункт контекстного меню
;ru.Install=Установка обычной версии Русский
;ru.Installen=Установка обычной версии Англиский
;ru.Portable=Распаковка портативной версии (рядом с инсталлятором) Русский
;ru.Portableen=Распаковка портативной версии (рядом с инсталлятором) Англиский

[code]
var
        Sender: TObject;
        FlagImage: TBitmapImage;
        ComponentPage: TWizardPage;
        CheckListBox, CheckListBox2: TNewCheckListBox;
       
//procedure LoadSkin(lpszPath: PAnsiChar; lpszIniFileName: PAnsiChar); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload';
procedure LoadSkin(lpszPath: string; lpszIniFileName: string ); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload';
procedure UnloadSkin; external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload';
       
function InitializeSetup(): Boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\rus.bmp')) then ExtractTemporaryFile('rus.bmp');
  if not FileExists(ExpandConstant('{tmp}\eng.bmp')) then ExtractTemporaryFile('eng.bmp');
        if not FileExists(ExpandConstant('{tmp}\isskin.dll')) then ExtractTemporaryFile('isskin.dll');
  if not FileExists(ExpandConstant('{tmp}\Skin.cjstyles')) then ExtractTemporaryFile('Skin.cjstyles');
                LoadSkin(ExpandConstant('{tmp}\Skin.cjstyles'), '');
                Result := True;
end;

procedure OnClick1(Sender: TObject);
begin
        if CheckListBox.Checked[1] then
                WizardForm.DirEdit.text:= ExpandConstant('{src}\VideoCacheView Portable')
        else
                if Is64BitInstallMode then
                        WizardForm.DirEdit.text:= ExpandConstant('{pf32}\VideoCacheView')
                else
                        WizardForm.DirEdit.text:= ExpandConstant('{pf64}\VideoCacheView');
        case WizardForm.CurPageID of
                ComponentPage.ID:
                        if CheckListBox.Checked[1] then begin
                                WizardForm.NextButton.Caption:= 'Распаковать';
                                WizardForm.Caption:= FmtMessage('Распаковка — %1', [ExpandConstant('{#SetupSetting("AppName")}')]);
                        end else begin
        WizardForm.NextButton.Caption:= 'Далее >';
                                WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);
                        end;
        end;
end;

procedure OnClick2(Sender: TObject);
begin
        if CheckListBox2.Checked[1] then
                FlagImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\rus.bmp'))
        else
                FlagImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\eng.bmp'));
end;

function Uninstallable: boolean;
begin
        Result:= CheckListBox.Checked[1];
end;

function Portableru: boolean;
begin
        Result:= CheckListBox.Checked[1] and CheckListBox2.Checked[1];
end;

function Portableen: boolean;
begin
        Result:= CheckListBox.Checked[1] and CheckListBox2.Checked[2];
end;

function Normalru: boolean;
begin
        Result:= CheckListBox.Checked[2] and CheckListBox2.Checked[1];
end;

function Normalen: boolean;
begin
        Result:= CheckListBox.Checked[2] and CheckListBox2.Checked[2];
end;

function groupru: boolean;
begin
        Result:= CheckListBox2.Checked[1] and CheckListBox.Checked[4];
end;

function desktopru: boolean;
begin
        Result:= CheckListBox2.Checked[1] and CheckListBox.Checked[3];
end;

function groupen: boolean;
begin
        Result:= CheckListBox2.Checked[2] and CheckListBox.Checked[4];
end;

function desktopen: boolean;
begin
        Result:= CheckListBox2.Checked[2] and CheckListBox.Checked[3];
end;
 
procedure InitializeWizard();
begin
        WizardForm.DiskSpaceLabel.Hide;
        ComponentPage:= CreateCustomPage(wpWelcome, 'Выбор типа, компонентов и языка интерфейса', 'Какой тип, компоненты и язык интерфейса должны быть установлены?');
       
        FlagImage:= TBitmapImage.Create(WizardForm);
  with FlagImage do begin
                Parent:= ComponentPage.Surface;
                SetBounds(ScaleX(216),ScaleY(15),ScaleX(220),ScaleY(220));
                //BackColor:= clNone;
                //ReplaceColor:= $f0f0f0;
                //ReplaceWithColor:= clNone;
  end;

        CheckListBox:= TNewCheckListBox.Create(WizardForm);
        with CheckListBox do begin
                Top:= ScaleY(0);
                Width:= ComponentPage.SurfaceWidth div 2;
                Height:= ComponentPage.SurfaceHeight div 2;
                Parent:= ComponentPage.Surface;
                BorderStyle:= bsNone;
                ParentColor:= True;
                ShowLines:= false;
                MinItemHeight:= WizardForm.TasksList.MinItemHeight;
                WantTabs:= True;
                OnClickCheck:= @OnClick1;
                AddGroup('Типы и компоненты:', '', 0, nil);
                AddRadioButton('Распаковка портативной версии', '', 0, False, True, nil);
                AddRadioButton('Установка обычной версии', '', 0, True, True, nil);
                AddCheckBox('Ярлык(и) на «Рабочем столе»', '', 1, True, True, False, True, nil);
                AddCheckBox('Ярлыки в меню «Пуск»', '', 1, True, True, False, True, nil);
        end;
       
        CheckListBox2:= TNewCheckListBox.Create(WizardForm);
        with CheckListBox2 do begin
                Top:= CheckListBox.Top+CheckListBox.Height;
                Width:= ComponentPage.SurfaceWidth div 2;
                Height:= ComponentPage.SurfaceHeight div 2;
                Parent:= ComponentPage.Surface;
                BorderStyle:= bsNone;
                ParentColor:= True;
                ShowLines:= false;
                MinItemHeight:= WizardForm.TasksList.MinItemHeight;
                WantTabs:= True;
                OnClickCheck:= @OnClick2;
                AddGroup('Язык интерфейса:', '', 0, nil);
                AddRadioButton('Русский язык интерфейса', '', 0, True, True, nil);
                AddRadioButton('Английский язык интерфейса', '', 0, False, True, nil);
        end;
                OnClick1(Sender);
                OnClick2(Sender);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
        case CurPageID of
    wpSelectDir: WizardForm.NextButton.Caption:= 'Установить';
        end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  case PageID of
                wpSelectDir: Result:= CheckListBox.Checked[1];
  end;
end;

procedure DeinitializeSetup();
begin
        UnloadSkin;
end;

Скинь хотя бы rus.bmp, eng.bmp, ISSkin.dll, skin.cjstyles. Сделаю, чтобы рамки белой не было вокруг картинок.

Irenis 22-08-2014 15:52 2392747

Всем привет! Может все таки кто то знает, как можно создать многотомный архив с расширением bin, который бы без проблем распаковался при установке? Программой 7zip архив создается без проблем, но вот распаковываться не хочет. Или может все таки есть скрипт, которым можно было бы распаковывать многотомные архивы, созданные в 7zip? Ну или может другую программу для запаковки посоветуете? Просто вариант делить файлы вручную тоже не совсем подходит.

vint56 22-08-2014 15:59 2392750

Irenis, используй inno setup там есть своё сжатие тогда тебе ненужен будет скрипт isdone
читать дальше »
[Setup]: Compression
Возможные значения:

zip
zip/1 до zip/9
bzip
bzip/1 до bzip/9
lzma
lzma/fast
lzma/normal
lzma/max
lzma/ultra (рассмотрите требования к памяти ниже перед использованием)
lzma/ultra64 (рассмотрите требования к памяти ниже перед использованием)
lzma2
lzma2/fast
lzma2/normal
lzma2/max
lzma2/ultra (рассмотрите требования к памяти ниже перед использованием)
lzma2/ultra64 (рассмотрите требования к памяти ниже перед использованием)
none
Значение по умолчанию:
lzma2/max

Описание:
Определяет метод и уровень (1-9) сжатия инсталлятора. Чем выше уровень сжатия, тем медленнее будет создаваться инсталлятор. К тому же может понадобиться больше памяти на сжатие/декомпрессию.

Метод zip быстр в обоих направлениях, не требователен к памяти (требуется менее 1MB для обоих направлений для сжатия на 9 уровне), но сжимает не так хорошо, как другие поддерживаемые методы. zip, как lzma2, имеет единственное достоинство: в отличие от остальных методов он не будет увеличивать несжимаемые файлы (т.е. уже сжатые файлы). Если уровень сжатия не указан, он равен 7.

bzip метод сжатия, который используется компрессором bzip2 [external link]. Он обычно сжимает лучше, чем zip , но работает медленнее в обоих направлениях. Для сжатия требуется более 8 MB памяти, для декомпрессии более 4 MB. Если уровень сжатия не указан, он равен 9.

lzma метод сжатия, который используется компрессором 7-Zip LZMA [external link]. Обычно он сжимает гораздо лучше, чем zip и bzip. Впрочем, это зависит от уровня сжатия - он может оказаться и гораздо медленнее и потребовать гораздо больше памяти. В таблице показано примерное потребление памяти каждого уровня сжатия lzma. Если уровень сжатия не указан, он равен максимальному.

Распаковка (размер словаря) Сжатие
fast (худший) 32 КБ 3 МБ
normal 2 МБ 26 МБ
max (по умолчанию) 8 МБ 95 МБ
ultra 32 МБ 372 МБ
ultra64 (лучший) 64 MБ 676 MБ

lzma2 метод сжатия, который используется компрессором 7-Zip LZMA2 [external link]. LZMA2 - измененная версия LZMA, который предлагает лучшую степень сжатия для несжимаемых данных (случайные данные расширяются приблизительно на 0.005 %, по сравнению с 1.35 % с исходным LZMA), и дополнительно может сжать многократные части больших файлов параллельно, значительно увеличивая скорость сжатия, но с возможным сокращением степени сжатия (см. LZMANumBlockThreads). Как LZMA, LZMA 2 может использовать много памяти; см. вышеупомянутую таблицу. Если уровень сжатия не указан, он равен максимальному.

none означает, что сжатие не используется.

См. также:
SolidCompression
LZMAAlgorithm
LZMABlockSize
LZMADictionarySize
LZMAMatchFinder
LZMANumBlockThreads
LZMANumFastBytes
LZMAUseSeparateProcess


читать дальше »
[Setup]: DiskSpanning
Возможные значения:
yes или no
Значение по умолчанию:
no
Опмсание:
При значении yes будет производиться разбиение на диски. Определяет, создавать ли компилятору один файл SETUP.EXE, или делить его на файлы (SETUP-*.BIN), которые помещаются на дискету, CD-ROM, DVD-ROM или другой носитель. Каждый файл в своем имени будет содержать номер, по которому можно будет определить на какой диск его следует скопировать. Скопируйте SETUP.EXE и SETUP-1.BIN на первый диск, SETUP-2.BIN на второй и т. д.
В этом случае размер каждого файла и число файлов, создаваемых для каждого диска, диктуется директивой DiskSliceSize и SlicesPerDisk секции [Setup]. Другие директивы, отвечающие за разбиение на диски, которые вы захотите внедрить, должны включать директивы DiskClusterSize и ReserveBytes.
Обратите внимание, что нужно обязательно задать этим директивам значение yes, если размер сжатого файла инсталлятора превышает 2,100,000,000 байт, даже если вы не планируете разбивать инсталлятор на диски. (Инсталлятор будет работать правильно, даже если все SETUP-*.BIN файлы будут размещены на одном диске).



читать дальше »
[Setup]: DiskSliceSize
Возможные значения:
262144 до 2100000000, или max
Значение по умолчанию:
max (2100000000)
Описание:
Определяет максимальное количество байтов на дисковую часть (SETUP-*.BIN файл). Обычно, оно должно быть установлено в общее количество байтов, доступных на дисковых носителях, разделенных на значение директивы SlicesPerDisk секции [Setup], значение которого по умолчанию 1.
Директива игнорируется, если разбиение на диски не включено (директива DiskSpanning секции [Setup]).
Чтобы оптимально заполнить DVD диск размером 4.7 Гбайт, используйте:
SlicesPerDisk=3 DiskSliceSize=1566000000 Чтобы оптимально заполнить DVD диск размером 8.5 Гбайт, используйте:
SlicesPerDisk=5 DiskSliceSize=1708200000 Чтобы оптимально заполнить CD (80-минутные) диск размером 700 Мбайт, используйте:
SlicesPerDisk=1 DiskSliceSize=736000000 Чтобы оптимально заполнить 1.44MБ гибкие диски, используйте:
SlicesPerDisk=1 DiskSliceSize=1457664

killer000 22-08-2014 16:03 2392752

nik1967,
я скинул в личку

nik1967,
на xp ошибка

R.i.m.s.k.y. 22-08-2014 16:11 2392759

Цитата:

Цитата killer000
на xp ошибка »

дык инно не совфед - тут думать надо!
константа для 64-х битных систем, а хр 32-разрядная

killer000 22-08-2014 16:25 2392765

nik1967,
и скин не работает

vint56 22-08-2014 16:31 2392769

killer000, завист от компилятора ansi или unicode
//procedure LoadSkin(lpszPath: PAnsiChar; lpszIniFileName: PAnsiChar); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload'; раскаментируй если unicode
procedure LoadSkin(lpszPath: string; lpszIniFileName: string ); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload'; эту наоборот закаментируй

killer000 22-08-2014 16:40 2392779

vint56,
Спасибо помогло

Irenis 22-08-2014 16:57 2392786

vint56, спасибо, надеюсь, что разберусь :) Хотя пока, на первый взгляд, все очень сложным кажется.

nik1967 22-08-2014 17:03 2392792

killer000,
пробуй
[code];InnoSetupVersion=5.5.1.ee2(u)
[Setup]
AppName=VideoCacheView 2.70 RePack by Killer000
AppVerName=VideoCacheView 2.70
AppVersion=2.70
AppPublisher=RePack by Killer000.
DefaultDirName={pf}\VideoCacheView
DefaultGroupName=VideoCacheView
SetupIconFile={app}\SetupIconFile.ico
UninstallDisplayIcon={app}\SetupIconFile.ico
UninstallDisplayName=VideoCacheView 2.70 RePack by Killer000
UninstallIconFile={app}\Uninstall-8.ico
OutputBaseFilename=VideoCacheView 2.70
Compression=lzma2/ultra64
SolidCompression=yes
Uninstallable=not Uninstallable
DisableProgramGroupPage=yes
DisableReadyPage=yes
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl";

[Messages]
FinishedLabelNoIcons=Программа [name] распакована на ваш компьютер.

[Files]
Source: "{tmp}\rus.bmp"; Flags: dontcopy solidbreak
Source: "{tmp}\eng.bmp"; Flags: dontcopy solidbreak
Source: "{tmp}\ISSkin.dll"; Flags: dontcopy solidbreak
Source: "{tmp}\skin.cjstyles"; Flags: dontcopy solidbreak
Source: "{app}\SetupIconFile.ico"; DestDir: "{app}"; Attribs: hidden; Check: Normalru or Normalen
Source: "{app}\Uninstall-8.ico"; DestDir: "{app}"; Attribs: hidden; Check: Normalru or Normalen

Source: "{app}\VideoCacheView64.exe"; DestDir: "{src}\VideoCacheView Portable"; DestName: "VideoCacheView.exe"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Is64BitInstallMode and Portableru
Source: "{app}\VideoCacheView.chm"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Portableru
Source: "{app}\VideoCacheView_lng.ini"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Portableru
Source: "{app}\VideoCacheView64.exe"; DestDir: "{src}\VideoCacheView Portable"; DestName: "VideoCacheView.exe"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Is64BitInstallMode and Portableen
Source: "{app}\VideoCacheView.chm"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Portableen
Source: "{app}\VideoCacheView.exe"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Portableru and not Is64BitInstallMode
Source: "{app}\VideoCacheView.exe"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Portableen and not Is64BitInstallMode
Source: "{app}\VideoCacheView64.exe"; DestDir: "{app}"; DestName: "VideoCacheView.exe"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Is64BitInstallMode and Normalru
Source: "{app}\VideoCacheView.chm"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Normalru
Source: "{app}\VideoCacheView_lng.ini"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Normalru
Source: "{app}\VideoCacheView64.exe"; DestDir: "{app}"; DestName: "VideoCacheView.exe"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Is64BitInstallMode and Normalen
Source: "{app}\VideoCacheView.chm"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Normalen
Source: "{app}\VideoCacheView.exe"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Normalru and not Is64BitInstallMode
Source: "{app}\VideoCacheView.exe"; DestDir: "{app}"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Normalen and not Is64BitInstallMode

[Icons]
Name: "{group}\{cm:LaunchProgram,VideoCacheView}"; Filename: "{app}\VideoCacheView.exe"; MinVersion: 0.0,5.0; Check: groupru;
Name: "{group}\{cm:UninstallProgram,VideoCacheView}"; Filename: "{uninstallexe}"; IconFilename: {app}\Uninstall-8.ico; MinVersion: 0.0,5.0; Check: groupru;
Name: "{userdesktop}\{cm:LaunchProgram,VideoCacheView}"; Filename: "{app}\VideoCacheView.exe"; MinVersion: 0.0,5.0; Check: desktopru;
Name: "{group}\{cm:LaunchProgram,VideoCacheView}"; Filename: "{app}\VideoCacheView.exe"; MinVersion: 0.0,5.0; Check: groupen;
Name: "{group}\{cm:UninstallProgram,VideoCacheView}"; Filename: "{uninstallexe}"; IconFilename: {app}\Uninstall-8.ico; MinVersion: 0.0,5.0; Check: groupen;
Name: "{userdesktop}\{cm:LaunchProgram,VideoCacheView}"; Filename: "{app}\VideoCacheView.exe"; MinVersion: 0.0,5.0; Check: desktopen;

[Run]
Filename: "{app}\VideoCacheView.exe"; Description: "{cm:LaunchProgram,VideoCacheView}"; MinVersion: 0.0,5.0; Check: Normalru; Flags: postinstall skipifsilent nowait
Filename: "{app}\VideoCacheView.exe"; Description: "{cm:LaunchProgram,VideoCacheView}"; MinVersion: 0.0,5.0; Check: Normalen; Flags: postinstall skipifsilent nowait
Filename: "{src}\VideoCacheView Portable\VideoCacheView.exe"; Description: "{cm:LaunchProgram,VideoCacheView}"; MinVersion: 0.0,5.0; Check: Portableru; Flags: postinstall skipifsilent nowait
Filename: "{src}\VideoCacheView Portable\VideoCacheView.exe"; Description: "{cm:LaunchProgram,VideoCacheView}"; MinVersion: 0.0,5.0; Check: Portableen; Flags: postinstall skipifsilent nowait

[UninstallDelete]
Type: filesandordirs; Name: {app};

Код:

var
        Sender: TObject;
        FlagImage: TBitmapImage;
        ComponentPage: TWizardPage;
        CheckListBox, CheckListBox2: TNewCheckListBox;
       
procedure LoadSkin(lpszPath: PAnsiChar; lpszIniFileName: PAnsiChar); external 'LoadSkin@{tmp}\isskin.dll stdcall delayload';
procedure UnloadSkin; external 'UnloadSkin@{tmp}\isskin.dll stdcall delayload';
       
function InitializeSetup(): Boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\rus.bmp')) then ExtractTemporaryFile('rus.bmp');
  if not FileExists(ExpandConstant('{tmp}\eng.bmp')) then ExtractTemporaryFile('eng.bmp');
        if not FileExists(ExpandConstant('{tmp}\isskin.dll')) then ExtractTemporaryFile('isskin.dll');
  if not FileExists(ExpandConstant('{tmp}\Skin.cjstyles')) then ExtractTemporaryFile('Skin.cjstyles');
                LoadSkin(ExpandConstant('{tmp}\Skin.cjstyles'), '');
                Result := True;
end;

procedure OnClick1(Sender: TObject);
begin
        if CheckListBox.Checked[1] then
                WizardForm.DirEdit.text:= ExpandConstant('{src}\VideoCacheView Portable')
        else
                if IsWin64 then
                        WizardForm.DirEdit.text:= ExpandConstant('{pf64}\VideoCacheView')
                else
                        WizardForm.DirEdit.text:= ExpandConstant('{pf}\VideoCacheView');
        case WizardForm.CurPageID of
                ComponentPage.ID:
                        if CheckListBox.Checked[1] then begin
                                WizardForm.NextButton.Caption:= 'Распаковать';
                                WizardForm.Caption:= FmtMessage('Распаковка — %1', [ExpandConstant('{#SetupSetting("AppName")}')]);
                        end else begin
        WizardForm.NextButton.Caption:= 'Далее >';
                                WizardForm.Caption:= FmtMessage(SetupMessage(msgSetupWindowTitle), [ExpandConstant('{#SetupSetting("AppName")}')]);
                        end;
        end;
end;

procedure OnClick2(Sender: TObject);
begin
        if CheckListBox2.Checked[1] then
                FlagImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\rus.bmp'))
        else
                FlagImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\eng.bmp'));
end;

function Uninstallable: boolean;
begin
        Result:= CheckListBox.Checked[1];
end;

function Portableru: boolean;
begin
        Result:= CheckListBox.Checked[1] and CheckListBox2.Checked[1];
end;

function Portableen: boolean;
begin
        Result:= CheckListBox.Checked[1] and CheckListBox2.Checked[2];
end;

function Normalru: boolean;
begin
        Result:= CheckListBox.Checked[2] and CheckListBox2.Checked[1];
end;

function Normalen: boolean;
begin
        Result:= CheckListBox.Checked[2] and CheckListBox2.Checked[2];
end;

function groupru: boolean;
begin
        Result:= CheckListBox2.Checked[1] and CheckListBox.Checked[4];
end;

function desktopru: boolean;
begin
        Result:= CheckListBox2.Checked[1] and CheckListBox.Checked[3];
end;

function groupen: boolean;
begin
        Result:= CheckListBox2.Checked[2] and CheckListBox.Checked[4];
end;

function desktopen: boolean;
begin
        Result:= CheckListBox2.Checked[2] and CheckListBox.Checked[3];
end;
 
procedure InitializeWizard();
begin
        WizardForm.DiskSpaceLabel.Hide;
        WizardForm.Color:= clBlack;
        ComponentPage:= CreateCustomPage(wpWelcome, 'Выбор типа, компонентов и языка интерфейса', 'Какой тип, компоненты и язык интерфейса должны быть установлены?');
       
        FlagImage:= TBitmapImage.Create(WizardForm);
  with FlagImage do begin
                Parent:= ComponentPage.Surface;
                SetBounds(ScaleX(216),ScaleY(15),ScaleX(220),ScaleY(220));
                BackColor:= clNone;
                ReplaceColor:= $ffffff;
                ReplaceWithColor:= clNone;
  end;

        CheckListBox:= TNewCheckListBox.Create(WizardForm);
        with CheckListBox do begin
                Top:= ScaleY(0);
                Width:= ComponentPage.SurfaceWidth div 2;
                Height:= ComponentPage.SurfaceHeight div 2;
                Parent:= ComponentPage.Surface;
                BorderStyle:= bsNone;
                ParentColor:= True;
                ShowLines:= false;
                MinItemHeight:= WizardForm.TasksList.MinItemHeight;
                WantTabs:= True;
                OnClickCheck:= @OnClick1;
                AddGroup('Типы и компоненты:', '', 0, nil);
                AddRadioButton('Распаковка портативной версии', '', 0, False, True, nil);
                AddRadioButton('Установка обычной версии', '', 0, True, True, nil);
                AddCheckBox('Ярлык(и) на «Рабочем столе»', '', 1, True, True, False, True, nil);
                AddCheckBox('Ярлыки в меню «Пуск»', '', 1, True, True, False, True, nil);
        end;
       
        CheckListBox2:= TNewCheckListBox.Create(WizardForm);
        with CheckListBox2 do begin
                Top:= CheckListBox.Top+CheckListBox.Height;
                Width:= ComponentPage.SurfaceWidth div 2;
                Height:= ComponentPage.SurfaceHeight div 2;
                Parent:= ComponentPage.Surface;
                BorderStyle:= bsNone;
                ParentColor:= True;
                ShowLines:= false;
                MinItemHeight:= WizardForm.TasksList.MinItemHeight;
                WantTabs:= True;
                OnClickCheck:= @OnClick2;
                AddGroup('Язык интерфейса:', '', 0, nil);
                AddRadioButton('Русский язык интерфейса', '', 0, True, True, nil);
                AddRadioButton('Английский язык интерфейса', '', 0, False, True, nil);
        end;
                OnClick1(Sender);
                OnClick2(Sender);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
        case CurPageID of
    wpSelectDir: WizardForm.NextButton.Caption:= 'Установить';
        end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  case PageID of
                wpSelectDir: Result:= CheckListBox.Checked[1];
  end;
end;

procedure DeinitializeSetup();
begin
        UnloadSkin;
end;

Замени rus.bmp

vint56 22-08-2014 17:04 2392793

Irenis, просто добавь эти строчки только без коментариев
[Setup] куда добавить в секцию setup
Compression=lzma/ultra метод сжатия
SolidCompression=yes солидное сжатие
DiskSpanning=yes разделить на диски
SlicesPerDisk=3 на 3 штуки
DiskSliceSize=1566000000 размер файла имеет ограничения 2,100,000,000 байт

nik1967 22-08-2014 17:24 2392799

killer000, немного изменил скрипт в сообщении выше. С предыдущим вариантом не запускалось, если распаковать портативную версию.

Nordek 22-08-2014 17:42 2392812

Вложений: 1
Цитата:

Цитата Irenis
Просто вариант делить файлы вручную тоже не совсем подходит. »

Это самый тот вариант. Меньше проблем.

Автоматизируйте.
Ниже прикрепил пример.
Расформируйте по папкам файлы и запустите Run.bat.
Готовые архивы с расширением .bin, будут находиться в папке Arc: которая, в процессе упаковки будет создана рядом с файлом Run.bat.

killer000 22-08-2014 17:46 2392814

nik1967,
Как это измянить

killer000 22-08-2014 18:11 2392820

nik1967,
распаковка портабле eng, ошибка на win 7 x64, на win xp x32 всё ок

его нет в папке портабле!

nik1967 22-08-2014 18:14 2392821

killer000, ещё немного изменил скрипт в сообщении выше.
Чтобы не было рамки вокруг рисунка, используй расширенную версию от рестулз (innoultra). Ну, или используй мою сборку.
На счёт под цвет скина в нижней части - это надо редактировать сам скин.
Цитата:

Цитата killer000
распаковка портабле eng, ошибка на win 7 x64, на win xp x32 всё ок »

Цитата:

Цитата nik1967
killer000, немного изменил скрипт в сообщении выше. С предыдущим вариантом не запускалось, если распаковать портативную версию. »


ROMKA-1977 22-08-2014 18:28 2392829

Подскажите!
В коде ISDone v0.6 выставил ширину прогрессбаров - 417 при этом проценты скрыты прогрессбарами и их не видно.
Как наложить проценты поверх прогрессбаров ?

killer000 22-08-2014 18:30 2392831

nik1967,
спасибо тебе огромное, я скопировал скрипт, всё ровно ошибка
скинь ещё разок, если не трудно

nik1967 22-08-2014 19:02 2392838

killer000,
найди строчку

Код:

Source: "{app}\VideoCacheView.exe"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: not IsWin64 and Portableen
и замени на
Код:

Source: "{app}\VideoCacheView.exe"; DestDir: "{src}\VideoCacheView Portable"; MinVersion: 0.0,5.0; Flags: ignoreversion; Check: Portableen and not Is64BitInstallMode

Скрипт в сообщении выше тоже отредактировал.

killer000 22-08-2014 19:19 2392842

nik1967,
спасибо помогло ошибки нет
появилась другая проблема
в портабле попадают ico файл, как их убрать

nik1967 22-08-2014 19:34 2392846

killer000, надеюсь в последний раз исправил скрипт в сообщении выше.

Irenis 22-08-2014 20:44 2392894

Цитата:

Цитата Nordek
Это самый тот вариант. Меньше проблем. »

Проблем может и меньше. Просто бывает, что нужно создать архив самой папки с игрой. То есть не файлы архивировать, которые внутри этой папки, а прям целую папку взять и запаковать. А потом чтобы эта папка в таком же виде и распаковалась. Я ж не могу целую папку разделить на части. Ну и еще конечно же хотелось бы, чтоб архивы bin были одинакового размера, а вручную так ведь тоже не получится наверное. Вот пример файлов установщика:

Название Размер
Dark Age 0.472/Dark_Age_Setup-2.bin 1.96 GB (2100000000)
Dark Age 0.472/Dark_Age_Setup-3.bin 1.96 GB (2100000000)
Dark Age 0.472/Dark_Age_Setup-1.bin 1.96 GB (2099544832)
Dark Age 0.472/Dark_Age_Setup-4.bin 1.90 GB (2037698129)
Dark Age 0.472/Dark_Age_Setup.exe 444.17 kB (454827)

хотелось бы научиться делать примерно то же самое, только совершенно не имею понятия, как это делается и через всякие гуглопоиски и прочее не могу найти никакой информации.

Dinvin4ester 22-08-2014 21:15 2392905

Ребята есть скрипт - http://rghost.ru/57595597. Проблема вот в чем, большие веса не хочет открывать , нажимаешь на сетап и он висит в трее и ничего не открывается, теперь такой вопрос - как обойти ограничение в 2 гб в inno setup, насколько я понял в этом дело ?

vint56 22-08-2014 21:49 2392924

Irenis, http://rghost.ru/57616167

vint56 22-08-2014 22:16 2392936

Dinvin4ester, перенеси в самый низ а насчет ограничения 2 гига не как
[Files]
Source: "D:\Games\The Forest\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

Irenis 22-08-2014 23:31 2392955

vint56, спасибо большое за помощь :) Ваш совет использовать сам inno setup для запаковки помог, вроде бы разобралась. Правда еще осталось пара вопросов. У меня почему то архивы bin получаются как setup-1a.bin, setup-1b.bin, setup-1c.bin, а не setup-1, setup-2, setup-3 (ваш скрипт правда еще не пробовала, не знаю как там будет). Конечно это уже второстепенное, но все равно интересно, почему так. Второй вопрос, чтобы запаковать архив без сжатия и побыстрее, нужно просто написать Compression=none, правильно я поняла? Или может где то как то еще ускорить процесс?
Ну и пока вроде бы последнее, поделитесь ссылкой, где и какой скачать Inno Setup :) Я скачивала здесь с сайта, но как то работает некорректно. Русский язык куда то пропал, и при создании установщика через мастера, тоже почему то нету русского в выборе языка установщика.

Nordek 22-08-2014 23:41 2392959

Irenis, Разбить не сложно, пример:
1 Архив
fwclient\resources\models.pck 1.99 GB (2147483392)

2 Архив
fwclient\resources\litmodels.pck 1006.16 MB (1055045243)
fwclient\resources\surfaces.pck 871.75 MB (914100077)

3 Архив
fwclient\resources\building.pck 687.84 MB (721262764)
fwclient\resources\loddata.pck 64.52 MB (67657600)
fwclient\resources\models.pkx 524.88 MB (550378794)
fwclient\resources\sfx.pck 674.65 MB (707423377)

4 Архив
fwclient\resources\configs.pck 14.03 MB (14717964)
fwclient\resources\gfx.pck 214.04 MB (224439976)
fwclient\resources\grasses.pck 1.98 MB (2079923)
fwclient\resources\interfaces.pck 11.00 MB (11538963)
fwclient\resources\script.pck 5.76 MB (6049439)
fwclient\resources\shaders.pck 6.72 MB (7050168)
fwclient\resources\textures.pck 108.87 MB (114163463)
fwclient\resources\help\book.pck 6.55 MB (6877879)
fwclient\resources\help\script.pck 22.61 KB (23160



Цитата:

Цитата Irenis
Ну и еще конечно же хотелось бы, чтоб архивы bin были одинакового размера, а вручную так ведь тоже не получится наверное. »

Вводите значения руками.
Справка:
Inno Setup Help » Секция скриптов » Директивы секции [Setup] » DiskSliceSize:
Цитата:

Цитата DiskSliceSize
Возможные значения: 262144 до 2100000000, или max

Описание:
Это определяет максимальное количество байтов на дисковую часть (SETUP-*.BIN файл). Обычно, оно должно быть установлено в общее количество байтов, доступных на дисковых носителях, разделенных на значение директивы SlicesPerDisk секции [Setup], значение которого по умолчанию 1.

Директива игнорируется, если разбиение на диски не включено (директива DiskSpanning секции [Setup].

Чтобы оптимально заполнить DVD диск размером 4.7 Гбайт, используйте:
Код:

SlicesPerDisk=3
DiskSliceSize=1566000000

Чтобы оптимально заполнить DVD диск размером 8.5 Гбайт, используйте:
Код:

SlicesPerDisk=5
DiskSliceSize=1708200000

Чтобы оптимально заполнить CD (80-минутные) диск размером 700 Мбайт, используйте:
Код:

SlicesPerDisk=1
DiskSliceSize=736000000

Чтобы оптимально заполнить 1.44MБ гибкие диски, используйте:
Код:

SlicesPerDisk=1
DiskSliceSize=1457664


или хотя бы разбираться в программах:
InnoIDE
Проект » Параметры дистрибутива » "Разбивка на тома"

Inno Script Studio
Проект » Параметры установки » "Разбивка на тома"

Цитата:

Цитата Irenis
хотелось бы научиться делать примерно то же самое, только совершенно не имею понятия, как это делается и через всякие гуглопоиски и прочее не могу найти никакой информации. »

Это нужно не гугл ковырять, а смотрите выше.

P.S Скоро я сюда всю справку перепишу :).

vint56 22-08-2014 23:54 2392966

Irenis, насчёт Inno Setup сам им пользуюсь скачай inno ultra
http://innoultra.ru/?page_id=70
насчет ускорить процесс только Compression=none

Irenis 23-08-2014 12:51 2393055

Цитата:

Цитата vint56

Пробовала ваш скрипт и программа inno setup уже переустановлена, почему то у меня получается не setup-1.bin, setup-2.bin и т.д., а вот что получилось:

setup
setup-1a.bin
setup-1b.bin
setup-2a.bin

Никто не в курсе, от чего это зависит? Как сделать, чтоб все красиво выглядело? :)

vint56 23-08-2014 13:16 2393058

Irenis, все правильно потому что идет деления на диски закаментируй ;SlicesPerDisk=2 и будет setup-1.bin setup-2.bin
1 диск
setup-1a.bin
setup-1b.bin
2 диск
setup-2a.bin и так далее

Kashtan007 23-08-2014 14:56 2393076

Всем привет.
Нужна ваша помощь!

Первый вопрос:
На странице каталога нужно 2 чекбокса.
1 чекбокс - будет удалять содержимое в res_mods\0.9.2\* и удалять папку xvm по пути res_mods\xvm.
2 чекбокс - должен делать бекап папки res_mods, по пути IB\old_res_mods, а после удаление репака возвращал бекап в папку res_mods.
Как это реализовать?

Второй вопрос:
Как сделать, чтобы файлы unins000.exe помещало по пути IB\Uninstall\* ?

Третий вопрос:
У меня в репаке есть файл "bin" и в папке куда я ставлю репак он тоже есть. В следствии чего если я ставлю репак, то файл заменяется, а когда удаляешь репак то файл тоже удаляется и не запускается игра. Как сделать, чтобы когда устанавливаешь репак, то файл "bin" из папки куда ставишь репак копировался по пути IB\BackUp, а после удаление возвращался на свое место.

P.S. Пользуюсь юникодом. Всем заранее спасибо за помощь!

Irenis 24-08-2014 13:41 2393375

Подскажите, что означает солидное сжатие SolidCompression? Точнее, для чего это нужно? И на что влияет? И что будет, если его вообще убрать из скрипта?

Nordek 24-08-2014 15:52 2393412

Цитата:

Цитата Irenis
что означает солидное сжатие »

Для чиновников, с обстоятельным подходом.


Цитата:

Цитата Irenis
SolidCompression? »

Непрерывное сжатие.
Непрерывный архив


Справка:
Inno Setup Help » Секция скриптов » Секция [Setup] » SolidCompression:
Цитата:

Цитата SolidCompression
Возможные значения: yes или no

Значение по умолчанию: no

Описание:
При значении yes включается уплотненное сжатие. Результат такого сжатия будет лучше, особенно если инсталлятор содержит файлы одного типа и эти файлы сгруппированы в секции [Files]. Убедитесь, что Compression=lzma или Compression=bzip, т.к. zip (значение по умолчанию) не позволяет выгодно использовать уплотненное сжатие (потому что работает с меньшими блоками).

Неудобство использования уплотненного сжатия в состоится том, что так как все файлы сжаты единым потоком, инсталлятор не может беспорядочно обращаться к любому из файлов. Это может тормозить работу. Если определенный файл не будет установлен в систему пользователя, данные все равно придется декомпрессировать (в память) для того, чтобы инсталлятор получил доступ к следующему файлу. И если, допустим, в процессе декомпрессии возникнет ошибка и пользователь нажмет Retry, инсталлятор не сможет обратиться к файлу, в котором возникла ошибка, потому что все файлы сжаты в один файл, и придется производить повторную попытку с нуля. Если включено разбиение на диски, пользователь должен будет снова ставить первый диск.

В общем, уплотненное сжатие не рекомендуется применять к большим по размеру инсталляторам (скажем, больше 100 MB) или если используется разбиение на диски. Эта директива служит для того, чтобы при скачивании из Internet маленьких приложений экономилось время.


Irenis 24-08-2014 19:40 2393492

Nordek, Ясно, большое спасибо :)
Цитата:

Цитата Nordek
Возможные значения: yes или no »

А если SolidCompression вообще убрать из скрипта, это будет то же самое, что поставить SolidCompression=no?

Nordek 24-08-2014 19:49 2393495

Цитата:

Цитата Irenis
А если SolidCompression вообще убрать из скрипта, это будет то же самое, что поставить SolidCompression=no? »

Именно.
Т.е если будет в вашем скрипте присутствовать именно SolidCompression=no = то результат будет равнозначен тому, что SolidCompression и вовсе бы отсутствовал.

Чуточку дополню:
Если вместо no, использовать false = то результат от этого не изменится.
А если вместо yes использовать true = то результат так же, от этого не изменится.

Irenis 24-08-2014 21:41 2393530

Уже вроде бы и спрашивать не удобно (что то я зачастила), но если не затруднит, может кто ответит еще на пару вопросов :blush2:
1. Убрала SolidCompression,
Поставила Compression=none
Может еще что то можно придумать, чтобы ускорить создание установщика? Мне сжатие не нужно, даже наоборот, чем больше будет весить установщик, тем лучше. Просто многие пользователи почему то считают, что чем больше весит установщик, тем лучше, значит ничего не вырезано, и графика лучше, ну и тому подобное.

2. Для чего нужны эти строчки:

#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif

Компилировала и с ними, и без, но так и не заметила, что меняется.
Может кстати где то на просторах интернета есть что то типа инструкции (или обозначений), где можно почитать, за что отвечают различные строки(коды) в скрипте.

R.i.m.s.k.y. 24-08-2014 21:55 2393536

Цитата:

Цитата Irenis
Может еще что то можно придумать, чтобы ускорить создание установщика? »

дефрагментировать диск
Цитата:

Цитата Irenis
Просто многие пользователи почему то считают, что чем больше весит установщик, тем лучше, значит ничего не вырезано, и графика лучше, ну и тому подобное. »

о святая простота
Цитата:

Цитата Irenis
Для чего нужны эти строчки:
#ifdef NeedSize
ExtraDiskSpaceRequired={#NeedSize}
#endif »

ifdef NeedSize - если true установщик будет к размеру файлов плюсовать дополнительное место для установки ExtraDiskSpaceRequired

Nordek 24-08-2014 22:08 2393540

Цитата:

Цитата Irenis
чтобы ускорить создание установщика? »

Код:

InternalCompressLevel=none
Compression=none


Irenis 24-08-2014 22:52 2393545

Nordek, Спасибо, сейчас попробую :)
Цитата:

Цитата R.i.m.s.k.y.
дефрагментировать диск »

Спасибо, что напомнили о таком понятии, как дефрагментация :) Тем более я часто удаляю-устанавливаю игры и программы, компьютер начал сильно тормозить. Правда, честно признаться, никогда не делала такую процедуру, страшновато как то, чтоб ничего нигде не повредилось. Просто читала, что после дефрагментации иногда бывает только хуже, система еще больше тормозит, а то и вовсе не запускается.

vint56 25-08-2014 00:45 2393586

Irenis, если ты используешь мой пример тогда удали вот эти строчки простоя давал для максимального сжатия
SolidCompression=yes
Compression=lzma2/ultra64
LZMAUseSeparateProcess=yes
LZMAMatchFinder=BT
LZMANumFastBytes=273
LZMADictionarySize=262144
InternalCompressLevel=ultra64
MergeDuplicateFiles=true
#define NeedSize "8336330752" указываешь сколько нужно свободного места для установки игры

Kashtan007 25-08-2014 00:57 2393592

Всем привет.
Нужна ваша помощь!

Первый вопрос:
На странице каталога нужно 2 чекбокса.
1 чекбокс - будет удалять содержимое в res_mods\0.9.2\* и удалять папку xvm по пути res_mods\xvm.
2 чекбокс - должен делать бекап папки res_mods, по пути IB\old_res_mods, а после удаление репака возвращал бекап в папку res_mods.
Как это реализовать?

Второй вопрос:
Как сделать, чтобы файлы unins000.exe помещало по пути IB\Uninstall\* ?

Третий вопрос:
У меня в репаке есть файл "bin" и в папке куда я ставлю репак он тоже есть. В следствии чего если я ставлю репак, то файл заменяется, а когда удаляешь репак то файл тоже удаляется и не запускается игра. Как сделать, чтобы когда устанавливаешь репак, то файл "bin" из папки куда ставишь репак копировался по пути IB\BackUp, а после удаление возвращался на свое место.

P.S. Пользуюсь юникодом. Всем заранее спасибо за помощь!

nik1967 25-08-2014 08:51 2393647

Kashtan007, вот ты думаешь, буду постить на каждой странице одни и те же вопросы, может кто ответит. Твои вопросы были прочитаны на предыдущей странице всеми. Но. Кто захочет ответить - ответит. Да и на все твои "вопросы" есть ответы давным давно. Нужно только не лениться, и воспользоваться поиском и справкой к Inno Setup. Кнопка F1 сломалась? Например на вопрос
Цитата:

Цитата Kashtan007
Как сделать, чтобы файлы unins000.exe помещало по пути IB\Uninstall\* ? »

читаем справку:

Цитата:

[Setup]: UninstallFilesDir
"Default value:
{app}

Description:
Specifies the directory where the "unins*.*" files for the uninstaller are stored.

Note: You should not assign a different value here on a new version of an application, or else Setup won't find the uninstall logs from the previous versions and therefore won't be able to append to them.

Example:
UninstallFilesDir={app}\uninst"
В твоём случае:
UninstallFilesDir={app}\IB\Uninstall

Да и по первому и последнему вопросу есть ответы, если поискать. Пример.

Что, сложно и трудно? Нет, просто лень.

P.S. А если сложно с Inno Setup, то есть тема для заказа инсталлятора.

R.i.m.s.k.y. 25-08-2014 09:24 2393652

Цитата:

Цитата Irenis
Просто читала, что после дефрагментации иногда бывает только хуже, система еще больше тормозит, а то и вовсе не запускается. »

Цитата:

Цитата R.i.m.s.k.y.
о святая простота »

Цитата:

Цитата Nordek
InternalCompressLevel=none Compression=none »

вторая строчка и так стоит, а первая фактически ни на что не влияет тк отвечает за сжатие самого кода установщика, весит который немного, счет на десятки КИЛОбайт
Цитата:

Цитата vint56
тогда удали вот эти строчки »

и будет сжатие по-умолчанию, вопрос бул - максимально быстрое создание установщика

Kashtan007 25-08-2014 11:26 2393692

nik1967, спасибо.

Где только не искал, но никак не могу найти ответ на 1 и 3 вопрос, либо же нахожу, но оно не работает.

Leka_651 25-08-2014 11:45 2393703

Добрый день!
Такая задачка: если при удалении программы какие-то файлы были заняты, то по завершению будет выдано сообщение о перезагрузке. Если комп не перезагружать, и сразу в этот же каталог поставить программу, то инсталлятор выдаст сообщение, что сначала необходимо перезагрузить комп. Но если инсталлятор запустить в тихом режиме, то комп сразу начинает перезагружать. Как сделать так, чтобы при тихой установке инсталлятор просто завершал свою работу, ничего не установив.

Shkutu 25-08-2014 12:25 2393727

Leka_651, попробуйте запустить инсталлятор с параметрами /VERYSILENT /NORESTART. Подробнее смотрите в справке раздел "Setup Command Line Parameters".
Kashtan007, как-то вы криво ищите, простите. По вопросам 1 и 3 nik1967 уже ответил, но еще есть например здесь: http://forum.oszone.net/post-2346042-530.html. И учитесь поиском пользоваться: правильно поставленный вопрос содержит в себе половину ответа, да и результат значительно быстрее, чем ждать, пока кто-то ответит :))

Leka_651 25-08-2014 12:42 2393736

Shkutu, параметры помогают, я уже так попробовала. а можно ли как-то из кода проверить и запретить установку?

R.i.m.s.k.y. 25-08-2014 12:47 2393739

Цитата:

Цитата Leka_651
а можно ли как-то из кода проверить и запретить установку? »

Код:

var isSilent : boolean;
Function InitializeSetup: Boolean;
Begin
  isSilent := false;
  for i:=2 to ParamCount do begin
  if ( Pos(LowerCase('/silent'), Lowercase(ParamStr(i))) > 0 ) then isSilent := true;
  if ( Pos(LowerCase('/verysilent'), Lowercase(ParamStr(i))) > 0 ) then isSilent := true;
  end;
if isSilent then begin
  MsgBox('тихая установка запрещена', mbInformation, MB_OK);
  Result := False;
  exit;
end;


Gnom_aka_Lexander 25-08-2014 13:17 2393756

R.i.m.s.k.y., Проще :)
Код:

Pascal Scripting: WizardSilent
Прототип:
function WizardSilent: Boolean;
Описание:
Возвращает значение True, если инсталлятор запущен в тихом режиме, в обратном случае False.


Leka_651 25-08-2014 13:25 2393759

R.i.m.s.k.y., спасибо, но данный код совсем запрещает тихую установку. а мне нужно, чтобы тихая установка прерывалась только в том случае, если после предыдущего удаления осталось файлы, которые удаляться после перезагрузки.

R.i.m.s.k.y. 25-08-2014 13:46 2393767

Цитата:

Цитата Gnom_aka_Lexander
Проще »

а
ну я давно это писал

Le9ent 27-08-2014 12:05 2394771

Добрый день. Не подскажите где можно найти пример распаковки внешнего .zip -архива.
(Он будет находится рядом с установщиком {{src}} )

Нашел в Inno Setup Scripting 5.1 только распаковку .rar
читать дальше »

Код:

[Run]
Filename: "{src}\UnRAR.exe"; WorkingDir: "{src}"; Parameters: "x -O+ archive.rar ""{app}\"""; Flags: waituntilterminated


Nordek 27-08-2014 13:20 2394806

Le9ent, Первый вариант в первом сообщении Работа с архивами 7z
Второй вариант:
Код:

[Run]
Filename: {src}\7z.exe; Parameters: "x ""{src}\Archive.7z"" -o""{app}"" * -r -y"


Leka_651 28-08-2014 12:20 2395277

Нашла решение своей проблемы:

Цитата:

Цитата Leka_651
Добрый день!
Такая задачка: если при удалении программы какие-то файлы были заняты, то по завершению будет выдано сообщение о перезагрузке. Если комп не перезагружать, и сразу в этот же каталог поставить программу, то инсталлятор выдаст сообщение, что сначала необходимо перезагрузить комп. Но если инсталлятор запустить в тихом режиме, то комп сразу начинает перезагружать. Как сделать так, чтобы при тихой установке инсталлятор просто завершал свою работу, ничего не установив. »

все оказалось очень просто:

Prototype:
function RmSessionStarted: Boolean;

Description:
Возвращает True, если была начата сессия Restart Manager, иначе False.

вдруг кому-то пригодится)

palsn2000 30-08-2014 20:11 2396298

Если кто знает помогите решить следующую проблему:
В конце установки программы нужно запустить *.bat файл и дождаться окончания выполнения cmd перед выполнением следующего действия.

bat файл запускаю в секции [RUN] в итоге Инно Сетап добросовестно делает секундную паузу при запуске батника, но не реагирует на запускаемую им операцию с командной строкой.

В итоге получаю страницу завершения инсталлятора с предложением на запуск установленной программы, в то время, как еще выполняются действия над файлами в ранее запущенной командной строке.

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

R.i.m.s.k.y. 30-08-2014 22:10 2396365

palsn2000, флаг waituntilterminated стоит?

palsn2000 31-08-2014 10:09 2396505

R.i.m.s.k.y., Большое спасибо! Всё работает как надо!

Мой косяк - недостаточно внимательно читал справку ведь предельно ясно написано By default, when the shellexec flag is used it will not wait until the spawned process terminates. If you need that, you must add the flag waituntilterminated.

Как говорится в пословице: Век живи - Век учись

Извините за беспокойство :blush:

saneksanek 31-08-2014 19:33 2396690

Здравствуйте,помогите пожалуйста.Из примеров взял код на Logo.
Но загвоздка в том что он не до конца рабочий,иными словам компиляция и установка проходит успешно,но вот когда начинаю производить деинсталляцию выбивает ошибку "Runtime Error(at 60:286) Could not call proc" а следом и еще одна "Runtime Error(at 63:5) Could not call proc"
Сам код с файлами: https://yadi.sk/d/DfdvFSZtak4NJ

Dodakaedr 31-08-2014 19:57 2396702

saneksanek,
Код:

[Files]
Source: Dll\b2p.dll; DestDir:{app}; Flags: dontcopy;
Source: Dll\botva2.dll; DestDir:{app}; Flags: dontcopy;
Source: Dll\ISDone.dll; DestDir:{app}; Flags: dontcopy;
Source: InstallFiles\Logo 3.png; DestDir:{app}; Flags: dontcopy;

Проблема в флаге dontcopy что означает не копировать, а при деинсталляции вы те файлы вызываете и получается ошибка так как они отсутствуют.

читать дальше »
Код:

#include "Mod\botva22.iss"
[Setup]
AppName=Game
AppVerName=Game
DefaultDirName={pf}\Game
OutputDir=.

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Files]
Source: Dll\b2p.dll; DestDir:{app}; Attribs: hidden system; Flags: ignoreversion;
Source: Dll\botva2.dll; DestDir:{app}; Attribs: hidden system; Flags: ignoreversion;
Source: Dll\ISDone.dll; DestDir:{app}; Attribs: hidden system; Flags: ignoreversion;
Source: InstallFiles\Logo 3.png; DestDir:{app}; Attribs: hidden system; Flags: ignoreversion;

[Code]
var
CreateLogo: Longint;
ResultCode: Integer;

function InitializeSetup:boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\b2p.dll')) then ExtractTemporaryFile('b2p.dll');
  if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
  Result:=True;
end;

procedure LogoLabelOnClick(Sender: TObject);
begin
  ShellExec('open', 'http://krinkels.org/showthread.php?t=901&page=2', '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
end;

procedure InitializeWizard;
begin
  ExtractTemporaryFile('Logo 3.png')
  CreateLogo:= ImgLoad(WizardForm.handle, ExpandConstant('{tmp}\Logo 3.png'), ScaleX(5), ScaleY(325), ScaleX(170), ScaleY(34), True, True);
  ImgApplyChanges(WizardForm.Handle);

  with TLabel.Create(WizardForm) do begin
    Parent:=WizardForm;
    AutoSize:=False;
    Transparent:= true;
    SetBounds(ScaleX(5), ScaleY(325), ScaleX(170), ScaleY(34));
    OnClick:=@LogoLabelOnClick;
    Cursor:= CrHand;
  end;
end;

procedure DeinitializeSetup();
begin
  gdipShutdown;
end;


function InitializeUninstall: Boolean;
begin
  FileCopy(ExpandConstant('{app}\b2p.dll'), ExpandConstant('{tmp}\b2p.dll'), False);
  FileCopy(ExpandConstant('{app}\botva2.dll'), ExpandConstant('{tmp}\botva2.dll'), False);
  FileCopy(ExpandConstant('{app}\Logo 3.png'), ExpandConstant('{tmp}\Logo 3.png'), False);
  Result := True;
end;

procedure UnLogoLabelOnClick(Sender: TObject);
begin
  ShellExec('open', 'http://krinkels.org/showthread.php?t=901&page=2', '', '', SW_SHOWNORMAL, ewNoWait, ResultCode)
end;

procedure InitializeUninstallProgressForm;
begin
  CreateLogo:= ImgLoad(UninstallProgressForm.Handle, ExpandConstant('{tmp}\Logo 3.png'), ScaleX(5), ScaleY(325), ScaleX(170), ScaleY(34), True, True);
  ImgApplyChanges(UninstallProgressForm.Handle);

  with TLabel.Create(nil) do
  begin
    Parent:=UninstallProgressForm;
    AutoSize:=False;
    Transparent:= true;
    SetBounds(ScaleX(5), ScaleY(325), ScaleX(170), ScaleY(34));
    OnClick:=@UnLogoLabelOnClick;
    Cursor:= CrHand;
  end;
end;

procedure DeinitializeUninstall();
begin
  gdipShutdown;
end;


saneksanek 31-08-2014 20:19 2396707

Dodakaedr, Точно,спасибо.

Tco 03 02-09-2014 02:41 2397219

Здравствуйте, господа.
Кому не сложно, подскажите, пожалуйста. Застрял на реализации следующей вещи:
SetIniString('Client', 'Size', GetIniString('Client', 'Size', '', ExpandConstant('{tmp}\Info.ini')), ExpandConstant('{app}\Info.ini'));
Нужно с двух разных файлов (с разных секций (из папки {tmp})) вписать в один файл (в одну секцию (в папку {app})) размер файла. То есть, в первом файле, допустим, размер 1287 байт, а в другом 2154 байта. Как их приплюсовать в одну секцию? То есть, чтобы в файле в папке {app} размер был 3441 байт, но только в одной секции?
Спасибо за внимание.

nik1967 02-09-2014 10:55 2397298

Tco 03,
ну как то так
Код:

SetIniString('Client', 'Size', IntToStr(StrToInt(GetIniString('Client', 'Size', '', ExpandConstant('{tmp}\Info1.ini'))) + StrToInt(GetIniString('Client', 'Size', '', ExpandConstant('{tmp}\Info2.ini')))), ExpandConstant('{app}\Info.ini'));

ну или так, чтобы не загромождать строчку :)
Код:

[code]
[процедура или функция, где все происходит]
var
  S,S1,S2: String;
begin
  S1:= GetIniString('Client', 'Size', '', ExpandConstant('{tmp}\Info1.ini')); // получаем 1 значение
  S2:= GetIniString('Client', 'Size', '', ExpandConstant('{tmp}\Info2.ini')); // получаем 2 значение
  S:= IntToStr(StrToInt(S1) + StrToInt(S2)); // переводим 1 и 2 значение в цифру, суммируем их, переводим сумму снова в строчку
  SetIniString('Client', 'Size', S, ExpandConstant('{app}\Info.ini')); // записываем результат в .ini файл
end;


Tco 03 02-09-2014 18:47 2397482

nik1967, работает как Швейцарские часы, благодарю!

Есть ещё одна проблема, господа. Как вписать значение в реестр через секцию Code? Знаю как вписать просто значение, цыфры:
RegWriteDWordValue(HKLM, 'SOFTWARE\Sapatcom\Client Interface, 'Skin', 3);
Как вписать цифры такого формата: 1.0.1.2 (то есть вписать цифры с точками)? И как вписать в реестр просто слово? И ещё... Как потом одно из значений реестра вписать в .ini-файл?

nik1967 02-09-2014 19:41 2397518

Цитата:

Цитата Tco 03
RegWriteDWordValue »

А ты точно уверен, что ключ реестра должен быть DWord? Может быть String (строковый параметр)?
Тогда так:
Код:

RegWriteStringValue(HKLM, 'SOFTWARE\Sapatcom\Client Interface', 'Skin', '1.0.1.2');
Цитата:

Цитата Tco 03
И как вписать в реестр просто слово? »

Так же.
Цитата:

Цитата Tco 03
И ещё... Как потом одно из значений реестра вписать в .ini-файл? »

Получаешь значение с помощью функции RegGetValueNames, затем записываешь значение в .ini файл.

Dodakaedr 03-09-2014 14:02 2397833

Подскажите пожалуйста, кто понимает, как можно осуществить вот такое:
Код:

AfterInstall: "DoServiceInstall('{app}\DfSdkS.exe', 'DfSdkS', 'Defragmentation-Service', 'Defrag Service - powered by mst software')";
а именно DoServiceInstall.

{app}\DfSdkS.exe - программа
DfSdkS - я так понимаю что это ключ
Defragmentation-Service - имя
Defrag Service - powered by mst software - описание

kotyarko@fb 03-09-2014 16:25 2397897

Всем привет!
Не подскажете, можно-ли привязать PopupMenu к одному из чекбоксов в ComponentsList? (чекбоксы созданы стандартно, через [Components]).

kotyarko@fb 03-09-2014 16:44 2397912

Цитата:

Цитата Dodakaedr
Подскажите пожалуйста, кто понимает, как можно осуществить вот такое »

Код:

AfterInstall: DoServiceInstall;

[Сode]
Procedure DoServiceInstall();
begin
 ShellExec(параметры функции посмотри в справке);
end;

Не знаю, это ли тебе нужно. Но параметры запуска программы указать можно (вряд ли можно указать ключ к ней).

Dodakaedr 03-09-2014 17:14 2397926

Цитата:

Цитата kotyarko@fb
Не знаю, это ли тебе нужно. Но параметры запуска программы указать можно (вряд ли можно указать ключ к ней). »

ключ тоже можно. Нет не это. Я думаю что надо что-то типа такого:
Код:

procedure DoServiceInstall(параметры);
begin
 //Код процедуры;
end;

В программировании не очень, поэтому не могу придумать.

Kashtan007 04-09-2014 19:08 2398435

Добрый день. Нужна ваша помощь.
Мне нужно, чтобы на странице каталога была 2 чекбокса
-Удалить все старые моды
--Сохранить бекап старых модов
Выглядеть это должно так:


1 чекбокс, должен удалять содержимое в res_mods\0.9.2\* и удалять папку xvm по пути res_mods\xvm.
2 чекбокс, должен делать бекап папки res_mods, по пути ModPack\BackUp\res_mods, а после удаление репака возвращал бекап в папку res_mods.

Есть еще 1 проблема:

У меня в репаке есть файл "bin" и в папке куда я ставлю репак он тоже есть. В следствии чего если я ставлю репак, то файл заменяется, а когда удаляешь репак то файл тоже удаляется и не запускается игра. Как сделать, чтобы когда устанавливаешь репак, то файл "bin" из папки куда ставишь репак копировался по пути ModPack\OriginalFiles, а после удаление возвращался на свое место.

Как это реализовать? Заранее спасибо всем за помощь.

kotyarko@fb 04-09-2014 19:30 2398445

Цитата:

Цитата Kashtan007
Добрый день. Нужна ваша помощь. »

Здорова, танкист :)
з.ы. модПак - это не репак.
Есть неплохой пример.

А зачем тебе *.bin в инсталляторе?

Kashtan007 04-09-2014 19:37 2398448

kotyarko@fb, ок. Можно ли сделать это же, только на странице "Каталог"?
Да я просто так bin написал, вообще нужно файл path, чтобы переносило.

kotyarko@fb 04-09-2014 19:44 2398453

Цитата:

Цитата Kashtan007
вообще нужно файл path, чтобы переносило. »

Тогда используй CurStepChanged - для переноса файла во время установки;
и CurUninstallStepChanged - для восстановления при удалении.

Цитата:

Цитата Kashtan007
Можно ли сделать это же, только на странице "Каталог"? »

Можно. Меняй параметры Parent у каждого элемента, и сотри создание страницы.

acer0072 04-09-2014 21:48 2398504

Добрый день. Помогите прикрутить к чекбоксу "Перейти на сайт" - ссылку. Заранее спс. Пример скрипта http://rghost.ru/57851446

Dodakaedr 04-09-2014 22:05 2398508

acer0072, попробуйте так, не проверял:
Код:

[Code]
procedure LinkOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
  ShellExec('open', 'http://forum.oszone.net/thread-278998-147.html', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;

Link := TNewCheckBox.Create(WizardForm);
  with Link do
  begin
    Parent := Component.Surface;
    Left := ScaleX(315);
    Top := ScaleY(200);
    Width := ScaleX(200);
    Height := ScaleY(17);
    Caption := 'Перейти на сайт';
    Checked:=True;
    OnClick:=@LinkOnClick;
  end;


acer0072 04-09-2014 22:30 2398517

Спасибо. Но не сработало((. Это же отрабатывает на клик по ссылке. А мне нужен чекбокс.

Dodakaedr 04-09-2014 22:37 2398520

Цитата:

Цитата acer0072
Спасибо. Но не сработало(( »

Ну да)) а так?
Добавте это в секцию [Run]. Предыдущее удалите.
Код:

FileName: "http://forum.oszone.net/thread-278998-147.html"; Check: "LinkCheck"; Flags: shellexec skipifsilent

Nightwishh 04-09-2014 23:32 2398539

Сдравствуйте. Хочу узнать правильно ли я выковарил нужный мне кусок кода для текстурирования чекбокса "Не создавать папку в меню"Пуск"
Код:

[Setup]
WizardSmallImageFile=btnimage.bmp
AllowNoIcons=true
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
DefaultGroupName=My Application
SolidCompression=true
Compression=none
InternalCompressLevel=ultra64
AlwaysRestart=true
OutputDir=.

[Icons]
Name: {group}\My Application; Filename: MyApp; WorkingDir: {app}

[ Code]
var
  C: integer;
  btnImgFile: AnsiString;
  CheckAccept: array of TNewCheckListBox;

procedure NoIcons(Sender: TObject);
 begin
  WizardForm.NoIconsCheck.Checked:= CheckAccept[3].Checked[0];
case WizardForm.GroupEdit.Enabled of
  True: begin
  WizardForm.GroupEdit.Color := clNavy;
  end;
  False: begin
  WizardForm.GroupEdit.Color := clSilver;
    end;
  end;
end;

procedure InitializeImage;
  begin
    ExtractTemporaryFile('{#SetupSetting("WizardSmallImageFile")}');
    btnImgFile := ExpandConstant('{tmp}\{#SetupSetting("WizardSmallImageFile")}');
    SetArrayLength(CheckAccept, 4);

  for C:=0 to getArrayLength(CheckAccept)-1 do begin
    CheckAccept[C] := TNewCheckListBox.Create(WizardForm);
    CheckAccept[C].BorderStyle := bsNone;
    CheckAccept[C].WantTabs := True;
    end;

  CheckAccept[3].Parent := WizardForm.NoIconsCheck.Parent;
  with WizardForm.NoIconsCheck do  begin
  CheckAccept[3].SetBounds(WizardForm.NoIconsCheck.Left,WizardForm.NoIconsCheck.Top,WizardForm.NoIconsCheck.Width,WizardForm.NoIconsCheck.Height)
  CheckAccept[3].AddCheckBoxEx(WizardForm.NoIconsCheck.Caption,'',0, False, True, True, True, nil, True);
  CheckAccept[3].OnClickCheck:=@NoIcons;
  Hide;  end;

  CheckAccept[3].LoadBtnBmpFromFile(btnImgFile);

end;

procedure InitializeWizard();
begin
  InitializeImage;//эту строчку вписывать строго в самом низу процедуры
end;

[Files]
Source: FilesBmp\DirBitmap.bmp; Flags: dontcopy
Source: FilesBmp\GroupBitmap.bmp; Flags: dontcopy
Source: btnimage.bmp; Flags: dontcopy
Source: WizModernImage-IS.bmp; Flags: dontcopy

Вроде работает, но может его можно попроще сделать?
P.S. Код выдран из скрипта "inserimag4" авторы: Gnom3 (aka Gnom, Лександер),Shegorat,Krinkels

Kashtan007 04-09-2014 23:40 2398542

kotyarko@fb, можно ли сделать чекбоксы не круглые, а квадратные, чтобы можно было сразу выбрать оба варианта?

kotyarko@fb 04-09-2014 23:53 2398545

Цитата:

Цитата Kashtan007
можно ли сделать чекбоксы не круглые, а квадратные, чтобы можно было сразу выбрать оба варианта? »

Можно. Надо их объявить не TNewRadioButton, а TNewCheckBox. При этом, скорее всего, нужно будет переделать логику их работы (ведь в данный момент они адаптированы под работу по отдельности, и их связывание, которое вы хотите сделать, может нарушить весь процесс: например, удалится и не забекапится или наоборот).

Цитата:

Цитата Nightwishh
Вроде работает, но может его можно попроще сделать? »

Можно сократить буквально несколько строк, но смысла не вижу.
P.s. если вас интересует чистота в скрипте (не хотите забивать массивными кодами), то можете поместить секции [Files], [code] из примера, написанного вами, в отдельный скрипт. И подключить его в основной через #include "Имя_скрипта.iss". И объединить процедуры InitializeWizard.

acer0072 05-09-2014 09:21 2398624

Dodakaedr, спасибо. Помогло.

DimanTV 05-09-2014 14:48 2398744

Использую функцию описание компонентов и картинки как можно вернуть на старую функцию чисто на картинки вот скрипт :http://rghost.ru/57859418

Nightwishh 05-09-2014 15:10 2398748

Цитата:

Цитата kotyarko@fb
Можно сократить буквально несколько строк, но смысла не вижу. »

Спасибо, теперь я в нём уверен!!!

El Sanchez 05-09-2014 15:21 2398754

Цитата:

Цитата Dodakaedr
DfSdkS - я так понимаю что это ключ »

Dodakaedr, это имя службы.
Цитата:

Цитата Dodakaedr
Defragmentation-Service - имя »

Dodakaedr, это отображаемое/выводимое имя.
Цитата:

Цитата Dodakaedr
AfterInstall: "DoServiceInstall('{app}\DfSdkS.exe', 'DfSdkS', 'Defragmentation-Service', 'Defrag Service - powered by mst software')"; »

Dodakaedr, файл DfSdkS.exe имеет 2 параметра командной строки для (де)регистрации себя любимого в реестре: -install и -uninstall. Последний параметр явно фигурирует в оригинальном скрипте.

Dodakaedr 05-09-2014 16:39 2398810

Цитата:

Цитата El Sanchez
файл DfSdkS.exe имеет 2 параметра командной строки для (де)регистрации себя любимого в реестре: -install и -uninstall. Последний параметр явно фигурирует в оригинальном скрипте. »

Абсолютно верно! Я уже разобрался. Но зачем они тогда так мудруют если можно через секцию [Run] это сделать?!

Теперь понял почему: через секцию [Run] служба не устанавливается. Просто ключа "-install" не достаточно

DimanTV 05-09-2014 18:33 2398895

Мне может кто нибудь код изменить который кинул выше

El Sanchez 05-09-2014 19:20 2398919

Цитата:

Цитата Dodakaedr
через секцию [Run] служба не устанавливается. Просто ключа "-install" не достаточно »

Dodakaedr, почему? Мне хватило. В оснастке служба видна, запустить/остановить позволяет.
Цитата:

Цитата DimanTV
Мне может кто нибудь код изменить который кинул выше »

DimanTV, найдите и закомментируйте строки с CompDescText.

Dodakaedr 05-09-2014 19:26 2398921

Цитата:

Цитата El Sanchez
почему? Мне хватило. В оснастке служба видна, запустить/остановить позволяет. »

Как-то не понятно все работает. По экспериментировал:
1) Через секцию [Run] служба не устанавливалась;
2) Сделал через cmd все работает;

kotyarko@fb 05-09-2014 19:41 2398928

Ни у кого ответа нет?

El Sanchez 05-09-2014 21:19 2398953

Цитата:

Цитата Dodakaedr
1) Через секцию [Run] служба не устанавливалась; »

Dodakaedr, все пашет:
Код:

[Run]
Filename: {app}\DfSdkS32.exe; Parameters: -install

Цитата:

Цитата kotyarko@fb
Ни у кого ответа нет? »

kotyarko@fb,
читать дальше »

Код:

[Components]
Name: "main"; Description: "Main Files"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Help Files"; Types: full
Name: "help\english"; Description: "English"; Types: full
Name: "help\dutch"; Description: "Dutch"; Types: full

[code]
var
   
PupMnu: TPopupMenu;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure ComponentsListOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
   
P: TPoint;
    Item: Integer;
    ComponentsList: TNewCheckListBox;
begin
    if
Button = mbRight then
    begin
       
P.x := X;
        P.y := Y;
        ComponentsList := TNewCheckListBox(Sender);
        Item := ComponentsList.ItemAtPos(P, True);
        if (Item = - 1) then Exit;
        if (Item = 1) { or (Item = ComponentsList.Items.IndexOf('Main Files')) } then  // например, 1-й компонент, т.е. help или 0-й по его описанию
       
begin
           
P := ComponentsList.ClientToScreen(P);
            PupMnu.Popup(P.x, P.y);
        end;
    end;
end;

////////////////////////////////////////
procedure Menu1OnClick(Sender: TObject);
begin
 
MsgBox('Menu 1 OnClick!', mbInformation, MB_OK);
end;

////////////////////////////////////////
procedure Menu2OnClick(Sender: TObject);
begin
 
MsgBox('Menu 2 OnClick!', mbInformation, MB_OK);
end;

/////////////////////////////
procedure InitializeWizard();
var
   
Mnu: TMenuItem;
begin
   
PupMnu := TPopupMenu.Create(WizardForm);
    // Menu 1
   
Mnu := TMenuItem.Create(WizardForm);
    Mnu.Caption := 'Menu 1';
    Mnu.OnClick := @Menu1OnClick;
    PupMnu.Items.Add(Mnu);
    // Menu 2
   
Mnu := TMenuItem.Create(WizardForm);
    Mnu.Caption := 'Menu 2';
    Mnu.OnClick := @Menu2OnClick;
    PupMnu.Items.Add(Mnu);
    PupMnu.AutoPopup := False;
   
    WizardForm.ComponentsList.OnMouseDown := @ComponentsListOnMouseDown;
    WizardForm.ComponentsList.PopupMenu := PupMnu;
end;


Nightwishh 05-09-2014 21:33 2398962

Всем привет. Не подскажите как мне сделать кнопку BackButton неактивной на странице приветствия. Код
Код:

Procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.BackButton.Enabled:= True;
  if  CurPageID = wpWelcome then begin
    WizardForm.BackButton.Enabled:= False;
  end;
end;

что то не помогает
Ах да, содавать новую страницу и кнопку "назад" я не хочу, кнопка должна быть на визарде...

kotyarko@fb 05-09-2014 21:58 2398976

Цитата:

Цитата Nightwishh
Не подскажите как мне сделать кнопку BackButton неактивной на странице приветствия. »

Её там просто нет. Зачем?

Nightwishh 05-09-2014 22:07 2398979

Воо:
Код:

Procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.BackButton.Show;
  WizardForm.BackButton.Enabled:= True;
  if  CurPageID = wpWelcome then begin
    WizardForm.BackButton.Enabled:= False;
  end;
end;

Накатал. Правильно?
Цитата:

Цитата kotyarko@fb
Зачем? »

мне на неё текстуру повесить надо для симетрии)))

kotyarko@fb 05-09-2014 22:12 2398982

Цитата:

Цитата Nightwishh
Правильно? »

Думаю, нет. Насколько я помню, PageChanged не отменяет действия, которые уже сделал.
Нужно как-то так:
Код:

Procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
  wpWelcome:
  begin
  WizardForm.BackButton.Show;
  WizardForm.BackButton.Enabled:= False;
  end
  else
  WizardForm.BackButton.Enabled := True;
  end;
end;

Цитата:

Цитата El Sanchez
kotyarko@fb, »

Спасибо за отзыв, но просто не работает.

Nightwishh 05-09-2014 22:34 2398991

Цитата:

Цитата kotyarko@fb
Нужно как-то так »

спасибо это тоже работает, думаю что возьму ваш вариант

Kashtan007 05-09-2014 23:08 2399004

Всем привет, возникла такая проблема, что когда перелистываю по страницам в установщике у меня проскакивает белый фон на пару секунд. Как решить эту проблему?
Возможно причина в том, что на страницах фон либо же установщик сильно перегружен? Можно ли как-то решить эту проблему? Заранее спасибо за ответ.

kotyarko@fb 05-09-2014 23:23 2399016

Цитата:

Цитата Kashtan007
когда перелистываю по страницам в установщике у меня проскакивает белый фон на пару секунд. Как решить эту проблему? »

Скинь скомпиленный инстальник, посмотреть.

Kashtan007 05-09-2014 23:48 2399023

kotyarko@fb, http://rghost.ru/57868859

kotyarko@fb 06-09-2014 00:05 2399027

Цитата:

Цитата Kashtan007
возникла такая проблема, что когда перелистываю по страницам в установщике у меня проскакивает белый фон на пару секунд. »

Нуу.. там даже далеко не секунда. Еле успеваю заметить. Так, как это воспроизводится у меня - вполне нормально.
Если не против, дам пару советов, по поводу инсталла:
1) В конце InitializeWizard прописать WizardForm.Center;
2) Перерисовать все элементы (лейблы, эдиты, листбоксы) и прописать всем параметр Transparent, а у фона дорисовать на местах этих лейблов небольшие затемнения, чтобы текст выделялся. И будет здорово.
3) На последней странице выбора устанавливаемого контента (непосредственно перед самой установкой) переименовать кнопку "Далее" на "Установить".

Kashtan007 06-09-2014 00:09 2399029

kotyarko@fb, хм.. может с компом что-то.
Спасибо за советы попробую, просто первый раз делаю сборку по просьбе друзей.

Как кнопку переименовать? Через блок CustomMessages?

kotyarko@fb 06-09-2014 00:17 2399034

Цитата:

Цитата Kashtan007
Как кнопку переименовать? Через блок CustomMessages? »

В твоём случае - нет.
Можно через тот же PageChanged, таким же способом, как и в примере на предыдущей странице.

Tco 03 06-09-2014 11:29 2399123

Господа, подскажите, пожалуйста, как создать лейбл, чтобы он отображался строго посередине прогресс бара?

Dodakaedr 06-09-2014 19:47 2399327

Цитата:

Цитата Tco 03
Господа, подскажите, пожалуйста, как создать лейбл, чтобы он отображался строго посередине прогресс бара? »

Создаете лейбл, делаете родителем WizardForm, отцентрируете по центру прогресс бара, скрываете его в процедуру CurPageChanged и в этой же процедуре на странице установки (wpInstalling) показываете его.

Tco 03 06-09-2014 21:12 2399356

Цитата:

Цитата Dodakaedr
Создаете лейбл, делаете родителем WizardForm, отцентрируете по центру прогресс бара, скрываете его в процедуру CurPageChanged и в этой же процедуре на странице установки (wpInstalling) показываете его. »

Моя вина, немного не так выразился, не всё так просто. Длина лейбла не постоянная, она изменяется в зависимости от выбора языка. Нужно чтобы он постоянно был по центру прогресс бара, вне зависимости от его длинны (ну не больше самого прогресс бара естественно).

Dodakaedr 06-09-2014 21:27 2399363

Цитата:

Цитата Tco 03
Длина лейбла не постоянная, она изменяется в зависимости от выбора языка. »

лично не проверял, но можете попробовать у wpInstalling указать размеры в зависимости от языка через if ... then ВашЛейбл.SetBounds(ScaleX(320), ScaleY(153), ScaleX(80), ScaleY(22));

Kashtan007 07-09-2014 21:24 2399725

Так как до сих пор не разобрался, то повторяю свой вопрос.

Мне нужно, чтобы на странице каталога была 2 чекбокса
-Удалить все старые моды
--Сохранить бекап старых модов
Выглядеть это должно так:


1 чекбокс, должен удалять содержимое в res_mods\0.9.2\* и удалять папку xvm по пути res_mods\xvm.
2 чекбокс, должен делать бекап папки res_mods, по пути ModPack\BackUp\res_mods, а после удаление репака возвращал бекап в папку res_mods.

Есть еще 1 проблема:

У меня в репаке есть файл "path" и в папке куда я ставлю репак он тоже есть. В следствии чего если я ставлю репак, то файл заменяется, а когда удаляешь репак то файл тоже удаляется и не запускается игра. Как сделать, чтобы когда устанавливаешь репак, то файл "path" из папки куда ставишь репак копировался по пути ModPack\OriginalFiles, а после удаление возвращался на свое место.

Как это реализовать? Заранее спасибо всем за помощь.

kotyarko@fb 07-09-2014 21:30 2399728

Цитата:

Цитата Kashtan007
Так как до сих пор не разобрался, то повторяю свой вопрос. »

Так я же отвечал: http://forum.oszone.net/post-2398453-1465.html

Kashtan007 07-09-2014 22:16 2399744

kotyarko@fb, да, но чуть не то. Я хочу, чтобы можно было выбрать сразу 2 пункта. Самому сделать не получилось(

kotyarko@fb 07-09-2014 22:26 2399754

Цитата:

Цитата Kashtan007
ра »

Ну тогда давай то, что есть на данный момент. Поправлю.

acer0072 08-09-2014 14:00 2400019

Уже закипел)) Вот такой простой вопрос. Есть exe файл, иконка не красивая)), хочу чтобы на рабочий стол выводился мой ярлык, с моим рисунком, но запускал он этот exe. Как реализовать? (в рестораторе не получилось поменять иконку)

P.S. вставил IconFilename: "{app}\icon.ico"; иконка появилась на ярлыке, но название ярлыка исчезло((

kotyarko@fb 08-09-2014 15:52 2400062

Цитата:

Цитата acer0072
Есть exe файл, иконка не красивая) »

Иконку екзешнику можно указать так:
Код:

[Setup]
SetupIconFile=Icon_Name.ico

Создание ярлыка ещё нужно?

Dodakaedr 08-09-2014 15:56 2400063

Цитата:

Цитата acer0072 (Сообщение 2400019)
Уже закипел)) Вот такой простой вопрос. Есть exe файл, иконка не красивая)), хочу чтобы на рабочий стол выводился мой ярлык, с моим рисунком, но запускал он этот exe. Как реализовать? (в рестораторе не получилось поменять иконку)

P.S. вставил IconFilename: "{app}\icon.ico"; иконка появилась на ярлыке, но название ярлыка исчезло((

В справке про секцию [ICON] прочтите. И покажите полностью вашу строчку иконки.

acer0072 08-09-2014 16:02 2400067

kotyarko@fb - exe не тот, что компилируется, а то что запускает приложение.

Dodakaedr
Цитата:

[Icons]
Name: "{commondesktop}\"; Filename: "{#MyAppExeName}"; Check: IconsCheck; IconFilename: "{app}\icon.ico";


Вот так получилось, что изображение поменялось, а название ярлыка - нету.

Nordek 08-09-2014 17:11 2400098

Цитата:

Цитата acer0072
а название ярлыка - нету. »

Код:

[Icons]
Name: {commondesktop}\{#MyAppName}; Filename: {#MyAppExeName}; Check: IconsCheck; IconFilename: {app}\icon.ico;


Dodakaedr 08-09-2014 17:49 2400119

Цитата:

Цитата acer0072
Вот так получилось, что изображение поменялось, а название ярлыка - нету. »

Поняли ошибку? Потому что вы его не указали...

acer0072 08-09-2014 20:03 2400159

Да, всем спасибо за помощь.

Nightwishh 09-09-2014 00:47 2400233

Ребят, а не посмотрите код, всё ли правильно
Код:

#define NeedSize "2100"
#define NeedInstallSize "2590"

[Setup]
OutputDir=.
AppName=аываваыв
AppVerName=ывпывамвапмаывп
DefaultDirName={pf}\dfsdgxfgf

[CustomMessages]
MBCaption=Мб.
GBCaption=Гб.
TBCaption=Тб.
TotalSpaceCaption=Всего места на диске:
FreeSpaceCaption=Доступно места на диске:
InstallSpaceCaption=Требуется места для установки:
NeedSpaceCaption=Требуется места на диске:

[Code_]
var
  DirPathLbl, TotalSpaceLbl, FreeSpaceLbl, NeedSpaceLbl, InstallSpaceLbl: TLabel;

//==========***Начало- Необходимое место для установки***==========//
function NumToStr(Float: Extended): String;
begin
  Result:= format('%.2n', [Float]); StringChange(Result, ',', '.');
  while (Result[Length(Result)] = '0')or((Result[Length(Result)] = '.')and(Pos('.', Result) > 0)) do
  SetLength(Result, Length(Result)-1);
end;

function MbOrTb(Float: Extended): String;
begin
  if Float < 1024 then Result:= NumToStr(Float) + ExpandConstant(' {cm:MBCaption}') else
  if Float/1024 < 1024 then Result:= NumToStr(Float/1024) + ExpandConstant(' {cm:GBCaption}') else
  Result:= NumToStr(Float/(1024*1024))+CustomMessage('TBCaption');
end;

procedure GetFreeSpaceCaption(Sender: TObject);
var
  FreeMB, TotalMB: Cardinal;
begin
  DirPathLbl.Caption:= MinimizePathName(WizardForm.DirEdit.Text, DirPathLbl.Font, DirPathLbl.Width);
  GetSpaceOnDisk(ExtractFileDrive(WizardForm.DirEdit.Text), True, FreeMB, TotalMB);
  TotalSpaceLbl.Caption:= ExpandConstant('{cm:TotalSpaceCaption}')+MbOrTb(TotalMB);
  FreeSpaceLbl.Caption:= ExpandConstant('{cm:FreeSpaceCaption}')+MbOrTb(FreeMB)+' ('+IntToStr(round(FreeMB*100/TotalMB))+'%)';
  if FreeMb < {#NeedInstallSize} then begin
    InstallSpaceLbl.Font.Color:= $0000ff; WizardForm.NextButton.Enabled:= False; end else begin
      InstallSpaceLbl.Font.Color:= $000000; WizardForm.NextButton.Enabled:= True;
  end;
end;
//==========***Конец- Необходимое место для установки***==========//

procedure InitializeWizard();
begin
  WizardForm.DirEdit.Visible:= False;
  WizardForm.DiskSpaceLabel.Visible:= False;

  DirPathLbl:= TLabel.Create(WizardForm);
  with DirPathLbl do begin
    Parent:= WizardForm.SelectDirPage;
    SetBounds(ScaleX(0), ScaleY(81), ScaleX(348), ScaleY(14));
    AutoSize:= False;
    Color:= clNone;
    Font.Name:= 'Arial';
    Font.Style:= [fsBold, fsItalic];
    Font.Size:= 9;
    Font.Color:= $ffffff;
    Transparent:= True;
  end;

  TotalSpaceLbl:= TLabel.Create(WizardForm);
  with TotalSpaceLbl do begin
    Parent:= WizardForm.SelectDirPage;
    SetBounds(ScaleX(0), ScaleY(128), ScaleX(348), ScaleY(14));
    AutoSize:= False;
    Color:= clNone;
    Transparent:= True;
  end;

  FreeSpaceLbl:= TLabel.Create(WizardForm);
  with FreeSpaceLbl do begin
    Parent:= WizardForm.SelectDirPage;
    SetBounds(ScaleX(0), ScaleY(144), ScaleX(348), ScaleY(14));
    AutoSize:= False;
    Color:= clNone;
    Transparent:= True;
  end;

  InstallSpacelbl:= TLabel.Create(WizardForm);
  with InstallSpaceLbl do begin
    Parent:= WizardForm.SelectDirPage;
    SetBounds(ScaleX(0), ScaleY(160), ScaleX(348), ScaleY(14));
    AutoSize:= False;
    Caption:= ExpandConstant('{cm:InstallSpaceCaption} ') + MbOrTb({#NeedInstallSize});
    Color:= clNone;
    Transparent:= True;
  end;

  NeedSpaceLbl:= TLabel.Create(WizardForm);
  with NeedSpaceLbl do begin
    Parent:= WizardForm.SelectDirPage;
    SetBounds(ScaleX(0), ScaleY(176), ScaleX(348), ScaleY(14));
    AutoSize:= False;
    Caption:= ExpandConstant('{cm:NeedSpaceCaption} ') + MbOrTb({#NeedSize});
    Color:= clNone;
    Transparent:= True;
  end;
  WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpSelectDir: begin
      GetFreeSpaceCaption(WizardForm.DirEdit);
    end;
  end;
end;

Пришлось изрядно полазить по чужим скриптам, чтобы слепить это. Там путь установки прописываеться в лейбл и данные о винтах!!!

acer0072 09-09-2014 10:12 2400316

Ещё один вопросик. Вот кусок кода из скрипта

Цитата:

[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl";
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl";

[Run]
Filename: "{app}\ConfigLanguageFromSetup.exe"; Parameters: "DriverSearch {language}"; MinVersion: 0.0,5.0;
Тут привязка языка интерфейса программы, я так понял, что к языку самого установщика. (взят с оригинального кода установщика), т.е. при выборе английского языка установки, ставится англ.язык и т.к.

Вопрос: как привязать к чекбоксам, чтобы выбирался нужный язык (русский и английский)

kotyarko@fb 09-09-2014 13:11 2400381

Цитата:

Цитата Nightwishh
Ребят, а не посмотрите код, всё ли правильно »

На вид - да. Вы просто решили спросить или у вас там что-то не работает и вы обратились за помощью?

Цитата:

Цитата acer0072
Вопрос: как привязать к чекбоксам, чтобы выбирался нужный язык (русский и английский) »

Имеется ввиду язык интерфейса установщика?
А так, то {language} - это константа выбранного языка. То есть, если выбран язык "ru" - на месте константы подставится ru.

acer0072 09-09-2014 14:20 2400405

Имеется ввиду язык самой программы.

Т.е. можно написать вместо Parameters: "DriverSearch {language} - Parameters: "DriverSearch ru, будет устанавливаться нужный язык?

Или может слеш нужен?

Nightwishh 09-09-2014 14:56 2400422

Цитата:

Цитата kotyarko@fb
На вид - да. Вы просто решили спросить »

Хотел просто спросить...Спасибо!

Dodakaedr 09-09-2014 15:50 2400436

Цитата:

Цитата acer0072
Имеется ввиду язык самой программы. »

Для начала вам нужно узнать как именно программа прописывает язык, это может быть по разному: русский - ru, rus, russian; английский - en, eng, english, enu. Потом уже прописываете у себя в скрипте
читать дальше »
Код:

[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl";
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl";

[Run]
Filename: "{app}\ConfigLanguageFromSetup.exe"; Parameters: "DriverSearch {language}"; MinVersion: 0.0,5.0;

или
Код:

[Languages]
Name: "eng"; MessagesFile: "compiler:Default.isl";
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl";

[Run]
Filename: "{app}\ConfigLanguageFromSetup.exe"; Parameters: "DriverSearch {language}"; MinVersion: 0.0,5.0;

или
Код:

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

[Run]
Filename: "{app}\ConfigLanguageFromSetup.exe"; Parameters: "DriverSearch {language}"; MinVersion: 0.0,5.0;



а теперь
Цитата:

Цитата acer0072
как привязать к чекбоксам, чтобы выбирался нужный язык (русский и английский) »

Создаете чекбоксы:
читать дальше »
Код:

[Code]
var
rus, eng: TNewCheckBox;

procedure InitializeWizard();
begin
rus := TNewCheckBox.Create(Form);
  with rus do
  begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(8);
    Top := ScaleY(36);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'Русский';
  end;

eng := TNewCheckBox.Create(Form);
  with eng do
  begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(8);
    Top := ScaleY(36);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'Английский';
  end;


Добавляете чекову функцию для чекбоксов:
читать дальше »
Код:

[Code]
var
rus, eng: TNewCheckBox;

function RusCheck: Boolean;
begin
    Result:=rus.Checked;
end;

function EngCheck: Boolean;
begin
    Result :=eng.Checked;
end;

procedure InitializeWizard();
begin
rus := TNewCheckBox.Create(Form);
  with rus do
  begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(8);
    Top := ScaleY(36);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'Русский';
  end;

eng := TNewCheckBox.Create(Form);
  with eng do
  begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(8);
    Top := ScaleY(36);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'Английский';
  end;



И получаем ответ на ваш вопрос:)
читать дальше »
Код:

[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl";
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl";

[Run]
Filename: "{app}\ConfigLanguageFromSetup.exe"; Parameters: "DriverSearch en"; MinVersion: 0.0,5.0; Check: EngCheck
Filename: "{app}\ConfigLanguageFromSetup.exe"; Parameters: "DriverSearch ru"; MinVersion: 0.0,5.0; Check: RusCheck

[Code]
var
rus, eng: TNewCheckBox;

function RusCheck: Boolean;
begin
    Result:=rus.Checked;
end;

function EngCheck: Boolean;
begin
    Result :=eng.Checked;
end;

procedure InitializeWizard();
begin
rus := TNewCheckBox.Create(Form);
  with rus do
  begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(8);
    Top := ScaleY(36);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'Русский';
  end;

eng := TNewCheckBox.Create(Form);
  with eng do
  begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(8);
    Top := ScaleY(36);
    Width := ScaleX(97);
    Height := ScaleY(17);
    Caption := 'Английский';
  end;


acer0072 09-09-2014 16:09 2400443

Спасибо.

acer0072 10-09-2014 21:04 2401014

Всем доброго вечера. Вопрос! После закрытия установленной программы, она всё ещё висит в трее. Какой прописать код, чтобы при удалении этой программы, сначало убивался данный процесс, а потом удалялась программа?

nik1967 10-09-2014 21:22 2401025

acer0072, в шапке Ссылки на примеры скриптов:/Закрытие процесса

acer0072 10-09-2014 21:36 2401031

Спасибо, будем разбираться

Nordek 10-09-2014 22:52 2401051

Цитата:

Цитата nik1967
в шапке »

nik1967, А пример рабочий?
Пример должен как минимум воспроизводиться, а не выводить "Unknown identifier 'GetLogicalDrives'"

Nightwishh 11-09-2014 00:19 2401092

Всем Здравствуйте! Хочу спросить какой вариант более лучше
Код:

[Setup]
AppName=ауукаукауцацу
AppVerName=вцфвывцычвйц
DefaultDirName={pf}\ывывыувцувцу

[CustomMessages]
avre=надпись

[Code ]
var
  Label1: TLabel;

procedure InitializeWizard();
begin
  Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
    Parent := WizardForm;
    Left := ScaleX(48);
    Top := ScaleY(328);
    Width := ScaleX(31);
    Height := ScaleY(13);
    Caption:= CustomMessage('avre');
  end;
end;

или
Код:

[Setup]
AppName=ауукаукауцацу
AppVerName=вцфвывцычвйц
DefaultDirName={pf}\ывывыувцувцу

[CustomMessages]
avre=надпись

[Code ]
var
  Label1: TLabel;

procedure InitializeWizard();
begin
  Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
    Parent := WizardForm;
    Left := ScaleX(48);
    Top := ScaleY(328);
    Width := ScaleX(31);
    Height := ScaleY(13);
    Caption:= ExpandConstant('{cm:avre} ');
  end;
end;

Знаю что подобный вопрос был здесь гдето, но я необратил тогда на него внимания...Спасибо

nik1967 11-09-2014 11:05 2401224

Цитата:

Цитата Nordek
nik1967, А пример рабочий? »

Не проверял. Был задан вопрос, я нашёл ответ в примерах. Всё.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Возможно поможет ISTask - Библиотека для проверки и завершения процесса прлиложения от Genri.

Nordek 11-09-2014 12:58 2401280

Цитата:

Цитата nik1967
Не проверял. »

Не помешало бы.
#1868, #1860.

El Sanchez, Поправь код в #1361 сообщении.
Там отсутствует:
Код:

function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';

nik1967 11-09-2014 14:43 2401354

Цитата:

Цитата Nordek
Не помешало бы. »

Знаете, любезный, если я пишу/исправляю что-то сам, то безусловно проверяю то, что выкладываю. Ну а тут ситуация сложилась таким образом, что я нашёл пример от уважаемого El Sanchez'а и не подумал, что надо ещё и проверить сей пример.
Мне, как бы это нафиг не надо.

Nordek 11-09-2014 16:19 2401435

nik1967
Цитата:

Цитата nik1967
Знаете, любезный »

По сдержанней мистер nik1967. Я вас прекрасно понимаю.
Это ещё не изрекал нравоучением в сторону acer0072-а, чтоб этот пользователь для начала воспользовался поиском (поиск действительно работает): Помощь » Использование фильтров и поиска на конференции » Использование фильтров в качестве инструмента поиска, Помощь » Использование фильтров и поиска на конференции » Поиск по конференции.
Полагаю: старание быть более вежливым проходит небезуспешно.

Цитата:

Цитата nik1967
Мне, как бы это нафиг не надо. »

Когда мне "нафиг не надо", "не интересно", "нет желания" - просто не пишу: потому что-можно "сморозить" глупость и такое сообщение никакой информативности в себе не может нести.
"Помочь" и "На и отвали" - между собой имеют большую разницу.

И конечно же: Если у пользователя есть пример.
Приложив пример к сообщению, но не прикрепив файлы (если действительно имеют большую необходимость), то этот вопрос: вовсе теряет свою значимость (это действительно раздражает когда приходится создавать кучу картинок, аудио-файлов и прочего контента).

El Sanchez 12-09-2014 09:22 2401734

Цитата:

Цитата Nordek
El Sanchez, Поправь код в #1361 сообщении.
Там отсутствует: »

Nordek, я, пожалуй, его совсем заменю, т.к. содержит ошибки: не проверяется первый процесс из слепка процессов (некритично); ненужный VirtualAllocEx (некритично); неверная декларация GetProcAddress, из-за чего не отработало бы закрытие процесса по истечении таймаута (критично).
читать дальше »

Код:

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
   
TH32CS_SNAPPROCESS = $2;
    INVALID_HANDLE_VALUE = -1;
    PROCESS_TERMINATE = $1;
    PROCESS_CREATE_THREAD = $2;
    PROCESS_QUERY_INFORMATION = $400;
    SYNCHRONIZE = $100000;
    TOKEN_QUERY = $8;
    TOKEN_ADJUST_PRIVILEGES = $20;
    SE_PRIVILEGE_ENABLED = $2;
    TA_FAILED = 0;
    TA_SUCCESS_CLEAN = 1;
    TA_SUCCESS_KILL = 2;
    WM_CLOSE = $10;
    WAIT_OBJECT_0 = $0;
    WAIT_TIMEOUT = $102;
    WAIT_FAILED = $FFFFFFFF;
    SMTO_BLOCK = $1;
    SMTO_ABORTIFHUNG = $2;

type
   
TPROCESSENTRY32 = record
       
dwSize, cntUsage, th32ProcessID: DWORD;
        th32DefaultHeapID: Longint;
        th32ModuleID, cntThreads, th32ParentProcessID: DWORD;
        pcPriClassBase: Longint;
        dwFlags: DWORD;
        szExeFile: array [0..259] of Char;
    end;

    LUID = record
       
LowPart: DWORD;
        HighPart: Longint;
    end;

    LUID_AND_ATTRIBUTES = record
       
Luid: LUID;
        Attributes: DWORD;
    end;

    TOKEN_PRIVILEGES = record
       
PrivilegeCount: DWORD;
        Privileges: array [0..0] of LUID_AND_ATTRIBUTES;
    end;

function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle; external 'CreateToolhelp32Snapshot@kernel32.dll stdcall';
#ifdef UNICODE
function Process32First(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32First{#A}@kernel32.dll stdcall';
function Process32Next(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32Next{#A}@kernel32.dll stdcall';
#else
function Process32First(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32First@kernel32.dll stdcall';
function Process32Next(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32Next@kernel32.dll stdcall';
#endif
function OpenProcess(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; external 'OpenProcess@kernel32.dll stdcall';
function OpenProcessToken(ProcessHandle: THandle; DesiredAccess: DWORD; var TokenHandle: THandle): BOOL; external 'OpenProcessToken@advapi32.dll stdcall';
function GetCurrentProcess(): THandle; external 'GetCurrentProcess@kernel32.dll stdcall';
function LookupPrivilegeValue(lpSystemName, lpName: String; var lpLuid: LUID): BOOL; external 'LookupPrivilegeValue{#A}@advapi32.dll stdcall';
function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL; NewState: TOKEN_PRIVILEGES; BufferLength: DWORD; var PreviousState: TOKEN_PRIVILEGES; var ReturnLength: Longint): BOOL; external 'AdjustTokenPrivileges@advapi32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetProcessImageFileName(hProcess: THandle; var lpImageFileName: Char; nSize: DWORD): DWORD; external 'GetProcessImageFileName{#A}@psapi.dll stdcall';
function GetLogicalDrives(): DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
function QueryDosDevice(lpDeviceName: String; var lpTargetPath: Char; ucchMax: DWORD): DWORD; external 'QueryDosDevice{#A}@kernel32.dll stdcall';
function EnumWindows(lpEnumFunc, lParam: Longint): BOOL; external 'EnumWindows@user32.dll stdcall';
function WaitForSingleObject(hHandle: THandle; dwMilliseconds: DWORD): DWORD; external 'WaitForSingleObject@kernel32.dll stdcall';
function GetProcAddress(hModule: THandle; lpProcName: AnsiString): Longint; external 'GetProcAddress@kernel32.dll stdcall';
function GetModuleHandle(lpModuleName: String): THandle; external 'GetModuleHandle{#A}@kernel32.dll stdcall';
function CreateRemoteThread(hProcess: THandle; lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags: DWORD; var lpThreadId: DWORD): THandle; external 'CreateRemoteThread@kernel32.dll stdcall';
function TerminateProcess(hProcess: THandle; uExitCode: UINT): BOOL; external 'TerminateProcess@kernel32.dll stdcall';
function GetWindowThreadProcessId(hWnd: HWND; var lpdwProcessId: DWORD): DWORD; external 'GetWindowThreadProcessId@user32.dll stdcall';
function SendMessageTimeout(hWnd: HWND; Msg: UINT; wParam, lParam: Longint; fuFlags, uTimeout: UINT; var lpdwResult: Longint): Longint; external 'SendMessageTimeout{#A}@user32.dll stdcall';

/////////////////////////////////////////////////////////
function CharArrayToString(aChar: array of Char): String;
begin
   
Result := '';
    while aChar[Length(Result)] <> #0 do Insert(aChar[Length(Result)], Result, Length(Result)+1);
end;

////////////////////////////////////////////////////////////
function EnumWindowsProc(hwnd: HWND; lParam: Longint): BOOL;
var
   
dwID: DWORD;
    lResult: Longint;
begin
   
Result := True;
    GetWindowThreadProcessId(hwnd, dwID);
    if dwID = lParam then
       
Result := SendMessageTimeout(hwnd, WM_CLOSE, 0, 0, SMTO_BLOCK or SMTO_ABORTIFHUNG, 5000, lResult) <> 0;
end;

//////////////////////////////////////////////////////////////////////////////////
function TerminateApp(const szProcessList: String; const dwTimeout: DWORD): DWORD;
// szProcessList :  process names or full paths of processes delimited by vertical bar, e.g. calc.exe|notepad.exe|c:\hungtest.exe
// dwTimeout.....:  kill timeout in ms
var
   
hProcessSnap, hProc, hToken, hThread, lpProcName: THandle;
    pe32: TPROCESSENTRY32;
    aBuf: array [0..259] of Char;
    bProcFind: Boolean;
    szExeFile, szExePath, szFileName, szDeviceName: String;
    tkp: TOKEN_PRIVILEGES;
    SeDebugNameValue: LUID;
    i, ret: Longint;
    lpThreadId, dwDrives: DWORD;
begin
   
hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if hProcessSnap = INVALID_HANDLE_VALUE then Exit;
    try
        with
TStringList.Create do
        try
           
StringChangeEx(szProcessList, '|', #13#10, True);
            Text := szProcessList;
            //
           
pe32.dwSize := SizeOf(pe32);
            if not Process32First(hProcessSnap, pe32) then Exit;
            repeat
               
bProcFind := False;
                szExeFile := CharArrayToString(pe32.szExeFile);
                for i := 0 to Count-1 do
                begin
                    if
CompareText(szExeFile, ExtractFileName(Strings[i])) = 0 then
                    begin
                       
bProcFind := True;
                        szExePath := Strings[i];
                        Break;
                    end;
                end;
                if not bProcFind then Continue;

                // try open process
               
hProc := OpenProcess(PROCESS_TERMINATE or PROCESS_CREATE_THREAD or PROCESS_QUERY_INFORMATION or SYNCHRONIZE, False, pe32.th32ProcessID);
                if hProc = TA_FAILED then
                begin
                   
// open process token adjust privileges
                   
if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then Exit;
                    if not LookupPrivilegeValue('', 'SeDebugPrivilege', SeDebugNameValue) then Exit;
                    try
                       
// fill token privileges struct
                       
tkp.PrivilegeCount := 1;
                        tkp.Privileges[0].Luid := SeDebugNameValue;
                        tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

                        // set debug privileges
                       
if not AdjustTokenPrivileges(hToken, False, tkp, SizeOf(tkp), tkp, ret) then Exit;

                        // try open process with debug privileges
                       
hProc := OpenProcess(PROCESS_TERMINATE or PROCESS_CREATE_THREAD or PROCESS_QUERY_INFORMATION or SYNCHRONIZE, False, pe32.th32ProcessID);
                        if hProc = TA_FAILED then Exit;
                    finally
                       
tkp.Privileges[0].Attributes := 0;
                        AdjustTokenPrivileges(hToken, False, tkp, SizeOf(tkp), tkp, ret);
                        CloseHandle(hToken);
                    end;
                end;

                // if szProcess is full path
               
if CompareText(szExePath, szExeFile) <> 0 then
                begin
                   
GetProcessImageFileName(hProc, aBuf[0], SizeOf(aBuf));
                    szFileName := CharArrayToString(aBuf);
                    dwDrives := GetLogicalDrives();
                    for i := 2 to 25 do if dwDrives and (1 shl i) <> 0 then
                    begin
                       
QueryDosDevice(Format('%s:', [Chr(Ord('A') + i)]), aBuf[0], SizeOf(aBuf));
                        szDeviceName := CharArrayToString(aBuf);
                        if Pos(szDeviceName, szFileName) = 0 then Continue;
                        StringChangeEx(szFileName, szDeviceName, Format('%s:', [Chr(Ord('A') + i)]), True);
                        if CompareText(szExePath, szFileName) = 0 then Break;
                    end;
                    if CompareText(szExePath, szFileName) <> 0 then
                    begin
                       
CloseHandle(hProc);
                        Continue;
                    end;
                end;

                // try stop process
               
try
                    if not
EnumWindows(CallbackAddr('EnumWindowsProc'), pe32.th32ProcessID) then
                    begin
                        if
TerminateProcess(hProc, 0) then Result := TA_SUCCESS_KILL;
                    end else case WaitForSingleObject(hProc, dwTimeout) of
                       
WAIT_OBJECT_0: Result := TA_SUCCESS_CLEAN;
                        WAIT_TIMEOUT: try
                           
lpProcName := GetProcAddress(GetModuleHandle('kernel32.dll'), 'ExitProcess');
                            if lpProcName = 0 then Exit;
                            hThread := CreateRemoteThread(hProc, 0, 0, lpProcName, 0, 0, lpThreadId);
                            case WaitForSingleObject(hThread, dwTimeout) of
                               
WAIT_OBJECT_0: Result := TA_SUCCESS_CLEAN;
                                WAIT_TIMEOUT, WAIT_FAILED: if TerminateProcess(hProc, 0) then Result := TA_SUCCESS_KILL;
                            end;
                        finally
                           
CloseHandle(hThread);
                        end;
                    end;
                finally
                   
CloseHandle(hProc);
                end;
            until not Process32Next(hProcessSnap, pe32);
        finally
           
Free;
        end;
    finally
       
CloseHandle(hProcessSnap);
    end;
end;

/////////////////////////////
procedure InitializeWizard();
begin
   
TerminateApp('NvXDSync.exe', 5000);
end;


Irenis 12-09-2014 12:49 2401845

Всем привет :) Возник один вопросик, очень надеюсь на помощь :blush2: Мне нужно в самом обычном установщике в конце установки (то есть в последнем окошке) вставить текст, желательно красными буквами. Можно ли это как то реализовать попроще, например, просто вставив в скрипт определенный код? Спасибо.

kotyarko@fb 12-09-2014 14:17 2401888

Цитата:

Цитата Irenis
Мне нужно в самом обычном установщике в конце установки (то есть в последнем окошке) вставить текст, желательно красными буквами. Можно ли это как то реализовать попроще, например, просто вставив в скрипт определенный код? »

А есть какой-то другой способ? без дописания кода? :)
Код:

[Сode]
Procedure InitializeWizard();
var
 FinishLabel: TLabel;
begin
 FinishLabel := TLabel.Create(WizardForm);
 FinishLabel.Parent := FinishedPage;
 FinishLabel.Left := 50;
 FinishLabel.Top := 50;
 FinishLabel.Width := 150;
 FinishLabel.Height := 20;
 FinishLabel.Font.Color := clRed;
 FinishLabel.Caption := 'Надпись красным цветом';
 FinishLabel.Autosize := False;
 FinishLabel.WordWrap := True;
end;


Irenis 12-09-2014 16:25 2401952

kotyarko@fb, спасибо :) Только у меня почему то на строчке FinishLabel.Parent := FinishedPage; ошибка. А если удалить эту строчку, то при установке не появляется надпись.

kotyarko@fb 12-09-2014 17:33 2401980

Цитата:

Цитата Irenis
Только у меня почему то на строчке FinishLabel.Parent := FinishedPage; ошибка. »

Это мой косяк, извиняюсь, не проверил.
Замените проблемную строку на эту:
Код:

FinishLabel.Parent := WizardForm.FinishedPage;

Irenis 12-09-2014 18:11 2401990

kotyarko@fb, спасибо, теперь надпись появилась, только она у меня вся не помещается :blush2: Как сделать так, чтобы эта надпись была в несколько строчек? И можно ли сделать, чтоб сами буквы были немного побольше?
Вообще я пока разобралась только в этих строчках, за что они отвечают:
FinishLabel.Left := 50;
FinishLabel.Top := 50;

А в этих значения меняла, что то никаких изменений не заметила:
FinishLabel.Width := 150;
FinishLabel.Height := 20;

Shkutu 12-09-2014 20:25 2402049

Irenis, предполагаю, что дело не в том, что надпись не помещается, а в том, что ее не видно.
Попробуйте так:
читать дальше »

Код:

[Сode]
Procedure InitializeWizard();
var
 FinishLabel: TLabel;
begin
 FinishLabel := TLabel.Create(WizardForm);
 FinishLabel.Parent := WizardForm.FinishedLabel.parent;
 FinishLabel.Left := WizardForm.FinishedLabel.left; //координата X левого верхнего угла
 FinishLabel.Top := WizardForm.FinishedLabel.top + WizardForm.FinishedLabel.height + ScaleY(10); //координата Y левого верхнего угла
 FinishLabel.Width := WizardForm.FinishedLabel.width; //ширина (длина) контрола
 FinishLabel.Height := ScaleY(50); //высота контрола
 FinishLabel.Font.Color := clRed; //цвет
 FinishLabel.WordWrap := True; //перенос по словам, чтоб выводить в несколько строк
 FinishLabel.Font.size:= FinishLabel.Font.size*2; //буквы в 2 раза крупнее
 FinishLabel.Caption := 'Надпись красным цветом';
end;


Dodakaedr 12-09-2014 23:56 2402136

Всем привет! Подскажите, реально ли задать идентификатор программы (AppID) во время установки? Задать в зависимости от выбранной кнопки?
читать дальше »
Код:

[Setup]
AppId={code:GetAppID}

[Co de]
procedure GetAppID(id: string): String;
begin
if Bus.Checked then
id := '{{CA297C8C-88CC-4708-9177-4CD49DBE87B4}';
if Eng.Checked then
id := '{{8177DA7A-1D72-4C0A-9B22-BA030AEF3C58}';
if Ext.Checked then
id := '{{A9E0C8A3-E5C7-4D5D-A893-663D09782286}';
if Net.Checked then
id := '{{D72E97FC-7702-4385-9679-0E3515AB922C}';
end;


kotyarko@fb 13-09-2014 00:14 2402142

Цитата:

Цитата Dodakaedr
Подскажите, реально ли задать идентификатор программы (AppID) во время установки? Задать в зависимости от выбранной кнопки? »

Да.

читать дальше »
Код:

[Setup]
AppId={code:GetAppID}

[Сode]
var 
  32RadioButton: TNewRadioButton;
  64RadioButton: TNewRadioButton;

function GetAppID(const Value: string): string;
var
  AppID: string;
begin
  if Assigned(Ver32RadioButton) then
  begin
    AppID := 'FDFD4A34-4A4C-4795-9B0E-04E5AB0C374D';  //это то, что будет приниматься за AppID до того, пока не выбран вариант радиоБаттонов.
    if 32RadioButton.Checked then
      Result := AppID + '_32'
    else
      Result := AppID + '_64';
  end;
end;

procedure InitializeWizard;
var
  Page: TWizardPage;
begin
  Page := CreateCustomPage(wpWelcome, '2', '1');
  32RadioButton := TNewRadioButton.Create(WizardForm);
  32RadioButton.Parent := Page.Surface;
  32RadioButton.Checked := True;
  32RadioButton.Caption := 'Install 32-bit version';
  64RadioButton := TNewRadioButton.Create(WizardForm);
  64RadioButton.Parent := Page.Surface;
  64RadioButton.Top := 32RadioButton.Top + 32RadioButton.Height + 4;
  64RadioButton.Caption := 'Install 64-bit version';
end;


p.s. а зачем его менять?

Dodakaedr 13-09-2014 17:51 2402396

Цитата:

Цитата kotyarko@fb
p.s. криво лежит под тегом code, поэтому вставил так. »

Вставте [u] [ /u] между Co и de
Код:

[Code]
Цитата:

Цитата kotyarko@fb
p.p.s. а зачем его менять? »

В моем проэкте 4 версии программы, вот и надо задать для каждой программы отдельный идентификатор:)

kotyarko@fb 13-09-2014 17:57 2402398

Цитата:

Цитата Dodakaedr
Вставте [u] [ /u] между Co и de »

Нет, прикол не в этом. Секция [Setup], почему-то, выделялась и автоматически выносилась за теги кода и спойлера.

Dodakaedr 13-09-2014 18:02 2402399

Цитата:

Цитата kotyarko@fb
Нет, прикол не в этом »

Именно в нем:)
с [u] [ /u]:
Код:

[Setup]
AppId={code:GetAppID}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}

[Code]

без:
[code]
[Setup]
AppId={code:GetAppID}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppPublisher={#MyAppPublisher}

Код:



kotyarko@fb 13-09-2014 18:26 2402407

Цитата:

Цитата Dodakaedr
Именно в нем »

Не. Вот сейчас без [u][ /u] нормально отредактировалось.

Dodakaedr 13-09-2014 19:16 2402425

Подскажите, как можно задать имя программы в деинсталяторе в зависимости от кнопки?

Nordek 13-09-2014 19:52 2402437

Цитата:

Цитата kotyarko@fb
нормально отредактировалось. »

Что у вас нормально отредактировалось?
В данном случае: у вас в [Code] - вместо латинской "C", русская "С". Так делать вообще не следует.

Прочтите здесь и здесь.
Потренироваться можете здесь.

kotyarko@fb 13-09-2014 21:21 2402467

Nordek, спасибо, буду просто приписывать какой-либо символ к названию секции.

AlexALSP 14-09-2014 22:21 2402890

Добрый вечер. Подскажите пожалуйста, как сделать фоновый звук во время установки, что бы играла какая нибудь композиция с начала установки и до нажатия кнопки Завершить.

Если есть готовый код , дайте пожалуйста , а то уже листать устал 3 часа глаза как у рака.

Вот код на фоновый слайд но нужно добавить музон.

Просьба к знатокам , посмотреть данный код , может где накосячил , но он как не странно работате , но все же .

И сюда же прикрутить либо отдельным блоком добавить код на воспроизведение фонового звука mp3 в процессе установки.

Задачи от кода.:

1. Фоновая композиция от начала установки до нажатия кнопки Завершить
2. Слайдер изображений во время установки
3. HTTP урл

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

Код:



// кликабельная текстовая http-ссылка в левом нижнем углу инсталлера и слайдер
var
MouseLabel,SiteLabel: TLabel;

procedure SiteLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://apocalypse.moy.su', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode)
end;

procedure SiteLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clRed
end;

procedure SiteLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clBlue
end;

procedure SiteLabelMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clGreen
end;

procedure SiteLabelMouseMove2(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
SiteLabel.Font.Color:=clBlue
end;


type
  TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
  TimerID: LongWord;
  CurrentPicture:integer;
  PicList: TStringlist;
  BackgroundForm: TForm;

function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function GetSystemMetrics(nIndex:Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall';
procedure InitializeSlideShow(Hwnd:Thandle; l,t,w,h:integer;Animate:boolean; Stretch:integer); external 'InitializeSlideShow@files:isslideshow.dll stdcall';
procedure DeinitializeSlideShow; external 'DeinitializeSlideShow@files:isslideshow.dll stdcall';
procedure ShowImage(ipath:PAnsiChar; Effect:integer); external 'ShowImage@files:isslideshow.dll stdcall';

procedure InitializeWizard();
begin
  BackgroundForm:= TForm.Create(nil);
  BackgroundForm.BorderStyle:= bsNone;
  BackgroundForm.Color:=clBlack;
  BackgroundForm.SetBounds(0, 0, GetSystemMetrics(0), GetSystemMetrics(1))
  BackgroundForm.Visible:=True;
  BackgroundForm.enabled:= false;
  PicList:=tstringlist.Create;
  ExtractTemporaryFile('Back.jpg');
  ExtractTemporaryFile('1.jpg');
  ExtractTemporaryFile('2.jpg');
  ExtractTemporaryFile('3.jpg');
  ExtractTemporaryFile('4.jpg');
  ExtractTemporaryFile('5.jpg');
  ExtractTemporaryFile('6.jpg');
  ExtractTemporaryFile('7.jpg');
  ExtractTemporaryFile('8.jpg');
  ExtractTemporaryFile('9.jpg');
  ExtractTemporaryFile('10.jpg');
  ExtractTemporaryFile('11.jpg');
 
  piclist.add(ExpandConstant('{tmp}') + '\1.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\2.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\3.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\4.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\5.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\6.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\7.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\8.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\9.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\10.jpg');
  piclist.add(ExpandConstant('{tmp}') + '\11.jpg');

  BackgroundForm.show;
  InitializeSlideShow(BackgroundForm.Handle, 0, 0, GetSystemMetrics(0), GetSystemMetrics(1), true, 1);
  ShowImage(ExpandConstant('{tmp}') + '\Back.jpg', 1);


MouseLabel:=TLabel.Create(WizardForm)
MouseLabel.Width:=WizardForm.Width
MouseLabel.Height:=WizardForm.Height
MouseLabel.Autosize:=False
MouseLabel.Transparent:=True
MouseLabel.OnMouseMove:=@SiteLabelMouseMove2
MouseLabel.Parent:=WizardForm

SiteLabel:=TLabel.Create(WizardForm)
SiteLabel.Left:=10
SiteLabel.Top:=330
SiteLabel.Cursor:=crHand
SiteLabel.Font.Color:=clBlue
SiteLabel.Caption:='Alex Ltd and System Perverted 2000 - 2014'
SiteLabel.OnClick:=@SiteLabelOnClick
SiteLabel.OnMouseDown:=@SiteLabelMouseDown
SiteLabel.OnMouseUp:=@SiteLabelMouseUp
SiteLabel.OnMouseMove:=@SiteLabelMouseMove
SiteLabel.Parent:=WizardForm

end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
  thePicture: integer;
  delta: double;
begin
  delta := WizardForm.ProgressGauge.Max / ( piclist.Count );
  thePicture := round( WizardForm.ProgressGauge.Position / delta );
  if( thePicture <> CurrentPicture  ) then
  begin
    CurrentPicture := thePicture;
    try
      ShowImage(piclist.strings[CurrentPicture - 1], 1);
    except
    end;
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  If CurPageID=wpInstalling then
  begin
    with WizardForm do
    begin
      hide;
      MainPanel.Visible:=False;
      Bevel1.Visible:=False;
      setbounds(ScaleX(GetSystemMetrics(0)-420), ScaleY(GetSystemMetrics(1)-167), ScaleX(395), ScaleY(142));
      InnerNotebook.setbounds(ScaleX(10), ScaleY(10), ScaleX(370), InnerNotebook.height);
      StatusLabel.setbounds(ScaleX(0), ScaleY(0), InnerNotebook.Width, StatusLabel.height);
      FileNameLabel.setbounds(ScaleX(0), ScaleY(20), InnerNotebook.Width, FileNameLabel.height);
      ProgressGauge.Top:=ScaleY(40);
      ProgressGauge.Width:=InnerNotebook.Width;
      CancelButton.Left:=ScaleX(154);
      CancelButton.Top:=ScaleY(80);
      CancelButton.bringtofront;
      show;
    end;
    TimerID:=SetTimer(0, 0, 200, WrapTimerProc(@OnTimer, 4));
  end;

if CurPageID=wpFinished then
  begin
    WizardForm.Visible:=False;
    WizardForm.setbounds((GetSystemMetrics(0)-WizardForm.Width) div 2, (GetSystemMetrics(1)-WizardForm.Height) div 2, ScaleX(502), ScaleY(392));
    WizardForm.Visible:=True;
    showimage(ExpandConstant('{tmp}') + '\Back.jpg', 1);
  end;
end;

procedure DeinitializeSetup();
begin
 DeinitializeSlideShow;
 KillTimer(0, TimerID);
end;


Dodakaedr 14-09-2014 23:16 2402910

Цитата:

Цитата AlexALSP
Если есть готовый код , дайте пожалуйста »

Вот держите Bass Module

Nightwishh 15-09-2014 00:46 2402920

А можно перенести всю информацию из WizardForm.StatusLabel на свой лейбл?
Код:

Label1.Caption:= WizardForm.StatusLabel.Caption
неподойдёт т.к. кроме рапаковки архивов из секции кода, туда выводятся сообщения из секции [RUN] и [Icons] и т.д. С нетерпением жду ответа, Спасибо...

saurn 15-09-2014 02:49 2402936

Цитата:

Цитата Nightwishh
А можно перенести всю информацию из WizardForm.StatusLabel на свой лейбл? »

Можно так, например:
читать дальше »
Код:

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


[Files]
Source: {fonts}\*; DestDir: {app}; Flags: external;


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

const
   
GWL_WNDPROC = -4;
    WM_PAINT    = $000F;


type
   
WPARAM = Integer;
    LPARAM = Integer;
    LRESULT = Integer;
    TFNWndProc = Integer;


function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint;
    external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
    external 'CallWindowProc{#A}@user32.dll stdcall';


var
 
OldStaticProcAddr: Longint;


function StaticWindowdProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
var
   
_String: String;
begin
    if
Msg = WM_PAINT then
      begin
         
_String := WizardForm.StatusLabel.Caption
          WizardForm.Caption := _String; //для теста
     
end;

    Result:= CallWindowProc(OldStaticProcAddr, hWnd, Msg, wParam, lParam);
end;


procedure InitializeWizard();
begin
   
OldStaticProcAddr := SetWindowLong(WizardForm.StatusLabel.Handle, GWL_WNDPROC, CallbackAddr('StaticWindowdProc'));
end;


procedure DeinitializeSetup();
begin
   
SetWindowlong(WizardForm.StatusLabel.Handle, GWL_WNDPROC, OldStaticProcAddr);
end;


Nordek 15-09-2014 08:08 2402965

Цитата:

Цитата AlexALSP
Если есть готовый код , дайте пожалуйста , а то уже листать устал 3 часа глаза как у рака. »

#1905

Irenis 15-09-2014 14:05 2403075

Добрый день :) Подскажите пожалуйста, есть ли такой код, который бы запрещал изменять путь установки программы? Мне нужно создать установщик, который бы установил программу именно туда, куда я укажу, а конкретнее в C:\ProgramData. Можно ли это как то осуществить? Спасибо.

Shkutu 15-09-2014 14:40 2403090

Irenis, если вообще не выводить страницу выбора пути установки
Код:

[Setup]
DefaultDirName={pf}\{#MyAppName}
DisableDirPage=yes

Ну а если выводить, то
Код:

[Setup]
DefaultDirName={pf}\{#MyAppName}
DisableDirPage=no

[Сode]
procedure InitializeWizard;
begin
 WizardForm.DirEdit.enabled:=false;
end;


ispolin 15-09-2014 15:35 2403101

Подскажите как реализовать в Inno
нужно, чтобы после окна выбора компонентов появлялось окно для записи пользовательских данных в определённую ветку реестра
на подобии

Irenis 15-09-2014 16:12 2403122

Shkutu, спасибо :) А какой код прописать, чтобы программа автоматически установилась по пути C:\ProgramData?

Nordek 15-09-2014 16:20 2403126

Irenis,
Вариант 1
Код:

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

[Code]
procedure InitializeWizard();
begin
 
WizardForm.DirBrowseButton.Enabled := False;
  WizardForm.DirEdit.Enabled := False;
end;

Вариант 2
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Files]
; ** Назначение установки основной программы по-умолчанию (с возможностью выбора каталога для установки) **
; Пример для файла:

Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion
; Пример для целой папки:
Source: compiler:Examples\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
;+
; ** Неизменное назначение установки в Program Data (без возможности выбора каталога, жёсткое привязывание назначения для копирования содержимого) **
; Пример для файла:

Source: compiler:Examples\MyProg.exe; DestDir: {commonappdata}\My Program; Flags: ignoreversion
; Пример для целой папки:
Source: compiler:Examples\*; DestDir: {commonappdata}\My Program; Flags: ignoreversion recursesubdirs createallsubdirs


ispolin, UserInfoPage=true т.е

Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UserInfoPage=true


ispolin 15-09-2014 16:42 2403135

Nordek, не то...
я могу конечно жёстко прописать через скрипт
[Registry]
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegOrg; ValueData: Comp
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegUser; ValueData: User

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

Shkutu 15-09-2014 17:10 2403147

Цитата:

Цитата Irenis
автоматически установилась по пути C:\ProgramData »

просто поменяйте значение DefaultDirName на тот путь, который нужен
Код:

[Setup]
DefaultDirName=C:\ProgramData
DisableDirPage=yes

Во втором варианте (с выводом страницы) аналогично.
ispolin, попробуйте что-то вроде
читать дальше »

Код:

[Registry]
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegOrg; ValueData:{code:GetRegData|RegOrg}
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegUser; ValueData: {code:GetRegData|RegUser}

[Сode]
function GetRegData(param:string):string;
begin
 case param of
  'RegOrg': result:=UserDataPage.values[0];
  'RegUser': result:=UserDataPage.values[1];
 end;
end;

procedure InitializeWizard;
begin
 UserDataPage:=CreateInputQueryPage(ReportServerDataPage.id,
  'Данные организации', 'Введите данные организации',
  'Введите данные организации');
 UserDataPage.Add('Организация', false);
 UserDataPage.Add('Пользователь', false);
end;


saurn 15-09-2014 17:42 2403154

ispolin
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
UserInfoPage=true
DefaultUserInfoName=
DefaultUserInfoOrg=


[Registry]
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegOrg; ValueData: {code:SetUserInfo|user};
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegUser; ValueData: {code:SetUserInfo|org};


[Code]
function SetUserInfo( const Value: String ): String;
begin
    case
Value of
       
'user': Result := WizardForm.UserInfoNameEdit.Text;
        'org': Result := WizardForm.UserInfoOrgEdit.Text;
    end;
end;


ispolin 15-09-2014 17:51 2403160

Shkutu,


saurn, окошко вообще не появилось для ввода данных

saurn 15-09-2014 17:56 2403167

ispolin, переменная UserDataPage не определена. Добавьте в начало секции Code
Код:

var
    UserDataPage: TInputQueryWizardPage;


ispolin 15-09-2014 18:21 2403184

saurn, дальше..


saurn 15-09-2014 18:42 2403198

ispolin, вместо ReportServerDataPage укажите ID страницы, после которой необходимо отобразить вашу кастомную страницу:
Код:

UserDataPage:=CreateInputQueryPage(wpSelectComponents,
  'Данные организации', 'Введите данные организации',
  'Введите данные организации');


Nordek 15-09-2014 18:45 2403199

ispolin,
Код:

[Setup]
AppName=My Program
AppPublisher=My Company
AppVersion=1.0
DefaultDirName={pf}\My Program

[Registry]
Root: HKCU; SubKey: Software\{#SetupSetting("AppName")}\{#SetupSetting("AppPublisher")}; ValueType: string; ValueName: UserName; ValueData: {code:SetUser}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCU; SubKey: Software\{#SetupSetting("AppName")}\{#SetupSetting("AppPublisher")}; ValueType: string; ValueName: Organization; ValueData: {code:SetOrg}; Flags: uninsdeletevalue uninsdeletekeyifempty

[CustomMessages]
Caption=Заголовок
Description=Описание
User=&Имя пользователя:
Organization=&Организация:

[Code]
var
 
UserPage: TWizardPage;
  UserNameLabel, OrganizationLabel: TLabel;
  UsernameEdit, OrganizationEdit: TNewEdit;

procedure InitializeWizard();
begin
 
UserPage := CreateCustomPage(wpInfoBefore, ExpandConstant('{cm:Caption}'), ExpandConstant('{cm:Description}'));

  UserNameLabel := TLabel.Create(WizardForm);
  with UserNameLabel do
  begin
   
Parent := UserPage.Surface;
    Caption := ExpandConstant('{cm:User}');
    Transparent := False;
    Left := ScaleX(16);
    Top := ScaleY(40);
  end;

  OrganizationLabel := TLabel.Create(WizardForm);
  with OrganizationLabel do
  begin
   
Parent := UserPage.Surface;
    Caption := ExpandConstant('{cm:Organization}');
    Transparent := False;
    Left := ScaleX(16);
    Top := ScaleY(96);
  end;

  UsernameEdit := TNewEdit.Create(WizardForm);
  with UsernameEdit do
  begin
   
Parent := UserPage.Surface;
    Left := ScaleX(16);
    Top := ScaleY(56);
    Width := ScaleX(385);
    Height := ScaleY(21);
    Text := ExpandConstant('{sysuserinfoname}');
  end;

  OrganizationEdit := TNewEdit.Create(WizardForm);
  with OrganizationEdit do
  begin
   
Parent := UserPage.Surface;
    Left := ScaleX(16);
    Top := ScaleY(112);
    Width := ScaleX(385);
    Height := ScaleY(21);
    Text := ExpandConstant('{sysuserinfoorg}');
  end;
end;

function SetUser(Param: String): String;
begin
   
Result := Format('%s', [UsernameEdit.Text]);
end;

function SetOrg(Param: String): String;
begin
   
Result := Format('%s', [OrganizationEdit.Text]);
end;


ispolin 15-09-2014 18:50 2403201

saurn, отлично, мы это сделали!

ispolin 15-09-2014 19:38 2403218

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

Dodakaedr 15-09-2014 19:40 2403219

Цитата:

Цитата ispolin
ой осталась самая малость
что и где прописать, чтобы при деинсталяции удалялись добавленные ключи из реестра? »

Добавить Flags
Код:

[Registry]
Root: HKLM; SubKey: SOFTWARE\1C; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegOrg; ValueData:{code:GetRegData|RegOrg}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\1C\1Cv7; ValueType: string; ValueName: RegUser; ValueData: {code:GetRegData|RegUser}; Flags: uninsdeletevalue uninsdeletekeyifempty


Nightwishh 15-09-2014 19:58 2403229

Цитата:

Цитата saurn
Можно так, например: »

Спасибо, неплохой вариант.

Nightwishh 16-09-2014 00:07 2403321

saurn Ой, появилась одна проблема
Код:

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

[Files]
Source: {fonts}\*; DestDir: {app}; Flags: external

[ Code]
type
  WPARAM = Integer;
  LPARAM = Integer;
  LRESULT = Integer;
  TFNWndProc = Integer;

function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProcA@user32.dll stdcall';

var
  OldStaticProcAddr: Longint;
  Label1: TLabel;

function StaticWindowdProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
var
  _String: String;
begin
  if Msg = $000F then begin
    _String:= WizardForm.StatusLabel.Caption
    Label1.Caption:= _String; //для теста
  end;
  Result:= CallWindowProc(OldStaticProcAddr, hWnd, Msg, wParam, lParam);
end;

procedure InitializeWizard();
begin
  OldStaticProcAddr:= SetWindowLong(WizardForm.StatusLabel.Handle, -4, CallbackAddr('StaticWindowdProc'));


  Label1:= TLabel.Create(WizardForm);
  with Label1 do
  begin
    Parent:= WizardForm.InstallingPage;
    AutoSize:= False;
    Left := ScaleX(0);
    Top := ScaleY(0);
    Width := ScaleX(417);
    Height := ScaleY(14);
  end;
//  WizardForm.OuterNotebook.Hide;
end;

procedure DeinitializeSetup();
begin
  SetWindowlong(WizardForm.StatusLabel.Handle, -4, OldStaticProcAddr);
end;

При
Код:

WizardForm.OuterNotebook.Hide;
Лейбл пустой, и на WizardForm точно также было...

saurn 16-09-2014 12:58 2403457

Nightwishh, ага, не дружит с невидимыми окнами, есть такое. Тут присутствует другой вариант.

Nightwishh 16-09-2014 13:32 2403472

saurn, Но там нет статуса, как я понял. Там путь и строкой ниже имя файла. Хотелось бы сделать этот статус, так как после распаковки работает секция [Run], а устанавливать всё это через код невыгодно.

AlexALSP 16-09-2014 17:36 2403539

Подскажите еще один момент.

Задача:

1. копирование фалов
2. копирование файла , если они есть то делать имяфайла.bkp

Есть Выбор установки:

Программы (жесткий выбор)
Установить 123.dll
Установить 345.dll

Программы (с возможностью выбрать или снять выделение)
Установка 123.dll
Установка 345.dll

Вотр тут если выбрана установка второго пункта делать бэкап файлов с первого пункта
Если второй пункт не выбран , ничего не делать.


Вроде просто описал , подсобите ребята, кто знает как воплотить.

Dodakaedr 17-09-2014 08:32 2403781

Подскажите как правильно экспортировать ключ реестра на этапе InitializeSetup? Это не работает. Надо экспортировать в папку где находиться инсталятор.
Код:

function InitializeSetup(): Boolean;
var
RCode: Integer;
begin
Exec( ExpandConstant( '{win}\regedit.exe' ), '/e Soft.reg ""HKEY_LOCAL_MACHINE\SOFTWARE\Soft\Drivers""', ExpandConstant( '{src}\Data\Settings' ), SW_HIDE, ewNoWait, RCode );
Result:=False;
end;

С экспортом разобрался, вот только не могу указать папку для экспорта {src}\Data\Settings
Код:

function InitializeSetup(): Boolean;
var
RCode: Integer;
RegKey: String;
begin
RegKey := 'HKEY_LOCAL_MACHINE\SOFTWARE\Soft\Drivers';
Exec( ExpandConstant( '{win}\regedit.exe' ), '-ea Soft.reg ' + AddQuotes( RegKey ), ExpandConstant( '{src}\Data\Settings' ), SW_HIDE, ewWaitUntilTerminated, RCode );
Result:=False;
end;


R.i.m.s.k.y. 17-09-2014 09:31 2403811

Dodakaedr,
Exec( ExpandConstant( '{win}\regedit.exe' ), '-ea ' + ExpandConstant( '{src}\Data\Settings\' ) + 'Soft.reg ' + AddQuotes( RegKey ) , ExpandConstant( '{src}\Data\Settings' ), SW_HIDE, ewWaitUntilTerminated, RCode );

Dodakaedr 17-09-2014 19:13 2404082

R.i.m.s.k.y., Не работает.

vint56 17-09-2014 20:12 2404109

astafev_roma, все работает на обычной версий проверил 5.42
читать дальше »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[code]
function ReleaseCapture(): Longint; external 'ReleaseCapture@user32.dll stdcall';

procedure LabelOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(WizardForm.Handle,$0112,$F012,0)
end;

procedure InitializeWizard();
begin
with WizardForm do begin
BorderStyle:=bsNone;
Bevel.Hide;
InnerNotebook.Hide;
OuterNotebook.Hide;
Width:=ScaleX(791);
Height:=ScaleY(291);
Position:=poScreenCenter;
end;
//Создаем лейбл на всю форму, чтоб ее можно было двигать
with TLabel.Create(WizardForm) do begin
Parent:=WizardForm;
AutoSize:=False;
Top:=0;
Left:=0;
Width:=WizardForm.Width;
Height:= WizardForm.Height
Transparent:=True;
OnMouseDown:=@LabelOnMouseDown;
end;
end;

astafev_roma 17-09-2014 20:21 2404111

Цитата:

Цитата vint56
все работает на обычной версий »

ну да для лейбла он работает, а для картинок на стандарте нет (у меня фон картинкой сделан и соответственно ее и двигать нужно).

R.i.m.s.k.y. 17-09-2014 21:05 2404125

Dodakaedr, , поставь SW_SHOW и покажи значение SysErrorMessage(RCode)

Dodakaedr 17-09-2014 21:19 2404129

Цитата:

Цитата R.i.m.s.k.y.
поставь SW_SHOW и покажи значение SysErrorMessage(RCode) »

Ошибок нету, но и экспорт не происходит
читать дальше »
Код:

#define MyAppName "My programm"
#define MyAppVersion "1.5"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
OutputDir=.
Compression=lzma
SolidCompression=yes
VersionInfoDescription={#MyAppName}
VersionInfoVersion={#MyAppVersion}

[Code]
function InitializeSetup(): Boolean;
var
RCode: Integer;
RegKey: String;
begin
RegKey := 'HKEY_CLASSES_ROOT\.mp3';
Exec( ExpandConstant( '{win}\regedit.exe' ), '-ea ' + ExpandConstant( '{src}\Data\Settings\' ) + 'Soft.reg ' + AddQuotes( RegKey ) , ExpandConstant( '{src}' ), SW_SHOW, ewWaitUntilTerminated, RCode );
Result:=False;
end;


El Sanchez 18-09-2014 10:22 2404263

Цитата:

Цитата Dodakaedr
Ошибок нету, но и экспорт не происходит »

Dodakaedr, {src} может быть путем с пробелами, поэтому комстрока не отработает. И папку нужно проверять на наличие.
Код:

function InitializeSetup(): Boolean;
var
   
RCode: Integer;
    PathName, RegKey: String;
begin
   
PathName := ExpandConstant('{src}\Data\Settings');
    RegKey := 'HKEY_CLASSES_ROOT\.mp3';
    if DirExists(PathName) then
       
Exec('regedit.exe', Format('-ea "%s\Soft.reg" "%s"', [PathName, RegKey]), '', SW_SHOW, ewWaitUntilTerminated, RCode);
    Result := False;
end;


Dodakaedr 18-09-2014 13:39 2404366

Цитата:

Цитата El Sanchez
И папку нужно проверять на наличие. »

Это обязательно? Потому что её не будет изначально.

Хотя можно создать, но опять же не создает.
Код:

function InitializeSetup(): Boolean;
var
    RCode: Integer;
    PathName, RegKey: String;
begin
CreateDir(ExpandConstant( '{src}\Data\Settings' ));
PathName := ExpandConstant( '{src}\Data\Settings' );
RegKey := 'HKEY_CLASSES_ROOT\.mp3';
if DirExists(PathName) then
  Exec('regedit.exe', Format('-ea "%s\Soft.reg" "%s"', [PathName, RegKey]), '', SW_SHOW, ewWaitUntilTerminated, RCode);
Result := False;
end;

Если указать CreateDir(ExpandConstant( '{src}\Data' )); то создает, а две не создает, можно как-то сделать чтобы создавалась {src}\Data\Settings

P.S. Работает. Сделал так:
читать дальше »
Код:

function InitializeSetup(): Boolean;
var
    RCode: Integer;
    PathName, RegKey: String;
begin
CreateDir(ExpandConstant( '{src}\Data'));
CreateDir(ExpandConstant( '{src}\Data\Settings'));
PathName := ExpandConstant( '{src}\Data\Settings' );
RegKey := 'HKEY_CLASSES_ROOT\.mp3';
if DirExists(PathName) then
  Exec('regedit.exe', Format('-ea "%s\Soft.reg" "%s"', [PathName, RegKey]), '', SW_SHOW, ewWaitUntilTerminated, RCode);
Result := False;
end;



Теперь другой вопрос возник: с папками разобрались, а как эспортировать 2,3 и более ключей в один reg файл?

nik1967 18-09-2014 15:40 2404457

Цитата:

Цитата Dodakaedr
с папками разобрались »

Так проще :)

Код:

function InitializeSetup(): Boolean;
var
  RCode: Integer;
  PathName, RegKey: String;
begin
  PathName:= ExpandConstant('{src}\Data\Settings');
  ForceDirectories(PathName);
  RegKey:= 'HKEY_CLASSES_ROOT\.mp3';
    if DirExists(PathName) then
      Exec('regedit.exe', Format('-ea "%s\Soft.reg" "%s"', [PathName, RegKey]), '', SW_SHOW, ewWaitUntilTerminated, RCode);
  Result:= False;
end;


Dodakaedr 18-09-2014 15:43 2404462

Цитата:

Цитата nik1967
Так проще :) »

Действительно :) а по поводу ключей не подскажите?

audiofeel 18-09-2014 16:04 2404475

решил приделать "слайд шоу" от экспедитора, но при закрытии ошибка
не знаю даже где что "рыть"
хотел уже взять пример от "ник 1967" но так и не понял как сделать так чтобы слайд шоу было только на странице распаковки
помогите
http://rghost.ru/58079813
http://rghost.ru/58079833

nik1967 18-09-2014 17:28 2404506

Цитата:

Цитата audiofeel
хотел уже взять пример от "ник 1967" но так и не понял как сделать так чтобы слайд шоу было только на странице распаковки »

читать дальше »
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpInstalling: Timer:= SetTimer(WizardForm.Handle, 0, {#SlideShowSpeed}, CallbackAddr('SlideShow'));
    wpFinished: KillTimer(WizardForm.Handle, Timer);
  end;
end;;


ROMKA-1977 18-09-2014 18:30 2404528

Помогите пожалуйста!

Есть два кода:
1- скрипт для отображения списка дискового пространства.
2- скрипт отображающий текст из файла rtf в новом окне.

Необходимо объеденить два скрипта так чтобы в новом окне отображалась информация о дисковом пространстве.

Примеры скриптов:
читать дальше »

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

[Files]
Source: "ReadMeRu.rtf"; DestDir: "{tmp}"; Flags: ignoreversion

[code]
var
InfoForm: TSetupForm;
Info, Ok: TButton;
InfoBefore: TRichEditViewer;
ReadmeRu,ReadmeEn: AnsiString;

procedure Okclick(Sender: TObject);
begin
InfoForm.Close;
WizardForm.Enabled:=True;
end;

procedure FormClose(Sender: TObject; var Action: TCloseAction);
begin
WizardForm.Enabled:=true;
end;

procedure InfoClick(Sender: TObject);
begin
InfoForm:= CreateCustomForm();
with InfoForm do begin
ClientWidth := ScaleX(450);
ClientHeight := ScaleY(230);
CenterInsideControl(WizardForm, False);
Caption:='Readme';
onClose:=@FormClose;
Ok:=tbutton.create(InfoForm)
with Ok do begin
SetBounds(ScaleX(365),ScaleY(200),ScaleX(75),ScaleY(23));
parent:=InfoForm;
Caption:='OK';
onclick:=@OKclick;
end;
InfoBefore:= TRichEditViewer.Create(InfoForm);
with InfoBefore do begin
SetBounds(ScaleX(10),ScaleY(10),ScaleX(430),ScaleY(185));
Parent:= InfoForm;
// ParentColor := True;
// Color:= WizardForm.Color;
// BorderStyle:= bsNone;
ScrollBars:= ssVertical;
ReadOnly:= true;
RTFText:= ReadmeRu
end;
InfoForm.Show;
WizardForm.Enabled:=false;
end;
end;

procedure InitializeWizard;
begin
ExtractTemporaryFile('ReadMeRu.rtf');
LoadStringFromFile(ExpandConstant('{tmp}')+'\ReadMeRu.rtf', ReadmeRu);
Info:=tbutton.create(WizardForm);
with Info do begin
Parent:=WizardForm;
SetBounds(ScaleX(10),ScaleY(327),ScaleX(75),ScaleY(23));
Caption:='Readme';
OnClick:=@InfoClick;
end;
end;

читать дальше »

[Setup]
OutputDir=Setup
AppName=DisksInfo
VersionInfoVersion=5.0
AppVerName=DisksInfo
DefaultDirName={pf}\My program
EnableDirDoesntExistWarning=true


[CustomMessages]
Ru.SysDirSelect=Выбранный путь включает в себя системную папку!%nВы уверены, что необходимо продолжать установку?

[Languages]
Name: Ru; MessagesFile: compiler:Languages\Russian.isl

[code]
var n: Integer;
FreeMB, TotalMB: Cardinal;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего| '+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
end; End;

Function NextButtonClick(CurPageID: Integer): Boolean; Begin
Result:= True
if (CurPageID = wpSelectDir) and (Pos(Uppercase(ExpandConstant('{win}')), Uppercase(ExpandConstant('{app}'))) > 0) then Result:= MessageBox(StrToInt(ExpandConstant('{wizardhwnd}')), ExpandConstant('{cm:SysDirSelect}'), 'Установка в системную папку', MB_YESNO or $30) = idYes;
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
if CurPageID = wpSelectDir then ListBoxRefresh
End;

Procedure InitializeWizard;
Begin
ListBox:= TListBox.Create(WizardForm)
ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
ListBox.Font.Size:= 9
ListBox.Font.Style:= [fsBold]
ListBox.Font.Name:= 'Courier New';
ListBox.OnClick:= @ObjectOnClick;
ListBox.Parent:= WizardForm.SelectDirPage;
End;

Nordek 18-09-2014 19:09 2404540

ROMKA-1977,

читать дальше »
Код:

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

[Files]
Source: "ReadMeRu.rtf"; DestDir: "{tmp}"; Flags: ignoreversion

[CustomMessages]
Ru.SysDirSelect=Выбранный путь включает в себя системную папку!%nВы уверены, что необходимо продолжать установку?

[Languages]
Name: Ru; MessagesFile: compiler:Languages\Russian.isl

[Code]
var
InfoForm: TSetupForm;
Info, Ok: TButton;
InfoBefore: TRichEditViewer;
ReadmeRu,ReadmeEn: AnsiString;

n: Integer;
FreeMB, TotalMB: Cardinal;
VolumeName, FileSystemName: String;
VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
ListBox: TListBox;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
  if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
    if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
      if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
        If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
          If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
            Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
  StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
  Begin  while (Pos('  ', String) > 0) do Delete(String, Pos('  ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
  Begin
    if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
    else Result:= String;
  End;

Procedure GetDiskInfo(Disk: String);
  Begin
    FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
      GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
    FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
  End;

Procedure ListBoxRefresh;  var FreeB, TotalB: Cardinal; Path, String: string; Begin
  ListBox.Items.Clear
for n:= 1 to 31 do  // диск 'А' пропустить
  if (GetLogicalDrives and (1 shl n)) > 0 then
    if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
      if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
  Path:= Copy(ListBox.Items[n],1,2) +'\'    { если в накопителе нет диска, пропустить обновление }
  if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
    if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
    if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего| '+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
  ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case
TObject(Sender) of
  ListBox:  for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
end; End;

Function NextButtonClick(CurPageID: Integer): Boolean; Begin
  Result:= True
  if (CurPageID = wpSelectDir) and (Pos(Uppercase(ExpandConstant('{win}')), Uppercase(ExpandConstant('{app}'))) > 0) then Result:= MessageBox(StrToInt(ExpandConstant('{wizardhwnd}')), ExpandConstant('{cm:SysDirSelect}'), 'Установка в системную папку', MB_YESNO or $30) = idYes;
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  if CurPageID = wpSelectDir then ListBoxRefresh
End;


procedure Okclick(Sender: TObject);
begin
 
InfoForm.Close;
  WizardForm.Enabled:=True;
end;

procedure FormClose(Sender: TObject; var Action: TCloseAction);
begin
 
WizardForm.Enabled:=true;
end;

procedure InfoClick(Sender: TObject);
begin
InfoForm:= CreateCustomForm();
with InfoForm do begin
 
ClientWidth := ScaleX(450);
  ClientHeight := ScaleY(230);
  CenterInsideControl(WizardForm, False);
  Caption:='Readme';
  onClose:=@FormClose;
Ok:=tbutton.create(InfoForm)
with Ok do begin
 
SetBounds(ScaleX(365),ScaleY(200),ScaleX(75),ScaleY(23));
  parent:=InfoForm;
  Caption:='OK';
  onclick:=@OKclick;
  end;
InfoBefore:= TRichEditViewer.Create(InfoForm);
with InfoBefore do begin
 
SetBounds(ScaleX(10),ScaleY(10),ScaleX(430),ScaleY(185));
  Parent:= InfoForm;
  //    ParentColor := True;
  //    Color:= WizardForm.Color;
  //    BorderStyle:= bsNone;
 
ScrollBars:= ssVertical;
  ReadOnly:= true;
  RTFText:= ReadmeRu
end;
  InfoForm.Show;
  WizardForm.Enabled:=false;
end;
end;

procedure InitializeWizard;
begin
    ListBox:= TListBox.Create(WizardForm)
    ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
    ListBox.Font.Size:= 9
    ListBox.Font.Style:= [fsBold]
    ListBox.Font.Name:= 'Courier New';
    ListBox.OnClick:= @ObjectOnClick;
    ListBox.Parent:= WizardForm.SelectDirPage;

  ExtractTemporaryFile('ReadMeRu.rtf');
  LoadStringFromFile(ExpandConstant('{tmp}')+'\ReadMeRu.rtf', ReadmeRu);
  Info:=tbutton.create(WizardForm);
  with Info do begin
 
Parent:=WizardForm;
  SetBounds(ScaleX(10),ScaleY(327),ScaleX(75),ScaleY(23));
  Caption:='Readme';
  OnClick:=@InfoClick;
end;
end;


ROMKA-1977 18-09-2014 19:15 2404544

Nordek, Не то. По прежнему открывается rtf.

nik1967 19-09-2014 10:51 2404737

ROMKA-1977,
Держи
Код:

#ifndef IS_ENHANCED
  #error Для компилляции этого скрипта нужна расширенная версия Inno Setup (restools).
#endif
#ifdef UNICODE
  #error Этот скрипт не работает на UNICODE версии Inno Setup. Используйте ANSI версию Inno Setup.
#endif

[Setup]
AppName=DisksInfo
VersionInfoVersion=5.0
AppVerName=DisksInfo
DefaultDirName={pf}\My program
EnableDirDoesntExistWarning=true
OutputDir=.

[CustomMessages]
Ru.SysDirSelect=Выбранный путь включает в себя системную папку!%nВы уверены, что необходимо продолжать установку?

[Languages]
Name: Ru; MessagesFile: compiler:Languages\Russian.isl

[code]
var
        n: Integer;
        FreeMB, TotalMB: Cardinal;
        VolumeName, FileSystemName: String;
        VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
        ListBox: TListBox;
        InfoForm: TSetupForm;
        Info, Ok: TButton;

const
        oneMB = 1024*1024;
       
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
begin
        if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
                if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
                        if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
                                if Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
                                        if Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
                        Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб';
                StringChange(Result, ',', '.');
end;

function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
begin
        while (Pos(' ', String) > 0) do
                Delete(String, Pos(' ', String), 1); Result:= Trim(String);
end;

function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
begin
        if Length(String) > MaxLength then
                Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
        else
                Result:= String;
end;

procedure GetDiskInfo(Disk: String);
begin
        FileSystemName:= StringOfChar(' ', 32);
                VolumeName:= StringOfChar(' ', 256);
                        GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
                                FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName);
        if VolumeName = '' then
                VolumeName:= 'без метки';
end;

procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string;
begin
        ListBox.Items.Clear;
        for n:= 1 to 31 do // диск 'А' пропустить
                if (GetLogicalDrives and (1 shl n)) > 0 then
                        if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
                                if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
        for n:= 0 to ListBox.Items.Count -1 do begin
                        Path:= Copy(ListBox.Items[n],1,2) +'\';{ если в накопителе нет диска, пропустить обновление }
                if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then GetDiskInfo(Path);
                        if FreeB >= $7FFFFFFF then
                                String:= PadL(ByteOrTB(FreeMB*oneMB, true),10)
                        else
                                String:= PadL(ByteOrTB(FreeB, true),10);
                if TotalB >= $7FFFFFFF then begin
                        TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего| '+ String;
                end else
                        String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
                        ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9);
                end;
end;

procedure Okclick(Sender: TObject);
begin
        InfoForm.Close;
        WizardForm.Enabled:= True;
end;

procedure FormClose(Sender: TObject; var Action: TCloseAction);
begin
        WizardForm.Enabled:=true;
end;

procedure InfoClick(Sender: TObject);
begin
        InfoForm.Show;
        WizardForm.Enabled:=false;
end;

procedure ObjectOnClick(Sender: TObject);
begin
        case TObject(Sender) of
                ListBox: for n:= 0 to ListBox.Items.Count-1 do
                        if ListBox.Selected[n] then
                                WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text));
        end;
end;

function NextButtonClick(CurPageID: Integer): Boolean; begin
        Result:= True;
                if (CurPageID = wpSelectDir) and (Pos(Uppercase(ExpandConstant('{win}')), Uppercase(ExpandConstant('{app}'))) > 0) then
                        Result:= MessageBox(StrToInt(ExpandConstant('{wizardhwnd}')), ExpandConstant('{cm:SysDirSelect}'), 'Установка в системную папку', MB_YESNO or $30) = idYes;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
        if CurPageID = wpSelectDir then ListBoxRefresh;
                Info.Visible:= CurPageID = wpSelectDir;
end;

procedure InitializeWizard;
begin
  InfoForm:= CreateCustomForm();
  with InfoForm do begin
                ClientWidth := ScaleX(450);
                ClientHeight := ScaleY(230);
                CenterInsideControl(WizardForm, False);
                Caption:='Info';
                onClose:=@FormClose;
       
                Ok:=tbutton.create(InfoForm);
                with Ok do begin
                        SetBounds(ScaleX(365),ScaleY(200),ScaleX(75),ScaleY(23));
                        parent:=InfoForm;
                        Caption:='OK';
                        onclick:=@OKclick;
                end;
       
                ListBox:= TListBox.Create(InfoForm);
                with ListBox do begin
                        SetBounds(ScaleX(10),ScaleY(10),ScaleX(430),ScaleY(185));
                        Font.Size:= 9;
                        Font.Style:= [fsBold];
                        Font.Name:= 'Courier New';
                        OnClick:= @ObjectOnClick;
                        Parent:= InfoForm;
                end;
        end;

        Info:= tbutton.create(WizardForm);
        with Info do begin
                Parent:= WizardForm;
                SetBounds(ScaleX(10),ScaleY(327),ScaleX(75),ScaleY(23));
                Caption:= 'Info';
                OnClick:= @InfoClick;
        end;
end;


---------------------------------------------------------------------------------------------------------
Цитата:

Цитата Dodakaedr
а по поводу ключей не подскажите? »

Придумал только так, через одно место. Умные люди может что лучше предложат.
Код:

#define MyAppName "My programm"
#define MyAppVersion "1.5"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
OutputDir=.
Compression=lzma
SolidCompression=yes
VersionInfoDescription={#MyAppName}
VersionInfoVersion={#MyAppVersion}

[Code]       
function GetValue(strFilename,keyFind: string; var tvalue: AnsiString): AnsiString;
var
  str: AnsiString;
begin
  LoadStringFromFile(strFilename, str);
  if Pos(keyFind,str)>0 then begin
    Delete(str,1,Pos(keyFind,str)+Length(keyFind));
      tvalue:= str;
      Result:= tvalue;
      Exit;
    end;
end;

function InitializeSetup(): Boolean;
var
  RCode: Integer;
  S, S1, PathName, RegKey, RegKey_1, RegKey_2, RegKey_3: AnsiString;
begin
  PathName:= ExpandConstant('{src}\Data\Settings');
  ForceDirectories(PathName);
  RegKey_1:= 'HKEY_CLASSES_ROOT\.mpa';
  RegKey_2:= 'HKEY_CLASSES_ROOT\.mp2';
  RegKey_3:= 'HKEY_CLASSES_ROOT\.mp3';
    if DirExists(PathName) then begin
      Exec('regedit.exe', Format('-ea "%s\Soft.reg" "%s"', [PathName, RegKey_1]), '', SW_SHOW, ewWaitUntilTerminated, RCode);
      Exec('regedit.exe', Format('-ea "%s\tmp1.reg" "%s"', [PathName, RegKey_2]), '', SW_SHOW, ewWaitUntilTerminated, RCode);
      Exec('regedit.exe', Format('-ea "%s\tmp2.reg" "%s"', [PathName, RegKey_3]), '', SW_SHOW, ewWaitUntilTerminated, RCode);
    end;
      GetValue(PathName+'\tmp1.reg','REGEDIT4',S);
      GetValue(PathName+'\tmp2.reg','REGEDIT4',S1);
      SaveStringToFile(PathName+'\Soft.reg', S + S1, true);
      DeleteFile(PathName+'\tmp1.reg');
      DeleteFile(PathName+'\tmp2.reg');
  Result:= False;
end;


ROMKA-1977 19-09-2014 17:27 2404918

nik1967, всё OK!!!

Dinvin4ester 20-09-2014 03:52 2405047

Ребята не подскажите, делаю репак игры. Установленная на русском языке, но когда удаляю ее и ставлю свой репак, то выходит английский язык, хотя в реестре прописан как русский.. Не подскажите в чем проблема ?

AlexALSP 20-09-2014 04:33 2405048

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

Dinvin4ester 20-09-2014 19:25 2405220

AlexALSP,
Ага, спасибо. Заменил, русский встал ну и есть крякозябры.

AlexALSP 20-09-2014 22:14 2405255

Так , виртуально , телепатически никто тебе не поможет , только советом . Ты не написал какая игра . ни дал ветки реестра которые у тебя есть , и хочешь что бы на расстоянии тебе кто то помог .

Дай информацию для просмотра и размышления . а не на пальцах ...

Все упирается в кодовую страницу, в этом случае либо шрифт не прописан и не установлен , смотри по логу инсталлера что куда ставится , это как информация для размышления.

Nightwishh 21-09-2014 00:52 2405289

Знающие люди помогите довести до ума
Код:

[Setup]
OutputDir=.
AppName=рапнркаапкапкп
AppVerName=вапваукапа
DefaultDirName={pf}\авапвавав
AllowNoIcons=true

[Icons]
Name: {group}\пкапк; Filename: {app}\fjshck.exe; Flags: createonlyiffileexists
Name: {group}\удаление; Filename: {app}\Unins000.exe

[Code ]
var
  NewCheckListBox1: TNewCheckListBox;

procedure CheckNoIcons(Sender: TObject);
begin
  WizardForm.GroupEdit.Enabled:= not NewCheckListBox1.Checked[0];
  WizardForm.GroupBrowseButton.Enabled:= not NewCheckListBox1.Checked[0];
end;

procedure InitializeWizard();
begin
  WizardForm.NoIconsCheck.Hide;

  NewCheckListBox1 := TNewCheckListBox.Create(WizardForm);
  with NewCheckListBox1 do
  begin
    Parent := WizardForm.NoIconsCheck.Parent;
    Left := ScaleX(0);
    Top := ScaleY(216);
    Width := ScaleX(332);
    Height := ScaleY(19);
    AddCheckBoxEx(WizardForm.NoIconsCheck.Caption, '', 0, False, True, True, True, nil, True);
    OnClickCheck:= @CheckNoIcons;
  end;
end;

Цель: Создать чекбокс на чеклистбоксе, который бы отвечал за NoIconsCheck...

ROMKA-1977 21-09-2014 09:19 2405333

Помогите пожалуйста исправить следующий код:

читать дальше »

[Setup]
AppName=Name
VersionInfoVersion=5.0
AppVerName=VerName
DefaultDirName={pf}\My program
OutputDir=.

[Languages]
Name: Ru; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[code]
var
ResizeButton: TButton;
PageResized: Boolean;

function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure MinimizeInstallPage();
begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=GetSystemMetrics(16)-ScaleX(420);
WizardForm.Top:=GetSystemMetrics(17)-ScaleX(150);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(220);
WizardForm.CancelButton.Top:=ScaleY(80);
WizardForm.CancelButton.BringToFront;
ResizeButton.Left:= ScaleX(60);
ResizeButton.Top:= ScaleY(80)
ResizeButton.Caption:= 'Normalize';
PageResized:= True
end;

procedure ResumeInstallPage();
begin
WizardForm.Width:= ScaleX(503);
WizardForm.Height:= ScaleY(388);
WizardForm.Position:= poScreenCenter;
WizardForm.MainPanel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(58));
WizardForm.MainPanel.Show;
WizardForm.Bevel1.Show;
WizardForm.InnerNotebook.SetBounds(ScaleX(40), ScaleY(72), ScaleX(417), ScaleY(237));
WizardForm.StatusLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(16));
WizardForm.FilenameLabel.SetBounds(ScaleX(0), ScaleY(16), ScaleX(417), ScaleY(16));
WizardForm.ProgressGauge.SetBounds(ScaleX(0), ScaleY(42), ScaleX(417), ScaleY(21));
WizardForm.CancelButton.SetBounds(ScaleX(412), ScaleY(327), ScaleX(75), ScaleY(23));
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.Caption:= 'Minimize';
PageResized:= False;
end;

procedure ResizeButtonOnClick(Sender: TObject);
begin
If PageResized then
ResumeInstallPage
else
MinimizeInstallPage;
end;

procedure InitializeWizard();
begin
ResizeButton:= TButton.Create(WizardForm);
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.OnClick:= @ResizeButtonOnClick
ResizeButton.Caption:= 'Minimize';
ResizeButton.Hide;
ResizeButton.Parent:= WizardForm;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpInstalling then ResizeButton.Show;
end;

Проблема в том что после распаковки файлов минимизированный инстал остаёся в минимизированном состоянии.

Nordek 21-09-2014 11:05 2405352

ROMKA-1977,
читать дальше »
[Setup]
AppName=Name
VersionInfoVersion=5.0
AppVerName=VerName
DefaultDirName={pf}\My program
OutputDir=.
DisableFinishedPage=true
[Languages]=
Name: Ru; MessagesFile: compiler:Languages\Russian.isl=

[Files]=
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;=

[code]=
var=
ResizeButton: TButton;=
PageResized: Boolean;=

function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';=

procedure MinimizeInstallPage();=
begin=
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=GetSystemMetrics(16)-ScaleX(420);
WizardForm.Top:=GetSystemMetrics(17)-ScaleX(150);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(220);
WizardForm.CancelButton.Top:=ScaleY(80);
WizardForm.CancelButton.BringToFront;=
ResizeButton.Left:=ScaleX(60);
ResizeButton.Top:=ScaleY(80)
ResizeButton.Caption:='Normalize';
PageResized:=True
end;=

procedure ResumeInstallPage();=
begin=
WizardForm.Width:=ScaleX(503);
WizardForm.Height:=ScaleY(388);
WizardForm.Position:=poScreenCenter;
WizardForm.MainPanel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(58));=
WizardForm.MainPanel.Show;=
WizardForm.Bevel1.Show;=
WizardForm.InnerNotebook.SetBounds(ScaleX(40), ScaleY(72), ScaleX(417), ScaleY(237));=
WizardForm.StatusLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(16));=
WizardForm.FilenameLabel.SetBounds(ScaleX(0), ScaleY(16), ScaleX(417), ScaleY(16));=
WizardForm.ProgressGauge.SetBounds(ScaleX(0), ScaleY(42), ScaleX(417), ScaleY(21));=
WizardForm.CancelButton.SetBounds(ScaleX(412), ScaleY(327), ScaleX(75), ScaleY(23));=
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));=
ResizeButton.Caption:='Minimize';
PageResized:=False;
end;=

procedure ResizeButtonOnClick(Sender: TObject);=
begin=
If PageResized then=
ResumeInstallPage=
else=
MinimizeInstallPage;=
end;=

procedure InitializeWizard();=
begin=
ResizeButton:=TButton.Create(WizardForm);
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));=
ResizeButton.OnClick:=@ResizeButtonOnClick
ResizeButton.Caption:='Minimize';
ResizeButton.Hide;=
ResizeButton.Parent:=WizardForm;
end;=

procedure CurPageChanged(CurPageID: Integer);=
begin=
if CurPageID =wpInstalling then ResizeButton.Show;
end;=

nik1967 21-09-2014 12:41 2405370

ROMKA-1977,
Если сильно не заморачиваться
Код:

[Setup]
AppName=Name
VersionInfoVersion=5.0
AppVerName=VerName
DefaultDirName={pf}\My program
OutputDir=.

[Languages]
Name: Ru; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[code]
var
        ResizeButton: TButton;
        PageResized, Show: Boolean;

function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure MinimizeInstallPage();
begin
        WizardForm.MainPanel.Hide;
        WizardForm.Bevel1.Hide;
        WizardForm.Width:= ScaleX(395);
        WizardForm.Height:= ScaleY(142);
        WizardForm.Left:= GetSystemMetrics(16)-ScaleX(420);
        WizardForm.Top:= GetSystemMetrics(17)-ScaleX(150);
        WizardForm.InnerNotebook.Left:= ScaleX(10);
        WizardForm.InnerNotebook.Top:= ScaleY(10);
        WizardForm.InnerNotebook.Width:= ScaleX(370);
        WizardForm.StatusLabel.Left:= ScaleX(0);
        WizardForm.StatusLabel.Top:= ScaleY(0);
        WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
        WizardForm.FileNameLabel.Left:= ScaleX(0);
        WizardForm.FileNameLabel.Top:= ScaleY(20);
        WizardForm.FileNameLabel.Width:= WizardForm.InnerNotebook.Width;
        WizardForm.ProgressGauge.Top:= ScaleY(40);
        WizardForm.ProgressGauge.Width:= WizardForm.InnerNotebook.Width;
        WizardForm.CancelButton.Left:= ScaleX(220);
        WizardForm.CancelButton.Top:= ScaleY(80);
        WizardForm.CancelButton.BringToFront;
        ResizeButton.Left:= ScaleX(60);
        ResizeButton.Top:= ScaleY(80);
        ResizeButton.Caption:= 'Normalize';
        PageResized:= True;
end;

procedure ResumeInstallPage();
begin
        WizardForm.Width:= ScaleX(503);
        WizardForm.Height:= ScaleY(388);
        WizardForm.Position:= poScreenCenter;
        if Show then begin       
                WizardForm.MainPanel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(58));
                WizardForm.MainPanel.Show;
                WizardForm.Bevel1.Show;
        end;
        WizardForm.InnerNotebook.SetBounds(ScaleX(40), ScaleY(72), ScaleX(417), ScaleY(237));
        WizardForm.StatusLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(16));
        WizardForm.FilenameLabel.SetBounds(ScaleX(0), ScaleY(16), ScaleX(417), ScaleY(16));
        WizardForm.ProgressGauge.SetBounds(ScaleX(0), ScaleY(42), ScaleX(417), ScaleY(21));
        WizardForm.CancelButton.SetBounds(ScaleX(412), ScaleY(327), ScaleX(75), ScaleY(23));
        ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
        ResizeButton.Caption:= 'Minimize';
        PageResized:= False;
end;

procedure ResizeButtonOnClick(Sender: TObject);
begin
        If PageResized then
                ResumeInstallPage
        else
                MinimizeInstallPage;
end;

procedure InitializeWizard();
begin
        ResizeButton:= TButton.Create(WizardForm);
        ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
        ResizeButton.OnClick:= @ResizeButtonOnClick;
        ResizeButton.Caption:= 'Minimize';
        ResizeButton.Hide;
        ResizeButton.Parent:= WizardForm;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
                ResizeButton.Hide;
        case CurPageID of
                wpInstalling:
                begin
                        Show:= true;
                        ResizeButton.Show;
                end;
                wpFinished:
                begin
                        Show:= false;
                        ResumeInstallPage;
                end;
        end;
end;


---------------------------------------------------------------------------------
Цитата:

Цитата Nightwishh
Знающие люди помогите довести до ума »

А что не так?

Nightwishh 21-09-2014 14:19 2405391

nik1967, Папка в "Пуск" создаётся при отмеченном чекбоксе

nik1967 21-09-2014 15:30 2405415

Nightwishh,
читать дальше »
Код:

[Setup]
OutputDir=.
AppName=рапнркаапкапкп
AppVerName=вапваукапа
DefaultDirName={pf}\авапвавав
DefaultGroupName=Home\авапвавав
AllowNoIcons=true
UsePreviousGroup=no

[Icons]
Name: {group}\пкапк; Filename: {app}\fjshck.exe; Flags: createonlyiffileexists;
Name: {group}\удаление; Filename: {uninstallexe};

[Code]
var
  NewCheckListBox1: TNewCheckListBox;
       
procedure CheckNoIcons(Sender: TObject);
begin
  WizardForm.GroupEdit.Enabled:= not NewCheckListBox1.Checked[0];
  WizardForm.GroupBrowseButton.Enabled:= not NewCheckListBox1.Checked[0];
  WizardForm.NoIconsCheck.Checked:= NewCheckListBox1.Checked[0];
end;

procedure InitializeWizard();
begin
  WizardForm.NoIconsCheck.Hide;

  NewCheckListBox1 := TNewCheckListBox.Create(WizardForm);
  with NewCheckListBox1 do
  begin
    Parent := WizardForm.NoIconsCheck.Parent;
    Color:= WizardForm.Color;
    BorderStyle:= bsNone;
    WantTabs:= true;
    Left := ScaleX(0);
    Top := ScaleY(216);
    Width := ScaleX(332);
    Height := ScaleY(21);
    AddCheckBoxEx(WizardForm.NoIconsCheck.Caption, '', 0, False, True, True, True, nil, True);
    OnClickCheck:= @CheckNoIcons;
  end;
end;


Nightwishh 21-09-2014 17:12 2405448

nik1967, Ой, спасибо большое, всё как надо!

ROMKA-1977 21-09-2014 17:54 2405458

Nordek, Не то. В твоём варианте после распаковки инстал закрывается без отбражения страницы завершения.

Kashtan007 21-09-2014 20:56 2405508

Все еще не разобрался, поэтому повторяю свой вопрос.

Мне нужно, чтобы на странице каталога была 2 чекбокса
-Удалить все старые моды
--Сохранить бекап старых модов
Выглядеть это должно так:


1 чекбокс, должен удалять содержимое в res_mods\0.9.2\* и удалять папку xvm по пути res_mods\xvm.
2 чекбокс, должен делать бекап папки res_mods, по пути ModPack\BackUp\res_mods, а после удаление репака возвращал бекап в папку res_mods.

Есть еще 1 проблема:

У меня в репаке есть файл "path" и в папке куда я ставлю репак он тоже есть. В следствии чего если я ставлю репак, то файл заменяется, а когда удаляешь репак то файл тоже удаляется и не запускается игра. Как сделать, чтобы когда устанавливаешь репак, то файл "path" из папки куда ставишь репак копировался по пути ModPack\OriginalFiles, а после удаление возвращался на свое место.

Как это реализовать? Заранее спасибо всем за помощь.

nik1967 21-09-2014 21:36 2405522

Цитата:

Цитата Kashtan007
Мне нужно »

Это уже не просьба о помощи - это уже похоже на заказ инсталлятора. А с заказами сюда.

AlekseyPopovv 22-09-2014 17:51 2405779

procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssPostInstall) then
begin
if Installer.Checked and CheckParam('/P') then
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', #13#10'127.0.0.1 systweak.com', True);
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', #13#10'127.0.0.1 updateservice1.systweak.com', True);
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', #13#10'127.0.0.1 www.systweak.com', True);
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', #13#10'127.0.0.1 systemspeedup.systweak.com', True);
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', #13#10'127.0.0.1 systweak.com/STCheckGenuineness', True);
end;

В чём проблема, не пойму. Эти строки прописываются и при распаковке и при тихой распаковке и при установке и при тихой установке. Как только не пытался, ни чего не получается. Как сделать что бы при распаковке и тихой распаковке эти строки не прописывались?

Dodakaedr 22-09-2014 17:53 2405780

Цитата:

Цитата AlekseyPopovv
Как сделать что бы при распаковке и тихой распаковке эти строки не прописывались? »

Попробуйте так:
читать дальше »
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep = ssPostInstall) then
begin
if Installer.Checked then
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', #13#10'127.0.0.1 systweak.com', True);
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', #13#10'127.0.0.1 updateservice1.systweak.com', True);
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', #13#10'127.0.0.1 www.systweak.com', True);
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', #13#10'127.0.0.1 systemspeedup.systweak.com', True);
SaveStringToFile(ExpandConstant('{sys}')+'\drivers\etc\hosts', #13#10'127.0.0.1 systweak.com/STCheckGenuineness', True);
end;


AlekseyPopovv 22-09-2014 18:36 2405804

Dodakaedr, И так пробовал. Не получается. Пробовал по всякому:
if Installer.Checked and not Portable.Checked then
if Installer.Checked or not Portable.Checked then
if Installer.Checked and CheckParam('/I') and not Portable.Checked and not CheckParam('/P') then
if Installer.Checked or CheckParam('/I') or not Portable.Checked or not CheckParam('/P') then
и так далее.

Dodakaedr 22-09-2014 21:10 2405872

Цитата:

Цитата AlekseyPopovv
И так пробовал. Не получается. Пробовал по всякому: »

Тогда без скрипта здесь ничего не решить... И еще вопрос возник: ваши строки при удалении удаляются?

ROMKA-1977 22-09-2014 21:24 2405878

Помогите пожалуйста.

Настранице SelectDirPage рописал код кастомной кнопки "Обзор"

Необходимо настроить также кнопку "Обзор" на странице SelectProgramGroupPage

читать дальше »

#define AppName "MyProg"

[Setup]
SourceDir=.
OutputDir=Setup
AppName=MyProg
AppVerName=MyProg
DefaultDirName={pf}\MyProg
DefaultGroupName=MyProg
OutputBaseFilename=Setup

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[Icons]
Name: {group}\MyProg; Filename: {app}; WorkingDir: {app}

[CustomMessages]
russian.RestoreButton=Сброс

[code]
var
BrowseForm: TSetupForm;
DirTreeView: TFolderTreeView;
Edit: TNewEdit;

procedure DirFolderChange(Sender: TObject);
begin
if DirTreeView.Directory <> WizardForm.DirEdit.Text then
Edit.Text := AddBackslash(DirTreeView.Directory) + '{#SetupSetting("AppName")}' else
Edit.Text := DirTreeView.Directory;
end;

procedure BrowseForm_Buttons_OnClick(Sender: TObject);
begin
case TButton(Sender).Tag of
15: Edit.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#SetupSetting("DefaultDirName")}'));

16: begin
DirTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
Edit.Text := AddBackslash(DirTreeView.Directory) + '{#SetupSetting("AppName")}';
end;

17: if Edit.Text <> WizardForm.DirEdit.Text then WizardForm.DirEdit.Text := Edit.Text;
end;
end;

procedure BrowseClick(Sender: TObject);
begin
BrowseForm := CreateCustomForm();
with BrowseForm do
begin
Width := ScaleX(413);
Height := ScaleY(361);
Caption := SetupMessage(msgBrowseDialogTitle);
Position := poScreenCenter;

with TLabel.Create(nil) do
begin
SetBounds(ScaleX(16), ScaleY(12), ScaleX(207), ScaleY(16));
Caption := SetupMessage(msgBrowseDialogLabel);
Parent := BrowseForm;
Font.Size := 8;
end;

DirTreeView := TFolderTreeView.Create(nil)
with DirTreeView do
begin
SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
OnChange := @DirFolderChange;
Parent := BrowseForm;
end;

Edit := TNewEdit.Create(nil);
with Edit do
begin
SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
Text := DirTreeView.Directory;
Parent := BrowseForm;
Font.Color := clWindowText;
end;

with TButton.Create(nil) do
begin
SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
Parent := BrowseForm;
Caption := SetupMessage(msgButtonCancel);
ModalResult := mrCancel;
end;

with TButton.Create(nil) do
begin
SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
Parent := BrowseForm;
Caption := ExpandConstant('{cm:RestoreButton}');
Tag := 15;
OnClick := @BrowseForm_Buttons_OnClick;
end;

with TButton.Create(nil) do
begin
SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
Parent := BrowseForm;
Caption := SetupMessage(msgButtonNewFolder);
Tag := 16;
OnClick := @BrowseForm_Buttons_OnClick;
end;

with TButton.Create(nil) do
begin
SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
Parent := BrowseForm;
Caption := SetupMessage(msgButtonOK);
Tag := 17;
OnClick := @BrowseForm_Buttons_OnClick;
ModalResult := mrOk;
end;

DirTreeView.ChangeDirectory(AddBackslash(WizardForm.DirEdit.Text), True);
ShowModal;
Free;
end;
end;

var
TDV: TFolderTreeView;
TFV: TStartMenuFolderTreeView;
OldEvent_NoIconsCheckClick: TNotifyEvent;

procedure TDVOnChange(Sender: TObject);
begin
WizardForm.DirEdit.Text:= AddBackslash(TDV.Directory)+'MyApp';
end;

procedure TFVOnChange(Sender: TObject);
begin
WizardForm.GroupEdit.Text:= AddBackslash(TFV.Directory)+'MyApp';
end;

procedure NoIconsCheckClick(Sender: TObject);
begin
OldEvent_NoIconsCheckClick(Sender);
TFV.Enabled := not WizardForm.NoIconsCheck.Checked;
end;

procedure InitializeWizard();
begin
TDV:= TFolderTreeView.Create(WizardForm);
TDV.Top:= WizardForm.DirEdit.Top+28;
TDV.Width:= 417;
TDV.Height:= 100;
TDV.OnChange:= @TDVOnChange;
TDV.Parent:= WizardForm.SelectDirPage;

TFV:= TStartMenuFolderTreeView.Create(WizardForm);
TFV.Top:= WizardForm.GroupEdit.Top+28;
TFV.Width:= 417;
TFV.Height:= 100;
TFV.SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{us erstartup}'),ExpandConstant('{commonstartup}'));
TFV.OnChange:= @TFVOnChange;
TFV.Parent:= WizardForm.SelectProgramGroupPage;

OldEvent_NoIconsCheckClick := WizardForm.NoIconsCheck.OnClick;
WizardForm.NoIconsCheck.OnClick := @NoIconsCheckClick;

WizardForm.DirBrowseButton.Hide;

with TButton.Create(nil) do
begin
Parent := WizardForm.SelectDirPage;
SetBounds(WizardForm.DirBrowseButton.Left, WizardForm.DirBrowseButton.Top, WizardForm.DirBrowseButton.Width, WizardForm.DirBrowseButton.Height - ScaleY(1));
Caption := SetupMessage(msgButtonBrowse);
OnClick := @BrowseClick;
end;
end;

El Sanchez 22-09-2014 21:38 2405889

Цитата:

Цитата Kashtan007
Все еще не разобрался, поэтому повторяю свой вопрос. »

Kashtan007,
читать дальше »

Код:

[Setup]
AppName=test2
AppVerName=test2
DefaultDirName=D:\test

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[CustomMessages]
ru.DeleteOldMods=Удалить все старые моды
ru.CreateBackupOldMods=Сохранить бекап старых модов
ru.DeletingOldMods=Удаление старых модов...
ru.RestoringOldMods=Восстановление старых модов...

[Tasks]
Name: deleteoldmods; Description: {cm:DeleteOldMods}
Name: deleteoldmods\createbackupoldmods; Description: {cm:CreateBackupOldMods}

[Files]
Source: {app}\res_mods\*; DestDir: {app}\ModPack\BackUp\res_mods; Flags: external createallsubdirs recursesubdirs skipifsourcedoesntexist; Tasks: deleteoldmods\createbackupoldmods
Source: {app}\path.file; DestDir: {app}\ModPack\OriginalFiles; Flags: external skipifsourcedoesntexist

[Run]
Filename: {cmd}; Parameters: "/c rd /s /q ""{app}\res_mods\0.9.2"" & md ""{app}\res_mods\0.9.2"""; StatusMsg: {cm:DeletingOldMods}; Flags: runhidden; Tasks: deleteoldmods
Filename: {cmd}; Parameters: "/c rd /s /q ""{app}\res_mods\xvm"""; StatusMsg: {cm:DeletingOldMods}; Flags: runhidden; Tasks: deleteoldmods

[UninstallRun]
Filename: {cmd}; Parameters: "/c xcopy /ecihry ""{app}\ModPack\BackUp\res_mods"" ""{app}\res_mods\"""; StatusMsg: {cm:DeletingOldMods}; Flags: runhidden; Tasks: deleteoldmods\createbackupoldmods
Filename: {cmd}; Parameters: "/c xcopy /ecihry ""{app}\ModPack\OriginalFiles\path.file"" ""{app}\"""; Flags: runhidden


Dodakaedr 22-09-2014 22:07 2405911

Подскажите как записать такие данные в секции [Registry]?
читать дальше »
Код:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\XXX]

[HKEY_CURRENT_USER\Software\XXX\SETTINGS]
"Size"=hex:50,05,00,00
"Setting"=hex:87,85,c8,f3,2d,8f,4e,4f,90,eb,19,60,6a,e1,87,55,ff,b9,ce,f8,98,\
  1f,53,6f,d1,fc,fd,5c,17,fb,53,2d,b9,bb,2f,25,13,cc,d5,3e,45,24,83,9a,b9,77,\
  06,39,fb,10,89,6f,59,07,90,ef,7a,7f,e0,8e,e9,80,3d,01,b6,a9,ac,d1,3c,58,62,\
  66,1a,f9,9a,2d,70,8b,82,76,8f,5b,3a,4f,9a,e8,18,10,d0,61,15,52,10,a6,ff,ae,\
  55,7f,2d,6c,a5,01,22,29,0a,fc,43,e6,3a,1a,4c,a7,24,ca,2f,ab,ad,a6,6e,9a,f4,\
  17,b6,27,54,9d,ae,59,33,82,28,a7,c9,4f,43,2f,ff,b4,13,35,7f,c1,07,f2,45,7b,\
  72,17,dc,28,b3,9c,c4,85,c9,30,f4,d8,7a,f0,bc,58,b2,d5,08,2d,26,93,24,80,6d,\
  99,16,7c,eb,9f,45,83,c7,5e,b3,4d,d8,af,f9,aa,35,d3,7d,51,6f,03,45,bf,47,70,\
  5c,82,57,cd,d7,4a,d5,57,3f,34,c5,f4,8f,df,c3,24,a4,72,ea,bb,d1,55,1c,10,49,\
  8b,03,01,7b,82,e9,40,38,d9,23,e3,71,7e,9e,4e,d9,53,09,88,06,fc,fc,bc,5e,90,\
  db,9a,b5,e8,81,b1,57,cd,0a,81,d8,4f,7e,1b,a8,e1,b9,8e,48,ba,f8,ec,ba,a8,fd,\
  ae,0c,27,d6,3f,1e,70,7d,19,8c,03,ea,0f,24,d0,ed,8b,2b,ad,b5,85,33,fa,ef,dc,\
  90,ae,36,eb,63,44,61,db,a7,b2,c0,7c,11,32,53,23,49,9b,c1,5f,ea,95,4c,c2,08,\
  11,b7,8b,57,3a,42,6b,32,1c,11,0b,02,c7,70,5d,eb,1a,5c,fb,6f,ac,5d,84,23,33,\
  72,53,38,17,f5,ae,de,00,66,17,a4,0d,dd,c6,b2,ab,79,18,bc,3f,62,69,5a,17,68,\
  5c,40,e1,f8,8e,16,66,e8,71,d4,87,18,cb,61,a0,a2,d7,ba,67,43,75,88,36,2a,91,\
  c8,70,af,3f,85,ef,a8,c1,fb,48,ea,a8,59,f3,f6,51,04,fc,21,85,85,c2,e6,98,7f,\
  36,31,fb,7a,9d,0b,01,a6,b5,82,2b,29,b3,9d,be,75,47,ab,01,9f,32,c6,ae,fa,26,\
  12,f3,48,65,0f,df,e3,0f,07,a8,98,a6,47,f5,08,7c,71,24,bd,3c,6c,24,f4,24,e9,\
  5c,8c,21,e9,f6,a0,a6,80,9a,5c,05,2e,5e,7d,40,da,49,55,6b,40,6a,8e,5f,73,1d,\
  5c,6a,9b,1a,93,5a,ef,83,12,ba,05,b2,44,04,81,21,57,8b,3c,33,17,90,98,db,49,\
  14,74,89,71,dc,d0,1b,ea,a9,eb,c0,6a,d8,05,48,cd,72,a0,37,9f,3e,e6,76,e3,8e,\
  61,e1,41,2b,37,fc,00,24,1e,1a,44,ba,a8,57,b2,91,54,00,f9,69,f1,48,f7,97,46,\
  4c,ba,5b,c5,20,2f,77,a4,d7,15,c1,ac,95,49,53,78,9b,b1,a3,b5,a3,48,2a,4a,9f,\
  d2,ce,49,ae,ad,12,1f,5c,27,dc,47,20,7d,18,ae,a3,df,ac,fe,8f,ab,31,f7,1d,c2,\
  d2,c9,16,c6,eb,6c,9e,2a,43,a3,63,a4,27,6d,fb,1f,eb,57,31,7c,93,0b,4d,19,51,\
  e6,4e,55,c0,7e,e3,90,7b,da,6b,d0,d5,6a,ad,98,ab,ef,12,4a,4a,f6,fd,0c,6c,14,\
  0d,a6,6a,86,d6,07,cd,cb,99,75,93,4f,d1,41,f8,46,a3,4f,8f,82,1e,02,5b,3e,25,\
  c9,d6,5a,95,c1,11,a7,88,2d,6b,4f,c1,eb,c3,77,af,35,e6,9b,f6,6f,d5,1f,62,4b,\
  5c,38,20,1a,f3,b2,6d,b7,48,5e,00,ee,06,98,34,7d,af,a3,00,42,76,40,fa,61,2b,\
  1c,08,e5,f2,bb,bb,b3,03,4a,83,23,34,b2,62,06,45,8e,33,a1,4b,d2,e4,b6,86,49,\
  05,7f,30,a1,92,14,fe,4b,23,ed,95,7e,8e,f0,ef,0d,de,bd,26,bb,29,af,3e,93,86,\
  b9,7b,39,5d,b6,99,e5,2c,6d,73,ec,27,c4,6b,42,09,b5,a9,f9,8b,90,7b,f8,b5,88,\
  54,e7,b4,15,bf,76,ec,c7,89,89,cf,82,16,6d,96,b5,53,95,72,7b,6f,a4,33,cd,88,\
  6f,b3,e9,ac,4d,fe,fe,1a,5f,cc,00,fd,2b,9f,64,fe,08,17,8f,fc,d8,32,5d,61,4e,\
  72,23,d2,81,96,20,0c,66,ba,2e,8c,dc,13,64,23,5b,df,05,00,dc,41,9e,48,0f,9c,\
  0b,1b,10,3e,c6,12,ae,a7,d6,51,4d,54,51,de,38,b6,ca,a1,0b,1f,b8,c3,99,11,b0,\
  f2,4c,21,6e,81,1b,10,15,49,33,51,5f,91,d5,27,92,9a,f7,89,e8,43,56,96,71,96,\
  51,f6,a1,87,70,75,01,12,58,2e,69,6b,99,37,83,8d,57,64,81,03,1f,78,f0,f6,a9,\
  86,04,76,8e,36,cb,e4,4d,a2,b7,fe,3e,1a,e8,9f,fc,fe,23,46,21,cd,aa,92,d8,ae,\
  31,b3,e8,42,04,a3,f3,80,80,cf,3e,d2,36,04,3b,c4,60,56,46,a1,03,4e,6d,86,d1,\
  b6,64,f9,74,59,8e,f2,14,ff,a1,fe,6f,b7,33,11,7b,ea,b0,88,a5,c6,d8,b0,8f,71,\
  71,82,97,c7,62,a6,f4,72,6a,d1,aa,97,45,76,68,bc,ab,c9,fc,de,b3,8f,65,d6,c0,\
  bb,98,24,0e,17,d7,19,8a,27,27,a7,58,ef,38,c2,c1,25,71,cc,0e,7d,33,11,07,ed,\
  f7,55,7a,ca,64,8b,e7,ee,35,14,4d,e5,25,04,db,69,54,84,d7,8a,45,f2,b0,80,91,\
  a9,3f,77,91,64,f2,48,64,5b,16,79,78,bd,ae,5a,24,34,06,09,53,b1,f8,b0,e1,bc,\
  1d,cf,4d,7d,48,3a,2e,d0,be,53,82,62,12,39,82,64,dd,91,2a,62,f7,45,c8,65,f0,\
  e4,c3,17,12,7c,5c,df,4c,f2,3d,e7,f8,8f,7d,8e,0b,c3,c9,cf,de,75,78,1a,7a,e6,\
  94,07,f5,75,70,95,8f,e4,8c,72,ff,c7,72,59,0f,7d,99,6b,69,5b,a8,13,15,57,44,\
  74,ce,ef,a0,43,87,0c,11,18,8e,f4,06,8a,08,19,00,79,50,bf,7a,e7,f5,c9,e4,16,\
  ed,80,aa,c3,87,91,3e,0f,4d,9a,97,d3,7c,44,60,52,84,0d,45,63,b3,b7,8e,df,cc,\
  e9,55,ee,32,e6,a7,f7,f5,7d,c8,16,bb,20,b0,98,0c,8a,2d,90,61,e0,bf,32,db,06,\
  cb,19,b9,54,7b,ab,7c,5c,04,db,bb,9e,b5,53,f6,bc,71,3c,d3,05,d4,46,31,09,2b,\
  cd,5d,29,6b,af,80,a6,ca,3a,8e,c1,de,12,91,a9,7e,5f,f4,4e,59,4e,cb,e6,ff,0f,\
  eb,c8,7e,c4,7a,c6,42,d8,53,97,0c,1e,ab,67


Kashtan007 22-09-2014 23:03 2405936

El Sanchez, спасибо огромное все работает просто отлично)
Возможно ли переместить чекбоксы на страницу каталога? Так как на странице Tasks у меня другие компоненты и не хотелось бы их совмещать.

Единственная проблема, что после удаление файл paths из папки OriginalFiles не возвращается на свое место. И в итоге получается, что файла нету вообще.

Заранее спасибо за ответ!

El Sanchez 23-09-2014 14:01 2406144

Цитата:

Цитата Kashtan007
Возможно ли переместить чекбоксы на страницу каталога? »

Kashtan007, можно. Только каким макаром данные чекбоксы относятся по смыслу к странице выбора директории? Им самое место в задачах.
Цитата:

Цитата Kashtan007
Единственная проблема, что после удаление файл paths из папки OriginalFiles не возвращается на свое место. »

У меня возвращался. Что в Debug Output при копировании файла из OriginalFiles?

Kashtan007 23-09-2014 16:06 2406179

Цитата:

Цитата El Sanchez
Только каким макаром данные чекбоксы относятся по смыслу к странице выбора директории? Им самое место в задачах. »

El Sanchez, на странице Components у меня модификации, на странице Tasks у меня модификации понижающие пинг. Компонентов больше 50 на каждой из страниц, и если там будет удаление и бекап, то пользователи просто не заметят их среди такого большого количества компонентов. Поэтому самый лучший вариант перенести чекбоксы на страницу каталога.

Цитата:

Цитата El Sanchez
У меня возвращался. Что в Debug Output при копировании файла из OriginalFiles? »

Немного не понял вопроса.

El Sanchez 23-09-2014 20:25 2406260

Цитата:

Цитата Kashtan007
Поэтому самый лучший вариант перенести чекбоксы на страницу каталога. »

Kashtan007, хозяин - барин.
читать дальше »

Код:

[Setup]
AppName=test2
AppVerName=test2
DefaultDirName=D:\test

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[CustomMessages]
ru.DeleteOldMods=Удалить все старые моды
ru.CreateBackupOldMods=Сохранить бекап старых модов
ru.DeletingOldMods=Удаление старых модов...
ru.RestoringOldMods=Восстановление старых модов...

[Files]
Source: {app}\res_mods\*; DestDir: {app}\ModPack\BackUp\res_mods; Flags: external createallsubdirs recursesubdirs skipifsourcedoesntexist; Check: IsOldMods('CreateBackupOldMods')
Source: {app}\path.file; DestDir: {app}\ModPack\OriginalFiles; Flags: external skipifsourcedoesntexist

[Run]
Filename: {cmd}; Parameters: "/c rd /s /q ""{app}\res_mods\0.9.2"" & md ""{app}\res_mods\0.9.2"""; StatusMsg: {cm:DeletingOldMods}; Flags: runhidden; Check: IsOldMods('DeleteOldMods')
Filename: {cmd}; Parameters: "/c rd /s /q ""{app}\res_mods\xvm"""; StatusMsg: {cm:DeletingOldMods}; Flags: runhidden; Check: IsOldMods('DeleteOldMods')

[UninstallRun]
Filename: {cmd}; Parameters: "/c xcopy /ecihry ""{app}\ModPack\BackUp\res_mods"" ""{app}\res_mods\"""; StatusMsg: {cm:DeletingOldMods}; Flags: runhidden; Check: IsOldMods('CreateBackupOldMods')
Filename: {cmd}; Parameters: "/c xcopy /ecihry ""{app}\ModPack\OriginalFiles\path.file"" ""{app}\"""; Flags: runhidden

[code]
var
   
OldModsListBox: TNewCheckListBox;

///////////////////////////////////////////////
function IsOldMods(const Msg: String): Boolean;
begin
    with
OldModsListBox do
       
Result := Checked[Items.IndexOf(CustomMessage(Msg))]
end;

//////////////////////////////
procedure CreateSelectDirPage;
var
   
rt: TRect;
begin
   
OldModsListBox := TNewCheckListBox.Create(WizardForm);
    with OldModsListBox do
    begin
       
Parent := WizardForm.SelectDirPage;
        Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(10);
        Width := Parent.ClientWidth;
        BorderStyle := bsNone;
        ParentColor := True;
        ShowLines := False;
        WantTabs := True;
        AddCheckBox(CustomMessage('DeleteOldMods'), '', 0, True, True, True, False, nil);
        AddCheckBox(CustomMessage('CreateBackupOldMods'), '', 1, True, True, False, True, nil);
        rt := ItemRect(ItemCount-1);
        Height := rt.Bottom;
    end;
end;

/////////////////////////////
procedure InitializeWizard();
begin
   
CreateSelectDirPage;
end;


AlekseyPopovv 23-09-2014 20:55 2406269

Вложений: 1
Dodakaedr
Так и записать.

AlekseyPopovv 23-09-2014 20:59 2406273

Dodakaedr
Да, все строки при удалении удаляются!

Kashtan007 23-09-2014 22:00 2406291

El Sanchez, спасибо огромное за помощь)
Но файл paths.xml не возвращается после удаление сборки.
Когда сборку устанавливаешь, то он перемещается в папку OriginalFiles, но после удаления восстанавливается только бекап, а файл paths.xml нет.

P.S. Перенес все в свой скрипт... и возникла проблема под чекбоксами серый фон. Возможно это из-за того, что у меня весь дизайн установщика состоит из BitMapImage?

Текст я убрал, так как он написан на картинке, но фон под чекбоксами не пропал.
Как убрать фон из под чекбоксов?
Заранее спасибо за ответ!

Nordek 24-09-2014 01:26 2406363

Цитата:

Цитата Dodakaedr
Подскажите как записать такие данные в секции [Registry]? »

Dodakaedr, 1.
Цитата:

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

2. "Inno Script Studio » Проект » Импорт из файла » Импорт файла реестра"


AlekseyPopovv, 1.
Цитата:

Цитата Vadikan

2. Пусть сам пробует разобраться (см. выше).

vint56 24-09-2014 02:58 2406366

Kashtan007, пример http://rghost.ru/58173793

Kashtan007 24-09-2014 13:57 2406534

vint56, спасибо больше работает!

P.S.
У меня есть код, который проверяет папку на файл WorldOfTanks.exe, и файл на версию.
Дело в том, что если выбираешь папку без файла WorldOfTanks.exe, то ошибку дает, что установка не возможна в другой путь.
А вот если взять файл с версией отличающейся с той, которая в установщике, то ошибки не будет.
Взгляните пожалуйста, если ли ошибка в коде? Заранее спасибо за ответ!
Код:

function FileVersion(const FilePath: String): String;
var
  oFS: Variant;
begin
  oFS:= CreateOleObject('Scripting.FileSystemObject');
    try
      Result:= oFS.GetFileVersion(FilePath);
    except
  end;
end;

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


saurn 24-09-2014 16:21 2406585

Цитата:

Цитата Kashtan007
Дело в том, что если выбираешь папку без файла WorldOfTanks.exe, то ошибку дает, что установка не возможна в другой путь.
А вот если взять файл с версией отличающейся с той, которая в установщике, то ошибки не будет. »

читать дальше »
Код:

function NextButtonClick(CurPageID: Integer): Boolean;
var
    msg, ver: string;
begin
    Result := True;

    case CurPageID of
        wpSelectDir:
        begin
            msg = '';

            if not FileExists( ExpandConstant( '{app}\WorldOfTanks.exe' ) ) then
              msg := 'Установка модов невозможна, так как по выбранному пути отсутствует клиент игры World of Tanks. Выберите правильный путь и продолжайте установку!'
            else if GetVersionNumbersString( ExpandConstant( '{app}\WorldOfTanks.exe' ), ver) then
                  if ( ver <> '0.9.2' ) then
                    msg := 'Моды не будут работать на данной версии игры! Моды предназначены для версии патча 0.9.2. Обновите клиент игры! ';

            Result := msg = '';

            if not Result then
              MsgBox( msg, mbError, MB_OK );
        end;
    end;
end;


Kashtan007 24-09-2014 16:46 2406594

saurn, выдало ошибку на этой строке
Код:


msg = '';

Я ее убрал и заработало. Эта строка вообще нужна?
Или заменить на это?
Код:

Result := msg = '';

saurn 24-09-2014 16:57 2406600

Цитата:

Цитата Kashtan007
Эта строка вообще нужна? »

Она задает начальное состояние переменной msg. Можно и без нее. msg и так будет пустой, если выполнены условия.
Цитата:

Цитата Kashtan007
выдало ошибку на этой строке »

Я пропустил двоеточие
Код:

msg := '';

Kashtan007 24-09-2014 22:30 2406714

vint56, как увеличить размер чекбоксов, если увеличиваешь картинку (на который чекбоксы нарисованы) то все становиться криво, а в коде я не нашел где можно изменить размер исходной картинки.

И как по-вашему примеру можно убрать фон из под StatusLabel и FilenameLabel?

Заранее спасибо за ответ!

roman_kudin@vk 24-09-2014 23:17 2406727

Добрый вечер. Подскажите как сделать, что бы при наведении на компонент, появлялось описание?
Брал код из справки, пишет ошибку: "descctrl.dll не найден". Можно как то реализовать без этой библиотеки?

saurn 24-09-2014 23:41 2406735

Цитата:

Цитата roman_kudin@vk
Добрый вечер. Подскажите как сделать, что бы при наведении на компонент, появлялось описание? »

#1308
Если поискать, еще с десяток постов с примерами найдется.

vint56 24-09-2014 23:46 2406736

Kashtan007, пример на ботве http://rghost.ru/58188776

roman_kudin@vk 24-09-2014 23:54 2406742

Цитата:

Цитата saurn
#1308
Если поискать, еще с десяток постов с примерами найдется. »

Не работает

Kashtan007 25-09-2014 00:02 2406747

vint56, спасибо!
Можно ли убрать фон из под StatusLabel и FilenameLabel?

saurn 25-09-2014 00:17 2406750

Цитата:

Цитата roman_kudin@vk
Не работает »

Пример рабочий(для большей уверенности проверил еще раз), а вот где вы его применили, а точнее как - это уже другой вопрос.
Цитата:

Цитата Kashtan007
Можно ли убрать фон из под StatusLabel и FilenameLabel? »

На юникодовой можно просто:
Код:

procedure InitializeWizard();
begin
    WizardForm.StatusLabel.Transparent := True;
end;

На ANSI придется создавать свой TLabel, так как TNewStaticText там не поддерживает прозрачность.

vint56 25-09-2014 00:21 2406754

Kashtan007, saurn уже ответил можно еще создать свой лейбл
читать дальше »

StatusLabel:= TLabel.Create(WizardForm);
with StatusLabel do
begin
Left:=ScaleX(95);
Top:= ScaleY(215);
Width:= ScaleX(600);
Height:= ScaleY(50);
AutoSize:= False;
Font.Name:= 'Georgia';
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.InstallingPage;
Caption:= ExpandConstant('{cm:Status}')
end;

FilenameLabel:= TLabel.Create(WizardForm);
with FilenameLabel do
begin
Left:= ScaleX(65);
Top:= ScaleY(275);
Width:= ScaleX(625);
Height:= ScaleY(20);
AutoSize:= False;
Font.Name:= 'Georgia'
Font.Size:= 10;
Font.Style:= [fsBold, fsItalic];
Font.Color:= ClWhite;
Transparent := True;
Parent:= WizardForm.InstallingPage;
end;

Kashtan007 25-09-2014 00:58 2406762

vint56, saurn, да у меня как раз юникод, все работает, но черный текст не видно, я ставлю белый, но он всеравно черный.
Делаю вот так:
Код:

WizardForm.StatusLabel.Font.Color:= clwhite;
WizardForm.FilenameLabel.Font.Color:= clwhite;

Мне кажется, что это из-за того, что я использую скин в установщике. Так ли это? Возможно ли решить проблему без редактирования самого скина?

saurn 25-09-2014 01:05 2406764

Цитата:

Цитата Kashtan007
Мне кажется, что это из-за того, что я использую скин в установщике. »

Нет. При использовании свойства Transparent слетает свойство Color. В данном случае лучше использовать TLabel.

Kashtan007 25-09-2014 01:08 2406767

saurn, спасибо за совет, попробую.

roman_kudin@vk 25-09-2014 20:38 2407053

Ребят, подскажите, как сделать окно инсталлятора шире?

Dodakaedr 25-09-2014 20:41 2407055

Цитата:

Цитата roman_kudin@vk
как сделать окно инсталлятора шире? »

Код:

procedure InitializeWizard();
begin
  with WizardForm do
  begin
    Width:=600;
  end;


roman_kudin@vk 25-09-2014 20:45 2407058

Сделало шыре. А
Как только передвинуть элемнты?

Dodakaedr 25-09-2014 20:45 2407059

Цитата:

Цитата roman_kudin@vk
как мне быть? »

Код:

with WizardForm do
begin
Width:=600;
end;


vint56 25-09-2014 20:50 2407062

roman_kudin@vk, можно так если есть в наличий InitializeWizard

procedure ResizeForm; //просто назови по другому
begin
with WizardForm do
begin
ClientWidth := ScaleX(600);
end;

procedure InitializeWizard();
begin
ResizeForm;
end;
скачай InnoUltra установи расширинный редактор там есть редактор форм

Dodakaedr 25-09-2014 21:35 2407079

Цитата:

Цитата roman_kudin@vk
Как только передвинуть элемнты? »

Задайте расположение элемента.
Пример:
Код:

procedure InitializeWizard();
begin
with WizardForm.DirEdit do
  begin
    SetBounds(ScaleX(10), ScaleY(153), ScaleX(295), ScaleY(20));
  end;

  with WizardForm.DirBrowseButton do
  begin
    SetBounds(ScaleX(320), ScaleY(153), ScaleX(80), ScaleY(22));
  end;
end;

p.s. SetBounds(ScaleX(отступ слева), ScaleY(отступ сверху), ScaleX(ширина элемента), ScaleY(высота элемента));
и так далее для каждого элемента который хотите переместить.

audiofeel 25-09-2014 22:52 2407098

есть много примеров и все они рабочие и тд, для запуска приложения "через кнопку" с параметрами и без , те же автораны и тд, но вот если возникла необходимость поменять параметр, как это сделать ?? не компилировать ж кому то самому по новой установщик, как это все дело организовать ??
допустим через NewEdit, то есть прописать там параметр и уже потом нажать на кнопку "вкл" с уверенностью что прога запустится с теми параметрами которые пользователь указал в NewEdit
как это все организовать ??

saurn 25-09-2014 23:09 2407109

audiofeel, Текст из TEdit можно без проблем передать запускаемой программе в качестве параметра комстроки, но только тот или те параметры, которые были предустановленны в запускаемой программе при компиляции.
читать дальше »
Код:

[Setup]
AppName=My Application
AppVersion=1.5
CreateAppDir=no
SolidCompression=yes
Compression=lzma/ultra
PrivilegesRequired=none
Uninstallable=no
OutputDir=...

[code]
var
    pEdit: TEdit;

procedure TButtonOnClick( Sender: TObject );
var
    erCode: Integer;
begin
    case ( Sender as TButton ).Tag of
        0: Exec( 'Setup.exe', pEdit.Text, ExpandConstant( '{src}' ), SW_SHOW, ewNoWait, erCode );
    end;
end;

procedure FormExec();
var
    Form: TSetupForm;
begin
    Form := CreateCustomForm();
    with Form do
    try
        ClientWidth := ScaleX( 473 );
        ClientHeight := ScaleY( 333 );
        BorderStyle := bsDialog;
        Position := poDesktopCenter;

        pEdit := TEdit.Create( Form );
        with pEdit do
        begin
            Parent := Form;
            SetBounds( ScaleX( 16 ), ScaleY( 40 ), ScaleX( 441 ), ScaleY( 21 ) );
            AutoSelect := False;
            Text := '/SILENT';
        end;

        with TButton.Create( Form ) do
        begin
            Parent := Form;
            SetBounds( ScaleX( 382 ), ScaleY( 300 ), ScaleX( 75 ), ScaleY( 25 ) );
            Tag := 0;
            Caption := SetupMessage( msgButtonOK );
            ModalResult := mrOk;
            OnClick := @TButtonOnClick;
        end;

        ModalResult := ShowModal();
    finally

        Free;
    end;
end;

function InitializeSetup(): Boolean;
begin
    FormExec();
    Result := False;
end;


acer0072 26-09-2014 11:09 2407209

del

Kashtan007 26-09-2014 12:34 2407245

Ребята у меня в установщике используется шрифт Proto Sans 00, дело в том, что когда установщик открывают в системе где нету шрифта то ставится стандартный Arial. Как упаковать шрифт в установщик, чтобы он отображался даже у тех у кого этот шрифт не установлен?

Заранее спасибо за ответ!

saurn 26-09-2014 16:31 2407330

Kashtan007, в шапке есть примеры El Sanchez
Свой шрифт в инсталляторе (вариант №1)
Свой шрифт в инсталляторе (вариант №2)

Dinvin4ester 27-09-2014 22:01 2407694

Ребята помогите -
http://sendfile.su/1028025
Нужно: из 2-х нерабочих кнопок отмены на страницы инсталлирования, сделать 1 рабочую.

dracosha 28-09-2014 12:18 2407834

Народ подскажите пожалуйста как в секции [Run] заморозить птичку на чекбоксе (т.е. как бы применить флаг fixed)?

nik1967 28-09-2014 14:13 2407871

Dinvin4ester, держи. Заодно перелопатил всё, что связано с IsDone - где ты такую версию древнюю откопал? Используй с теми файлами, что в архиве, я там многое обновил.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
dracosha, насколько мне не изменяет мой склероз, то
Код:

название_чекбокса.enabled:= false;

saurn 28-09-2014 17:21 2407944

dracosha
Код:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
PrivilegesRequired=none
OutputDir=...

[Files]
Source: compiler:license.txt; DestDir: {app};

[Run]
Filename: {app}\license.txt; Flags: postinstall shellexec;

[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
    case
CurPageID of
       
wpFinished: WizardForm.RunList.ItemEnabled[0] := False;
    end;
end;


Dinvin4ester 28-09-2014 18:06 2407965

nik1967,
Огромное вам спасибо. Мне один человек скинул этот исдан.

Dodakaedr 28-09-2014 21:26 2408060

Вложений: 1
Подскажите как при использовании BorderStyle := bsDialog; добавить свою иконку?
читать дальше »
Код:

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

[Files]
Source: "Icon Entry_3.ico"; DestDir: {tmp}; Flags: dontcopy

[Code]
function InitializeSetup(): Boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\Icon Entry_3.ico')) then ExtractTemporaryFile('Icon Entry_3.ico');
  Result := True;
end;

procedure NewIcon;
var
Icon: TNewIcon;
begin
Icon := TNewIcon.Create;
Icon.LoadFromFile(ExpandConstant('{tmp}\Icon Entry_3.ico'));
Icon.Width := 48;
Icon.Height := 48;
WizardForm.Icon.Handle := Icon.Handle;
end;

procedure InitializeWizard();
begin
NewIcon;
  with WizardForm do
  begin
    ClientHeight:=100;
    ClientWidth:=200;
    BorderStyle := bsDialog;
    Caption := 'xxx'
  end;
end;


saurn 28-09-2014 22:03 2408079

Вложений: 1
Dodakaedr, без изменения BorderStyle и BorderIcons. Иконка в ресурсах. Ненужные кнопки - свернуть и развернуть - отключены.
читать дальше »
Код:

#ifndef IS_ENHANCED
  #error Enhanced edition of Inno Setup (restools) is required to compile this script
#endif

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
PrivilegesRequired=none
IconResource=setup_icon:_IS_SETUP_ICON.ico
OutputDir=...


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


const
   
IMAGE_ICON    = 1;

    GWL_STYLE      = -16;

    WS_MINIMIZEBOX = $20000;
    WS_MAXIMIZEBOX = $10000;


function LoadImage( hInst: UINT; ImageName: String; ImageType: UINT; X, Y: Integer; Flags: UINT ): THandle; external 'LoadImage{#A}@user32.dll stdcall';
function SetWindowLong( Wnd: HWnd; Index: Integer; NewLong: Longint ): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function GetWindowLong( hWnd: HWND; nIndex: Integer ): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';


procedure InitializeWizard();
var
   
hIcon: THandle;
begin
   
SetWindowLong( WizardForm.handle, GWL_STYLE, GetWindowLong( WizardForm.handle, GWL_STYLE ) and ( not WS_MINIMIZEBOX ) and ( not WS_MAXIMIZEBOX ) );

    hIcon := LoadImage( HInstance, '_IS_SETUP_ICON', IMAGE_ICON, 16, 16, 0 );
    WizardForm.Icon.Handle := hIcon;
end;


В архиве скрипт и иконка

Dodakaedr 28-09-2014 22:21 2408089

Цитата:

Цитата saurn
В архиве скрипт и иконка »

Спасибо! А как указать свое имя иконки? Меняю здесь
Код:

IconResource=setup_icon:My_icon.ico
и здесь
Код:

hIcon := LoadImage( HInstance, 'My_icon', IMAGE_ICON, 48, 48, 0 );
Не срабатывает.

saurn 28-09-2014 22:42 2408096

Dodakaedr, стормозил спросонья)
Если нужно изменить имя иконки, меняйте его в секции Setup
Код:

IconResource=setup_icon:My_icon.ico
setup_icon - имя ресурса, его менять не нужно. My_icon.ico - имя иконки(можно указывать так же полный путь к файлу иконки, если он не рядом со скриптом)вот его и меняйте.

А в функции LoadImage должно быть указано имя ресурса( по типу _IS_имяресурса, но не имя иконки, то есть:
Код:

hIcon := LoadImage( HInstance, '_IS_SETUP_ICON', IMAGE_ICON, 48, 48, 0 );
P.S
Имя ресурса можно указать любое, например moya_iconka. Только не забудьте указать имя ресурса в функии, в данном случае _IS_MOYA_ICONKA

diman_21Ru 28-09-2014 23:15 2408108

Всем привет, кто может дать ботву на кнопки были раньше потерял

R.i.m.s.k.y. 29-09-2014 11:01 2408242

глянул в помощь: инно не умеет писать произвольные строки в текстовый файл?
пока выкрутился SetIniString, но может есть функция типа WriteLN() :)

nik1967 29-09-2014 11:17 2408247

R.i.m.s.k.y., а чем
Код:

function SaveStringToFile(const FileName, S: AnsiString; const Append: Boolean): Boolean;
function SaveStringsToFile(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean;
function SaveStringsToUTF8File(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean;

не угодили?

R.i.m.s.k.y. 29-09-2014 11:20 2408248

nik1967, я про них не знал

Dodakaedr 29-09-2014 15:49 2408382

Вложений: 1
Цитата:

Цитата diman_21Ru
кто может дать ботву на кнопки »

У меня такой пример есть

AlekseyPopovv 29-09-2014 17:57 2408430

Как сделать что бы значение AppId менялось в зависимости от выбранной версии?
То есть у меня в инсталле 4 версии: free, pro, bus, tec. При установке двух версий, в панели управления остаётся только последняя, то есть вторая затирает первую. Как избавиться от этого?

Dodakaedr 29-09-2014 20:14 2408500

Вложений: 1
Цитата:

Цитата AlekseyPopovv
Как сделать что бы значение AppId менялось в зависимости от выбранной версии? »

Попробуйте так.

AlekseyPopovv 29-09-2014 20:38 2408514

Dodakaedr
Спасибо. Я забыл дописать вот это:
читать дальше »

[code]
var
AppId: String;

diman_21Ru 29-09-2014 20:45 2408516

Как можно в даннном коде убрать галочку по умолчанию ?

[Tasks]
Name: tweaker; Description: WoT Tweaker Plus; Flags: dontinheritcheck
Name: tweaker\t1; Description: Убрать Отображение облаков; Flags: dontinheritcheck

Dodakaedr 29-09-2014 20:47 2408517

Цитата:

Цитата diman_21Ru
Как можно в даннном коде убрать галочку по умолчанию ? »

Код:

[Tasks]
Name: tweaker; Description: WoT Tweaker Plus; Flags: dontinheritcheck unchecked
Name: tweaker\t1; Description: Убрать Отображение облаков; Flags: dontinheritcheck unchecked


diman_21Ru 29-09-2014 20:53 2408521

Ребята возникла проблема в коде пишет игра не найдена в чем может быть проблема ?

function NextButtonClick(CurPageID: Integer): Boolean;
var
msg, ver: string;
begin
Result := True;

case CurPageID of
wpSelectDir:
begin
msg := '';

if not FileExists( ExpandConstant( '{app}\WorldOfTanks.exe' ) ) then
msg := 'Установка модов невозможна, так как по выбранному пути отсутствует клиент игры World of Tanks. Выберите правильный путь и продолжайте установку!'
else if GetVersionNumbersString( ExpandConstant( '{app}\WorldOfTanks.exe' ), ver) then
if ( ver <> '0.9.3' ) then
msg := 'Моды не будут работать на данной версии игры! Моды предназначены для версии патча 0.9.3 Обновите клиент игры! ';

Result := msg = '';

if not Result then
MsgBox( msg, mbError, MB_OK );
end;
end;
end;

Dodakaedr 29-09-2014 20:56 2408522

Цитата:

Цитата diman_21Ru
пишет игра не найдена »

Если она действительно есть, то правильно ли она прописана и соответствует ли версия файла.

diman_21Ru 29-09-2014 20:59 2408524

Dodakaedr, да и код ключа верный я могу конечно сменить на другой код и будет работать но тогда у меня почемуто прозрачность установщика портится

Dodakaedr, сравни этот скрипт он может как то повлеять на прозрачность установщика, заранее спасибо !
function FileVersion(const FilePath: String): String;
var
oFS: Variant;
begin
oFS:= CreateOleObject('Scripting.FileSystemObject');
try
Result:= oFS.GetFileVersion(FilePath);
except
end;
end;

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

Dodakaedr 29-09-2014 22:20 2408563

Цитата:

Цитата diman_21Ru
сравни этот скрипт он может как то повлеять на прозрачность установщика »

Скиньте лучше скрипт.

diman_21Ru 29-09-2014 22:44 2408576

Dodakaedr, Вообщем Уже дело не в Скрипте прозрачность теряю вроде как из за Windows 8.1 а на Windows 7 говорят норм вот два скрина :

diman_21Ru 29-09-2014 23:14 2408586

Dodakaedr, Не знаешь как прозрачность вернуть если сталкивался с windows 8.1 с проблемами

diman_21Ru 30-09-2014 10:05 2408696

Народ подскажите как исправить вот это посмотрите оба скрина первый запускается на Windows 7 второй на windows 8.1

Tco 03 30-09-2014 16:54 2408926

Всем привет. Столкнулся с проблемой… Нужно свернуть инсталлятор через секцию код, нажав на определённую кнопку. Знаю такой код: SendMessage(WizardForm.Handle, WM_SYSCOMMAND, 61472, 0); всё работает прекрасно, но он мне не подходит. Дело в том, что этот код использует WizardForm.Handle и нажав на кнопку свернуть инсталлятор, перестаёт работать другая «плюшка». Подскажите, пожалуйста, есть ли какая-нибудь другая альтернатива?

sergey3695 30-09-2014 18:40 2408975

diman_21Ru,
читать дальше »
Код:

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

[Files]                             
Source: "BGImage.bmp"; Flags: dontcopy solidbreak

[code ]
var
  BGBitmapImage: TBitmapImage;

procedure InitializeWizard();
var
  Panel: TPanel;
begin
  ExtractTemporaryFile('BGImage.bmp');

  BGBitmapImage := TBitmapImage.Create(WizardForm);
  BGBitmapImage.Parent := WizardForm;
  BGBitmapImage.Align := alClient;
  BGBitmapImage.SendToBack;

        WizardForm.OuterNotebook.Hide;
        WizardForm.NextButton.Hide;

  BGBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\BGImage.bmp'))

  Panel := TPanel.Create(WizardForm);
with Panel do begin
  Parent := WizardForm;
  SetBounds(ScaleX(33), ScaleY(12), ScaleX(321), WizardForm.InnerPage.Height - ScaleY(43));
//  BevelInner := bvNone;
//  BevelOuter:= bvNone;
//  BorderStyle := bsNone;
  BorderStyle := bsSingle;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WizardForm.Caption := 'Example_';
  WizardForm.NextButton.Hide;
  WizardForm.CancelButton.Caption := 'Close';
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := False;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm := False;
end;


8.1 Профессианальная. Все работает. Смотрите у ся в коде что-нибудь, так на глазок врят ли че сказать можно.
Tco 03, другая "плюшка". и гадай что там не работает тогда. :help:

diman_21Ru 30-09-2014 19:07 2408982

sergey3695, Скрипт кину сможете помоч

sergey3695 30-09-2014 20:30 2409037

diman_21Ru, Ну если у меня все будет работать, то нет. другой машинки для теста нету (на 8.1).

diman_21Ru 30-09-2014 20:47 2409049

sergey3695, Все уже понял ошибку надо было комплимировать на Unicode а не ANSI моя ошибка )

Dodakaedr, Все уже понял ошибку надо было комплимировать на Unicode а не ANSI моя ошибка )

AlekseyPopovv 30-09-2014 22:59 2409137

Как сделать что бы если файл q.xml присутствует в папке {userappdata}\x\z - то другой файл q.xml с папки {tmp} не копировался, а если файла q.xml нет в папке {userappdata}\x\z - то файл q.xml с папки {tmp} копировался?

читать дальше »
procedure CurStepChanged(CurStep: TSetupStep);
begin
if Installer.Checked then
CreateDir(ExpandConstant('{userappdata}\x'));
if Installer.Checked then
CreateDir(ExpandConstant('{userappdata}\x\z'));
if Installer.Checked then
if FileExists(ExpandConstant('{userappdata}\x\z\q.xml')) then
if not FileCopy(ExpandConstant('{tmp}\q.xml'), ExpandConstant('{userappdata}\z\z\q.xml'), False) then
end;

Dodakaedr 30-09-2014 23:02 2409139

Цитата:

Цитата AlekseyPopovv
Как сделать что бы если файл q.xml присутствует в папке »

А чем вам секция [Files] не угодила?
Код:

[Files]
Source: "q.xml"; DestDir: "{userappdata}\x\z"; Check: "InstallerCheck"; Flags: onlyifdoesntexist

или как-то так:
Код:

procedure CurStepChanged(CurStep: TSetupStep);
var
 PathName: String;
begin
if Installer.Checked then
begin
PathName:= ExpandConstant('{userappdata}\x\z');
ForceDirectories(PathName);
if not FileExists(ExpandConstant('{userappdata}\x\z\q.xml')) then
FileCopy(ExpandConstant('{tmp}\q.xml'), ExpandConstant('{userappdata}\x\z\q.xml'), False);
end;
end;


AlekseyPopovv 30-09-2014 23:05 2409140

Я и через секцию [Files] не знаю :idontnow: Хотелось бы узнать и так и так.

Dodakaedr
Спасибо. В моей справке описание этого флага на английском, а из перевода шибко не понял что этот флаг делает.

Dodakaedr 30-09-2014 23:15 2409147

Цитата:

Цитата AlekseyPopovv
Спасибо. »

Для этого есть "Полезное сообщение" :)

saurn 30-09-2014 23:46 2409156

AlekseyPopovv, Dodakaedr, в Check можно использовать встроенные булевые функции.
Код:

[Files]
Source: q.xml; DestDir: {userappdata}\x\z; Check: not FileExists(ExpandConstant('{userappdata}\x\z\q.xml'));


AlekseyPopovv 01-10-2014 00:27 2409175

Как добавить значок программы в панель управления?

Dodakaedr 01-10-2014 00:45 2409181

Цитата:

Цитата AlekseyPopovv
Как добавить значок программы в панель управления? »

Надо создать файл .cpl (такой тип dll-ки) Ссылка. Или Через реестр

Tco 03 01-10-2014 03:10 2409208

Цитата:

Цитата sergey3695
и гадай что там не работает тогда. »

Есть ли какой-нибудь другой код, кроме этого: SendMessage(WizardForm.Handle, WM_SYSCOMMAND, 61472, 0); чтобы свернуть инсталлятор?

Shift85 01-10-2014 09:16 2409269

Цитата:

Цитата Tco 03
Подскажите, пожалуйста, есть ли какая-нибудь другая альтернатива? »

Tco 03, Конечно со скином в паре... =)

читать дальше »
http://rghost.ru/58292609

sergey3695 01-10-2014 10:14 2409303

Shift85, там вообще-то SendMessage(WizardForm.Handle, WM_SYSCOMMAND, 61472, 0);
Tco 03, зачем тебе сворачивать его? кроме этого нету. ну по крайней менее я не знаю.

Tco 03 01-10-2014 13:33 2409389

Цитата sergey3695:
зачем тебе сворачивать его? »

В общем задача такая: В инсталляторе используется: WinTB.dll. Для отображения таскбара WinTB.dll использует: WizardForm.Handle. В инсталляторе, во время установки, есть возможность поиграть в мини-игру (так сказать для развлечения (если больше делать нечего)). Для этого дела есть естественно кнопка. Нажав на кнопку, инсталлятор сворачивается (так сказать, чтобы не мешал) и начинается игра. Сворачивается с помощью кода: SendMessage(WizardForm.Handle, WM_SYSCOMMAND, 61472, 0); Этот код и WinTB.dll используют: WizardForm.Handle. Так вот, нажав на кнопку, инсталлятор сворачивается и перестаёт работать таскбар, вместо таскбара там белое окно, так как при сворачивании, код: SendMessage(WizardForm.Handle, WM_SYSCOMMAND, 61472, 0); перехватил WizardForm.Handle. Дело в том, что если свернуть инсталлятор обычным способом (с помощью системного меню (там где сверху, справа, кнопки «Свернуть», «Закрыть»)) всё работает прекрасно. Вот поэтому и спрашиваю: -Как свернуть инсталлятор через секцию код, не использующий: WizardForm.Handle, или использующий тот же принцип, что и кнопка «Свернуть»?

ROMKA-1977 01-10-2014 16:25 2409498

Подскажите пожалуйста код чекбокса "Не создавать папку в меню Пуск"

habib2302 01-10-2014 16:32 2409503

ROMKA-1977,
Код:

[Setup]
AllowNoIcons=true

Код:

[Setup]
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes

[Tasks]
Name: group; Description: {cm:CreateGroupeIcon};

[Icons]
Name: {group}\имя ярлыка; Filename: {app}\{#MyAppExeName}; Tasks: group;

Код:

[Setup]
DefaultGroupName={#MyAppName}
AllowNoIcons=false

[Tasks]
Name: group; Description: {cm:CreateGroupeIcon};

[Icons]
Name: {group}\имя ярлыка; Filename: {app}\{#MyAppExeName}; Tasks: group;


ROMKA-1977 01-10-2014 16:57 2409521

habib2302, мне нужен код кастомного чекбокса через [code].

sergey3695 01-10-2014 17:33 2409546

Tco 03, никак больше не свернуть. Проще изменить положение формы, типо скрыть. а на форму где проигрывается игра сделать кнопку на показ. к обратному положению формы. только так наверное.

Dodakaedr 01-10-2014 17:42 2409552

Цитата:

Цитата ROMKA-1977
мне нужен код кастомного чекбокса через [code]. »

читать дальше »
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DisableProgramGroupPage=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Files]
Source: "C:\Program Files\Inno Setup 5 Ultra\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{commonprograms}\My Program\My programm"; Filename: "{app}\MyProg.exe"; Check: "IconCheck";
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe";

[Code]
var
  Pusk: TNewCheckBox;

function IconCheck: Boolean;
begin
Result:= Pusk.Checked;
end;

procedure InitializeWizard();
begin
  Pusk := TNewCheckBox.Create(WizardForm);
  with Pusk do
  begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(1);
    Top := ScaleY(110);
    Width := ScaleX(200);
    Height := ScaleY(17);
    Caption := 'Ярлык в меню «Пуск»';
    Checked := True;
  end;
end;


Nordek 01-10-2014 18:53 2409573

ROMKA-1977, Если при пробном воспроизведении примера возникнет остановка на месте [Files] и вызовет ошибку: Source file "C:\Program Files\Inno Setup 5 Ultra\Examples\MyProg.exe" does not exist, то замените:
Код:

Source: "C:\Program Files\Inno Setup 5 Ultra\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

на
Код:

Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

Dodakaedr, Inno Ultra установлена не у всех.

El Sanchez 01-10-2014 19:56 2409598

Цитата:

Цитата Tco 03
Как свернуть инсталлятор через секцию код, не использующий: WizardForm.Handle, или использующий тот же принцип, что и кнопка «Свернуть»? »

Tco 03,
Код:

PostMessage(WizardForm.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0);

ROMKA-1977 01-10-2014 20:10 2409611

Dodakaedr, не то. Своей функции не выполняет. Гдето встречал на просторах форума но забыл сохранить.

Dodakaedr 01-10-2014 20:13 2409612

Цитата:

Цитата ROMKA-1977
Своей функции не выполняет. »

А какая должна быть функция? Может так?
читать дальше »
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DisableProgramGroupPage=yes

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Files]
Source: "C:\Program Files\Inno Setup 5 Ultra\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{commonprograms}\My Program\My programm"; Filename: "{app}\MyProg.exe"; Check: "IconCheck";
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe";

[Code]
var
  Pusk: TNewCheckBox;

function IconCheck: Boolean;
begin
Result:= not Pusk.Checked;
end;

procedure InitializeWizard();
begin
  Pusk := TNewCheckBox.Create(WizardForm);
  with Pusk do
  begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(1);
    Top := ScaleY(110);
    Width := ScaleX(220);
    Height := ScaleY(17);
    Caption := 'Не создавать папку в меню Пуск';
    Checked := True;
  end;
end;


ROMKA-1977 01-10-2014 20:40 2409620

Цитата:

Цитата Dodakaedr
А какая должна быть функция? Может так? »

Это просто чекбокс. Кнопку "Обзор" и GroupEdit не отключает.

Есть пример не полностью рабочий - на странице ReadyPage при включеном чекбоксе отображается опция Папка в меню «Пуск»:Name.
читать дальше »

AppName=My program
VersionInfoVersion=5.0
AppVerName=My program
DefaultDirName={pf}\My program
DefaultGroupName=My program


[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[Icons]
Name: {group}\MyProg; Filename: {app}; WorkingDir: {app}

[code]
var
No_Icons_CheckBox: TNewCheckBox;


function Is_No_Ico_CheckBox_Checked: Boolean;
begin
Result := No_Icons_CheckBox.Checked;
end;


procedure No_Icons_CheckBox_OnClick(Sender: TObject);
begin
with WizardForm do
begin
GroupEdit.Enabled := not TNewCheckBox(Sender).Checked;
GroupBrowseButton.Enabled := not TNewCheckBox(Sender).Checked;
end;
end;


procedure InitializeWizard();
begin
No_Icons_CheckBox := TNewCheckBox.Create(WizardForm);
with No_Icons_CheckBox do
begin
Parent := WizardForm.SelectProgramGroupPage;
SetBounds(ScaleX(32), ScaleY(168), ScaleX(200), ScaleY(17));
Caption := SetupMessage(msgNoProgramGroupCheck2);
OnClick :=@No_Icons_CheckBox_OnClick;
end;
end;

Dodakaedr 01-10-2014 21:24 2409639

Цитата:

Цитата ROMKA-1977
Это просто чекбокс. Кнопку "Обзор" и GroupEdit не отключает. »

А чем стандартная кнопка не устроила?

ROMKA-1977 01-10-2014 21:28 2409640

Цитата:

Цитата Dodakaedr
А чем стандартная кнопка не устроила? »

Кастомный нужен для прозрачности фона текста (Transparent)

Dinvin4ester 01-10-2014 22:41 2409676

Ребята, как добавить NFO , как тут - http://i64.fastpic.ru/big/2014/1001/...1ea5b4d91e.png , http://i64.fastpic.ru/big/2014/1001/...c75c8eac02.png
скрипт - http://rghost.ru/58305419
пытался добавить через месседж, но не видит, а в скрипте главном не могу. Прошу помощи..

nik1967 02-10-2014 00:18 2409726

ROMKA-1977,
совсем недавно подобный пример давал
Код:

[Setup]
AppName=My program
VersionInfoVersion=5.0
AppVerName=My program
DefaultDirName={pf}\My program
DefaultGroupName=My program
OutputDir=.

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[Icons]
Name: {group}\MyProg; Filename: {app}; WorkingDir: {app}

[code]
var
  No_Icons_CheckBox: TNewCheckBox;

procedure No_Icons_CheckBox_OnClick(Sender: TObject);
begin
  WizardForm.NoIconsCheck.Checked:= TNewCheckBox(Sender).Checked;
end;


procedure InitializeWizard();
begin
  No_Icons_CheckBox:= TNewCheckBox.Create(WizardForm);
  with No_Icons_CheckBox do begin
        Parent:= WizardForm.SelectProgramGroupPage;
        SetBounds(ScaleX(32), ScaleY(168), ScaleX(200), ScaleY(17));
        Caption:= SetupMessage(msgNoProgramGroupCheck2);
        OnClick:=@No_Icons_CheckBox_OnClick;
  end;
end;


saurn 02-10-2014 02:43 2409761

Цитата:

Цитата Dinvin4ester
Ребята, как добавить NFO »

Скачать

Dinvin4ester 02-10-2014 12:45 2409893

saurn,
Cпасибо, но что-то ошибку выдает тут
читать дальше »
begin
case ( Sender as TButton ).Tag of
10: MsgBoxEx(Application.Handle, 'Òåêñò ñîîáùåíèÿ', 'Èíôîðìàöèÿ', MB_OK + MB_ICONINFORMATION, 0, 0);
end;
end;

saurn 02-10-2014 13:32 2409926

Цитата:

Цитата Dinvin4ester
Cпасибо, но что-то ошибку выдает тут »

Замените на MsgBox
Код:

10: MsgBox( 'Текст сообщения', mbInformation, MB_OK );
Или компилируйте на расширенной версии.

Dinvin4ester 02-10-2014 13:40 2409931

saurn,
Компилирую на расширенной, поменял, на той же строке ошибка.

saurn 02-10-2014 14:01 2409942

Цитата:

Цитата Dinvin4ester
на той же строке ошибка. »

Перепроверил. Ошибок нет. Смотрите у себя. Если что, вот вам вариант с формой.
Замените procedure TButtonOnClick( Sender: TObject ) на ту, что под спойлером.
читать дальше »
Код:

procedure TButtonOnClick( Sender: TObject );
var
    iForm: Tform;
begin
    case ( Sender as TButton ) of
        NFOBtn:
        begin
            iForm := TForm.Create( nil );
            with iForm do
            try
                BorderIcons := [];
                ClientWidth := ScaleX( 300 );
                ClientHeight := ScaleY( 300 );
                Caption := 'Информация';
                Position := poScreenCenter;

                with TBevel.Create( nil ) do
                begin
                    Parent := iForm;
                    SetBounds( ScaleX( 8 ), ScaleY( 8 ), ScaleX( 284 ), ScaleY( 249 ) );
                    Shape := bsFrame;
                end;

                with TNewStaticText.Create( nil ) do
                begin
                    Parent := iForm;
                    SetBounds( ScaleX( 12 ), ScaleY( 12 ), ScaleX( 276 ), ScaleY( 241 ) );
                    AutoSize := False;
                    Caption := 'Информация:' + #13#10 +
                              'Версия:'    + #13#10 +
                              'И т.д.';
                    WordWrap := True;
                end;

                with TNewButton.Create( nil ) do
                begin
                    Parent := iForm;
                    SetBounds( ScaleX( 112 ), ScaleY( 266 ), ScaleX( 76 ), ScaleY( 25 ) );
                    ModalResult := mrOk;
                    Caption := 'Закрыть';
                end;

                ModalResult := ShowModal();
            finally

                Free;
            end;
        end;
    end;
end;


А текст ошибки какой?

Dinvin4ester 02-10-2014 14:52 2409984

saurn,
http://i63.fastpic.ru/big/2014/1002/...cb17e62c21.png И http://i63.fastpic.ru/big/2014/1002/...c432639227.png
заменил, ошибка осталась.

saurn 02-10-2014 15:05 2409994

Цитата:

Цитата Dinvin4ester
заменил, ошибка осталась. »

Без конструкции case of. По сути она там и не нужна.
читать дальше »
Код:

procedure TButtonOnClick( Sender: TObject );
var
    iForm: Tform;
begin
    iForm := TForm.Create( nil );
    with iForm do
    try
        BorderIcons := [];
        ClientWidth := ScaleX( 300 );
        ClientHeight := ScaleY( 300 );
        Caption := 'Информация';
        Position := poScreenCenter;

        with TBevel.Create( nil ) do
        begin
            Parent := iForm;
            SetBounds( ScaleX( 8 ), ScaleY( 8 ), ScaleX( 284 ), ScaleY( 249 ) );
            Shape := bsFrame;
        end;

        with TNewStaticText.Create( nil ) do
        begin
            Parent := iForm;
            SetBounds( ScaleX( 12 ), ScaleY( 12 ), ScaleX( 276 ), ScaleY( 241 ) );
            AutoSize := False;
            Caption := 'Информация:' + #13#10 +
                      'Версия:'    + #13#10 +
                      'И т.д.';
            WordWrap := True;
        end;

        with TNewButton.Create( nil ) do
        begin
            Parent := iForm;
            SetBounds( ScaleX( 112 ), ScaleY( 266 ), ScaleX( 76 ), ScaleY( 25 ) );
            ModalResult := mrOk;
            Caption := 'Закрыть';
        end;

            ModalResult := ShowModal();
        finally

            Free;
        end;
end;


Dinvin4ester 02-10-2014 15:28 2410008

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

saurn 02-10-2014 15:41 2410017

Цитата:

Цитата Dinvin4ester
Как сделать выбор установки русского и английского языка ? »

Код:

[Languages]
Name: en; MessagesFile: "compiler:Default.isl"
Name: ru; MessagesFile: "compiler:Languages\Russian.isl"

[Messages]
en.BeveledLabel=English
ru.BeveledLabel=Русский

[CustomMessages]
//сообщения для en
en.MyDescription=My description
en.MyAppName=My Program
en.MyAppVerName=My Program %1
//сообщения для ru
ru.MyDescription=Мое описание
ru.MyAppName=Моя программа
ru.MyAppVerName=Моя программа %1

Стандартные Messages переводить не требуется, кроме BeveledLabel. А кастомные сообщения нужно будет писать отдельно для каждого языка. en. и ru. в скрипте - это указатели на необходимый язык в секции Languages.

diman_21Ru 02-10-2014 15:44 2410019

Ищу самый простой способ добавлении кнопок в низ установщика , заранее блогадарю

saurn 02-10-2014 15:49 2410024

diman_21Ru,
Код:

procedure InitializeWizard();
begin
  with TNewButton.Create(WizardForm) do
  begin
    Parent := WizardForm;
    Left := ScaleX(8);
    Top := ScaleY(327);
    Width := ScaleX(75);
    Height := ScaleY(25);
    Caption := 'NewButton1';
  end;
end;


diman_21Ru 02-10-2014 15:57 2410026

saurn, А кликабельность как добавить к нему

saurn 02-10-2014 16:01 2410034

Цитата:

Цитата diman_21Ru
А кликабельность как добавить к нему »

Код:

procedure btnOnClick(Sender: TObject);
begin
    MsgBox( 'Click', mbInformation, MB_OK );
end;

procedure InitializeWizard();
begin
  with TNewButton.Create(WizardForm) do
  begin
    Parent := WizardForm;
    Left := ScaleX(8);
    Top := ScaleY(327);
    Width := ScaleX(75);
    Height := ScaleY(25);
    Caption := 'NewButton1';
    OnClick := @btnOnClick;
  end;
end;


AlekseyPopovv 02-10-2014 16:44 2410053

Кто ни будь знает как поменять "/VERYSILENT" на "/V"?

Dinvin4ester 02-10-2014 17:00 2410067

saurn,
http://i65.fastpic.ru/big/2014/1002/...8065857409.png
никак не получается, выходят 3 таких.

Dodakaedr 02-10-2014 22:06 2410269

Цитата:

Цитата AlekseyPopovv
Кто ни будь знает как поменять "/VERYSILENT" на "/V"? »

"/VERYSILENT" не меняется, только если переделать исходник программы.

Serega 03-10-2014 13:32 2410544

Цитата:

Цитата AlekseyPopovv
как поменять "/VERYSILENT" на "/V"? »

Пример

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl

[Code]
function InitializeSetup(): Boolean;
var
 
i, ResultCode: Integer;
begin
  // проверяем с 1, потому что ParamStr(0) всегда будет имя исполняемого файла
  for i := 1 to ParamCount do
    if
LowerCase(ParamStr(i)) = '/v' then
      begin
       
Exec(ExtractFileName(ExpandConstant('{srcexe}')), '/verysilent', ExtractFileDir(ExpandConstant('{srcexe}')), SW_SHOWNORMAL, ewNoWait, ResultCode);
        Exit;
      end;
  Result := True;
end;


saurn 03-10-2014 15:33 2410605

Цитата:

Цитата Dinvin4ester
никак не получается, выходят 3 таких. »

Секцию Languages замените на эту:
Код:

[Languages]
Name: en; MessagesFile: "compiler:Default.isl"
Name: ru; MessagesFile: "compiler:Languages\Russian.isl"


Dinvin4ester 03-10-2014 16:45 2410649

saurn,
Заменил, осталось все по прежнему.

vint56 03-10-2014 17:06 2410656

Dinvin4ester, ясли ты используеш InnoUltra то там по умолчанию русский Default.isl
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
Name: english; MessagesFile: compiler:Languages\English.isl

[CustomMessages]
russian.WelcomeLabel1=Вас приветствует мастер установки игры {#GameName}.
russian.WelcomeLabel2=Программа установит игру {#GameName} на Ваш компьютер. %nРекомендуется закрыть антивирусные пакеты и все прочие приложения перед тем, как продолжить. %nНажмите «Далее», что бы продолжить установку, или «Отмена», чтобы выйти из программы установки.

english.WelcomeLabel1 = Welcome to Setup Game {#GameName}.
english.WelcomeLabel2 = The program will install the game {#GameName} on your computer. %nIt is recommended to close the anti-virus packages and all other applications before continuing.гивфеу

Dinvin4ester 03-10-2014 22:39 2410761

vint56,
Благодарю. Все получилось.

Nordek 03-10-2014 22:58 2410764

Цитата:

Цитата Dinvin4ester
никак не получается, выходят 3 таких. »

Не увидел. Всё нормально.
Цитата:

Цитата Dinvin4ester
Все получилось. »

Ув. пользователи! Предупреждайте заранее: чем вы пользуетесь, чтоб не угадывать.

Уже писал:
Цитата:

Цитата Nordek
Inno Ultra установлена не у всех. »

А устанавливать, проверять, затем вычищать мусор за Inno Ultra - очень неудобно.

Irenis 04-10-2014 16:20 2410960

Добрый день! Помогите пожалуйста извлечь скрипт из установщика. Пробовала программой innounpacker, но написало, что у меня старая версия, обновите программу. Вроде удалила старую версию, но новую поставить не получается, запускаю exe, а ничего не происходит.
Залила на какой то файлообменник, вот ссылка: http://www.fayloobmennik.net/4160636 Спасибо.

vint56 04-10-2014 17:37 2410971

Irenis, я распаковал InnoExtractor 4.8.1.160
http://rghost.ru/58349915

Dodakaedr 04-10-2014 20:57 2411017

Serega, Как сделать чтобы ваш код дружил и с другими ключами? При установке или распаковке папки по умолчанию разные. В частности используются ключи /P и /D. При наличии ключа /P происходит распаковка, а при - /D указывается путь к конечной папке установки или распаковки. Попробовал так, не работает.
Код:

function InitializeSetup2(): Boolean;
var
  i, ResultCode: Integer;
begin
  // проверяем с 1, потому что ParamStr(0) всегда будет имя исполняемого файла
  for i := 1 to ParamCount do
    if LowerCase(ParamStr(i)) = '/v' then
      begin
        Exec(ExtractFileName(ExpandConstant('{srcexe}')), '/verysilent', ExtractFileDir(ExpandConstant('{srcexe}')), SW_SHOWNORMAL, ewNoWait, ResultCode);
        Exit;
      end;

    if LowerCase(ParamStr(i)) = '/v /p' then
      begin
        Exec(ExtractFileName(ExpandConstant('{srcexe}')), '/verysilent /p', ExtractFileDir(ExpandConstant('{srcexe}')), SW_SHOWNORMAL, ewNoWait, ResultCode);
        Exit;
      end;

  Result := True;
end;


Nordek 05-10-2014 01:18 2411117

Irenis, Смотрите первое сообщение соседней темы:
Цитата:

Цитата El Sanchez
Показать/скрыть: Различные сборки, русификаторы и полезные ссылки » Показать/скрыть: Распаковщики инсталляторов Inno Setup: »
  • Inno Setup Unpacker - стандартная версия 0.40 [20.12.2013];
  • Inno Setup Unpacker enhanced - расширенная версия 0.38 [??.??.????];
  • HavySoft InnoExtractor - стандартная версия 4.8.1.157 [09.07.2014];
  • InnoEx - стандартная версия 0.5 [25.06.2014];
»


На примере консольной утилиты Inno Setup Unpacker:

Код:

:: Каталог для извлечения содержимого
set DIR="C:\Stronghold"

:: Исполняемый файл
set EXE="C:\Stronghold_setup.exe"

innounp.exe -x -a -d%DIR% %EXE%


Serega 05-10-2014 13:09 2411226

Цитата:

Цитата Dodakaedr
дружил и с другими ключами? »

Предполагаю, что обработка других ключей у вас уже реализована, тогда в вашем случае можно написать так:
Пример

Код:

function InitializeSetup: Boolean;
var
 
i, ResultCode: Integer;
  param: string;
  IsNeedRestart: Boolean;
begin
 
IsNeedRestart := False;
  // проверяем с 2, ParamStr(0) = ...\setup.tmp, а ParamStr(1) = ...\setup.exe
 
for i := 2 to ParamCount do
    if
LowerCase(ParamStr(i)) = '/v' then
      begin
       
param := param + ' /verysilent';
        IsNeedRestart := True;
      end
    else
     
// запишем остальные ключи, если есть
     
param := param + #32 + ParamStr(i);
  if IsNeedRestart then
    begin
     
Exec(ExtractFileName(ExpandConstant('{srcexe}')), TrimLeft(param), ExtractFileDir(ExpandConstant('{srcexe}')), SW_SHOWNORMAL, ewNoWait, ResultCode);
      Exit;
    end;
  Result := True;
end;


diman_21Ru 05-10-2014 13:50 2411242

Как можно в стрипт вывести дополнительную страницу для Tasks.

Dodakaedr 05-10-2014 16:53 2411336

Цитата:

Цитата Serega
тогда в вашем случае можно написать так: »

Благодарю, все прекрасно работает!

Tco 03 05-10-2014 17:19 2411352

Господа. Знаю такой код:
читать дальше »
Код:

[Setup]
AppName=MyProg
AppVerName=MyProg
OutputDir=D:\Репаки\MyProg
DefaultDirName={pf}\MyProg

[Files]
Source: compiler:innocallback.dll; Flags: dontcopy
Source: D:\Program\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[ code]
const
oneMB=1024*1024;

type
TTimerProc = procedure(HandleW, Msg, idEvent, TimeSys: LongWord);

var
FullSize: Extended;
TimerID: LongWord;

function WrapTimerProc(callback: TTimerProc; Paramcount: Integer): longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): longword; external 'SetTimer@user32';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32 stdcall delayload';

Function NumToStr(Float: Extended): String;
Begin
Result:= Format('%.2n', [Float]); StringChange(Result, ',', '.');
while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Pos('.', Result) > 0) do
SetLength(Result, Length(Result)-1);
End;

Function Size64(Hi, Lo: Integer): Extended;
Begin
Result:= Lo; if Lo< 0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2; for Hi:= Hi-1 Downto 0 do Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;
End;

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; {Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 2х знаков после запятой)}
Begin
if not noMB then Result:= NumToStr(Int(Bytes)) +' Mb' else
if Bytes < 1024 then if Bytes = 0 then Result:= '0' else Result:= NumToStr(Int(Bytes)) +' Bt' else
if Bytes/1024 < 1024 then Result:= NumToStr(round((Bytes/1024)*10)/10) +' Kb' else
If Bytes/oneMB < 1024 then Result:= NumToStr(round(Bytes/oneMB*100)/100) +' Mb' else
If Bytes/oneMB/1000 < 1024 then Result:= NumToStr(round(Bytes/oneMB/1024*1000)/1000) +' Gb' else
Result:= NumToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Tb';
End;

function CalcDirSize(const fromDir, fileMask: string; SubDirsAllow: Boolean): Extended;
var
FSR, DSR: TFindRec; FindResult: Boolean; APath: string;
Begin
APath:= AddBackslash(fromDir);
FindResult:= FindFirst(APath + fileMask, FSR);
Try
while FindResult do
begin
if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then Result:= Result + Size64(FSR.SizeHigh, FSR.SizeLow)
FindResult:= FindNext(FSR);
end;
FindResult := FindFirst(APath + '*.*', DSR);
while FindResult and SubDirsAllow do
begin
if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then
{Recursion} Result:= Result + CalcDirSize(APath + DSR.Name, fileMask, SubDirsAllow);
// если есть хоть одна рекурсия, то подсчёт почему-то не прерывается
FindResult:= FindNext(DSR);
end;
Finally
FindClose(FSR); FindClose(DSR);
end;
End;

procedure GetExtractSize();
begin
//Так как ClcDirSize суммирует полученные размеры, то сначала обнуляем счетчик
FullSize:=0;
FullSize:=CalcDirSize(ExpandConstant('{app}'), '*', true)
WizardForm.StatusLabel.Caption:= 'Общий объем извлеченных файлов ' + ByteOrTB(FullSize, true)
end;

Procedure MyTimerProc(h, msg, idevent, dwTime: Longword);
Begin
if WizardForm.CurPageID = wpInstalling then GetExtractSize();
End;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
TimerID:= SetTimer(0, 0, 500 {полсекунды}, WrapTimerProc(@MyTimerProc, 4));
end;
end;


Всё конечно работает прекрасно, но дело в том, что в папке установки уже присутствуют файлы. Из-за этого размер извлечённых файлов естественно считывается неправильный. Подскажите, пожалуйста, возможно ли как-то считывать файлы из самого инсталлятора, а не из папки?

Dodakaedr 05-10-2014 19:51 2411394

Цитата:

Цитата diman_21Ru
Как можно в стрипт вывести дополнительную страницу для Tasks. »

Вот так
читать дальше »
Код:

[Setup]
AppName=My Program
AppVerName=My Program ver.1.5
DefaultDirName={pf}\My Program

[Tasks]
Name: desktopicon; Description: Create a &desktop icon; GroupDescription: Additional icons:
Name: quicklaunchicon; Description: Create a &Quick Launch icon; GroupDescription: Additional icons:; Flags: unchecked
Name: associate; Description: &Associate files; GroupDescription: Other tasks:; Flags: unchecked

[Code]
var
Page: TInputOptionWizardPage;
procedure InitializeWizard();
begin
Page := CreateInputOptionPage(wpSelectTasks,
'Выберите дополнительные задачи', 'Какие дополнительные задачи необходимо выполнить?',
'Выберите дополнительные задачи, которые должны выполниться при установке My Program, после этого нажмите «Далее»:',
False, False);

{0} Page.Add('Дополнительная задача 1');
{1} Page.Add('Дополнительная задача 2');
{2} Page.Add('Дополнительная задача 3');
{3} Page.Add('Дополнительная задача 4');
{4} Page.Add('Дополнительная задача 5');
{5} Page.Add('Дополнительная задача 6');
{6} Page.Add('Дополнительная задача 7');
{7} Page.AddEx('Дополнительное ПО', 0, True);
{8} Page.AddEx('DirectX', 1, False);
{9} Page.AddEx('AudioDriver', 1, False);
//Page.Values[7] := True;
//Page.Values[8] := True;
end;


diman_21Ru 05-10-2014 19:55 2411396

Как сделать страницу с лицензией и FAQ ровнее

Dodakaedr 05-10-2014 19:58 2411397

Цитата:

Цитата diman_21Ru
Как сделать страницу с лицензией и FAQ ровнее »

В смысле ровнее?

diman_21Ru 05-10-2014 19:58 2411399

Dodakaedr, Окно с Файлом лицензии сделать побольше

Dodakaedr 05-10-2014 20:04 2411405

Цитата:

Цитата diman_21Ru
Окно с Файлом лицензии сделать побольше »

Так задайте размер
Код:

procedure InitializeWizard();
begin
 WizardForm.LicenseMemo.Width:=600;
 WizardForm.LicenseMemo.Height:=400;
end;


diman_21Ru 05-10-2014 20:13 2411408

Dodakaedr, Кнопки пропали согласится

Dodakaedr 05-10-2014 20:21 2411416

Цитата:

Цитата diman_21Ru
Кнопки пропали согласится »

Соответственно и их нужно переместить
Код:

procedure InitializeWizard();
begin
 WizardForm.LicenseMemo.Width:=600;
 WizardForm.LicenseMemo.Height:=400;
 WizardForm.LicenseAcceptedRadio.SetBounds(ScaleX(300), ScaleY(410), ScaleX(WizardForm.LicenseAcceptedRadio.Width), ScaleY(WizardForm.LicenseAcceptedRadio.Height));
 WizardForm.LicenseNotAcceptedRadio.SetBounds(ScaleX(300), ScaleY(430), ScaleX(WizardForm.LicenseNotAcceptedRadio.Width), ScaleY(WizardForm.LicenseNotAcceptedRadio.Height));
end;


diman_21Ru 05-10-2014 20:43 2411428

Dodakaedr, Дружище может ты знаешь и FAQ как настроить его просто нет в настройках скрипта как с лицензией вот скрин

Dodakaedr 05-10-2014 20:48 2411431

Цитата:

Цитата diman_21Ru
FAQ как настроить »

Так само сделайте и для того элемента которым используется ваш FAQ.

diman_21Ru 05-10-2014 20:57 2411438

Dodakaedr, Знать бы как ещё )

Dodakaedr 05-10-2014 20:59 2411440

diman_21Ru, Покажите тот кусок, где используется FAQ или скиньте скрипт.

diman_21Ru 05-10-2014 21:13 2411454

Dodakaedr, InfoBeforeFile=faq.rtf

Dodakaedr 05-10-2014 21:16 2411456

Цитата:

Цитата diman_21Ru
InfoBeforeFile=faq.rtf »

Код:

procedure InitializeWizard();
begin
 WizardForm.InfoBeforeMemo.Width:=600;
 WizardForm.InfoBeforeMemo.Height:=400;
end;


Serega 05-10-2014 22:01 2411480

Цитата:

Цитата Tco 03
размер извлечённых файлов естественно считывается неправильный. Подскажите, пожалуйста, возможно ли как-то считывать файлы из самого инсталлятора »

Пример

Код:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
ru.FSize=Общий объем извлеченных файлов %s
ru.Bt=Бт
ru.Kb=Кб
ru.Mb=Мб
ru.Gb=Гб
ru.Tb=Тб

[Files]
Source: compiler:innocallback.dll; Flags: dontcopy
Source: D:\Program\*; DestDir: {app}; AfterInstall: IncSize; Flags: ignoreversion recursesubdirs createallsubdirs

[Code]
type
 
TTimerProc = procedure(HandleW, Msg, idEvent, TimeSys: LongWord);

var
 
FullSize: Extended;
  TimerID: LongWord;

function WrapTimerProc(callback: TTimerProc; Paramcount: Integer): LongWord; external 'wrapcallback@files:innocallback.dll stdcall delayload';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall delayload';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall delayload';

function GetFileSize(const FileName: string): Extended;
{ определяет размер файла, в отличии от встроенной функции FileSize не имеет ограничения в 2 Гб }
var
 
FindData: TFindRec;
  Lo, Hi: Integer;
begin
  if
FindFirst(FileName, FindData) then
    try
     
Lo := FindData.SizeLow;
      Hi := FindData.SizeHigh;
      Result := Lo;
      if Lo < 0 then
       
Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
      for Hi := Hi - 1 downto 0 do
       
Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
    finally
     
FindClose(FindData);
    end;
end;

procedure IncSize;
var
 
Size: Integer;
begin
 
{ FileSize имеет ограничение в 2 Гб, но на маленьких файлах работать должен шустрее }
 
if FileSize(ExpandConstant(CurrentFileName), Size) then
   
FullSize := FullSize + Extended(Size);
end;

function BytesToReadable(Bytes: Extended; Signs: Integer): string;
{ перевод числа в значение Бт/Кб/Мб/Гб/Тб (Signs - количество знаков после запятой)}
var
 
n: Integer;
begin
 
n := 0;
  while Int(Bytes) > 1023 do
    begin
     
Bytes := Bytes/1024;
      n := n + 1;
    end;
  case n of                                   
   
0: Result := FloatToStr(Int(Bytes)) + #32 + CustomMessage('Bt');                  // Байт
   
1: Result := Format('%.' + IntToStr(Signs) + 'n ' + CustomMessage('Kb'), [Bytes]); // Килобайт
   
2: Result := Format('%.' + IntToStr(Signs) + 'n ' + CustomMessage('Mb'), [Bytes]); // Мегабайт
   
3: Result := Format('%.' + IntToStr(Signs) + 'n ' + CustomMessage('Gb'), [Bytes]); // Гигабайт
   
4: Result := Format('%.' + IntToStr(Signs) + 'n ' + CustomMessage('Tb'), [Bytes]); // Терабайт
 
end;
  StringChange(Result, ',', '.');
end;

procedure MyTimerProc(HandleW, Msg, idEvent, TimeSys: LongWord);
begin
 
WizardForm.StatusLabel.Caption := Format(CustomMessage('FSize'), [BytesToReadable(FullSize, 2)]);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if
CurStep = ssInstall then
   
TimerID := SetTimer(0, 0, 500 {полсекунды}, WrapTimerProc(@MyTimerProc, 4));
end;

procedure DeinitializeSetup();
begin
 
KillTimer(0, TimerID);
end;


diman_21Ru 06-10-2014 14:17 2411729

Вставил код на музыку выдает ошибку с чем связана подскажите пожалуйста вот скрин :

Tco 03 06-10-2014 14:21 2411730

Цитата:

Цитата diman_21Ru
Вставил код на музыку выдает ошибку »

Ошибка сама за себя говорит, то есть нет начала, Begin.

diman_21Ru 06-10-2014 16:19 2411789

Tco 03, Другая теперь )

Nordek 06-10-2014 16:37 2411801

Цитата:

Цитата diman_21Ru
Вставил код на музыку выдает ошибку с чем связана »

Цитата:

Цитата diman_21Ru
Другая теперь ) »

Код твой, разбирайся сам. По скрину не понятно. Не видно что выше и что ниже.
Нужно было end; убрать, сейчас уже нужно убирать end; и begin.

diman_21Ru 06-10-2014 16:38 2411803

Nordek, А как же помощь разбирайся сам грубоват ответил однако .((

Nordek 06-10-2014 16:47 2411807

Цитата:

Цитата diman_21Ru
А как же помощь разбирайся сам грубоват ответил однако .(( »

Это вам для мотивации. Нужно предоставлять так, чтоб было понятнее.
Можно топтаться на одном месте и с каждым шагом, могут появляться те же ошибки в разных местах.

1. Перепечатывать со скриншота очень не комфортно, а вам нужно представить код - это как минимум: чтоб вы наглядно поняли.
Сделать скриншот и выложить на хостинг изображений, вы не поленились. А представить код вам сложнее что ли было?
2. По обрубку, мало что можно подсказать. Нужно более развёрнуто представлять.

Представьте:
Вы представляете свои обрубки по которым мало что понятно. Один подсказал: у вас появилась одна ошибка. Другой подсказал: у вас появилась другая ошибка.
Третий подсказал: у вас появилась ошибка аналогичная первой.
Так почему бы вам не представить код в более развёрнутом виде, чтоб вы получили исчерпывающий ответ?

saurn 06-10-2014 17:08 2411813

diman_21Ru, конструкция begin end находится вне блока процедуры\функции.

Irenis 06-10-2014 17:23 2411820

Я тут на днях просила помощи в извлечении скрипта из установщика. Уважаемый vint56 помог, извлек, вот тот скрипт http://rghost.ru/58349915. Только совершенно не поняла в этом скрипте ничего. Помогите пожалуйста разобраться, как сделать установщик на основании этого скрипта. Каким образом добавлять все файлы в этот скрипт и т.д.
Суть вообще в чем. Если игру устанавливать с офсайта, то скачивается просто лаунчер, устанавливается в указанную папку, а дальше уже подгружаются файлы игры, но проблема в том, что файлы эти качаются в папку ProgramData. В указанном выше скрипте как то сделано так, что лаунчер устанавливается в указанную при установке папку, а файлы игры в ProgramData. Нужно сделать то же самое, но не могу понять, как?

Irenis 06-10-2014 17:52 2411831

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

Irenis 06-10-2014 18:29 2411843

Вот например скрипт http://rghost.ru/58382126. Что там добавить, чтобы файлы из папки Е устанавливались в ту папку, которую укажет пользователь? А файлы из папки С установились по умолчанию в C:\ProgramData\Firefly Studios?

R.i.m.s.k.y. 06-10-2014 18:33 2411844

Цитата:

Цитата Irenis
чтобы файлы из папки Е устанавливались в ту папку, которую укажет пользователь? »

дык уже
Source: "E:\Games\Stronghold Kingdoms\StrongholdKingdoms.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\Games\Stronghold Kingdoms\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

Цитата:

Цитата Irenis
А файлы из папки С установились по умолчанию в C:\ProgramData\Firefly Studios? »

Source: "C:\ProgramData\Firefly Studios\*"; DestDir: " {commonappdata}\Firefly Studios"; Flags: ignoreversion recursesubdirs createallsubdirs

ЗЫ: у тебя, наверное, зато борщи нажористые?

ЗЫ2: писал этот скрипт редкий боклан, ибо и на ХР оно скопируется в C:\ProgramData\Firefly Studios :facepalm:

Irenis 06-10-2014 21:04 2411883

Вложений: 1
Заменила в скрипте свою строчку на эту
Цитата:

Цитата R.i.m.s.k.y.
Source: "C:\ProgramData\Firefly Studios\*"; DestDir: " {commonappdata}\Firefly Studios"; Flags: ignoreversion recursesubdirs createallsubdirs »

Почему то при установке ошибка
Файл 117609

saurn 06-10-2014 21:26 2411890

Цитата:

Цитата Irenis
Что там добавить, чтобы файлы из папки Е устанавливались в ту папку, которую укажет пользователь? А файлы из папки С установились по умолчанию в C:\ProgramData\Firefly Studios? »

читать дальше »
Код:

; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!

#define MyAppName "Stronghold Kingdoms""
#define MyAppVersion "2.0.22.5"
#define MyAppExeName "StrongholdKingdoms.exe"

[Setup]
AppId={{31F223F9-A7F8-48E3-BB2C-DDF45A3A800A}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes
OutputBaseFilename=setup
SetupIconFile=E:\Сохраненные проекты 3\Stronghold Kindoms\1.ico
OutputDir=...
Compression=lzma
SolidCompression=yes

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1

[Files]
Source: "E:\Games\Stronghold Kingdoms\StrongholdKingdoms.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "E:\Games\Stronghold Kingdoms\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

; копируем во всепользовательскую appdata
Source: "C:\ProgramData\Firefly Studios\*"; DestDir: "{commonappdata}\Firefly Studios"; Flags: ignoreversion recursesubdirs createallsubdirs

;FOR DEBUG:
;Source: "C:\Windows\Fonts\*"; DestDir: "{app}"; Flags: ignoreversion external
;Source: "C:\Windows\Help\*"; DestDir: "{commonappdata}\Firefly Studios"; Flags: ignoreversion recursesubdirs createallsubdirs external
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon

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



R.i.m.s.k.y. 06-10-2014 21:32 2411892

Цитата:

Цитата Irenis
Почему то при установке ошибка »

потому что пути проверять надо
и понимать что дописываем
{sys} в примере не было, оно потом само дописалось. или не само?

впрочем саурн показал класс

Irenis 06-10-2014 21:52 2411899

Вложений: 1
Вроде получилось, игра устанавливается, куда надо, запускается. Единственное, что еще не так, как хотелось бы: игра не хочет удаляться. То есть если встроенным деинсталлятором удалять, то такая ошибка появляется
Файл 117610
Что можно сделать, чтоб все удалялось нормально?

saurn 06-10-2014 21:57 2411901

Irenis, вы пакуете unins000.exe, тоесть деинсталлятор, от предыдущей установки. Удалите оный файл из папки с пакуемыми файлами перед компиляцией.

R.i.m.s.k.y. 06-10-2014 22:03 2411906

Цитата:

Цитата saurn
Irenis, вы пакуете unins000.exe, тоесть деинсталлятор, от предыдущей установки. Удалите оный файл из папки с пакуемыми файлами перед компиляцией. »

unins000.exe и unins000.dat

Nordek 06-10-2014 22:50 2411920

Irenis,
читать дальше »
Вот пример (Ненужное, закомментируйте):
Код:

[Setup]
AppName=Stronghold Kingdoms
AppVerName={cm:Appver}
AppVersion=1.17
AppPublisher=Firefly Studios
DefaultDirName={pf}\Firefly Studios\Stronghold Kingdoms
DefaultGroupName=Firefly Studios\Stronghold Kingdoms
UninstallDisplayIcon={app}\StrongholdKingdoms.exe
UninstallDisplayName=Stronghold Kingdoms
OutputDir=.
OutputBaseFilename=StrongholdKingdoms-Setup
;ExtraDiskSpaceRequired=255000000
LicenseFile=embedded\License.txt
WizardImageFile=embedded\WizardImage.bmp
WizardSmallImageFile=embedded\WizardSmallImage.bmp
Compression=lzma2

[Languages]
Name: en; MessagesFile: compiler:Default.isl; LicenseFile: embedded\enLicense.txt
Name: de; MessagesFile: compiler:Languages\German.isl; LicenseFile: embedded\deLicense.txt
Name: fr; MessagesFile: compiler:Languages\French.isl; LicenseFile: embedded\frLicense.txt
Name: ru; MessagesFile: compiler:Languages\Russian.isl; LicenseFile: embedded\ruLicense.txt
Name: es; MessagesFile: compiler:Languages\Spanish.isl; LicenseFile: embedded\esLicense.txt
Name: br; MessagesFile: compiler:Languages\BrazilianPortuguese.isl; LicenseFile: embedded\brLicense.txt
Name: pl; MessagesFile: compiler:Languages\Polish.isl; LicenseFile: embedded\plLicense.txt
Name: it; MessagesFile: compiler:Languages\Italian.isl; LicenseFile: embedded\itLicense.txt
Name: tr; MessagesFile: compiler:Languages\Turkish.isl; LicenseFile: embedded\trLicense.txt

[CustomMessages]
DependenciesDir=MyProgramDependencies
depdownload_msg=The following applications are required before setup can continue:%n%n%1%nDownload and install now?
depdownload_memo_title=Download dependencies
depinstall_memo_title=Install dependencies
depinstall_title=Installing dependencies
depinstall_description=Please wait while Setup installs dependencies on your computer.
depinstall_status=Installing %1...
depinstall_missing=%1 must be installed before setup can continue. Please install %1 and run Setup again.
depinstall_error=An error occured while installing the dependencies. Please restart the computer and run the setup again or install the following dependencies manually:%n
kb835732_title=Windows 2000 Security Update (KB835732)
kb835732_size=6.8 MB
msi20_title=Windows Installer 2.0
msi20_size=1.7 MB
msi31_title=Windows Installer 3.1
msi31_size=2.5 MB
ie6_title=Internet Explorer 6
ie6_size=1 MB - 77.5 MB
dotnetfx20_title=.NET Framework 2.0
dotnetfx20_size=23 MB
dotnetfx20sp1_title=.NET Framework 2.0 Service Pack 1
dotnetfx20sp1_size=23.6 MB
dotnetfx20sp2_title=.NET Framework 2.0 Service Pack 2
dotnetfx20sp2_size=24 MB - 52 MB
win2000sp3_title=Windows 2000 Service Pack 3
winxpsp2_title=Windows XP Service Pack 2
en.NameAndVersion=%1 version %2
en.AdditionalIcons=Additional icons:
en.CreateDesktopIcon=Create a &desktop icon
en.CreateQuickLaunchIcon=Create a &Quick Launch icon
en.ProgramOnTheWeb=%1 on the Web
en.UninstallProgram=Uninstall %1
en.LaunchProgram=Launch %1
en.AssocFileExtension=&Associate %1 with the %2 file extension
en.AssocingFileExtension=Associating %1 with the %2 file extension...
en.AutoStartProgramGroupDescription=Startup:
en.AutoStartProgram=Automatically start %1
en.AddonHostProgramNotFound=%1 could not be located in the folder you selected.%n%nDo you want to continue anyway?
de.NameAndVersion=%1 Version %2
de.AdditionalIcons=Zusatzliche Symbole:
de.CreateDesktopIcon=&Desktop-Symbol erstellen
de.CreateQuickLaunchIcon=Symbol in der Schnellstartleiste erstellen
de.ProgramOnTheWeb=%1 im Internet
de.UninstallProgram=%1 entfernen
de.LaunchProgram=%1 starten
de.AssocFileExtension=&Registriere %1 mit der %2-Dateierweiterung
de.AssocingFileExtension=%1 wird mit der %2-Dateierweiterung registriert...
de.AutoStartProgramGroupDescription=Beginn des Setups:
de.AutoStartProgram=Starte automatisch%1
de.AddonHostProgramNotFound=%1 konnte im ausgwahlten Ordner nicht gefunden werden.%n%nMochten Sie dennoch fortfahren?
fr.NameAndVersion=%1 version %2
fr.AdditionalIcons=Icones supplementaires :
fr.CreateDesktopIcon=Creer une icone sur le &Bureau
fr.CreateQuickLaunchIcon=Creer une icone dans la barre de &Lancement rapide
fr.ProgramOnTheWeb=Page d'accueil de %1
fr.UninstallProgram=Desinstaller %1
fr.LaunchProgram=Executer %1
fr.AssocFileExtension=&Associer %1 avec l'extension de fichier %2
fr.AssocingFileExtension=Associe %1 avec l'extension de fichier %2...
fr.AutoStartProgramGroupDescription=Demarrage :
fr.AutoStartProgram=Demarrer automatiquement %1
fr.AddonHostProgramNotFound=%1 n'a pas ete trouve dans le dossier que vous avez choisi.%n%nVoulez-vous continuer malgre tout ?
ru.NameAndVersion=%1, версия %2
ru.AdditionalIcons=Дополнительные значки:
ru.CreateDesktopIcon=Создать значок на &Рабочем столе
ru.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
ru.ProgramOnTheWeb=Сайт %1 в Интернете
ru.UninstallProgram=Деинсталлировать %1
ru.LaunchProgram=Запустить %1
ru.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
ru.AssocingFileExtension=Связывание %1 с файлами %2...
ru.AutoStartProgramGroupDescription=Автозапуск:
ru.AutoStartProgram=Автоматически запускать %1
ru.AddonHostProgramNotFound=%1 не найден в указанной вами папке.%n%nВы всё равно хотите продолжить?
es.NameAndVersion=%1 version %2
es.AdditionalIcons=Iconos adicionales:
es.CreateDesktopIcon=Crear un icono en el &escritorio
es.CreateQuickLaunchIcon=Crear un icono de &Inicio Rapido
es.ProgramOnTheWeb=%1 en la Web
es.UninstallProgram=Desinstalar %1
es.LaunchProgram=Ejecutar %1
es.AssocFileExtension=&Asociar %1 con la extension de archivo %2
es.AssocingFileExtension=Asociando %1 con la extension de archivo %2...
es.AutoStartProgramGroupDescription=Inicio:
es.AutoStartProgram=Iniciar automaticamente %1
es.AddonHostProgramNotFound=%1 no pudo ser localizado en la carpeta seleccionada.%n%n?Desea continuar de todas formas?
br.NameAndVersion=%1 versao %2
br.AdditionalIcons=Icones adicionais:
br.CreateDesktopIcon=Criar um icone na Area de &Trabalho
br.CreateQuickLaunchIcon=Criar um icone na &Barra de Inicializacao Rapida
br.ProgramOnTheWeb=%1 na Internet
br.UninstallProgram=Desinstalar %1
br.LaunchProgram=Executar %1
br.AssocFileExtension=Associar %1 com a e&xtensao de arquivo %2
br.AssocingFileExtension=Associando %1 com a extensao de arquivo...
br.AutoStartProgramGroupDescription=Startup:
br.AutoStartProgram=Iniciar automaticamente %1
br.AddonHostProgramNotFound=%1 nao pode ser localizado na pasta que voce selecionou.%n%nVoce deseja continuar assim mesmo?
pl.NameAndVersion=%1 wersja %2
pl.AdditionalIcons=Dodatkowe ikony:
pl.CreateDesktopIcon=Utworz ikone na &pulpicie
pl.CreateQuickLaunchIcon=Utworz ikone na pasku &szybkiego uruchamiania
pl.ProgramOnTheWeb=Strona WWW programu %1
pl.UninstallProgram=Deinstalacja programu %1
pl.LaunchProgram=Uruchom program %1
pl.AssocFileExtension=&Przypisz program %1 do rozszerzenia pliku %2
pl.AssocingFileExtension=Przypisywanie programu %1 do rozszerzenia pliku %2...
pl.AutoStartProgramGroupDescription=Autostart:
pl.AutoStartProgram=Automatycznie uruchamiaj %1
pl.AddonHostProgramNotFound=%1 nie zostal znaleziony we wskazanym przez Ciebie folderze.%n%nCzy pomimo tego chcesz kontynuowac?
it.NameAndVersion=%1 versione %2
it.AdditionalIcons=Icone aggiuntive:
it.CreateDesktopIcon=Crea un'icona sul &desktop
it.CreateQuickLaunchIcon=Crea un'icona nella &barra Avvio veloce
it.ProgramOnTheWeb=%1 sul Web
it.UninstallProgram=Disinstalla %1
it.LaunchProgram=Avvia %1
it.AssocFileExtension=&Associa l'estensione %2 a %1
it.AssocingFileExtension=Associazione dell'estensione %2 a %1 in corso...
it.AutoStartProgramGroupDescription=Avvio automatico:
it.AutoStartProgram=Avvia automaticamente %1
it.AddonHostProgramNotFound=Impossibile individuare %1 nella cartella selezionata.%n%nProseguire ugualmente?
tr.NameAndVersion=%1 %2 surumu
tr.AdditionalIcons=Ek simgeler:
tr.CreateDesktopIcon=Masaustu simg&esi olustur
tr.CreateQuickLaunchIcon=Hizli Baslat simgesi &olustur
tr.ProgramOnTheWeb=%1 Web Sitesi
tr.UninstallProgram=%1 Programini Kaldir
tr.LaunchProgram=%1 Programini Calistir
tr.AssocFileExtension=%2 dosya uzantilarini %1 ile iliskilendir
tr.AssocingFileExtension=%2 dosya uzantilari %1 ile iliskilendiriliyor...
tr.AutoStartProgramGroupDescription=Baslangic:
tr.AutoStartProgram=%1 otomatik baslat
tr.AddonHostProgramNotFound=%1 sectiginiz klasorde bulunamadi.%n%nYine de devam etmek istiyor musunuz?
en.Appver=Stronghold Kingdoms (Installer v1.17)
en.DXInstall=Install required Microsoft® DirectX Components (Recommended)
en.VCInstall=Install Microsoft® Visual C++ 2008 Redistributable (Recommended)
en.DeskIcon=Create a &desktop icon
en.Uninstall=Uninstall
en.Website=Stronghold Kingdoms Website
en.Required=Required Components:
en.Additional=Additional icons:
en.StartGame=Start Stronghold Kingdoms
de.DXInstall=Erforderliche Microsoft® DirectX-Komponenten installieren (empfohlen)
de.VCInstall=Microsoft® Visual C++ Redistributable installieren (empfohlen)
de.DeskIcon=Desktopsymbol erstellen
de.Uninstall=Deinstallieren
de.Website=Stronghold Kingdoms-Website
de.Required=Benotigte Komponenten:
de.Additional=Zusatzliche Symbole:
de.Appver=Stronghold Kingdoms (Installationsprogramm v1.17)
de.StartGame=Stronghold Kingdoms starten
fr.DXInstall=Installer les composants de Microsoft® DirectX requis (recommande)
fr.VCInstall=Installer le package redistribuable Microsoft® Visual C++ 2008 (recommande)
fr.DeskIcon=Creer une icone sur le Bureau
fr.Uninstall=Desinstaller
fr.Website=Site internet de Stronghold Kingdoms
fr.Required=Composants requis:
fr.Additional=Icones supplementaires:
fr.Appver=Stronghold Kingdoms (Installationsprogramm v1.17)
fr.StartGame=Jouer a Stronghold Kingdoms
ru.Appver=Stronghold Kingdoms (программа установки v1.17)
ru.DXInstall=Установить необходимые компоненты Mircosoft DirectX (рекомендуется)
ru.VCInstall=Установить Microsoft Visual C++ 2008 (рекомендуется)
ru.DeskIcon=Создать ярлык на рабочем столе
ru.Uninstall=Удалить
ru.Website=Сайт Stronghold Kingdoms
ru.Required=Необходимые компоненты:
ru.Additional=Дополнительные ярлыки:
ru.StartGame=Запустить Stronghold Kingdoms
es.Appver=Stronghold Kingdoms (Instalador v1.17)
es.DXInstall=Instalar componentes necesarios de Microsoft® DirectX (recomendado)
es.VCInstall=Instalar Microsoft® Visual C++ 2008 Redistributable (recomendado)
es.DeskIcon=Crear icono en el escritorio
es.Uninstall=Desinstalar
es.Website=Pagina web de Stronghold Kingdoms
es.Required=Componentes necesarios:
es.Additional=Iconos adicionales:
es.StartGame=Iniciar Stronghold kingdoms
br.Appver=Stronghold Kingdoms (Instalador v1.17)
br.DXInstall=Instalar componentes necessarios do Microsoft DirectX (Recomendado)
br.VCInstall=Instalar Microsoft Visual C++ 2008 (Recomendado)
br.DeskIcon=Criar um icone na area de trabalho
br.Uninstall=Desinstalar
br.Website=Site do Stronghold Kingdoms
br.Required=Componentes necessarios:
br.Additional=Icones adicionais:
br.StartGame=Iniciar o Stronghold Kingdoms
it.Appver=Stronghold Kingdoms (Installer v1.17)
it.DXInstall=Installa componenti necessarie di Microsoft DirectX (raccomandato)
it.VCInstall=Installa Microsoft Visual C++ 2008 Redistributable (raccomandato)
it.DeskIcon=Crea un'icona sul desktop
it.Uninstall=Disinstalla
it.Website=Sito web di Stronghold Kingdoms
it.Required=Componenti necessarie:
it.Additional=Icone aggiuntive:
it.StartGame=Lancia Stronghold Kingdoms
pl.Appver=Stronghold Kingdoms (Instalator v.1.17)
pl.DXInstall=Zainstaluj wymagane skladniki Microsoft DirectX (Zalecane)
pl.VCInstall=Zainstaluj Microsoft Visual C++ 2008 Redistributable (Zalecane)
pl.DeskIcon=Utworz ikone na pulpicie
pl.Uninstall=Odinstaluj
pl.Website=Witryna internetowa gry Stronghold Kingdoms
pl.Required=Wymagane skladniki:
pl.Additional=Dodatkowe ikony:
pl.StartGame=Uruchom gre Stronghold Kingdoms
tr.Appver=Stronghold Kingdoms (Yukleyici v1.17)
tr.DXInstall=Microsoft DirectX Components yukle (tavsiye edilir)
tr.VCInstall=Microsoft Visual C++ 2008 Redistributable yukle (tavsiye edilir)
tr.DeskIcon=Bir masaustu simgesi olustur
tr.Uninstall=Kaldir
tr.Website=Stronghold Kingdoms Web Sitesi
tr.Required=Gerekli Bilesenler:
tr.Additional=Ekstra  Simgeler:
tr.StartGame=Stronghold Kingdoms'? Baslat

[Tasks]
Name: directx; Description: {cm:DXInstall}; GroupDescription: {cm:Required}
Name: vcredist; Description: {cm:VCInstall}; GroupDescription: {cm:Required}
Name: desktopicon; Description: {cm:DeskIcon}; GroupDescription: {cm:Additional}

[Icons]
Name: {group}\Stronghold Kingdoms; Filename: {app}\StrongholdKingdoms.exe; WorkingDir: {app}
Name: {group}\{cm:Website}; Filename: http://www.strongholdkingdoms.com; Languages: en
Name: {group}\{cm:Website}; Filename: http://www.strongholdkingdoms.de; Languages: de
Name: {group}\{cm:Website}; Filename: http://www.strongholdkingdoms.com/fr; Languages: fr
Name: {group}\{cm:Website}; Filename: http://www.strongholdkingdoms.com/ru; Languages: ru
Name: {group}\{cm:Website}; Filename: http://es.strongholdkingdoms.com; Languages: es
Name: {group}\{cm:Website}; Filename: http://it.strongholdkingdoms.com; Languages: it
Name: {group}\{cm:Website}; Filename: http://pl.strongholdkingdoms.com; Languages: pl
Name: {group}\{cm:Website}; Filename: http://tr.strongholdkingdoms.com; Languages: tr
Name: {group}\{cm:Website}; Filename: http://br.strongholdkingdoms.com; Languages: br
Name: {group}\{cm:Uninstall}; Filename: {uninstallexe}; WorkingDir: {app}
Name: {commondesktop}\Stronghold Kingdoms; Filename: {app}\StrongholdKingdoms.exe; Tasks: desktopicon

[Files]
Source: {app}\StrongholdKingdoms.exe.config; DestDir: {app}; Flags: overwritereadonly
Source: {app}\DDay.Update.DLL; DestDir: {app}; Flags: overwritereadonly
Source: {app}\Localization.DLL; DestDir: {app}; Flags: overwritereadonly
Source: {app}\DDay.Update.WinForms.DLL; DestDir: {app}; Flags: overwritereadonly
Source: {app}\StrongholdKingdoms.exe; DestDir: {app}; Flags: overwritereadonly
Source: {app}\SKGDF.dll; DestDir: {app}; Flags: overwritereadonly
Source: {app}\GameuxInstallHelper_ff.dll; DestDir: {app}; AfterInstall: GameExplorerInstall(); Flags: overwritereadonly
Source: {app}\local,1.txt; DestDir: {app}; DestName: local.txt; Languages: en; Flags: overwritereadonly
Source: {app}\local,2.txt; DestDir: {app}; DestName: local.txt; Languages: de; Flags: overwritereadonly
Source: {app}\local,3.txt; DestDir: {app}; DestName: local.txt; Languages: fr; Flags: overwritereadonly
Source: {app}\local,4.txt; DestDir: {app}; DestName: local.txt; Languages: ru; Flags: overwritereadonly
Source: {app}\local,5.txt; DestDir: {app}; DestName: local.txt; Languages: es; Flags: overwritereadonly
Source: {app}\local,6.txt; DestDir: {app}; DestName: local.txt; Languages: br; Flags: overwritereadonly
Source: {app}\local,7.txt; DestDir: {app}; DestName: local.txt; Languages: it; Flags: overwritereadonly
Source: {app}\local,8.txt; DestDir: {app}; DestName: local.txt; Languages: pl; Flags: overwritereadonly
Source: {app}\local,9.txt; DestDir: {app}; DestName: local.txt; Languages: tr; Flags: overwritereadonly
Source: Firefly Studios\*; DestDir: {commonappdata}\Firefly Studios; Flags: ignoreversion recursesubdirs createallsubdirs
Source: {tmp}\vcredist_x86.exe; DestDir: {tmp}; Tasks: vcredist; Flags: deleteafterinstall
Source: {tmp}\isxdl.dll; DestDir: {tmp}; Flags: deleteafterinstall dontcopy
Source: {tmp}\DXSETUP.exe; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\DSETUP.dll; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\dsetup32.dll; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\dxdllreg_x86.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\dxupdate.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\APR2007_xinput_x64.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\APR2007_xinput_x86.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\Aug2009_D3DCompiler_42_x64.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\Aug2009_D3DCompiler_42_x86.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\Aug2009_d3dcsx_42_x64.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\Aug2009_d3dcsx_42_x86.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\Aug2009_d3dx9_42_x64.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\Aug2009_d3dx9_42_x86.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\Aug2009_d3dx10_42_x64.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\Aug2009_d3dx10_42_x86.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\Aug2009_d3dx11_42_x64.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\Aug2009_d3dx11_42_x86.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\Aug2009_XAudio_x64.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\Aug2009_XAudio_x86.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\Mar2009_X3DAudio_x64.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall
Source: {tmp}\Mar2009_X3DAudio_x86.cab; DestDir: {tmp}; Tasks: directx; Flags: deleteafterinstall

; Раскомментировать если нужен "Подхват сохранений"
;Source: {src}\Conservation\*; DestDir: {userappdata}\Firefly Studios; Flags: ignoreversion recursesubdirs createallsubdirs external skipifsourcedoesntexist

[Run]
Filename: {app}\StrongholdKingdoms.exe; WorkingDir: {app}; Description: {cm:StartGame}; Flags: postinstall nowait
Filename: {tmp}\DXSETUP.exe; Parameters: /silent; WorkingDir: {tmp}; Tasks: directx
Filename: {tmp}\vcredist_x86.exe; Parameters: /q; WorkingDir: {tmp}; Tasks: vcredist; Flags: skipifdoesntexist

[UninstallRun]
Filename: {app}\StrongholdKingdoms.exe; Parameters: -uninstall; WorkingDir: {app}

[UninstallDelete]
Name: {app}; Type: filesandordirs
Name: {commonappdata}\Firefly Studios; Type: filesandordirs
;Name: {userappdata}\Firefly Studios; Type: filesandordirs


Скачайте обновленный клиент.
Установите
Запустите клиент: начнётся обновление.
Дождитесь окончания обновления
Закройте клиент.

Обновления будут расположены по пути:
Код:

Для Windows XP: "C:\Documents and Settings\All Users\Application Data"
Для Windows 7:    "C:\ProgramData"

Скопируйте папку "Firefly Studios" (Расположите папку рядом со скриптом)

Извлеките файлы из "StrongholdKingdoms-Setup.exe"
Скопируйте содержимое (Расположите содержимое рядом со скриптом)

Dodakaedr 06-10-2014 23:08 2411930

Возможно ли указать путь установки чужому инсталлятору?

Nordek 06-10-2014 23:25 2411939

Цитата:

Цитата Dodakaedr
Возможно ли указать путь установки чужому инсталлятору? »

Код:

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Program_is1,InstallLocation|{pf}\MyProgram2}
OutputDir=.


Dodakaedr 06-10-2014 23:28 2411941

Nordek, Нет, не правильно выразился. Хочу приклеить левый установщик к своему. И интересно можно ли со своего инсталлятора указать путь установки для левого установщика?

saurn 06-10-2014 23:49 2411955

Dodakaedr, например, передать параметром комстроки. Если говорить об инсталяторах созданных в инно, то в них за это отвечает параметр /DIR. Например /DIR="С:\Программа"

Dodakaedr 06-10-2014 23:58 2411960

Цитата:

Цитата saurn
передать параметром комстроки »

Я тоже думал об этом, надо попробовать.

Dodakaedr 07-10-2014 00:19 2411970

Как правильно указать путь? Так не получается
Код:

Exec(ExpandConstant('{tmp}\MyOLDRepack.exe'), '/verysilent /d=' +ExpandConstant('{app}'), '', 0, ewWaitUntilTerminated, rcode);

ROMKA-1977 07-10-2014 00:19 2411971

Подскажите пожалуйста код озвучки кнопок для стандартного компилятора.

Nordek 07-10-2014 00:25 2411974

Цитата:

Цитата Dodakaedr
Хочу приклеить левый установщик к своему. »

Например так из секции [Run] для NSIS:
Код:

[Run]
Filename: {src}\FreeArc-0.67-alpha-win32.exe; Parameters: /D={app}; Flags: skipifdoesntexist

Установка будет произведена в ту же папку, куда будет производиться установка из основного инсталлятора.

Dodakaedr 07-10-2014 00:27 2411976

Цитата:

Цитата Nordek
Например так из секции [Run] »

из [Run] не подходит, нужно запустить левый инсталлятор до начала распаковки своих файлов.

nik1967 07-10-2014 03:43 2411989

Цитата:

Цитата ROMKA-1977
Подскажите пожалуйста код озвучки кнопок для стандартного компилятора. »

А не тебе ли я случаем давал пример озвучки кнопок, и даже DirBrowseButton?

МИШАНЧИК 07-10-2014 06:05 2411994

Подскажите пожалуйста как внести в реестр через секцию code
Код:

Root: HKLM; SubKey: SOFTWARE\Classes\batfile\shell\edit\command; ValueType: expandsz; ValueData: %SystemRoot%\SysWow64\NOTEPAD.EXE %1;

Dodakaedr 07-10-2014 07:54 2412003

Цитата:

Цитата МИШАНЧИК
Подскажите пожалуйста как внести в реестр через секцию code »

Код:

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

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
  case CurStep of
  ssDone:
        begin
        RegWriteExpandStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\batfile\shell\edit\command', '', '%SystemRoot%\SysWow64\NOTEPAD.EXE %1');
        end;
end;
end;


R.i.m.s.k.y. 07-10-2014 09:13 2412032

Цитата:

Цитата Dodakaedr
Как правильно указать путь? Так не получается »

кмк про пробелы забыл, у тебя все склеивается, dir а не d, ну и 0 не к месту, может и кавычки надо добавить
Exec(ExpandConstant('{tmp}\MyOLDRepack.exe'), ' /verysilent /DIR=' + '"' + ExpandConstant('{app}') + '"', Exec(ExpandConstant('{tmp}'), ewWaitUntilTerminated, rcode);

МИШАНЧИК 07-10-2014 09:17 2412035

Dodakaedr, большое спасибо. А если несколько значений нужно внести, они просто пойдут подряд?
[code]
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
  case CurStep of
  ssDone:
        begin
        RegWriteExpandStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\batfile\shell\edit\command', '', '%SystemRoot%\SysWow64\NOTEPAD.EXE %1');
        RegWriteExpandStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\cmdfile\shell\edit\command', '', '%SystemRoot%\SysWow64\NOTEPAD.EXE %1');
        RegWriteExpandStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\infile\shell\edit\command', '', '%SystemRoot%\SysWow64\NOTEPAD.EXE %1');
      end;
end;
end;

Или нет?

R.i.m.s.k.y. 07-10-2014 09:18 2412036

Цитата:

Цитата МИШАНЧИК
А если несколько значений нужно внести, они просто пойдут подряд? »

да
инно при установке выполняет скрипт в секции сверху вниз, при удалении наоборот - снизу вверх

ROMKA-1977 07-10-2014 09:20 2412037

Цитата:

Цитата nik1967
А не тебе ли я случаем давал пример озвучки кнопок, и даже DirBrowseButton? »

nik1967, Если ты об этом коде:
читать дальше »

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Files]
Source: click.wav; DestDir: {tmp}; Flags: dontcopy;

[code]

var
DirButtonClick: TNotifyEvent;
GroupButtonClick: TNotifyEvent;

function sndPlaySound(lpszSoundName: string; uFlags: cardinal):integer;
external 'sndPlaySoundA@winmm.dll stdcall';

function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('click.wav');
Result := True;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
sndPlaySound(ExpandConstant('{tmp}\click.wav'), $0001);
Result := True;
end;

function BackButtonClick(CurPageID: Integer): Boolean;
begin
sndPlaySound(ExpandConstant('{tmp}\click.wav'), $0001);
Result := True;
end;

procedure DirBrowseButtonClick(Sender: TObject);
begin
sndPlaySound(ExpandConstant('{tmp}\click.wav'), $0001);
DirButtonClick(Sender);
end;

procedure GroupBrowseButtonClick(Sender: TObject);
begin
sndPlaySound(ExpandConstant('{tmp}\click.wav'), $0001);
GroupButtonClick(Sender);
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
sndPlaySound(ExpandConstant('{tmp}\click.wav'), $0001);
end;

procedure InitializeWizard();
begin
with WizardForm.DirBrowseButton do begin
DirButtonClick := OnClick;
OnClick:= @DirBrowseButtonClick;
end;
with WizardForm.GroupBrowseButton do begin
GroupButtonClick := OnClick;
OnClick := @GroupBrowseButtonClick;
end;
end;

то всё OK! Хотелось бы наложить озвучки при наведении и нажатии на кнопки (для стандартного компилятора).

Есть такой пример:
читать дальше »

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
LicenseFile=compiler:License.txt

[Files]
Source: UI\buttonclick.WAV; Flags: dontcopy
Source: UI\buttonclickrelease.WAV; Flags: dontcopy
Source: UI\buttonrollover.WAV; Flags: dontcopy

[code]
function sndPlaySound(lpszSoundName: AnsiString; uFlags: cardinal): Integer;
external 'sndPlaySoundA@winmm.dll stdcall'; /// функция проигрывания звука

procedure PlaySoundOnEnter(Sender: TObject); /// процедура при наведении
begin
sndPlaySound(ExpandConstant('{tmp}\buttonrollover.WAV'),$0001);
end;

procedure PlaySoundOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); /// при нажатии кнопки
begin
sndPlaySound(ExpandConstant('{tmp}\buttonclick.WAV'),$0001);
end;

procedure PlaySoundOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); /// при отпускании кнопки
begin
sndPlaySound(ExpandConstant('{tmp}\buttonclickrelease.WAV'),$0001);
end;

procedure InitializeWizard;
begin
ExtractTemporaryFile('buttonclick.WAV'); /// функцией ExtractTemporaryFile извлекаем файл во временную папку - при нажатии кнопри паши по контролу (не путать с кликом)
ExtractTemporaryFile('buttonclickrelease.WAV'); /// при отпускании кнопки мыши с контрола
ExtractTemporaryFile('buttonrollover.WAV'); /// при наведении

with WizardForm do
begin
with NextButton do
begin
OnMouseEnter := @PlaySoundOnEnter;
OnMouseDown := @PlaySoundOnMouseDown;
OnMouseUp := @PlaySoundOnMouseUp;
end;

with BackButton do
begin
OnMouseEnter := NextButton.OnMouseEnter;
OnMouseDown := NextButton.OnMouseDown;
OnMouseUp := NextButton.OnMouseUp;
end;

with CancelButton do
begin
OnMouseEnter := NextButton.OnMouseEnter;
OnMouseDown := NextButton.OnMouseDown;
OnMouseUp := NextButton.OnMouseUp;
end;

with DirBrowseButton do
begin
OnMouseEnter := NextButton.OnMouseEnter;
OnMouseDown := NextButton.OnMouseDown;
OnMouseUp := NextButton.OnMouseUp;
end;

with GroupBrowseButton do
begin
OnMouseEnter := NextButton.OnMouseEnter;
OnMouseDown := NextButton.OnMouseDown;
OnMouseUp := NextButton.OnMouseUp;
end;
end;
end;

но в стандартной версии компилятора он неработает. Возможно его можна переписать?

R.i.m.s.k.y. 07-10-2014 09:23 2412039

МИШАНЧИК, и эта
вносить в HKLM\Software\classes - моветон, если запорешь - вся секция classes для всех пользователей пойдет по крыму
вносить нужно в HKCR

RegWriteExpandStringValue(HKCR, 'batfile\shell\edit\command', '', '%SystemRoot%\SysWow64\NOTEPAD.EXE %1');

El Sanchez 07-10-2014 10:13 2412062

Цитата:

Цитата МИШАНЧИК
А если несколько значений нужно внести, они просто пойдут подряд? »

Цитата:

Цитата R.i.m.s.k.y.
инно при установке выполняет скрипт в секции сверху вниз, при удалении наоборот - снизу вверх »

R.i.m.s.k.y., пиши, что именно в секции Registry, а то можно подумать, что такое поведение и в секции Code тоже есть.
МИШАНЧИК, на x86-системах с приведенным кодом все плохо будет. Ну нет там подсистемы WoW64.
Цитата:

Цитата R.i.m.s.k.y.
вносить в HKLM\Software\classes - моветон, если запорешь - вся секция classes для всех пользователей пойдет по крыму
вносить нужно в HKCR »

R.i.m.s.k.y., вообще-то, наоборот.

МИШАНЧИК 07-10-2014 10:29 2412066

R.i.m.s.k.y., спасибо. А чем отличаются:
Код:

RegWriteExpandStringValue
от просто
Код:

RegWriteStringValue

El Sanchez 07-10-2014 11:42 2412111

Цитата:

Цитата МИШАНЧИК
А чем отличаются: »

МИШАНЧИК, RegWriteExpandStringValue пишет в реестр параметр со строковым типом REG_EXPAND_SZ. Значения такого типа обычно содержат какие-либо системные переменные, например, %SystemRoot%, которые при чтении такого значения будут раскрыты системой. RegWriteStringValue пишет параметр со строковым типом REG_SZ. Значения типа трактуются в литеральном представлении, просто строка.

Serega 07-10-2014 12:11 2412125

Цитата:

Цитата МИШАНЧИК
как внести в реестр через секцию code »

Цитата:

Цитата Dodakaedr
RegWriteExpandStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\batfile\shell\edit\command', '', '%SystemRoot%\SysWow64\NOTEPAD.EXE %1'); »

Чтоб не возникло проблем с 32х битной системой, правильно будет записать так:
RegWriteExpandStringValue(HKLM, 'SOFTWARE\Classes\batfile\shell\edit\command', '', ExpandConstant('{sys}\NOTEPAD.EXE %1'));

МИШАНЧИК 07-10-2014 12:59 2412152

Всем спасибо.
А когда добавляешь в реестр не через секцию code, а просто в скрипте обязательно столько кавычек?
Код:

Root: HKCR; SubKey: batfile\shell\edit\command; ValueType: string; ValueData: """{sys}\NOTEPAD.EXE"" ""%1"""; Flags: uninsdeletevalue uninsdeletekeyifempty
или можно
Код:

Root: HKCR; SubKey: batfile\shell\edit\command; ValueType: string; ValueData: {sys}\NOTEPAD.EXE %1; Flags: uninsdeletevalue uninsdeletekeyifempty

dracosha 07-10-2014 13:08 2412155

МИШАНЧИК, да кавычки нужны обязательно

Dodakaedr 08-10-2014 20:55 2412802

Подскажите, как можно отредактировать reg файл через inno? Нужно при отмеченной определенной кнопки поменять значение.

sergey3695 08-10-2014 21:23 2412818

Цитата Dodakaedr:
отредактировать reg файл »
как текстовый файл попробуй отредактировать.
Код:

procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
  S: TArrayOfString;
  i : Integer;
begin
  if not FileExists(FilePath) then begin MsgBox('Файл не найден', mbError, mb_Ok); Exit;end; // если файла нет, выходим
  LoadStringsFromFile(FilePath, S); // загружаем файл
  for i:= 0 to GetArrayLength(S)-1 do begin
    if (Pos(AnsiUpperCase(find), AnsiUpperCase(S[i])) > 0) then begin
      StringChangeEx(S[i], find, replace, True);
    end;
  end;
  SaveStringsToFile(FilePath, S, False); // сохраняем файл
end;


Dodakaedr 08-10-2014 21:39 2412822

Цитата:

Цитата sergey3695
как текстовый файл попробуй отредактировать. »

А можно пример применения вашей процедуры? У меня не получается. Нужно найти и поменять эту строку
Код:

"General.Language"="eng.lng"

sergey3695 08-10-2014 21:47 2412825

Цитата:

Цитата Dodakaedr
пример применения вашей процедуры »

RePlaceTextinFile(FilePath:string; find:string; replace:string); :o
Код:

RePlaceTextinFile(ExpandConstant('{app}\Setup.reg'),'"General.Language"="eng.lng"','"General.Language"="rus.lng"');

Dodakaedr 08-10-2014 22:04 2412832

sergey3695, Я так и делал, просто тупанул с размещением файла, но все равно не меняет и нарушает строение строк reg файла.

sergey3695 08-10-2014 23:26 2412863

Dodakaedr,
Код:

procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
  S: TStringList;
  i : Integer;
begin
  S:=tstringlist.create;
  S.LoadFromFile(FilePath);
for i := 0 to S.Count-1 do
begin
if S.Names[i]=find then
begin
  S.Delete(i);
  S.Insert(i,find+'='+replace);
end;
end;
  S.SaveToFile(FilePath);
end;

procedure InitializeWizard;
begin
  RePlaceTextinFile(ExpandConstant('{src}\1.reg'),'"version"','"1.1"');
end;

"version"="1.1" (в этой строке меняем).

Dodakaedr 08-10-2014 23:36 2412864

sergey3695, Все равно не хочет менять.

sergey3695 08-10-2014 23:48 2412867

Dodakaedr, http://rghost.ru/58421287
Да ну? просмотри содержимое 1.reg ("version"="1.0"). Закрой просмотр. Скомпили установщик, запусти и закрой. Посмотри еще раз содержимое 1.reg ("version"=???). Тут то я проверил прежде чем давать код.

Dodakaedr 08-10-2014 23:57 2412870

sergey3695, Ага теперь понял! Спасибо!

Антон_Мураткин@vk 09-10-2014 11:52 2412996

Проблема заключается вот в чём.

Удобство чтения с экрана 100%. Инсталлятор отображается нормально.

Скриншот.


Удобство чтения с экрана 125% Инсталлятор отображается без кнопок установки и отмены + всё растянулось.

Скриншот.


И удобство чтения с экрана 150% Инсталлятор отображается без кнопок установки и отмены + всё растянулось ещё больше.

Скриншот.



Можно ли это как то исправить? Подскажите если кто знает.
Заранее благодарю!!!

sergey3695 09-10-2014 13:29 2413035

Антон_Мураткин@vk, на Krinkels уже ответил.

Irenis 09-10-2014 23:05 2413302

Добрый вечер! Подскажите пожалуйста, как создать установщик с тихой установкой? Что в скрипте нужно добавлять, какой код? Спасибо.

Dodakaedr 09-10-2014 23:16 2413305

Цитата:

Цитата Irenis
как создать установщик с тихой установкой? »

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

My_Programm.exe /VERYSILENT
В названии программы не должно быть пробелов.

saurn 09-10-2014 23:18 2413308

Цитата:

Цитата Irenis
Подскажите пожалуйста, как создать установщик с тихой установкой? Что в скрипте нужно добавлять, какой код? Спасибо. »

Ничего добавлять не нужно. Для тихой установки имеются предустановленные ключи /SILENT - установка с отображение только страницы прогресса, /VERYSILENT - полностью тихая установка без взаимодействия с пользователем, за исключением некоторых сообщений. Нужно лишь запустить инстал из комстроки с соответствующим ключем.

Например:
Код:

C:\Setup.exe /SILENT
Из справки:
  • /SILENT, /VERYSILENT
  • Установка в ускоренном или очень ускоренном режиме. При установке в ускоренном режиме окно мастера и фоновое окно мастера не отображаются, отображается только окно прогресса. При очень ускоренной установке окно прогресса тоже не отображается. Остальная установка проходит как обычно - отображаются сообщения об ошибках в ходе установки, страница приветствия (если ее отображение не отменено директивой DisableStartupPrompt или параметром '/SP-' командной строки).
  • Если после установки необходима перезагрузка, команды '/NORESTART' не дано и установка проходит в ускоренном режиме, появится сообщение "Перезагрузить компьютер?". Если режим установки очень ускоренный, система перезагрузится не спрашивая.

Dodakaedr 10-10-2014 08:33 2413371

Подскажите способ, как установить(зарегистрировать) драйвер в систему. Имеется файл .sys(виртуальный прывод) и не достаточно для его работы просто поместить в папку System32\drivers.

diman_21Ru 10-10-2014 14:14 2413491

Как можно увеличить размер установщика и сдвинуть кнопки не используя редактора

saurn 10-10-2014 14:40 2413514

Цитата:

Цитата diman_21Ru
Как можно увеличить размер установщика и сдвинуть кнопки не используя редактора »

Руками.
читать дальше »
Код:

procedure InitializeWizard;
begin
    with
WizardForm do
    begin
       
ClientWidth := ScaleX( 598 );
        ClientHeight := ScaleY( 355 );

        OuterNotebook.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( ClientWidth ), ScaleY( 302 ) );
        InnerNotebook.SetBounds( ScaleX( 12 ), ScaleY( 62 ), ScaleX( 574 ), ScaleY( 238 ) );
        Bevel1.SetBounds( ScaleX( 0 ), ScaleY( 60 ), ScaleX( ClientWidth ), ScaleY( 3 ) );
        Bevel.SetBounds( ScaleX( 0 ), ScaleY( 302 ), ScaleX( ClientWidth ), ScaleY( 2 ) );
        BeveledLabel.Top := ScaleY( 294 );
        BackButton.SetBounds( ScaleX( 352 ), ScaleY( 318 ), ScaleX( 75 ), ScaleY( 23 ) );
        NextButton.SetBounds( ScaleX( 432 ), ScaleY( 318 ), ScaleX( 75 ), ScaleY( 23 ) );
        CancelButton.SetBounds( ScaleX( 512 ), ScaleY( 318 ), ScaleX( 75 ), ScaleY( 23 ) );
        MainPanel.Width := ScaleX( ClientWidth );
        WizardSmallBitmapImage.Left := ScaleX( ClientWidth - 58 )
    end;
end;


vasvladal 10-10-2014 17:58 2413583

Есть в Inno Setup 5\IS_Scrpt\Scripts пример - Ultimate Test.iss. Он нормально компилируется и работает в Ansi. Подскажите, как его адаптировать для компиляции в Unicode. Спасибо

audiofeel 11-10-2014 06:58 2413721

Цитата:

Цитата Dodakaedr
Подскажите способ, как установить(зарегистрировать) драйвер в систему. Имеется файл .sys(виртуальный прывод) и не достаточно для его работы просто поместить в папку System32\drivers. »

есть у майков такая штука называется DPINST, можно запустить с командой /S или /Q. но по моему кроме .SYS нужен .INF и каталог безопасности .CAT
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
==================
ключи командной строки
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
==================
вот выложил на файлообменник
http://rghost.ru/58459101

audiofeel 11-10-2014 07:14 2413722

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

Dodakaedr 11-10-2014 07:25 2413725

Вложений: 1
Цитата:

Цитата audiofeel
есть у майков такая штука называется DPINST »

Спасибо! Попробую. Но хотелось именно средствами inno.

Цитата:

Цитата vasvladal
Есть в Inno Setup 5\IS_Scrpt\Scripts пример - Ultimate Test.iss. Он нормально компилируется и работает в Ansi. Подскажите, как его адаптировать для компиляции в Unicode. Спасибо »

Подключается как модуль.

audiofeel 11-10-2014 07:37 2413728

Цитата:

Цитата Dodakaedr
Но хотелось именно средствами inno. »

попробуй установи при помощи DPINST и просмотри что она оставит в HKLM\System\CurrentControlSet\Services
может поможет, просто тупа скопировать данные в реестр

saurn 11-10-2014 12:13 2413779

Dodakaedr,
#1599

vasvladal 11-10-2014 13:17 2413810

Вложений: 1
Dodakaedr,
Цитата:

Цитата Dodakaedr
Подключается как модуль.
Вложения
Тип файла: rar HWREQ Memory.rar
(4.8 Kb, 0 просмотров) »

Спасибо. Но все равно, не показывает как положено данные о видеокарте...

Nordek 11-10-2014 17:58 2413891

Цитата:

Цитата Dodakaedr
Подскажите способ, как установить(зарегистрировать) драйвер в систему. »

Посмотри ещё здесь и здесь.

AlekseyPopovv 11-10-2014 21:06 2413944

Как использовать картинки .png вместо .bmp?

Dodakaedr 11-10-2014 21:07 2413947

AlekseyPopovv, Через ботву.

AlekseyPopovv 11-10-2014 21:14 2413951

Dodakaedr, А можно примерчик любой?

Dodakaedr 11-10-2014 22:04 2413965

Вложений: 1
Цитата:

Цитата AlekseyPopovv
А можно примерчик любой? »

Простой пример:

Dodakaedr 12-10-2014 00:11 2413987

Что обычно прописывают в .inf файле? Потому что у меня только .sys файл (виртуальный привод программы poweriso).

audiofeel 12-10-2014 12:23 2414149

как сделать рабочей собственную форму отмены на странице распаковки исдон ? все перепробЫвал, или только на распаковке работает или везде кроме распаковки, или сперва появляется моя форма а затем системная или сперва системная а затем моя, или два раза моя
как их объединить что бы оно заработало
-------------------------------------------
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm := False;
if ShowCancelBox = mrNo then
Cancel := False;
end;
--------------------------------------------
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID = wpInstalling then
begin
SuspendProc;
Confirm := False;
Cancel := False;
if ExitSetupMsgBox then ISDoneCancel:=1;
ResumeProc;
end;
end;

saurn 12-10-2014 13:43 2414186

audiofeel, ShowCancelBox - это форма?
читать дальше »
Код:

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
    case CurPageID of
        WpInstalling:
        begin
            SuspendProc;

            Confirm := False;
            Cancel := Confirm;

            if ( mrYes = ShowCancelBox ) then
              ISDoneCancel := 1;

          ResumeProc;
        end;
    end;
end;


audiofeel 12-10-2014 14:11 2414195

saurn,
Цитата:

Цитата saurn
ShowCancelBox - это форма? »

--------------------------------------
function ShowCancelBox:Integer;
begin
Result:=CancelForm.ShowModal;
end;
--------------------------------------
нет не работает, на всех страницах системная, кроме распаковки исдон, там кастомня форма
=====================
вот так получилось сделать, теперь на всех страницах кастомная форма отмены , но на странице распаковки исдон, страницу нужно вызывать два раза, только после этого идет отмена,
в чем причина ??
-------------------------------------
читать дальше »

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
Cancel:=False;
if CancelForm.ShowModal = mrYes then
Cancel:=True;
if CurPageID = wpInstalling then
begin
SuspendProc;
Confirm := False;
Cancel := False;
if CancelForm.ShowModal = mrYes then ISDoneCancel:=1;
ResumeProc;
end;
end;

audiofeel 12-10-2014 16:35 2414280

saurn,
так форма отмены не вызывается вообще

----------------------------------------------
я вообще не пойму уже где что изменить, вот с этим "вариантом" выходит так
читать дальше »

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
if CancelForm.ShowModal = mrYes then Cancel:=True
else
Cancel:=False;
if CurPageID = wpInstalling then begin
SuspendProc;
Confirm := False;
Cancel := False;
if CancelForm.ShowModal = mrYes then ISDoneCancel:=1;
ResumeProc;
end;
end;

нажимать на кнопку "да" на странице распаковки архивов нужно два раза

saurn 12-10-2014 16:53 2414284

Цитата:

Цитата audiofeel
так форма отмены не вызывается вообще »

Да и не должна. То был просто пример действия, если форма уже есть.
Цитата:

Цитата audiofeel
нажимать на кнопку "да" на странице распаковки архивов нужно два раза »

Да потому что вы вызываете форму дважды. Первый раз глобально, для всех страниц и второй раз конкретно для страницы установки.
Цитата:

Цитата audiofeel
я вообще не пойму уже где что изменить »

Код:

procedure CancelButtonClick( CurPageID: Integer; var Cancel, Confirm: Boolean );
begin
    Confirm := False;
    Cancel := ( mrYes = CancelForm.ShowModal );

    if ( CurPageID = wpInstalling )then
      begin
          SuspendProc;
          if Cancel then
            ISDoneCancel := 1;
          ResumeProc;
      end;
end;


audiofeel 12-10-2014 17:31 2414293

теперь форма после отмены закрывается и все , исчезает, без wpFinished без лейбла об ошибке
ну ладно, все равно лучше чем было

saurn 12-10-2014 18:40 2414308

Цитата:

Цитата audiofeel
теперь форма после отмены закрывается и все , исчезает, без wpFinished без лейбла об ошибке
ну ладно, все равно лучше чем было »

А, ну да. Тогда так:
Код:

procedure CancelButtonClick( CurPageID: Integer; var Cancel, Confirm: Boolean );
begin
    Confirm := False;
    Cancel := False;

    if ( CurPageID <> wpInstalling )then
      Cancel := ( mrYes = CancelForm.ShowModal );

    if ( CurPageID = wpInstalling )then
      begin
          SuspendProc;
          if ( mrYes = CancelForm.ShowModal ) then
            ISDoneCancel := 1;
          ResumeProc;
      end;
end;


ROMKA-1977 13-10-2014 16:47 2414749

Подскажите пожалуйста:
На странице доп. задач установил кнопку "Выбрать всё" при клике на которую отмечаются все чекбоксы и она обновляется на кнопку "Очистить всё".
Проблема в том что если все чекбоксы отметить или снять в ручную то обновления кнопки не происходит.
читать дальше »

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true
ShowTasksTreeLines=true

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}

Name: Soft; Description: Установить дополнительное программное обеспечение; GroupDescription: Дополнительное программное обеспечение:; Flags: unchecked
Name: Soft/DirectX; Description: Microsoft DirectX; Flags: unchecked
Name: Soft/vcredist_x86; Description: Microsoft Visual С++ 2005 Redistributable; Flags: unchecked
Name: Soft/vcredist_x64; Description: Microsoft Visual С++ 2005 Redistributable x64; Flags: unchecked; Check: IsWin64

[code]
var
SelectAll: TNewButton;

procedure ButtonOnClick(Sender: TObject);
var
i: integer;
begin
if (SelectAll.Tag = 0) then
begin
for i:= 0 to WizardForm.TasksList.Items.Count - 1 do
begin
WizardForm.TasksList.Checked[i]:= True;
end;
SelectAll.Caption := 'Очистить всё';
SelectAll.Tag:= 1;
end else
if (SelectAll.Tag = 1) then
begin
for i:= 0 to WizardForm.TasksList.Items.Count - 1 do
begin
WizardForm.TasksList.Checked[i]:= False;
end;
SelectAll.Caption := 'Выбрать всё';
SelectAll.Tag:= 0;
end;
end;

procedure InitializeWizard();
begin
SelectAll := TNewButton.Create(WizardForm);
with SelectAll do
begin
Parent := WizardForm.SelectTasksPage;
Left := ScaleX(0);
Top := ScaleY(204);
Width := ScaleX(75);
Height := ScaleY(25);
OnClick := @ButtonOnClick;
Caption := 'Выбрать всё';
end;
SelectAll.TabOrder := 2;
end;

ignietferro@vk 13-10-2014 22:40 2414909

подскажите, к кому можно обратиться за помощью с inno setup ?
вопрос специфичный и удобней было бы лично обсудить

Nordek 13-10-2014 23:04 2414915

ignietferro@vk, Для особых случаев, ссылка в сообщении.

saurn 13-10-2014 23:24 2414917

Цитата:

Цитата ROMKA-1977
Проблема в том что если все чекбоксы отметить или снять в ручную то обновления кнопки не происходит. »

читать дальше »
Код:

var
    i, nCount: Integer;
    SelectAll: TNewButton;


procedure TNewCheckListBoxOnClickCheck( Sender: TObject );
begin
    nCount := WizardForm.TasksList.ItemCount - 1;

    for i := 0 to nCount do
    begin
        case TNewCheckListBox( Sender ).Checked[i] of
            True: SelectAll.Caption := 'Очистить всё';
            False: SelectAll.Caption := 'Выбрать всё';
        end;
    end;
end;


procedure TButtonOnClick( Sender: TObject );
begin
    nCount := WizardForm.TasksList.ItemCount - 1;

    for i := nCount downto 0 do
    begin
        case TButton( Sender ).Caption of
            'Выбрать всё': WizardForm.TasksList.CheckItem( i, coCheckWithChildren );
            'Очистить всё': WizardForm.TasksList.CheckItem( i, coUncheck );
        end;
    end;

    WizardForm.TasksList.OnClickCheck( WizardForm.TasksList );
end;


procedure InitializeWizard();
begin
    WizardForm.TasksList.OnClickCheck := @TNewCheckListBoxOnClickCheck;

    SelectAll := TNewButton.Create(WizardForm);
    with SelectAll do
    begin
        Parent := WizardForm.SelectTasksPage;
        Left := ScaleX(0);
        Top := ScaleY(204);
        Width := ScaleX(75);
        Height := ScaleY(25);
        OnClick := @TButtonOnClick;
    end;
end;


procedure CurPageChanged( const CurPageID: Integer );
begin
    case CurPageID of
        wpSelectTasks: WizardForm.TasksList.OnClickCheck( WizardForm.TasksList );
    end;
end;


ROMKA-1977 13-10-2014 23:59 2414923

saurn, в строке: nCount := WizardForm.TasksList.ItemCount - 1;
ошибка - Unknown identifier ITEMCOUNT

saurn, разобрался: nCount := WizardForm.TasksList.Items.Count - 1;

saurn 14-10-2014 00:10 2414926

Цитата:

Цитата ROMKA-1977
ошибка - Unknown identifier ITEMCOUNT »

Стандартная версия? Замените в обоих процедурах, на:
Код:

nCount := WizardForm.TasksList.Items.Count - 1;

audiofeel 14-10-2014 06:39 2415010

Помогите, подскажите как "правильно" создать в скрипте Windows Metro http://krinkels.org/resources/window...installer.148/ чек бокс "не создавать папку в меню пуск" , чек бокс создать проблемы нет, но как сделать не активной кнопку "обзор" на странице WpSelectGroup при нажатии на чек бокс не знаю, там процедуры нет на чек бокс , есть только функция

ignietferro@vk 14-10-2014 11:24 2415106

Цитата:

Цитата Nordek
ignietferro@vk, Для особых случаев, ссылка в сообщении. »

спасибо, видел тот форум, но он показался мертвым уже давно (хоть и есть немного новых сообщений) и подумал, что, может быть, кто-то тут поможет

Shkutu 14-10-2014 19:04 2415365

Цитата:

Цитата audiofeel
чек бокс "не создавать папку в меню пуск" »

если хотите прям кастомный, то примерно так:
Код:

var tc:TNewCheckBox;

procedure tcClick(sender:tobject);
begin
 if tc.checked then
  WizardForm.GroupBrowseButton.enabled:=false
 else
  WizardForm.GroupBrowseButton.enabled:=true; 
end;

procedure InitializeWizard;
begin
tc:=TNewCheckBox.create(WizardForm);
tc.parent:=WizardForm.SelectProgramGroupPage;
tc.top:=WizardForm.GroupEdit.top + WizardForm.GroupEdit.height + scaleY(15);
tc.onclick:=@tcClick;
end;

А вообще для этих целей есть директива секции Setup
Код:

AllowNoIcons=yes
Подробнее в справке можно

Dodakaedr 14-10-2014 22:08 2415428

Цитата:

Цитата audiofeel
как "правильно" создать »

#1695

audiofeel 15-10-2014 04:07 2415490

Dodakaedr,
Shkutu,
да нее, создал я его этот чек бокс та...

читать дальше »

function NoStartIcon: Boolean;
begin
Result := not CheckBoxGetChecked(NoIconsChk);
end;

а как сделать при нажатии на него , кнопку ButtonSetEnabled(GroupBrowseBtn, False) ????
на чек боксы вообще нет процедур, только функции, то есть
читать дальше »

function DesktopIcon: Boolean;
begin
Result := CheckBoxGetChecked(DesktopChk);
end;

function DopPO: Boolean;
begin
Result := CheckBoxGetChecked(DopPOChk);
end;

function NoStartIcon: Boolean;
begin
Result := not CheckBoxGetChecked(NoIconsChk);
end;

я на него процедуру клика делал - ноль эмоций (может не правильно ??)
--------------------------------------
понимаю что качать не охота, поэтому вот часть скрипта с чек боксами
читать дальше »

type
TCusChk = record
Base, Mid, Top: TPanel;
Labl: TLabel;
IsChecked, IsEnabled: Boolean;
end;
procedure CheckBoxEnter(var CheckBox:TCusChk);
begin
if CheckBox.IsChecked then
begin
CheckBox.Base.Color:={#Color1};
CheckBox.Top.Color:=$AAAAAA;
CheckBox.Labl.Font.Color:={#Color1};
end else begin
CheckBox.Base.Color:={#Color1};
CheckBox.Top.Color:={#Color2};
CheckBox.Labl.Font.Color:={#Color1};
end;
end;

procedure CheckBoxLeave(var CheckBox:TCusChk);
begin
if CheckBox.IsChecked then
begin
CheckBox.Base.Color:={#Color1};
CheckBox.Top.Color:={#Color1};
CheckBox.Labl.Font.Color:=$AAAAAA;
end else begin
CheckBox.Base.Color:=$AAAAAA;
CheckBox.Top.Color:={#Color2};
CheckBox.Labl.Font.Color:=$AAAAAA;
end;
end;

procedure CheckBoxDown(var CheckBox:TCusChk);
begin
if CheckBox.IsChecked then
begin
CheckBox.Base.Color:={#Color1};
CheckBox.Top.Color:={#Color2};
CheckBox.Labl.Font.Color:=$AAAAAA;
end else begin
CheckBox.Base.Color:={#Color1};
CheckBox.Top.Color:={#Color1};
CheckBox.Labl.Font.Color:=$AAAAAA;
end
end;

procedure CheckBoxUp(var CheckBox:TCusChk);
begin
if CheckBox.IsChecked then
begin
CheckBox.Base.Color:={#Color1};
CheckBox.Top.Color:=$AAAAAA;
CheckBox.Labl.Font.Color:={#Color1};
end else begin
CheckBox.Base.Color:={#Color1};
CheckBox.Top.Color:={#Color2};
CheckBox.Labl.Font.Color:={#Color1};
end;
end;

procedure CheckBoxClick(var CheckBox:TCusChk);
begin
CheckBox.IsChecked:= not CheckBox.IsChecked;
end;

procedure CheckBoxOnEnter(Sender:TObject);
begin
case Sender of
NoIconsChk.Top: CheckBoxEnter(NoIconsChk);
DesktopChk.Top: CheckBoxEnter(DesktopChk);
DopPOChk.Top: CheckBoxEnter(DopPOChk);
end;
end;

procedure CheckBoxOnLeave(Sender:TObject);
begin
case Sender of
NoIconsChk.Top: CheckBoxLeave(NoIconsChk);
DesktopChk.Top: CheckBoxLeave(DesktopChk);
DopPOChk.Top: CheckBoxLeave(DopPOChk);
end;
end;

procedure CheckBoxOnDown(Sender:TObject; CheckBox:TMouseButton; Shift:TShiftState; X, Y:Integer);
begin
case Sender of
NoIconsChk.Top: CheckBoxDown(NoIconsChk);
DesktopChk.Top: CheckBoxDown(DesktopChk);
DopPOChk.Top: CheckBoxDown(DopPOChk);
end;
end;

procedure CheckBoxOnClick(Sender:TObject);
begin
case Sender of
NoIconsChk.Top: CheckBoxClick(NoIconsChk);
DesktopChk.Top: CheckBoxClick(DesktopChk);
DopPOChk.Top: CheckBoxClick(DopPOChk);
end;
end;

procedure CheckBoxOnUp(Sender:TObject; CheckBox:TMouseButton; Shift:TShiftState; X, Y:Integer);
begin
case Sender of
NoIconsChk.Top: CheckBoxUp(NoIconsChk);
DesktopChk.Top: CheckBoxUp(DesktopChk);
DopPOChk.Top: CheckBoxUp(DopPOChk);
end;
end;

procedure CheckBoxSetText(var CheckBox: TCusChk; hText: String);
begin
CheckBox.Top.Caption:=hText;
end;

procedure CheckBoxSetVisibility(var CheckBox: TCusChk; hVisible: Boolean);
begin
CheckBox.Base.Visible:=hVisible;
CheckBox.Labl.Visible:=hVisible;
end;

procedure CheckBoxSetEnabled(var CheckBox: TCusChk; hEnabled: Boolean);
begin
CheckBox.Base.Enabled:=hEnabled;
CheckBox.IsEnabled:=hEnabled;
if hEnabled then
begin
CheckBox.Base.Color:=$AAAAAA;
CheckBox.Top.Color:=$AAAAAA;
CheckBox.Labl.Font.Color:=$AAAAAA;
end else begin
if CheckBox.IsEnabled then
begin
CheckBox.Base.Color:=$AAAAAA;
CheckBox.Top.Color:=$AAAAAA;
CheckBox.Labl.Font.Color:=$AAAAAA;
end else begin
CheckBox.Base.Color:=$AAAAAA;
CheckBox.Top.Color:={#Color2};
CheckBox.Labl.Font.Color:=$AAAAAA;
end;
end;
end;

procedure CheckBoxSetChecked(var CheckBox: TCusChk; hChecked: Boolean);
begin
CheckBox.IsChecked:= hChecked;
if CheckBox.IsEnabled then
begin
if hChecked then
begin
CheckBox.Base.Color:={#Color1};
CheckBox.Top.Color:={#Color1};
CheckBox.Labl.Font.Color:=$AAAAAA;
end else begin
CheckBox.Base.Color:=$AAAAAA;
CheckBox.Top.Color:={#Color2};
CheckBox.Labl.Font.Color:=$AAAAAA;
end;
end else begin
if hChecked then
begin
CheckBox.Base.Color:=$AAAAAA;
CheckBox.Top.Color:=$AAAAAA;
CheckBox.Labl.Font.Color:=$AAAAAA;
end else begin
CheckBox.Base.Color:=$AAAAAA;
CheckBox.Top.Color:={#Color2};
CheckBox.Labl.Font.Color:=$AAAAAA;
end;
end;
end;

function CheckBoxGetChecked(var CheckBox: TCusChk): Boolean;
begin
Result:=CheckBox.IsChecked;
end;

procedure CheckBoxSetEvent(var CheckBox: TCusChk; Event: TNotifyEvent);
begin
if CheckBox.IsChecked then
CheckBox.Top.OnClick:=Event;
end;

function CheckBoxCreate(hParent :TWinControl; hLeft, hTop, hWidth, hHeight: Integer; hText: String): TCusChk;
begin
Result.IsEnabled:=True;
Result.Base:= TPanel.Create(hParent);
with Result.Base do begin
Parent:=hParent;
Left:=hLeft;
Top:=hTop;
Width:=hWidth;
Height:=hHeight;
Color:=$AAAAAA;
BorderStyle := bsNone;
BevelInner := bvNone;
BevelOuter := bvNone;
BorderWidth := 0;
ParentBackground := False;
end;

Result.Mid:= TPanel.Create(Result.Base);
with Result.Mid do begin
Parent:=Result.Base;
Left:=1;
Top:=1;
Width:=hWidth - 2;
Height:=hHeight - 2;
Color:={#Color2};
BorderStyle := bsNone;
BevelInner := bvNone;
BevelOuter := bvNone;
BorderWidth := 0;
ParentBackground := False;
end;

Result.Top:= TPanel.Create(Result.Mid);
with Result.Top do begin
Parent:=Result.Mid;
Left:=1;
Top:=1;
Width:=hWidth - 4;
Height:=hHeight - 4;
OnMouseEnter:= @CheckBoxOnEnter;
OnMouseLeave:= @CheckBoxOnLeave;
OnMouseDown := @CheckBoxOnDown;
OnMouseUp := @CheckBoxOnUp;
OnClick := @CheckBoxOnClick;
Color:={#Color2};
BorderStyle := bsNone;
BevelInner := bvNone;
BevelOuter := bvNone;
BorderWidth := 0;
ParentBackground := False;
end;

Result.Labl:= TLabel.Create(hParent);
with Result.Labl do
begin
Parent:=hParent;
OnMouseEnter:= @CheckBoxOnEnter;
OnMouseLeave:= @CheckBoxOnLeave;
OnMouseDown := @CheckBoxOnDown;
OnMouseUp := @CheckBoxOnUp;
// Layout:=tlCenter;
Transparent := True;
Font.Color:=$AAAAAA;
Font.Name:='Segoe UI Light';
Font.Size:=11;
SetBounds((hLeft + hWidth) + 5,hTop - 2,0,0);
Caption:=hText
end;
end;

ROMKA-1977 15-10-2014 12:01 2415598

Подскажите возможно ли выполнить текстурирование прогрессбаров ISDone без применения botva2.dll с помощью .bmp ?

Tco 03 15-10-2014 16:49 2415734

Цитата:

Цитата ROMKA-1977
Подскажите возможно ли выполнить текстурирование прогрессбаров ISDone без применения botva2.dll с помощью .bmp ? »

Конечно можно :)
читать дальше »

Код:


[Setup]
AppName=MyApp
AppVerName=MyApp
defaultDirName={pf}\MyApp

[Files]
Source: compiler:InnoCallBack.dll; DestDir: {tmp};
Source: progress.bmp; DestDir: {tmp}
Source: {win}\Help\; DestDir: {app}; Flags: external

[code ]
type
  TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
  TPBInfo = record ProgressBarName: TNewProgressBar ; ImageHeight, LastWidth, MaxWidth: Integer; end;

var
ProgressBarEdit: array of TEdit;
ProgressBarImage: array of TBitmapImage;
PBBuff: array of TPBInfo;
ProgressTimer: Longword; PBCount: Integer;

function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

procedure TextureProgressBar(ProgressBar:TNewProgressBar);
var n: Integer;
begin
n:= PBCount; SetArrayLength(ProgressBarEdit, n+1); SetArrayLength(ProgressBarImage, n+1)
SetArrayLength(PBBuff, n+1);

ProgressBarEdit[n]:= TEdit.Create(WizardForm)
ProgressBarEdit[n].SetBounds(ProgressBar.Left, ProgressBar.Top, ProgressBar.Width, ProgressBar.Height);
ProgressBarEdit[n].Enabled:= False;
ProgressBarEdit[n].Parent:= ProgressBar.Parent;
ProgressBarEdit[n].Visible:= ProgressBar.Visible;

PBBuff[n].LastWidth:= ProgressBar.Position;
PBBuff[n].ImageHeight:= ProgressBarEdit[n].Height - ScaleY(2);
PBBuff[n].ProgressBarName:= ProgressBar ;
PBBuff[n].MaxWidth:= ScaleX(ProgressBar.Width);

ProgressbarImage[n]:= TBitmapImage.Create(WizardForm);
ProgressbarImage[n].Stretch:= True;
ProgressbarImage[n].Parent:= ProgressBarEdit[n];
ProgressbarImage[n].SetBounds(ScaleX(0), ScaleY(0), ScaleX(0), ScaleY(0))
ProgressbarImage[n].Bitmap.LoadFromFile(ExpandConstant('{tmp}\progress.bmp'));

ProgressBar.Width:= ScaleX(0); ProgressBar.Height:= ScaleY(0);

PBCount:= PBCount+1
end;

procedure HideAllTexturedPB();
var n: integer;
begin
for n:=0 to PBCount-1 do begin ProgressBarEdit[n].Hide; ProgressBarImage[n].Hide; end;
end;

procedure UpdateAllTexturedPB();
var n: integer;
begin
for n:=0 to PBCount-1 do begin
ProgressBarEdit[n].Visible:= PBBuff[n]. ProgressBarName.Visible;
ProgressBarImage[n].Visible:= PBBuff[n].ProgressBarName.Visible; end;
end;

procedure UpdatePB(HandleW, msg, idEvent, TimeSys: LongWord);
var f: integer; CurWidth: single;
begin
for f:=0 to PBCount-1 do begin
UpdateAllTexturedPB
with PBBuff[f].ProgressB arName do begin
  CurWidth := (Position*PBBuff[f].MaxWidth)/Max;
  if PBBuff[f].LastWidth <> Round(CurWidth) then begin
    PBBuff[f].LastWidth:= Round(CurWidth);
    ProgressBarImage[f].SetBounds(ScaleX(0), ScaleY(0), PBBuff[f].LastWidth, PBBuff[f].ImageHeight); end;
  end;
end;
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('progress.bmp');

TextureProgressBar(WizardForm.ProgressGauge)
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall then ProgressTimer:= SetTimer(0,0, 200, WrapTimerProc(@UpdatePB, 4));
if CurStep=ssPostInstall then KillTimer(0, ProgressTimer);
end;


AlekseyPopovv 15-10-2014 18:11 2415789

Как удалить вот такую запись из реестра?
RegDeleteValue(HKU, 'S-1-5-21-3249071770-3804279344-2902041931-1000\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted', 'D:\WindowsPlayer_2.9.4.0.exe');
Пробовал вот так, не получается:
RegDeleteValue(HKU, 'S-1-5-21-3249071770-3804279344-2902041931-1000\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted', '{src}\WindowsPlayer_2.9.4.0.exe');
Если указать полный путь "D:\WindowsPlayer_2.9.4.0.exe", то всё удаляется. Но пользователь может запустить установку из любого места. Как быть?

audiofeel 15-10-2014 19:53 2415847

AlekseyPopovv,
RegDeleteValue(HKU, 'S-1-5-21-3249071770-3804279344-2902041931-1000\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted', '{app}\WindowsPlayer_2.9.4.0.exe');

Dodakaedr 15-10-2014 20:11 2415853

Цитата:

Цитата AlekseyPopovv
Как удалить вот такую запись из реестра? »

Попробуйте так:
Код:

RegDeleteValue(HKEY_CURRENT_USER, 'Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted', '{app}\WindowsPlayer_2.9.4.0.exe');
S-1-5-21-3249071770-3804279344-2902041931-1000 - это SID пользователя и он у каждого разный.
Но если не сработает то GetSID вам в помощь.

audiofeel 15-10-2014 20:30 2415865

вот таким "макаром" у меняя получилось сделать кнопку "далее" не активной, когда свободного места меньше чем надо,
читать дальше »

procedure DirEditOnChange(Sender: TObject);
var
NeedSize, FreeSize: Extended;
begin
EditSetText(SelectDirEdt, MinimizePathName(WizardForm.DirEdit.Text, SelectDirEdt.Top.Font, SelectDirEdt.Top.Width));
NeedSize := StrToFloat(GetFloatFormText(WizardForm.ComponentsDiskSpaceLabel.Caption));
FreeSize := Extended(GetFreeDriveSpace(WizardDirValue()));
NeedInstallSizeLabel.Caption := 'Требуется как минимум ' + MbOrTb(NeedSize) + ' свободного дискового пространства.';
if (FreeSize > NeedSize) then NeedInstallSizeLabel.Font.Color := $AAAAAA else NeedInstallSizeLabel.Font.Color := {#Color1};
ButtonSetEnabled(NextBtn, (FreeSize > NeedSize));
if WizardForm.CurPageID = wpSelectProgramGroup then begin
ButtonSetEnabled(NextBtn, (FreeSize > NeedSize));
ButtonSetEnabled(NextBtn, True);
end;
end;

может все таки есть способ сделать не активной кнопку GroupBrowserBtn после нажатия на чек бокс ????

audiofeel 15-10-2014 20:57 2415884

saurn,

кнопки не через ботву :(

audiofeel 15-10-2014 22:08 2415913

saurn, ок, - оригинал = http://rghost.ru/58543107

saurn 15-10-2014 22:24 2415928

audiofeel, за состояние кнопок отвечает процедура
Код:

procedure ButtonSetEnabled(var Button: TCusBtn; hEnabled: Boolean);
Значит включение\отключение выглядит так:
ButtonSetEnabled( MyBtn, True ) - включена, ButtonSetEnabled( MyBtn, False ) - выключена
Обработчик кликов чекбокса будет выглядеть так:
Код:

procedure NoIconsCheckClick(Sender: TObject);
begin
  case TCheckBox( Sender ).Checked of
      True: ButtonSetEnabled( MyBtn, False );
      False: ButtonSetEnabled( MyBtn, True );
  end;
end;


audiofeel 15-10-2014 23:18 2415962

saurn,
я это "понял" так, но не работает
читать дальше »

function NoStartIcon: Boolean;
begin
Result := not CheckBoxGetChecked(NoIconsChk);
end;

procedure NoIconsClick(Sender: TObject);
begin
case CheckBoxGetChecked(NoIconsChk) of
True: ButtonSetEnabled(GroupBrowseBtn, False);
False: ButtonSetEnabled(GroupBrowseBtn, True);
end;
end;

CheckBoxSetEvent(NoIconsChk, @NoIconsClick);


ABBAT 16-10-2014 11:39 2416124

Всем привет. Кто в курсе, как сделать (тихое) удаление без UninstallProgressForm . Что-то вроде удалить программу и в конце программа удалена т.е скрыть окно UninstallProgressForm

ROMKA-1977 16-10-2014 19:35 2416380

Tco 03, с твоим вариантом получилось со стандартным прогрессбаром а надо прогрессбары ISDone.

Rekit_403 17-10-2014 00:08 2416504

Доброй ночи ребята.
Как реализовать подкачку модов из сети в установщике?
Т.е. моды, которые много весят будут докачивать с различных файлообменников.
Есть ли какой-то пример, как реализовать данное чудо?
Заранее благодарю всех кто поможет.

Nordek 17-10-2014 01:14 2416521

Цитата:

Цитата Rekit_403
Есть ли какой-то пример, как реализовать данное чудо? »

Загрузка файла из Интернет
InnoTools Downloader

audiofeel 17-10-2014 08:11 2416556

подскажите, кто знает как "вызвать" это сообщение в левом верхнем углу в конце успешного выполнения чего либо, не кастомно а "вызвать", выпросить :) у Windows ????

Tco 03 17-10-2014 08:18 2416558

Цитата:

Цитата ROMKA-1977
с твоим вариантом получилось со стандартным прогрессбаром а надо прогрессбары ISDone »

А ISDone прогресс бар - это что? Я дал пример, а как его прикрутить к своему скрипту - это уже Ваша задача.

Kashtan007 18-10-2014 16:13 2417037

Здравствуйте, есть вопрос к El Sanchez.
Страницами раньше вы помогли мне с бекапом и удалением компонентов. Тык
Так вот я только обнаружил проблему...
Удалением модов происходит после установки компонентов.
Т.е. сначала производится бекап, потом установка компонетов, а потом оно удаляет и старые компоненты и те которые только что установились.
Как изменить этот порядок?
Чтобы удаление происходило перед установкой новых компонетов?
Заранее спасибо за ответ!

El Sanchez 19-10-2014 10:44 2417308

Цитата:

Цитата Kashtan007
Удалением модов происходит после установки компонентов.
Т.е. сначала производится бекап, потом установка компонетов, а потом оно удаляет и старые компоненты и те которые только что установились.
Как изменить этот порядок?
Чтобы удаление происходило перед установкой новых компонетов? »

Kashtan007,
читать дальше »

Код:

[Setup]
AppName=test2
AppVerName=test2
DefaultDirName=D:\test

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[CustomMessages]
ru.DeleteOldMods=Удалить все старые моды
ru.CreateBackupOldMods=Сохранить бекап старых модов
ru.DeletingOldMods=Удаление старых модов...
ru.RestoringOldMods=Восстановление старых модов...

[Files]
Source: {app}\res_mods\*; DestDir: {app}\ModPack\BackUp\res_mods; Flags: external createallsubdirs recursesubdirs skipifsourcedoesntexist; AfterInstall: DeleteFiles(ExpandConstant('{app}\res_mods\*'), True); Check: IsOldMods('CreateBackupOldMods')
Source: {app}\path.file; DestDir: {app}\ModPack\OriginalFiles; Flags: external skipifsourcedoesntexist; AfterInstall: DeleteFiles(ExpandConstant('{app}\path.file'), False)

[UninstallRun]
Filename: {cmd}; Parameters: "/c xcopy /ecihry ""{app}\ModPack\BackUp\res_mods"" ""{app}\res_mods\"""; StatusMsg: {cm:DeletingOldMods}; Flags: runhidden; Check: IsOldMods('CreateBackupOldMods')
Filename: {cmd}; Parameters: "/c xcopy /ecihry ""{app}\ModPack\OriginalFiles\path.file"" ""{app}\"""; Flags: runhidden

[code]
var
   
OldModsListBox: TNewCheckListBox;

///////////////////////////////////////////////
function IsOldMods(const Msg: String): Boolean;
begin
    with
OldModsListBox do
       
Result := Checked[Items.IndexOf(CustomMessage(Msg))]
end;

//////////////////////////////
procedure CreateSelectDirPage;
var
   
rt: TRect;
begin
   
OldModsListBox := TNewCheckListBox.Create(WizardForm);
    with OldModsListBox do
    begin
       
Parent := WizardForm.SelectDirPage;
        Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(10);
        Width := Parent.ClientWidth;
        BorderStyle := bsNone;
        ParentColor := True;
        ShowLines := False;
        WantTabs := True;
        AddCheckBox(CustomMessage('DeleteOldMods'), '', 0, True, True, True, False, nil);
        AddCheckBox(CustomMessage('CreateBackupOldMods'), '', 1, True, True, False, True, nil);
        rt := ItemRect(ItemCount-1);
        Height := rt.Bottom;
    end;
end;

////////////////////////////////////////////////////////////////////////////
procedure DeleteFiles(const Path: String; const DeleteSubdirsAlso: Boolean);
begin
   
DelTree(Path, False, True, DeleteSubdirsAlso);
end;

/////////////////////////////
procedure InitializeWizard();
begin
   
CreateSelectDirPage;
end;


Dodakaedr 19-10-2014 13:27 2417369

Что-то не пойму. Ошибок при компиляции нету, файл по пути имеется а вносить изменения в реестр не хочет. В чем проблема?
Код:

function InitializeSetup(): Boolean;
var
  RCode: Integer;
begin
  Exec('regedit.exe', '/s' + '"' + ExpandConstant('{src}\Data\Settings\Settings.reg') + '"', '', SW_SHOW, ewWaitUntilTerminated, RCode);
end;


El Sanchez 19-10-2014 14:39 2417398

Цитата:

Цитата Dodakaedr
В чем проблема? »

Dodakaedr, в командной строке. Где пробел, отделяющий параметры?

Kashtan007 19-10-2014 15:18 2417418

El Sanchez, спасибо.

P.S. Протестил, но к сожалению не работает. Потому что насколько я понимаю, нигде не указано какую папку нужно очистить.
В итоге делает бекап и устанавливает компоненты, но старые не удаляет. В итоге в папке лежат и старые и новые компоненты.

El Sanchez 19-10-2014 15:37 2417432

Цитата:

Цитата Kashtan007
Потому что насколько я понимаю, нигде не указано какую папку нужно очистить. »

Kashtan007, а что по вашему делает это?
Код:

AfterInstall: DeleteFiles(ExpandConstant('{app}\res_mods\*'), True)


Kashtan007 19-10-2014 15:54 2417443

El Sanchez, ясно, но к сожалению не удаляет.
Возможно ли сделать так как было раньше (через секцию run), только расставить последовательность действий?
Так как тут просто очистка res_mods, а хотелось бы очистку res_mods\0.9.3 и удаление xvm.

El Sanchez 19-10-2014 19:31 2417571

Цитата:

Цитата Kashtan007
Возможно ли сделать так как было раньше (через секцию run), только расставить последовательность действий? »

Kashtan007, и будет так же как и в #1845

Цитата:

Цитата Kashtan007
Так как тут просто очистка res_mods, а хотелось бы очистку res_mods\0.9.3 и удаление xvm. »

Kashtan007, т.е. бекапить нужно уже не всю папку res_mods, а res_mods\0.9.3 ?

Цитата:

Цитата Kashtan007
ясно, но к сожалению не удаляет. »

Kashtan007, пример-то хоть пробовали? Или в другой скрипт перенесли и под себя правили? Начните с примера:
  1. Пример

    Код:

    #expr Exec("cmd", "/c md D:\test\res_mods\0.9.3\test", "", 1, SW_HIDE)
    #expr Exec("cmd", "/c md D:\test\res_mods\xvm", "", 1, SW_HIDE)
    #expr Exec("cmd", "/c cd.>D:\test\path.file", "", 1, SW_HIDE)
    #expr Exec("cmd", "/c cd.>D:\test\res_mods\0.9.3\0.9.3.txt", "", 1, SW_HIDE)
    #expr Exec("cmd", "/c cd.>D:\test\res_mods\0.9.3\test\test.txt", "", 1, SW_HIDE)
    #expr Exec("cmd", "/c cd.>D:\test\res_mods\xvm\xvm.txt", "", 1, SW_HIDE)

    [Setup]
    AppName=test2
    AppVerName=test2
    DefaultDirName=D:\test

    [Languages]
    Name: ru; MessagesFile: compiler:Languages\russian.isl

    [CustomMessages]
    ru.DeleteOldMods=Удалить все старые моды
    ru.CreateBackupOldMods=Сохранить бекап старых модов
    ru.DeletingOldMods=Удаление старых модов...
    ru.RestoringOldMods=Восстановление старых модов...

    [Files]
    Source: {app}\res_mods\0.9.3\*; DestDir: {app}\ModPack\BackUp\res_mods\0.9.3; Flags: external createallsubdirs recursesubdirs skipifsourcedoesntexist; AfterInstall: DeleteFiles(ExpandConstant('{app}\res_mods\0.9.3\*'), True); Check: IsOldMods('CreateBackupOldMods')
    Source: {app}\path.file; DestDir: {app}\ModPack\OriginalFiles; Flags: external skipifsourcedoesntexist; AfterInstall: DeleteFiles(ExpandConstant('{app}\path.file'), False)

    [InstallDelete]
    Type: filesandordirs; Name: {app}\res_mods\xvm\*; Check: IsOldMods('DeleteOldMods')

    [UninstallRun]
    Filename: {cmd}; Parameters: "/c xcopy /ecihry ""{app}\ModPack\BackUp\res_mods\0.9.3"" ""{app}\res_mods\0.9.3\"""; StatusMsg: {cm:DeletingOldMods}; Flags: runhidden; Check: IsOldMods('CreateBackupOldMods')
    Filename: {cmd}; Parameters: "/c xcopy /ecihry ""{app}\ModPack\OriginalFiles\path.file"" ""{app}\"""; Flags: runhidden

    [code]
    var
       
    OldModsListBox: TNewCheckListBox;

    ///////////////////////////////////////////////
    function IsOldMods(const Msg: String): Boolean;
    begin
        with
    OldModsListBox do
           
    Result := Checked[Items.IndexOf(CustomMessage(Msg))]
    end;

    //////////////////////////////
    procedure CreateSelectDirPage;
    var
       
    rt: TRect;
    begin
       
    OldModsListBox := TNewCheckListBox.Create(WizardForm);
        with OldModsListBox do
        begin
           
    Parent := WizardForm.SelectDirPage;
            Top := WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + ScaleY(10);
            Width := Parent.ClientWidth;
            BorderStyle := bsNone;
            ParentColor := True;
            ShowLines := False;
            WantTabs := True;
            AddCheckBox(CustomMessage('DeleteOldMods'), '', 0, True, True, True, False, nil);
            AddCheckBox(CustomMessage('CreateBackupOldMods'), '', 1, True, True, False, True, nil);
            rt := ItemRect(ItemCount-1);
            Height := rt.Bottom;
        end;
    end;

    ////////////////////////////////////////////////////////////////////////////
    procedure DeleteFiles(const Path: String; const DeleteSubdirsAlso: Boolean);
    begin
       
    DelTree(Path, False, True, DeleteSubdirsAlso);
    end;

    /////////////////////////////
    procedure InitializeWizard();
    begin
       
    CreateSelectDirPage;
    end;

  2. В примере препроцессором создаются тестовые папки с файлами по пути D:\test. В ней находятся файл path.file для проверки сохранения в OriginalFiles, папка res_mods для проверки сохранения в BackUp. В res_mods 2 папки: xvm и 0.9.3 (плюс подпапка test), в каждой из папок по файлу с именем папки, в которой находится файл. Все готово к экспериментам.
  3. В IDE ставим брейкпоинты (F5 или мышкой) на 2-х строках из секции Files и на строке из секции InstallDelete.
  4. Запускаем скрипт на выполнение - F9.
  5. После кнопки "Установить" сработает первый брейк на InstallDelete. Жмем на F9, чтобы исполнение пошло дальше до второго брейка, это будет первая сторока из секции Files. Между этими 2-мя брейками выполнилась строка из InstallDelete. Смотрим что там. Там идет удаление папок и файлов из res_mods\xvm. Смотрим, так ли это. Открываем папку res_mods\xvm и видим, что она пуста, лежащего в ней файла xvm.txt нет.
  6. Жмем на F9, чтобы исполнение пошло дальше до третьего брейка, это будет вторая сторока из секции Files. Смотрим, что случилось за это время. В первой выполнившейся строке из Files написано скопировать из res_mods\0.9.3 все файлы и папки в папку ModPack\BackUp\res_mods\0.9.3, после этого удалить из res_mods\0.9.3 все файлы и папки. Смотрим, так ли это. Открываем папку ModPack\BackUp\res_mods\0.9.3 и видим, что в ней файл 0.9.3.txt и папка test с файлом test.txt. Открываем res_mods\0.9.3 и видим, что она пуста.
  7. Жмем на F9, заканчиваем установку. Смотрим, что случилось за это время. Отработала вторая строка из Files, в которой написано файл path.file скопировать в ModPack\OriginalFiles, а после удалить. Смотрим, так ли это. Открываем папку ModPack\OriginalFiles, видим в ней файл path.file, в D:\test его нет.
  8. Запускаем деинсталлятор unins000.exe. В секции UninstallRun строки, возвращающие файлы из ModPack\BackUp\res_mods\0.9.3 и ModPack\OriginalFiles в D:\test\res_mods\0.9.3 и D:\test соответственно. По окончании видим, что сохраненные файлы и папки вернулись назад.
  9. Что я делаю не так, что у вас не выходит?

Dodakaedr 20-10-2014 08:23 2417792

Подскажите, пожалуйста, как можно с помощью cmd перемещать, копировать, удалять папки с файлами и подпапками через секцию [code]?

kotyarko@fb 20-10-2014 17:42 2417995

Цитата:

Цитата Dodakaedr
Подскажите, пожалуйста, как можно с помощью cmd перемещать, копировать, удалять папки с файлами и подпапками через секцию [code]? »

Смотрите функцию ShellExec. И вызывайте её на том этапе установки, когда вам это нужно, через CurStepChanged, CurPageChanged, InitializeWizard, InitializeSetup и т.д.

Dodakaedr 20-10-2014 19:01 2418016

kotyarko@fb, Ну да не точно сказал.... нет не файл cmd, а командная строка(cmd.exe)

ekspoint 20-10-2014 20:36 2418054

всем привет,подскажите как сделать стр в компонентах

kotyarko@fb 20-10-2014 21:14 2418073

Цитата:

Цитата ekspoint
всем привет,подскажите как сделать стр в компонентах »

А подробнее?

Цитата:

Цитата Dodakaedr
Ну да не точно сказал.... нет не файл cmd, а командная строка(cmd.exe) »

Ок, а если через секцию Сode, то зачем cmd нужен?
Можно стандартными средствами Inno.

Dodakaedr 20-10-2014 21:15 2418075

Цитата:

Цитата kotyarko@fb
Можно стандартными средствами Inno. »

Например?

Nordek 20-10-2014 21:16 2418077

Цитата:

Цитата ekspoint
как сделать стр в компонентах »

Что это такое: "стр"? "Страница"? Пишите полностью.

Код:

[Setup]
AppName=My program
AppVerName=1.5
DefaultDirName={pf}\My program
OutputDir=.

[Components]
Name: cmp1; Description: Компонент 1
Name: cmp2; Description: Компонент 2
Name: cmp3; Description: Компонент 3
Name: cmp4; Description: Компонент 4


Nordek 20-10-2014 22:16 2418096

Цитата:

Цитата Dodakaedr
Подскажите, пожалуйста, как можно с помощью cmd перемещать, копировать, удалять папки с файлами и подпапками через секцию [code]? »

Пример удаления папки "1" (с содержимым), расположенную в корне системного диска:
Код:

[Code]
procedure InitializeWizard();
var
 
ResultCode: Integer;
begin
 
Exec('cmd.exe', ExpandConstant('/C RD {sd}\1 /S /Q'), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilIdle, ResultCode);
end;


Dodakaedr 20-10-2014 22:23 2418099

Nordek, а копировать и перемещать как?

Nordek 20-10-2014 23:52 2418136

Dodakaedr,
Код:

[Code]
procedure InitializeWizard();
var
 
ResultCode: Integer;
begin
 
Exec('cmd.exe', ExpandConstant('/C XCOPY {sd}\2 {sd}\1 /E /I'), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilIdle, ResultCode);
end;

Код:

[Code]
procedure InitializeWizard();
var
 
ResultCode: Integer;
begin
 
Exec('cmd.exe', ExpandConstant('/C MD {sd}\1 &&  MOVE {sd}\2 {sd}\1'), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilIdle, ResultCode);
end;

Dodakaedr, Win + R »
Код:

cmd /k help

kotyarko@fb 21-10-2014 00:13 2418146

Вложений: 1
Цитата:

Цитата Dodakaedr
Например? »

Можно использовать SHFileOperation.

Dodakaedr 21-10-2014 17:07 2418428

kotyarko@fb, делал как в примере описано не работает. У меня unicode версия.

saurn 21-10-2014 19:58 2418499

Назрел вопрос: как в инно удалить из памяти массив строк, типа Ars: array of String? В дельфи можно отправить в Finalize(), а здесь как? Просто привести к "0"?

Dodakaedr 21-10-2014 21:07 2418530

Nordek, А если в пути есть пробел, то как быть? Так не копирует.
Код:

[Code]
procedure InitializeWizard();
var
  RCode: Integer;
begin
  Exec('cmd.exe', ExpandConstant('/C XCOPY ""{commonappdata}\Astra\DR Updater"" ""{src}\Data\DR Updater"" /E /I'), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilIdle, RCode);
end;


ROMKA-1977 21-10-2014 22:00 2418562

Подскажите как выполнить кнопкой переход на нужную страницу? В моём случае необходимо выполнить переход кастомной кнопкой с ReadyPage на страницу SelectDirPage, не кликая несколько раз кнопку "Назад".

Dodakaedr 22-10-2014 21:44 2419053

Как провести проверку на наличие атрибута "Только чтение" у файла hosts и если оно присутствует то убрать, внести изменения и снова поставить атрибут "Только чтение", а если отсутствует атрибут, то просто внести изменения?

sergey3695 22-10-2014 21:52 2419057

Dodakaedr,
http://forum.ru-board.com/topic.cgi?...90&limit=1&m=1
далее сам.
Цитата:

Цитата Dodakaedr
У меня unicode версия. »

для Unicode
Код:

#ifdef UNICODE
  #define A "W"
#else
  #define A "A"
#endif

function GetFileAttributes(lpFileName: string): integer; 
external 'GetFileAttributes{#A}@kernel32.dll stdcall'; 
 
function SetFileAttributes(lpFileName: string; dwFileAttributes: integer): integer; 
external 'SetFileAttributes{#A}@kernel32.dll stdcall';


Dodakaedr 22-10-2014 23:13 2419097

Вот собрал, все выполняется кроме последнего, атрибут не становится обратно. Хэлп.
читать дальше »
Код:

#ifdef UNICODE
  #define A "W"
#else
  #define A "A"
#endif

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Code]
function GetFileAttributes(lpFileName: string): integer;
external 'GetFileAttributes{#A}@kernel32.dll stdcall';

function SetFileAttributes(lpFileName: string; dwFileAttributes: integer): integer;
external 'SetFileAttributes{#A}@kernel32.dll stdcall';

procedure SetAttr();
var
FileName:string;
begin
FileName:= ExpandConstant('{sys}\drivers\etc\hosts');
if (GetFileAttributes(FileName) and FILE_ATTRIBUTE_NORMAL) = FILE_ATTRIBUTE_NORMAL then
SetFileAttributes(FileName, FILE_ATTRIBUTE_READONLY);
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  HostFile: TStringList;
  FileName: string;
begin
FileName:= ExpandConstant('{sys}\drivers\etc\hosts');
if (GetFileAttributes(FileName) and FILE_ATTRIBUTE_READONLY) = FILE_ATTRIBUTE_READONLY then
SetFileAttributes(FileName, FILE_ATTRIBUTE_NORMAL);
  HostFile := TStringList.Create;
  try
    with HostFile do
    if CurStep = ssPostInstall then
    begin
      LoadFromFile(ExpandConstant('{sys}\drivers\etc\hosts'));
      Add('127.0.0.1    tratata.ru');
      SaveToFile(ExpandConstant('{sys}\drivers\etc\hosts'));
    end;
  finally
    HostFile.free;
  end;
  SetAttr;
end;


Nordek 23-10-2014 01:05 2419133

Цитата:

Цитата Dodakaedr
А если в пути есть пробел, то как быть? »

Код:

[Code]
procedure InitializeWizard();
var
 
ResultCode: Integer;
begin
 
Exec('cmd.exe', ExpandConstant('/C XCOPY "{commonappdata}\Astra\DR Updater" "{src}\New Folder" /E /I'), ExpandConstant('{sys}'), SW_HIDE, ewWaitUntilIdle, ResultCode);
end;


saurn 23-10-2014 01:22 2419138

Цитата:

Цитата Dodakaedr
Как провести проверку на наличие атрибута "Только чтение" у файла hosts и если оно присутствует то убрать, внести изменения и снова поставить атрибут "Только чтение", а если отсутствует атрибут, то просто внести изменения? »

Цитата:

Цитата Dodakaedr
все выполняется кроме последнего, атрибут не становится обратно »

читать дальше »
Код:

#define A = (Defined UNICODE) ? "W" : "A"


function GetFileAttributes( lpFileName: String ): DWORD; external 'GetFileAttributes{#A}@kernel32.dll stdcall';
function SetFileAttributes( lpFileName: String; dwFileAttributes: DWORD ): BOOL; external 'SetFileAttributes{#A}@kernel32.dll stdcall';


procedure WriteStr( const szFile: String; szArray: array of String );
var
    i: Integer;
    tList: TStringList;
    bAttrib: BOOL;
begin
    if ( GetFileAttributes( szFile ) and FILE_ATTRIBUTE_READONLY ) = FILE_ATTRIBUTE_READONLY then // если у файла есть атрибут только чтение то
     
bAttrib := SetFileAttributes( szFile, FILE_ATTRIBUTE_NORMAL); // снимаем атрибут
     
   
tList := TStringList.Create; // создаем стринг-лист
   
with tList do
    try
        LoadFromFile( szFile ); // загружаем файл
       
       
for i := 0 to GetArrayLength( szArray ) - 1 do
          Add( szArray[i] ) // пишем в файл строки из масива szArray
               
       
SaveToFile( szFile ); // сохраняем файл
   
finally
       
        Free; // разрушаем стринг-лист
   
end;
   
    if bAttrib then // Проверяем был ли снят атрибут, и если да то
     
SetFileAttributes( szFile, FILE_ATTRIBUTE_READONLY ); // ставим прежний атрибкт
end;


procedure CurStepChanged( CurStep: TSetupStep );
begin
    if CurStep = ssPostInstall then
      WriteStr( ExpandConstant( '{sys}\drivers\etc\hosts' ), ['127.0.0.1 www.com', // список строк, через запятую.
                                                             
'127.0.0.1 www.net',
                                                              '127.0.0.1 www.ru'] );
end;


Dodakaedr 23-10-2014 15:39 2419387

saurn, Спасибо вам большое!!! И можно вас попросить сделать проверку на строку...тоесть если строка уже присутствует то ничего не делаем, если же её нету то прописываем... и на удаление такое же. Спасибо!

sergey3695 23-10-2014 21:02 2419542

Dodakaedr, в лс.

audiofeel 24-10-2014 10:09 2419708

такой вопрос вот назрел, в связи с новой анимацией окон в Windows, как её включить? ( я не про новую, а вообще про анимацию), задействовать на первой ботве (не защищенной) примеров не нашел,
спасибо !!!

sergey3695 24-10-2014 21:33 2420061

Цитата:

Цитата audiofeel
новой анимацией окон в Windows »

What?
Цитата:

Цитата audiofeel
я не про новую, а вообще про анимацию »

Цитата:

Цитата audiofeel
на первой ботве (не защищенной) »

I not understand you.

audiofeel 24-10-2014 22:10 2420098

sergey3695,
a question that's long overdue, in connection with the new animation window on Windows, as it include? (I'm not talking about a new, and in general about the animation), use the first tops (not secure) examples not found
thanks !!!
Цитата:

Цитата sergey3695
What? »

http://www.thevista.ru/page17751-nov..._10_v_deystvii
Цитата:

Цитата sergey3695
I not understand you. »

http://krinkels.org/threads/dopolnit...-inno-setup.9/
так понятней ?

sergey3695 25-10-2014 00:52 2420168

Цитата audiofeel:
так понятней ? »
При использовании ботвы, не работает анимация окна в Windows 10? Если так то мне негде тестить. Даже без понятия что там.

audiofeel 25-10-2014 01:14 2420176

Цитата:

Цитата sergey3695
При использовании ботвы, не работает анимация окна в Windows 10? Если так то мне негде тестить. Даже без понятия что там. »

ну черт с ней с виндоус 10, все таки при использовании ботвы можно "включить" анимацию или нет ?? пересмотрел немного скриптов, не нашел примеров как ее включить , может ботва и не при чем ?? ну тогда как ее включить?? или она не включается, любая не обязательно "новая" ??
http://youtu.be/5oS0DScnHqc

sergey3695 25-10-2014 07:32 2420214

audiofeel, может это потому что у тя в скрипте стиль bsNone. Попробуй просто чисто на 10-ке
Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
 
[Code ]
const
  GWL_STYLE = (-16);
  WS_CAPTION = $C00000;
 
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint;
external 'GetWindowLongA@user32.dll stdcall';
 
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint;
external 'SetWindowLongA@user32.dll stdcall';
 
Procedure InitializeWizard();
begin
//  SetWindowLong(WizardForm.Handle, GWL_STYLE,
//              GetWindowLong(WizardForm.Handle, GWL_STYLE) and not WS_CAPTION);
  WizardForm.BorderStyle:= bsNone;
end;

Первый или второй закомментированный вариант.

audiofeel 25-10-2014 10:41 2420246

Цитата:

Цитата sergey3695
Первый или второй »

чего то я не понял.... почему "или" ??

sergey3695 25-10-2014 13:22 2420284

audiofeel, потому что у тя в скрипте или так или так. Я то не знаю как именно там сделано. Оба варианта убирают рамки. Так работает анимация с формой без рамки?

audiofeel 25-10-2014 14:38 2420311

Цитата:

Цитата sergey3695
потому что у тя в скрипте или так или так. »

у меня вообще ни как, нет у меня этого, что то я запутался.

Цитата:

Цитата sergey3695
Так работает анимация с формой без рамки? »

если ваш пример добавить в скрипт то анимации нет

sergey3695 25-10-2014 16:35 2420360

Если взят за основу Windows Phone v1.0.1 то там в главном скрипте 562 строка bsNone;
Этож так трудно скомпилить это на 10-ке и посмотреть есть или нет анимации. Но не в ботве это дело.
Код:

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
 
[Code ] 
Procedure InitializeWizard();
begin
  WizardForm.BorderStyle:= bsNone;
end;

Пздц :o

audiofeel 25-10-2014 18:29 2420387

Цитата:

Цитата sergey3695
Пздц »

ну я вас не заставляю помогать и подсказывать и давать примеры, если не хотите пожалуйста, не надо
--------------------------------------------------
добавил
SetWindowLong(WizardForm.Handle, GWL_STYLE,
GetWindowLong(WizardForm.Handle, GWL_STYLE) and not WS_CAPTION);
убрал это, закомментировал BorderStyle := bsNone;
--------------------------------------------------
анимации нет, ни с BorderStyle := bsNone; ни с этим SetWindowLong(WizardForm.Handle, GWL_STYLE,
GetWindowLong(WizardForm.Handle, GWL_STYLE) and not WS_CAPTION);

sergey3695 25-10-2014 19:37 2420412

audiofeel, я про то что анимации нет из-за bsNone. Нет рамки, нет и анимации. и не будет у тебя. не из-за ботвы это. так понятно.

ROMKA-1977 25-10-2014 22:37 2420468

Подскажите можно ли в стандартном компиляторе отключить сообщение о нехватке места на диске. В шапке есть код но там для расширенной версии.

saurn 26-10-2014 00:18 2420491

Цитата:

Цитата ROMKA-1977
Подскажите можно ли в стандартном компиляторе отключить сообщение о нехватке места на диске. В шапке есть код но там для расширенной версии. »

Помощь и советы [часть 4] #657

LagunaFAN 26-10-2014 01:33 2420515

Доброй ночи, уважаемые знатоки!

Появилась необходимость работы с xml для скрипта. Пытаюсь адаптировать свой инсталл для установки в Origin.

Задача стоит такая. Есть файл local.xml, из которого нужно прочитать значение аттрибута value, (см. ниже, выделено и подчеркнуто) длина которого может меняться, а затем это значение вывести в строку выбора директории на соответствующей странице инсталлятора. Иначе, если файла не существует, вывести MsgBox с сообщением, что клиент не установлен. В интернетах нашел модуль для работы с XML, но он работает с тегами, имеющими закрывающий тег и значениями в них. А тут, закрывающего тега нет и есть аттрибуты :(

Код:

<?xml version="1.0"?>
<Settings>
  <Setting value="N:\Games\Origin\DownloadCache\Cache" key="CacheDir" type="10"/>
  <Setting value="false" key="CacheDirRemoval" type="1"/>
  <Setting value="N:\Games\Origin Games\" key="DownloadInPlaceDir" type="10"/>
</Settings>

Возможно ли такое осуществить в рамках Inno? Пожалуйста, помогите :(

nik1967 26-10-2014 05:14 2420539

LagunaFAN, Получить значение строки в текстовом файле

ROMKA-1977 26-10-2014 22:42 2420796

Помогите пож. со следующей ситуацией:
На странице InstallingPage прописал кнопку минимизации инстала (сворачивание в нижний правый угол) и кнпку возврата в исходный размер.

Проблема: после распаковки архивов при установке компонентов выведенных на странице SelectTasksPage кнопки "Min" и "Max" не кликабельны как и кнопка "Отмена" но отображаются они как кликабельные. Как сделать чтобы кнопки "Min" и "Max" отображались некликабельными как и кнопка "Отмена" ?



Пример кода:
читать дальше »

[Setup]
AppName=Name
VersionInfoVersion=5.0
AppVerName=VerName
DefaultDirName={pf}\My program
ShowTasksTreeLines=true
OutputDir=.

[Languages]
Name: Ru; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
Name: Soft; Description: Установка дополнительного программного обеспечения; GroupDescription: Дополнительное программное обеспечение:; Flags: unchecked
Name: Soft/DirectX; Description: Microsoft DirectX; Flags: unchecked
Name: Soft/vcredist_x86; Description: Microsoft Visual С++ 2005 Redistributable; Flags: unchecked
Name: Soft/vcredist_x64; Description: Microsoft Visual С++ 2005 Redistributable x64; Flags: unchecked; Check: IsWin64

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[Run]
Filename: {src}\DirectX\DXSETUP.exe; Parameters: /silent; Tasks: Soft/DirectX; StatusMsg: Установка DirectX;
Filename: {src}\MVC++2005\vcredist_x86.exe; Tasks: Soft/vcredist_x86; Parameters: /q; StatusMsg: Установка Microsoft Visual С++ 2005 Redistributable;
Filename: {src}\MVC++2005\vcredist_x64.exe; Tasks: Soft/vcredist_x64; Parameters: /q; StatusMsg: Установка Microsoft Visual С++ 2005 Redistributable x64;

[code]
var
ResizeButton: TButton;
PageResized, Show: Boolean;

function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure MinimizeInstallPage();
begin
WizardForm.MainPanel.Hide;
WizardForm.Bevel1.Hide;
WizardForm.Width:= ScaleX(395);
WizardForm.Height:= ScaleY(142);
WizardForm.Left:= GetSystemMetrics(16)-ScaleX(420);
WizardForm.Top:= GetSystemMetrics(17)-ScaleX(150);
WizardForm.InnerNotebook.Left:= ScaleX(10);
WizardForm.InnerNotebook.Top:= ScaleY(10);
WizardForm.InnerNotebook.Width:= ScaleX(370);
WizardForm.StatusLabel.Left:= ScaleX(0);
WizardForm.StatusLabel.Top:= ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:= ScaleX(0);
WizardForm.FileNameLabel.Top:= ScaleY(20);
WizardForm.FileNameLabel.Width:= WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:= ScaleY(40);
WizardForm.ProgressGauge.Width:= WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:= ScaleX(220);
WizardForm.CancelButton.Top:= ScaleY(80);
WizardForm.CancelButton.BringToFront;
ResizeButton.Left:= ScaleX(60);
ResizeButton.Top:= ScaleY(80);
ResizeButton.Caption:= 'Max.';
PageResized:= True;
end;

procedure ResumeInstallPage();
begin
WizardForm.Width:= ScaleX(503);
WizardForm.Height:= ScaleY(388);
WizardForm.Position:= poScreenCenter;
if Show then begin
WizardForm.MainPanel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(58));
WizardForm.MainPanel.Show;
WizardForm.Bevel1.Show;
end;
WizardForm.InnerNotebook.SetBounds(ScaleX(40), ScaleY(72), ScaleX(417), ScaleY(237));
WizardForm.StatusLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(16));
WizardForm.FilenameLabel.SetBounds(ScaleX(0), ScaleY(16), ScaleX(417), ScaleY(16));
WizardForm.ProgressGauge.SetBounds(ScaleX(0), ScaleY(42), ScaleX(417), ScaleY(21));
WizardForm.CancelButton.SetBounds(ScaleX(412), ScaleY(327), ScaleX(75), ScaleY(23));
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.Caption:= 'Min.';
PageResized:= False;
end;

procedure ResizeButtonOnClick(Sender: TObject);
begin
If PageResized then
ResumeInstallPage
else
MinimizeInstallPage;
end;

procedure InitializeWizard();
begin
ResizeButton:= TButton.Create(WizardForm);
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.OnClick:= @ResizeButtonOnClick;
ResizeButton.Caption:= 'Min.';
ResizeButton.Hide;
ResizeButton.Parent:= WizardForm;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
ResizeButton.Hide;
case CurPageID of
wpInstalling:
begin
Show:= true;
ResizeButton.Show;
end;
wpFinished:
begin
Show:= false;
ResumeInstallPage;
end;
end;
end;

saurn 26-10-2014 22:49 2420798

Цитата:

Цитата ROMKA-1977
Как сделать чтобы кнопки "Min" и "Max" отображались некликабельными как и кнопка "Отмена" ? »

Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
    case CurStep of
        ssPostInstall: _моя_кнопка.Enabled := WizardForm.NextButton.Enabled;
    end;
end;


Dodakaedr 26-10-2014 22:51 2420800

ROMKA-1977, В свойствах кнопки поставить Enabled := False;
Код:

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
wpInstalling:
begin
Min.кнопка.Enabled := False;
end;
end;
end;


ROMKA-1977 26-10-2014 23:40 2420814

Dodakaedr, saurn, оба варианта не подходят.

saurn 27-10-2014 00:10 2420822

ROMKA-1977,
читать дальше »
Код:

[Setup]
AppName=Name
VersionInfoVersion=5.0
AppVerName=VerName
DefaultDirName={pf}\My program
ShowTasksTreeLines=true
OutputDir=.

[Languages]
Name: Ru; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
Name: Soft; Description: Установка дополнительного программного обеспечения; GroupDescription: Дополнительное программное обеспечение:; Flags: unchecked
Name: Soft/DirectX; Description: Microsoft DirectX; Flags: unchecked
Name: Soft/vcredist_x86; Description: Microsoft Visual С++ 2005 Redistributable; Flags: unchecked
Name: Soft/vcredist_x64; Description: Microsoft Visual С++ 2005 Redistributable x64; Flags: unchecked; Check: IsWin64

[Files]
Source: {win}\help\*; DestDir: {app}\Files; AfterInstall: BtnDisable(); Flags: external recursesubdirs createallsubdirs;

[Run]
Filename: {src}\DirectX\DXSETUP.exe; Parameters: /silent; Tasks: Soft/DirectX; StatusMsg: Установка DirectX;
Filename: {src}\MVC++2005\vcredist_x86.exe; Tasks: Soft/vcredist_x86; Parameters: /q; StatusMsg: Установка Microsoft Visual С++ 2005 Redistributable;
Filename: {src}\MVC++2005\vcredist_x64.exe; Tasks: Soft/vcredist_x64; Parameters: /q; StatusMsg: Установка Microsoft Visual С++ 2005 Redistributable x64;

[code]
var
ResizeButton: TButton;
PageResized, Show: Boolean;

function GetSystemMetrics(nIndex:Integer):integer; external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure MinimizeInstallPage();
begin
WizardForm.MainPanel.Hide;
WizardForm.Bevel1.Hide;
WizardForm.Width:= ScaleX(395);
WizardForm.Height:= ScaleY(142);
WizardForm.Left:= GetSystemMetrics(16)-ScaleX(420);
WizardForm.Top:= GetSystemMetrics(17)-ScaleX(150);
WizardForm.InnerNotebook.Left:= ScaleX(10);
WizardForm.InnerNotebook.Top:= ScaleY(10);
WizardForm.InnerNotebook.Width:= ScaleX(370);
WizardForm.StatusLabel.Left:= ScaleX(0);
WizardForm.StatusLabel.Top:= ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:= ScaleX(0);
WizardForm.FileNameLabel.Top:= ScaleY(20);
WizardForm.FileNameLabel.Width:= WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:= ScaleY(40);
WizardForm.ProgressGauge.Width:= WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:= ScaleX(220);
WizardForm.CancelButton.Top:= ScaleY(80);
WizardForm.CancelButton.BringToFront;
ResizeButton.Left:= ScaleX(60);
ResizeButton.Top:= ScaleY(80);
ResizeButton.Caption:= 'Max.';
PageResized:= True;
end;

procedure ResumeInstallPage();
begin
WizardForm.Width:= ScaleX(503);
WizardForm.Height:= ScaleY(388);
WizardForm.Position:= poScreenCenter;
if Show then begin
WizardForm.MainPanel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(58));
WizardForm.MainPanel.Show;
WizardForm.Bevel1.Show;
end;
WizardForm.InnerNotebook.SetBounds(ScaleX(40), ScaleY(72), ScaleX(417), ScaleY(237));
WizardForm.StatusLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(16));
WizardForm.FilenameLabel.SetBounds(ScaleX(0), ScaleY(16), ScaleX(417), ScaleY(16));
WizardForm.ProgressGauge.SetBounds(ScaleX(0), ScaleY(42), ScaleX(417), ScaleY(21));
WizardForm.CancelButton.SetBounds(ScaleX(412), ScaleY(327), ScaleX(75), ScaleY(23));
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.Caption:= 'Min.';
PageResized:= False;
end;

procedure ResizeButtonOnClick(Sender: TObject);
begin
If PageResized then
ResumeInstallPage
else
MinimizeInstallPage;
end;

procedure InitializeWizard();
begin
ResizeButton:= TButton.Create(WizardForm);
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.OnClick:= @ResizeButtonOnClick;
ResizeButton.Caption:= 'Min.';
ResizeButton.Hide;
ResizeButton.Parent:= WizardForm;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
ResizeButton.Hide;
case CurPageID of
wpInstalling:
begin
Show:= true;
ResizeButton.Show;
end;
wpFinished:
begin
Show:= false;
ResumeInstallPage;
end;
end;
end;

procedure BtnDisable();
begin
    ResizeButton.Enabled := False;
end;


ROMKA-1977 27-10-2014 01:13 2420834

saurn, при обычной упаковке всё OK. Но у меня упаковка не через секцию [Files] а в архивы .arc.

saurn 27-10-2014 01:46 2420839

Цитата:

Цитата ROMKA-1977
Но у меня упаковка не через секцию [Files] а в архивы .arc. »

В скрипте, что вы дали, нет ни строчки про распаковку архивов. Я ведь не могу знать каким способом вы осуществляете установку. Отключайте кнопку после того, как отработает процедура\функция распаковки последнего архива.

ROMKA-1977 27-10-2014 01:57 2420841

Цитата:

Цитата saurn
Отключайте кнопку после того, как отработает процедура\функция распаковки последнего архива. »

Если можно дайте пож. пример. Распаковка через ISDone v0.6.

saurn 27-10-2014 02:07 2420845

ROMKA-1977, в стандартном примере к библиотеке распаковка архивов находится в блоке процедуры CurStepChanged, вызов функций ISDone осуществляется на шаге ssInstall. В окончании блока:
Код:

if CurStep = ssInstall then begin
// здесь распаковка архивов и вызов прочих функций.
//в самом низу блока строчки
    HideControls;
    WizardForm.CancelButton.Visible:=true;
    WizardForm.CancelButton.Enabled:=false;

// здесь отключайте кнопку
  ResizeButton.Enabled := False;
  end;


ROMKA-1977 29-10-2014 10:05 2421982

Подскажите что означает ошибка: Exception: External exception EEDFADE.

На странице InstallingPage прописал кнопку минимизации инстала (сворачивание в нижний правый угол) и кнпку возврата в исходный размер + код слайдшоу с применением isSlideShow.dll.

Проблема: isSlideShow работает нормально но после минимизации окна и далее возврата окна в исходное состояние вылетает ошибка: Exception: External exception EEDFADE с подсветкой строки: ShowImage(piclist.strings[CurrentPicture - 1], 1, 1000);

Пример кода:
читать дальше »

[Setup]
AppName=Name
VersionInfoVersion=5.0
AppVerName=VerName
DefaultDirName={pf}\My program
ShowTasksTreeLines=true
OutputDir=.

[Languages]
Name: Ru; MessagesFile: compiler:Languages\Russian.isl

[Tasks]
Name: Soft; Description: Установка дополнительного программного обеспечения; GroupDescription: Дополнительное программное обеспечение:; Flags: unchecked
Name: Soft/DirectX; Description: Microsoft DirectX; Flags: unchecked
Name: Soft/vcredist_x86; Description: Microsoft Visual С++ 2005 Redistributable; Flags: unchecked
Name: Soft/vcredist_x64; Description: Microsoft Visual С++ 2005 Redistributable x64; Flags: unchecked; Check: IsWin64

[Files]
Source: {win}\help\*; DestDir: {app}\Files; AfterInstall: BtnDisable(); Flags: external recursesubdirs createallsubdirs;

Source: Image_1.png; DestDir: {tmp}; Flags: dontcopy
Source: Image_2.png; DestDir: {tmp}; Flags: dontcopy
Source: Image_3.png; DestDir: {tmp}; Flags: dontcopy

Source: isSlideShow.dll; DestDir: {tmp}; Flags: dontcopy

[Run]
Filename: {src}\DirectX\DXSETUP.exe; Parameters: /silent; Tasks: Soft/DirectX; StatusMsg: Установка DirectX;
Filename: {src}\MVC++2005\vcredist_x86.exe; Tasks: Soft/vcredist_x86; Parameters: /q; StatusMsg: Установка Microsoft Visual С++ 2005 Redistributable;
Filename: {src}\MVC++2005\vcredist_x64.exe; Tasks: Soft/vcredist_x64; Parameters: /q; StatusMsg: Установка Microsoft Visual С++ 2005 Redistributable x64;

[code]
///////////////////////// Кнопки "Min" и "Max" /////////////////////////
var
ResizeButton: TButton;
PageResized, Show: Boolean;

function GetSystemMetrics(nIndex:Integer):integer;
external 'GetSystemMetrics@user32.dll stdcall delayload';

procedure MinimizeInstallPage();
begin
WizardForm.MainPanel.Hide;
WizardForm.Bevel1.Hide;
WizardForm.Width:= ScaleX(395);
WizardForm.Height:= ScaleY(142);
WizardForm.Left:= GetSystemMetrics(16)-ScaleX(420);
WizardForm.Top:= GetSystemMetrics(17)-ScaleX(150);
WizardForm.InnerNotebook.Left:= ScaleX(10);
WizardForm.InnerNotebook.Top:= ScaleY(10);
WizardForm.InnerNotebook.Width:= ScaleX(370);
WizardForm.StatusLabel.Left:= ScaleX(0);
WizardForm.StatusLabel.Top:= ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:= ScaleX(0);
WizardForm.FileNameLabel.Top:= ScaleY(20);
WizardForm.FileNameLabel.Width:= WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:= ScaleY(40);
WizardForm.ProgressGauge.Width:= WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:= ScaleX(220);
WizardForm.CancelButton.Top:= ScaleY(80);
WizardForm.CancelButton.BringToFront;
ResizeButton.Left:= ScaleX(60);
ResizeButton.Top:= ScaleY(80);
ResizeButton.Caption:= 'Max.';
PageResized:= True;
end;

procedure ResumeInstallPage();
begin
WizardForm.Width:= ScaleX(503);
WizardForm.Height:= ScaleY(388);
WizardForm.Position:= poScreenCenter;
if Show then begin
WizardForm.MainPanel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(58));
WizardForm.MainPanel.Show;
WizardForm.Bevel1.Show;
end;
WizardForm.InnerNotebook.SetBounds(ScaleX(40), ScaleY(72), ScaleX(417), ScaleY(237));
WizardForm.StatusLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(16));
WizardForm.FilenameLabel.SetBounds(ScaleX(0), ScaleY(16), ScaleX(417), ScaleY(16));
WizardForm.ProgressGauge.SetBounds(ScaleX(0), ScaleY(42), ScaleX(417), ScaleY(21));
WizardForm.CancelButton.SetBounds(ScaleX(412), ScaleY(327), ScaleX(75), ScaleY(23));
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.Caption:= 'Min.';
PageResized:= False;
end;

procedure ResizeButtonOnClick(Sender: TObject);
begin
If PageResized then
ResumeInstallPage
else
MinimizeInstallPage;
end;

procedure InitializeWizard1();
begin
ResizeButton:= TButton.Create(WizardForm);
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.OnClick:= @ResizeButtonOnClick;
ResizeButton.Caption:= 'Min.';
ResizeButton.Hide;
ResizeButton.Parent:= WizardForm;
end;

procedure CurPageChanged1(CurPageID: Integer);
begin
ResizeButton.Hide;
case CurPageID of
wpInstalling:
begin
Show:= true;
ResizeButton.Show;
end;
wpFinished:
begin
Show:= false;
ResumeInstallPage;
end;
end;
end;

procedure BtnDisable();
begin
ResizeButton.Enabled := False;
end;

///////////////////////// isSlideShow v1.03 /////////////////////////
type
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);

var
TimerID: LongWord;
CurrentPicture:integer;
PicList: TStringlist;

function WrapTimerProc(Callback:TProc; NumParam:integer): longword;
external 'WrapCallback@files:isslideshow.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';
//function GetSystemMetrics(nIndex:Integer):Integer;
//external 'GetSystemMetrics@user32.dll stdcall';
procedure InitializeSlideShow(Hwnd:Thandle; l,t,w,h:integer;Animate:boolean; Stretch:integer);
external 'InitializeSlideShow@files:isslideshow.dll stdcall';
procedure DeinitializeSlideShow;
external 'DeinitializeSlideShow@files:isslideshow.dll stdcall';
procedure ShowImage(ipath:PAnsiChar; Effect:integer; SpeedTransition: integer);
external 'ShowImage@files:isslideshow.dll stdcall';

procedure InitializeWizard2();
begin
PicList:=tstringlist.Create;
ExtractTemporaryFile('Image_1.png');
ExtractTemporaryFile('Image_2.png');
ExtractTemporaryFile('Image_3.png');;
piclist.add(ExpandConstant('{tmp}') + '\Image_1.png');
piclist.add(ExpandConstant('{tmp}') + '\Image_2.png');
piclist.add(ExpandConstant('{tmp}') + '\Image_3.png');
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
CurrentPicture:=CurrentPicture+1;
if CurrentPicture=piclist.count+1 then CurrentPicture:=1;
ShowImage(piclist.strings[CurrentPicture - 1], 1, 1000);
end;

procedure CurPageChanged2(CurPageID: Integer);
begin
If CurPageID=wpInstalling then
begin
InitializeSlideShow(WizardForm.InstallingPage.Handle, 0, 131, ScaleX(417), ScaleY(101), true, 2);
CurrentPicture:=1;
ShowImage(piclist.strings[CurrentPicture-1], 1, 1000);
TimerID:=SetTimer(0, 0, 3000, WrapTimerProc(@OnTimer, 4)); //задержка 3000 мс (3 секунды)
end;
if CurPageID=wpFinished then
begin
KillTimer(0, TimerID);
DeinitializeSlideShow;
end;
end;

procedure DeinitializeSetup();
begin
DeinitializeSlideShow;
KillTimer(0, TimerID);
end;

//////////////
procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged1(CurPageID);
CurPageChanged2(CurPageID);
end;


Сборка:
http://rghost.ru/58771778

Dodakaedr 29-10-2014 18:58 2422262

Всем привет! Как можно определить, требуется ли перезагрузка компа или нет? Ситуация в следующем: имеется программа которая после удаления требует перезагрузку компа, но пользователь выбирает нет и при повторной установки без перезагрузки пк не хочет устанавливаться. Как определить это самое требование перезагрузки?

diman_21Ru 29-10-2014 19:01 2422265

Всем привет в скрипте есть функции при наведение на мод описание и картинка как можно прикрутить звук при выборе мода, пример тут :

bandaletoff 30-10-2014 02:14 2422358

Доброго времени суток!
Подскажите пожалуйста, что и куда добавить в скрипт, чтобы перед деинсталляцией программы, сначала удалились драйвера. Папка с файлами на установку и удаление драйверов находится в каталоге программы.
Спасибо!

Zorbbb 31-10-2014 05:33 2422786

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

[Setup]
DefaultDirName={reg:HKCU\SOFTWARE\Comp\Game,InstallDir|{sd}\Games\Game1}

А как правильно прописать такой ключ? Не пойму как быть с фигурными скобками.
Код:

[HKEY_LOCAL_MACHINE\SOFTWARE\1C\{BAC329E8-C7D7-4777-8D69-3AFD40603326}]
"InstallDir"="C:\\Games\\Game1"


Shkutu 31-10-2014 15:09 2422960

Всех приветствую, у меня ту вопрос возник. В инно есть такая директива как AllwaysRestart. В случае, когда она выставлена в "yes" инсталлятор после установки спрашивает пользователя, надо ли перезагружать систему и по-умолчанию выбрано "да". Так вот вопрос - как сделать так, чтоб по-умолчанию там было выбрано "нет"? Есть ли какая-то настройка для этого или какой компонент у формы инсталлятора отвечает за эти радио-кнопки?

bandaletoff, используйте секцию [UninstallRun]. подробнее можно посмотреть в справке.

saurn 31-10-2014 16:04 2422981

Цитата:

Цитата Zorbbb
А как правильно прописать такой ключ? Не пойму как быть с фигурными скобками. »

Экранировать символом "{" в шестнадцатеричной кодировке.
Код:

{reg:HKLM\SOFTWARE\1C\%7B{BAC329E8-C7D7-4777-8D69-3AFD40603326},InstallDir|{sd}\Games\Game1}
-------------------------------------------------------------------------------------------------------
Цитата:

Цитата Shkutu
какой компонент у формы инсталлятора отвечает за эти радио-кнопки? »

Пример
Код:

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


[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
    if ( CurPageID = wpFinished ) then
      WizardForm.NoRadio.Checked := True;
end;


// property YesRadio: TNewRadioButton; read;
// property NoRadio: TNewRadioButton; read;


Habetdin 31-10-2014 17:06 2423006

Цитата:

Цитата saurn
Экранировать символом "{" в шестнадцатеричной кодировке. »

Не обязательно в шестнадцатеричной форме, достаточно просто двух символов "{", цитата из справки:
Цитата:

Символ "{" рассматривается как начало константы. Если требуется ввести "{", наберите ее два раза. (Не нужно при этом удваивать символ "}".)

saurn 31-10-2014 17:15 2423007

Цитата:

Цитата Habetdin
Не обязательно в шестнадцатеричной форме, достаточно просто двух символов "{" »

В этом случае подобный способ работать не будет, так как символ будет воспринят, как часть синтаксиса константы.
Если использовать две фигурные скобки в начале, то в конце все равно придется экранировать шестнадцатеричным представлением символа:
Код:

{reg:HKLM\SOFTWARE\1C\{{BAC329E8-C7D7-4777-8D69-3AFD40603326%7d,InstallDir|{sd}\Games\Game1}

Zorbbb 31-10-2014 17:26 2423010

saurn,
Благодарю, зажило.

kotyarko@fb 01-11-2014 00:33 2423141

Вложений: 1
Цитата:

Цитата diman_21Ru
как можно прикрутить звук при выборе мода »

Например, так:

diman_21Ru 02-11-2014 01:05 2423465

kotyarko@fb, у меня почему то не работает функция то ли не так вставил запускаю компиляцию и не запускается у меня уникод.

TryRooM 02-11-2014 02:48 2423472

diman_21Ru,

RawDataResource работает на расширенной версии компилятора от Restools

diman_21Ru 02-11-2014 10:05 2423497

TryRooM, У меня расширенная, уникод же обычно ругаться будет если не так вставишь но тут собирает и установщик не запускает

TryRooM 02-11-2014 10:32 2423502

diman_21Ru,

Попробуй упростить через Modules, меньше путаницы в скрипте будет.

saurn 09-11-2014 09:40 2426810

Реализация WinAPI функции GlobalMemoryStatusEx http://msdn.microsoft.com/ru-ru/libr...=vs.85%29.aspx
Предоставляет информацию об использовании физической и виртуальной памяти. Просьба к знатокам: указать на возможные ошибки.
Скрипт
Код:

[Code]
type
    Int64 = record
        Intlow: Integer;
        IntHigh: Integer;
    end;

    _MEMORYSTATUSEX = record
        dwLength: DWORD;
        dwMemoryLoad: DWORD;
        ullTotalPhys: Int64;
        ullAvailPhys: Int64;
        ullTotalPageFile: Int64;
        ullAvailPageFile: Int64;
        ullTotalVirtual: Int64;
        ullAvailVirtual: Int64;
        ullAvailExtendedVirtual: Int64;
    end;


function GlobalMemoryStatusEx( var lpBuffer: _MEMORYSTATUSEX ): BOOL; external 'GlobalMemoryStatusEx@kernel32.dll stdcall';
function StrFormatByteSize64( qdw: Currency; var pszBuf: Char; cchBuf: UINT ): PAnsiChar; external 'StrFormatByteSize64A@shlwapi.dll stdcall';


function BytesToSize( const Bytes: Extended ): String;
var
    pszBuf: array [0..15] of Char;
begin
    try
        Result := StrFormatByteSize64( Abs ( Bytes div 1E4 ), pszBuf[0], sizeof( pszBuf ) );
    except
    end;
end;


function Size64( const IntLow: Integer; const IntHigh: Integer ): Extended;
begin
    Result := ( ( IntHigh + Integer( IntLow < 0 ) ) * 4.294967296E9 + IntLow );
end;


procedure InitializeWizard();
var
  msEx: _MEMORYSTATUSEX;
  szMemoryLoad: String;
  szTotalPhys: String;
  szAvailPhys: String;
  szTotalPageFile: String;
  szAvailPageFile: String;
  szTotalVirtual: String;
  szAvailVirtual: String;
begin
  msEx.dwLength := SizeOf( msEx ) ;
  if not GlobalMemoryStatusEx( msEx ) then Exit;

  szMemoryLoad := Format( '%s: %d%s', ['MemoryLoad', msEx.dwMemoryLoad, '%'] );
  szTotalPhys := Format( '%s: %s', ['TotalPhys', BytesToSize( Size64( msEx.ullTotalPhys.Intlow, msEx.ullTotalPhys.IntHigh ) )] );
  szAvailPhys := Format( '%s: %s', ['AvailPhys', BytesToSize( Size64( msEx.ullAvailPhys.Intlow, msEx.ullAvailPhys.IntHigh ) )] );
  szTotalPageFile := Format( '%s: %s', ['TotalPageFile', BytesToSize( Size64( msEx.ullTotalPageFile.Intlow, msEx.ullTotalPageFile.IntHigh ) )] );
  szAvailPageFile := Format( '%s: %s', ['AvailPageFile', BytesToSize( Size64( msEx.ullAvailPageFile.Intlow, msEx.ullAvailPageFile.IntHigh ) )] );
  szTotalVirtual := Format( '%s: %s', ['TotalVirtual', BytesToSize( Size64( msEx.ullTotalVirtual.Intlow, msEx.ullTotalVirtual.IntHigh ) )] );
  szAvailVirtual := Format( '%s: %s', ['AvailVirtual', BytesToSize( Size64( msEx.ullAvailVirtual.Intlow, msEx.ullAvailVirtual.IntHigh ) )] );

  MsgBox(
          szMemoryLoad + #13#10 +
          szTotalPhys  + #13#10 +
          szAvailPhys + #13#10 +
          szTotalPageFile + #13#10 +
          szAvailPageFile + #13#10 +
          szTotalVirtual + #13#10 +
          szAvailVirtual,
          mbInformation,
          MB_OK
            );
end;


kotyarko@fb 09-11-2014 20:32 2427083

Возник вопрос по поводу WinAPI: а можно ли узнать, включено ли в системе масштабирование (установленный % не имеет значения)?

sergey3695 09-11-2014 21:59 2427118

kotyarko@fb, сравни разрешение экрана и монитора
Код:

type
TagMonitorInfo = record
 cbSize: DWord;
 Monitor, Work: TRect;
 dwFlags: DWord;
end;
var MonitorInfo: TagMonitorInfo;
function GetMonitorInfo(hMonitor: Integer; var lpMonitorInfo: TagMonitorInfo): Boolean; external 'GetMonitorInfoA@user32';

procedure InitializeWizard();
begin
  MonitorInfo.cbSize:= SizeOf(MonitorInfo);
  if GetMonitorInfo(1, MonitorInfo)
  then MsgBox(IntToStr(MonitorInfo.Monitor.Right)+ 'x' +IntToStr(MonitorInfo.Monitor.Bottom), mbInformation, MB_OK);
end;

Определение монитора.
Код:

function GetDC(HWND: DWord): DWord; external 'GetDC@user32.dll stdcall';
function GetDeviceCaps(DC: DWord; Index: Integer): Integer; external 'GetDeviceCaps@gdi32.dll stdcall';
function ReleaseDC(HWND: DWord;DC: DWord): Integer; external 'ReleaseDC@user32.dll stdcall';

function GetMonitorInfo(MetricType:Byte;Descriptor:THandle)  : Word;
var
  dc: DWord;
begin
  Result:= 0;
  case MetricType of
    1:  /// разрешение по ширине
    begin
      dc:= GetDC(Descriptor);
      Result:= GetDeviceCaps(dc,8);
    end;
    2: /// разрешение по высоте
    begin
      dc:= GetDC(Descriptor);
      Result:= GetDeviceCaps(dc,10);
    end;
  end;
  ReleaseDC(Descriptor,dc);
end;

// GetSystemMetrics - для второго способа онли.
function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@user32.dll stdcall';

procedure InitializeWizard();
begin
  MsgBox('Разрешение монитора: ' + IntToStr(GetMonitorInfo(1,MainForm.Handle)) + ' x ' + IntToStr(GetMonitorInfo(2,MainForm.Handle)), mbConfirmation, MB_OK);
  MsgBox('Разрешение монитора 2: ' + IntToStr(GetSystemMetrics(0)) + ' x ' + IntToStr(GetSystemMetrics(1)), mbConfirmation, MB_OK);
  MsgBox('Разрешение монитора 3: ' + IntToStr(Screen.Width) + ' x ' + IntToStr(Screen.Height), mbConfirmation, MB_OK);
end;

Самый простой 3 вариант.

diman_21Ru 09-11-2014 23:53 2427174

TryRooM, вот там в скрипте поиск названия файла идет через

Name: "main\a"; Description: "A Files";
pSoundMemory_A := GetResourceSoundAddr('_IS_SNDA');


а у меня вот как и кажется я не правильно указал раз ошибка, как исправить чтобы заработала?

Name: OZE1/OZE1/OZE1; Description:Атмосферная от Strategic Music;Flags: disablenouninstallwarning exclusive
pSoundMemory_Атмосферная от Strategic Music := GetResourceSoundAddr('_IS_SNDA');

TryRooM 10-11-2014 06:30 2427217

diman_21Ru,

Не забывай прописывать имя компонента и в Modules

ROMKA-1977 10-11-2014 09:38 2427250

Подскажите возможно ли средствами Inno Setup выполнить переименование папки Мои документы в Documents в локализованной винде?

saurn 10-11-2014 10:22 2427261

ROMKA-1977, Мои документы на деле и есть Documents
"Мои документы" просто обертка ссылки в проводнике на X:\Users\user_name\Documents

Shkutu 10-11-2014 14:08 2427347

Всем доброго дня!
Есть такая проблемка. Если у инсталлятора выставлена директива AlwaysRestart=yes, то чекбоксы секции Run с флагом postinstall (запускающие приложения после работы инсталлятора) перестают выводиться. Пыталась приколхозить такую галку руками
примерно так
Код:

procedure InitializeWizard;
 begin 
  ConfCheckBox:=TNewCheckBox.Create(PageFromId(wpFinished));
  ConfCheckBox.parent:= PageFromId(wpFinished).surface;
  ConfCheckBox.top:=WizardForm.NoRadio.top + WizardForm.NoRadio.height + ScaleY(15);
  ConfCheckBox.left:=WizardForm.NoRadio.left;
  ConfCheckBox.caption:=ExpandConstant('{cm:runconf}');
  ConfCheckBox.checked:=false;
  WizardForm.NoRadio.onclick:=@RestartRadioOnClick; // чтобы галка дизейблилась,
  WizardForm.YesRadio.onclick:=@RestartRadioOnClick; // если выбрана перезагрузка
  WizardForm.NoRadio.checked:=true;
 end;

//запускать пыталась так
procedure CurStepChanged(CurStep: TSetupStep);
var i:integer;
begin
 case CurStep of
    ssDone:
    begin
    if  ConfCheckBox.checked then
      Exec(ExpandConstant('{app}')+'\bin\Configurator.exe', '', '', SW_HIDE, ewNoWait, i);
    end;
 end;
end;


Но оно не работает. Подскажите плиз, есть ли какая настройка для галок postinstall в случае наличия директивы на промпт перезагрузки. Или если нет, то может как-то можно поправить мой код или еще как-то по-другому реализовать такую галку с запуском программы из кода?
UPD. Оказалось, все работает и проблема была в ошибке в имени файла :)

ROMKA-1977 10-11-2014 14:51 2427369

Цитата:

Цитата saurn
Мои документы на деле и есть Documents
"Мои документы" просто обертка ссылки в проводнике на X:\Users\user_name\Documents »

Так и есть, но в некоторых играх некоректно работают сохранёнки если в локалке папка Documents отображается как Мои документы,
приходится в ручную переименовывать отображаемое имя папки.

saurn 10-11-2014 15:31 2427389

Shkutu, до кучи
Скрытый текст
Код:

[Code]
var
    runCheckBox: TCheckBox;


procedure RunListClick( Sender: TObject );
begin
    case TRadioButton( Sender ).Caption of
        SetupMessage( msgYesRadio ): runCheckBox.Checked := False;
        SetupMessage( msgNoRadio ): runCheckBox.Checked := True;
    end;
end;


procedure RunCheckBoxClick( Sender: TObject );
begin
    if TCheckBox( Sender ).Checked then
      WizardForm.ActiveControl := WizardForm.NoRadio;
end;


procedure InitializeWizard;
begin
    with WizardForm.RunList do
      Height := ItemRect( ItemIndex ).Bottom;

    WizardForm.YesRadio.OnClick := @RunListClick;
    WizardForm.NoRadio.OnClick := @RunListClick;

    runCheckBox := TCheckBox.Create( nil );
    with runCheckBox do
    begin
        Parent := WizardForm.FinishedPage;
        Left := WizardForm.RunList.Left;
        Top := WizardForm.RunList.Top + WizardForm.RunList.Height + ScaleY( 10 );
        Width := WizardForm.RunList.Width;
        Caption := 'Запустить чето там';
        OnClick := @RunCheckBoxClick;
    end;
end;


procedure CurStepChanged( CurStep: TSetupStep );
var
    eRR: Integer;
begin
    case CurStep of
        ssDone: if runCheckBox.checked then
          Exec( ExpandConstant( '{sys}\calc.exe' ), '', '', SW_SHOW, ewNoWait, eRR );
    end;
end;


Tixo 10-11-2014 20:02 2427522

помогите прикрутить кликабельное лого в углы, код сам я нашел, но вот прикрутить не получается( инсталл запускается, он не более, кликабельного лого я не обнаруживаю
http://rghost.ru/58995455

Dodakaedr 10-11-2014 21:39 2427577

Цитата:

Цитата Tixo
помогите прикрутить кликабельное лого в углы, »

Было бы не плохо приложить все необходимые файлы для работы вашего скрипта.

diman_21Ru 10-11-2014 21:44 2427581

Какой самый простой способ добавление всплывчатой картинки и с затуханием

Dodakaedr 10-11-2014 21:46 2427584

Цитата:

Цитата diman_21Ru
Какой самый простой способ добавление всплывчатой картинки и с затуханием »

Добавление куда? Типа сплэша?

diman_21Ru 10-11-2014 21:59 2427596

Dodakaedr, да

Dodakaedr 10-11-2014 22:20 2427606

Вложений: 1
Цитата:

Цитата Dodakaedr
Типа сплэша? »

Цитата:

Цитата Tixo
помогите прикрутить кликабельное лого »

Попробуйте так:
Кликабельное лого
Код:

[Setup]
AppName=My program
VersionInfoVersion=5.0
AppVerName=My program
DefaultDirName={pf}\My program
DefaultGroupName=My program
OutputDir=.

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[code]
var
  Label1: TLabel;

procedure btnOnClick(Sender: TObject);
var
 rcode: integer;
begin
    ShellExec('open','http://forum.oszone.net/thread-278998-193.html','', '', SW_SHOW, ewNoWait, rCode);
end;

procedure btnOnClick2(Sender: TObject);
begin
    Label1.Font.Color := clred;
end;

procedure btnOnClick3(Sender: TObject);
begin
    Label1.Font.Color := clBlue;
end;

procedure InitializeWizard();
begin
  Label1 := TLabel.Create(WizardForm);
  with Label1 do
  begin
    Parent := WizardForm;
    Cursor := crHand;
    Caption := 'OSZONE.NET';
    Font.Color := clBlue;
    Font.Height := -16;
    Font.Name := 'Tahoma';
    Font.Style := [fsUnderline];
    ParentFont := False;
    Transparent := True;
    OnClick := @btnOnClick;
    OnMouseEnter := @btnOnClick2;
    OnMouseLeave := @btnOnClick3;
    Left := ScaleX(8);
    Top := ScaleY(327);
    Width := ScaleX(153);
    Height := ScaleY(19);
  end;
end;


Кликабельное лого через изображение


Код:

#define Bitmap "Logo.bmp"

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Files]
Source: {#Bitmap}; Flags: dontcopy solidbreak

[Code]
var
  Panel1: TPanel;
  BitmapImage1: TBitmapImage;
 
procedure Panel1Click(Sender: TObject);
var
 EC: integer;
begin
  ShellExec('open', 'http://forum.oszone.net/', '', '', SW_SHOWNORMAL, ewNoWait, EC);
end;

procedure InitializeWizard();
begin
  Panel1 := TPanel.Create(WizardForm);
  with Panel1 do
  begin
    Parent := WizardForm;
    Left := ScaleX(16);
    Top := ScaleY(318);
    Width := ScaleX(185);
    Height := ScaleY(41);
  end;

  BitmapImage1 := TBitmapImage.Create(WizardForm);
  with BitmapImage1 do
  begin
    Parent := Panel1;
    Left := ScaleX(4);
    Top := ScaleY(4);
    Width := ScaleX(178);
    Height := ScaleY(34);
    Cursor := crHand;
    OnClick := @Panel1Click;
    ExtractTemporaryFile('{#Bitmap}');
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\{#Bitmap}'));
  end;
end;

положите рядом с скриптом файлик Logo.bmp (178х34)

Tixo 11-11-2014 20:14 2428080

Dodakaedr, http://rghost.ru/private/59013615/5a...26a5374644cac3 - чтот не вышло у меня, ругается на переменную EC

saurn 11-11-2014 20:21 2428084

Tixo, объявите переменную:
Код:

var
    EC: Integer;

P.S.
Заливайте файлы в *.zip или *.rar, на худой конец в *.7z - это ускорит решение вашего вопроса. Не у всех установлен FreeArc, и не каждый станет его устанавливать.

Dodakaedr 11-11-2014 20:25 2428086

Цитата:

Цитата Tixo
чтот не вышло у меня, ругается на переменную EC »

Поправил уже. #1930

Tixo 11-11-2014 20:38 2428100

хмм, все компилится, а лого не кликается( никуда не переходит

Dodakaedr 11-11-2014 20:59 2428106

Tixo, Странно. У меня все работает. Тестил на Inno Ultra Unicode.

Tixo 11-11-2014 21:06 2428109

скинь свою версию моего инсталла) у меня отказывается работать(

TryRooM 12-11-2014 10:08 2428311

Tixo,
Держите.
Скрипт с лого

Dodakaedr 12-11-2014 10:18 2428316

Вложений: 1
TryRooM, спасибо!
Tixo, + исправлен сплэш

VoLT 12-11-2014 10:36 2428328

Вложений: 1
Друзья!!! Спешу поделится своими наработками. For science ... :Beer:
И так этот замечательный код (написанный на Delphi) позволяет вам вызвать ЛЮБУЮ функцию из вашего скрипта!
Подходит только для Inno Setup Compiler 5.5.5 (u) (build 121002)

PS Если вы попробовали использовать это в своих проектах, напишите о результатах - мне будет интересно узнать много нового о применениях

Tixo 12-11-2014 11:27 2428367

Спасибо, только вот что странно, Dodakaedr, с твоим кодом запускается только черная рамка на месте лого, с запуском TryRooM все нормально)

Dodakaedr 12-11-2014 19:33 2428612

Цитата:

Цитата Tixo
только вот что странно, Dodakaedr, с твоим кодом запускается только черная рамка »

Действительно странно, но у меня все нормально работает.

El Sanchez 13-11-2014 16:41 2429012

Цитата:

Цитата diman_21Ru
Какой самый простой способ добавление всплывчатой картинки и с затуханием »

diman_21Ru, сплэш для битмапов, в том числе и c premultiplied alpha.
читать дальше »

Код:

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no
BitmapResource=splash:compiler:WizModernImage.bmp

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[code]
#define A = (Defined UNICODE) ? "W" : "A"
const
   
AC_SRC_OVER = $0;
    AC_SRC_ALPHA = $1;
    ULW_ALPHA = $2;
    SM_CXSCREEN = 0;
    SM_CYSCREEN = 1;
    WS_EX_LAYERED = $80000;
    GWL_EXSTYLE = (-20);
    WM_CLOSE = $10;

type
   
BLENDFUNCTION = record
       
BlendOp: Byte;
        BlendFlags: Byte;
        SourceConstantAlpha: Byte;
        AlphaFormat: Byte;
    end;

    TIMERPARAM = record    // user defined
       
bmp: TBitmap;
        bf: BLENDFUNCTION;
        dwStart: DWORD;
        dwFadeIn: DWORD;
        dwNormal: DWORD;
        dwFadeOut: DWORD;
    end;

// Window Functions
function UpdateLayeredWindow(hwnd: HWND; hdcDst: THandle; pptDst, psize: TPoint; hdcSrc: THandle; pptSrc: TPoint; crKey: DWORD; pblend: BLENDFUNCTION; dwFlags: DWORD): BOOL; external 'UpdateLayeredWindow@user32.dll stdcall delayload';

// Configuration Reference
function GetSystemMetrics(nIndex: Integer): Integer; external 'GetSystemMetrics@user32.dll stdcall';

// Large Integer Functions
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';

// Window Class Functions
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLong{#A}@user32.dll stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';

// Time Functions
function GetSystemTimeAdjustment(var lpTimeAdjustment, lpTimeIncrement, lpTimeAdjustmentDisabled: DWORD): BOOL; external 'GetSystemTimeAdjustment@kernel32.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';

// Timer Functions
function SetTimer(hWnd: HWND; var nIDEvent: TIMERPARAM; uElapse: UINT; lpTimerFunc: Longint): UINT_PTR; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: HWND; var uIDEvent: TIMERPARAM): BOOL; external 'KillTimer@user32.dll stdcall';


/////////////////////////////////////////////////////////////////////////////////////////
procedure SplashTimerProc(hwnd: HWND; uMsg: UINT; var wParam: TIMERPARAM; dwTime: DWORD);
var
   
dwCurrentTime: DWORD;
    ptSize, ptSrc, ptDst: TPoint;
begin
   
{ get coords }
   
ptDst.x := (GetSystemMetrics(SM_CXSCREEN) - wParam.bmp.Width) shr 1;
    ptDst.y := (GetSystemMetrics(SM_CYSCREEN) - wParam.bmp.Height) shr 1;
    ptSize.x := wParam.bmp.Width;
    ptSize.y := wParam.bmp.Height;

    { current time }
   
dwCurrentTime := dwTime - wParam.dwStart;

    { kill timer }
   
if dwCurrentTime > wParam.dwFadeIn + wParam.dwNormal + wParam.dwFadeOut then
    begin
       
KillTimer(hwnd, wParam);
        SendMessage(hwnd, WM_CLOSE, 0, 0);
    end;

    { fade in }
   
if dwCurrentTime < wParam.dwFadeIn then
    begin
       
wParam.bf.SourceConstantAlpha := MulDiv($FF, dwCurrentTime, wParam.dwFadeIn + 1);
        UpdateLayeredWindow(hwnd, 0, ptDst, ptSize, wParam.bmp.Canvas.Handle, ptSrc, 0, wParam.bf, ULW_ALPHA);
    end;

    { normal }
   
if (dwCurrentTime > wParam.dwFadeIn) and (dwCurrentTime < wParam.dwFadeIn + wParam.dwNormal) then
    begin
       
wParam.bf.SourceConstantAlpha := $FF;
        UpdateLayeredWindow(hwnd, 0, ptDst, ptSize, wParam.bmp.Canvas.Handle, ptSrc, 0, wParam.bf, ULW_ALPHA);
    end;

    { fade out }
   
if dwCurrentTime > wParam.dwFadeIn + wParam.dwNormal then
    begin
       
wParam.bf.SourceConstantAlpha := $FF - MulDiv($FF, dwCurrentTime - wParam.dwFadeIn - wParam.dwNormal, wParam.dwFadeOut + 1);
        UpdateLayeredWindow(hwnd, 0, ptDst, ptSize, wParam.bmp.Canvas.Handle, ptSrc, 0, wParam.bf, ULW_ALPHA);
    end;
end;

/////////////////////////////////////////////////////
function GetBitmapBitCount(const bmp: TBitmap): WORD;
var
   
MemStream: TMemoryStream;
    szBuffer: String;
begin
   
Result := -1;
    MemStream := TMemoryStream.Create;
    try
       
bmp.SaveToStream(MemStream);
        MemStream.Position := $1C; // biBitCount member of BITMAPINFOHEADER struct offset
       
szBuffer := StringOfChar(#0, 1);
        if MemStream.Read(szBuffer, 1) = 1 then
           
Result := Ord(szBuffer[1]);
    finally
       
MemStream.Free;
    end;
end;

/////////////////////////////////////////////////////////////////
procedure ShowSplash(const dwFadeIn, dwNormal, dwFadeOut: DWORD);
// dwFadeIn..: fade in stage in ms
// dwNormal..: normal stage in ms
// dwFadeOut : fade out stage in ms
var
   
lpTimeAdjustment, lpTimeIncrement, lpTimeAdjustmentDisabled: DWORD;
    tp: TIMERPARAM;
begin
    if
WizardSilent then Exit;

    { load bitmap }
   
tp.bmp := TBitmap.Create;
    TBitmap(tp.bmp).LoadFromResourceName(HInstance, '_IS_SPLASH');

    { get bitmap bit count }
   
case GetBitmapBitCount(tp.bmp) of
       
-1: begin
           
tp.bmp.Free;
            Exit;
        end;
        32: tp.bf.AlphaFormat := AC_SRC_ALPHA;
    end;

    { create splash form }
   
with TForm.Create(nil) do
    begin
       
BorderStyle := bsNone;
        FormStyle := fsStayOnTop;
        Position := poScreenCenter;

        { set dimensions }
       
Width := tp.bmp.Width;
        Height := tp.bmp.Height;

        { set layered exstyle }
       
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);

        { get minimal timer interval }
       
GetSystemTimeAdjustment(lpTimeAdjustment, lpTimeIncrement, lpTimeAdjustmentDisabled);

        { fill user defined struct }
       
tp.bf.BlendOp := AC_SRC_OVER;
        tp.dwStart := GetTickCount;
        tp.dwFadeIn := dwFadeIn;
        tp.dwNormal := dwNormal;
        tp.dwFadeOut := dwFadeOut;

        { start timer }
       
SetTimer(Handle, tp, lpTimeIncrement div 10000, CallbackAddr('SplashTimerProc'));

        { show form }
       
ShowModal;

        { cleanup }
       
tp.bmp.Free;
        Free;
    end;
end;

//////////////////////////////////
function InitializeSetup: Boolean;
begin
   
ShowSplash(1000, 2000, 1000);
    Result := True;
end;



Цитата:

Цитата VoLT
И так этот замечательный код (написанный на Delphi) позволяет вам вызвать ЛЮБУЮ функцию из вашего скрипта! »

VoLT, во-первых, тестовый скрипт ведет к AV, во-вторых, никакой это не callback.

ROMKA-1977 13-11-2014 20:55 2429136

Подскажите возможно ли сделать кнопу закрытия окна инсталятора (верхний правый угол) не активной ?

saurn 14-11-2014 08:26 2429317

Цитата:

Цитата ROMKA-1977
Подскажите возможно ли сделать кнопу закрытия окна инсталятора (верхний правый угол) не активной ? »

читать дальше »
Код:

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


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


const
    GCL_STYLE = - 26;
    CS_NOCLOSE = $0200;


function SetClassLong( hWnd: HWND; nIndex: Integer; dwNewLong: Longint ): DWORD; external 'SetClassLong{#A}@user32.dll stdcall';
function GetClassLong( hWnd: HWND; nIndex: Integer ): DWORD; external 'GetClassLong{#A}@user32.dll stdcall';


procedure InitializeWizard();
begin
    SetClassLong( WizardForm.Handle, GCL_STYLE, ( GetClassLong( WizardForm.Handle, GCL_STYLE ) or CS_NOCLOSE ) );
end;


saneksanek 15-11-2014 14:30 2429767

Здравствуйте,возможно-ли в данный код добавить функцию,чтобы автоматом не выбирались компоненты над которыми работает код.
Пробовал flags "dontinheritcheck" но его нельзя совмещать с "exclusive"
Код:

[Types]
Name: viborochnaya; Description: Выборочная установка; Flags: iscustom
[Components]
Name: AB;Description: Группы A и B;Flags: exclusive
Name: AB\A; Description: Группа A
Name: AB\A\A1; Description: Компонент 1;Flags: exclusive
Name: AB\A\A2; Description: Компонент 2;Flags: exclusive
Name: AB\A\A3; Description: Компонент 3;Flags: exclusive
Name: AB\A\A4; Description: Компонент 4;Flags: exclusive
Name: AB\B; Description: Группа B
Name: AB\B\B1; Description: Компонент 1;Flags: exclusive
Name: AB\B\B2; Description: Компонент 2;Flags: exclusive
Name: AB\B\B3; Description: Компонент 2;Flags: exclusive
Name: AB\B\B4; Description: Компонент 4;Flags: exclusive

[_Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Check: Check1
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Check: Check2

[_Code]
function Check1: Boolean;
begin
  Result:=WizardForm.ComponentsList.ItemEnabled[1] and WizardForm.ComponentsList.Checked[0]
  begin
  Result:=WizardForm.ComponentsList.ItemEnabled[2] and WizardForm.ComponentsList.Checked[0]
  end
end;

function Check2: Boolean;
begin
  Result:=WizardForm.ComponentsList.ItemEnabled[4] and WizardForm.ComponentsList.Checked[3]
  begin
  Result:=WizardForm.ComponentsList.ItemEnabled[5] and WizardForm.ComponentsList.Checked[3]
  end
end;

procedure OnClickCheck(Sender: TObject);
begin
  if WizardForm.ComponentsList.Checked[1] = True then
  begin
    WizardForm.ComponentsList.ItemEnabled[6]:=False
    WizardForm.ComponentsList.ItemEnabled[7]:=False
    WizardForm.ComponentsList.ItemEnabled[8]:=False
    WizardForm.ComponentsList.ItemEnabled[9]:=False
    WizardForm.ComponentsList.ItemEnabled[10]:=False
  end else
  begin
    WizardForm.ComponentsList.ItemEnabled[6]:=True
    WizardForm.ComponentsList.ItemEnabled[7]:=True
    WizardForm.ComponentsList.ItemEnabled[8]:=True
    WizardForm.ComponentsList.ItemEnabled[9]:=True
    WizardForm.ComponentsList.ItemEnabled[10]:=True
  end
  if WizardForm.ComponentsList.Checked[6] = True then
  begin
    WizardForm.ComponentsList.ItemEnabled[1]:=False
    WizardForm.ComponentsList.ItemEnabled[2]:=False
    WizardForm.ComponentsList.ItemEnabled[3]:=False
    WizardForm.ComponentsList.ItemEnabled[4]:=False
    WizardForm.ComponentsList.ItemEnabled[5]:=False
  end else
  begin
    WizardForm.ComponentsList.ItemEnabled[1]:=True
    WizardForm.ComponentsList.ItemEnabled[2]:=True
    WizardForm.ComponentsList.ItemEnabled[3]:=True
    WizardForm.ComponentsList.ItemEnabled[4]:=True
    WizardForm.ComponentsList.ItemEnabled[5]:=True
  end
end;

procedure InitializeWizard();
begin
  WizardForm.ComponentsList.Checked[1]:=True
  WizardForm.ComponentsList.Checked[6]:=True
  WizardForm.ComponentsList.OnClickCheck:=@OnClickCheck
end;


Dodakaedr 15-11-2014 17:46 2429858

Цитата:

Цитата saneksanek
чтобы автоматом не выбирались компоненты над которыми работает код »

Что-то ничего не понял... Как это?

saneksanek 15-11-2014 19:49 2429953

Dodakaedr, Данный код блокирует другие компоненты при выборе того или иного компонента,в данном случае если выбрать группу А закроется группа Б и на оборот,на те компоненты которые подключены к коду выбираются автоматом.
Из-за этого выходит так что стоят галки в компонентах и А и Б а мне это не нужна так как все эти файлы не совместимы с друг-другом.

ispolin 15-11-2014 19:53 2429958

Забыл..что нужно написать, чтобы было не ниже Seven sp1
MinVersion: xxxxxx

Dodakaedr 15-11-2014 20:45 2429992

Цитата:

Цитата saneksanek
Из-за этого выходит так что стоят галки в компонентах и А и Б а мне это не нужна так как все эти файлы не совместимы с друг-другом. »

Может так сойдет?...
Скрытый текст
Код:

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

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Types]
Name: viborochnaya; Description: Выборочная установка; Flags: iscustom

[Components]
Name: AB;Description: Группы A и B;Flags: exclusive
Name: AB\A; Description: Группа A
Name: AB\A\A1; Description: Компонент 1;Flags: exclusive
Name: AB\A\A2; Description: Компонент 2;Flags: exclusive
Name: AB\A\A3; Description: Компонент 3;Flags: exclusive
Name: AB\A\A4; Description: Компонент 4;Flags: exclusive
Name: AB\B; Description: Группа B
Name: AB\B\B1; Description: Компонент 1;Flags: exclusive
Name: AB\B\B2; Description: Компонент 2;Flags: exclusive
Name: AB\B\B3; Description: Компонент 2;Flags: exclusive
Name: AB\B\B4; Description: Компонент 4;Flags: exclusive

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Check: Check1
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Check: Check2

[Code]
function Check1: Boolean;
begin
  Result:=WizardForm.ComponentsList.ItemEnabled[1] and WizardForm.ComponentsList.Checked[0];
  begin
  Result:=WizardForm.ComponentsList.ItemEnabled[2] and WizardForm.ComponentsList.Checked[0];
  end;
end;

function Check2: Boolean;
begin
  Result:=WizardForm.ComponentsList.ItemEnabled[4] and WizardForm.ComponentsList.Checked[3];
  begin
  Result:=WizardForm.ComponentsList.ItemEnabled[5] and WizardForm.ComponentsList.Checked[3];
  end;
end;

procedure OnClickCheck(Sender: TObject);
begin
  if WizardForm.ComponentsList.Checked[1] = True then
  begin
    WizardForm.ComponentsList.ItemEnabled[6]:=False;
    WizardForm.ComponentsList.ItemEnabled[7]:=False;
    WizardForm.ComponentsList.ItemEnabled[8]:=False;
    WizardForm.ComponentsList.ItemEnabled[9]:=False;
    WizardForm.ComponentsList.ItemEnabled[10]:=False;
  end else
  begin
    WizardForm.ComponentsList.ItemEnabled[6]:=True;
    WizardForm.ComponentsList.ItemEnabled[7]:=True;
    WizardForm.ComponentsList.ItemEnabled[8]:=True;
    WizardForm.ComponentsList.ItemEnabled[9]:=True;
    WizardForm.ComponentsList.ItemEnabled[10]:=True;
  end;

  if WizardForm.ComponentsList.Checked[6] = True then
  begin
    WizardForm.ComponentsList.ItemEnabled[1]:=False;
    WizardForm.ComponentsList.ItemEnabled[2]:=False;
    WizardForm.ComponentsList.ItemEnabled[3]:=False;
    WizardForm.ComponentsList.ItemEnabled[4]:=False;
    WizardForm.ComponentsList.ItemEnabled[5]:=False;
  end else
  begin
    WizardForm.ComponentsList.ItemEnabled[1]:=True;
    WizardForm.ComponentsList.ItemEnabled[2]:=True;
    WizardForm.ComponentsList.ItemEnabled[3]:=True;
    WizardForm.ComponentsList.ItemEnabled[4]:=True;
    WizardForm.ComponentsList.ItemEnabled[5]:=True;
  end;
end;

procedure InitializeWizard();
begin
  WizardForm.ComponentsList.Checked[1]:=True;
  WizardForm.ComponentsList.ItemEnabled[6]:=False;
  WizardForm.ComponentsList.ItemEnabled[7]:=False;
  WizardForm.ComponentsList.ItemEnabled[8]:=False;
  WizardForm.ComponentsList.ItemEnabled[9]:=False;
  WizardForm.ComponentsList.ItemEnabled[10]:=False;
  WizardForm.ComponentsList.OnClickCheck:=@OnClickCheck;
end;


Irenis 16-11-2014 01:10 2430151

Всем привет :) Подскажите пожалуйста команду, чтобы приложение автоматически установилось в папку "Мои документы". То есть я установила приложение с офсайта и оно у меня автоматически установилось по пути C:\Users\Ирина\Documents\TMClientProfile. А теперь мне нужно сделать установщик, который бы тоже автоматически устанавливал программу по тому же пути.

Ранее уже как то задавалась этим вопросом, но тогда мне нужно было, чтобы программа установилась в папку ProgramData. Оказалось, все очень просто:
Source: "C:\ProgramData\Firefly Studios\*"; DestDir: "{commonappdata}\Firefly Studios"; Flags: ignoreversion recursesubdirs createallsubdirs

В общем, может есть какой то код, чтоб приложение устанавливалось в папку "Мои документы" по умолчанию? Спасибо.

Nordek 16-11-2014 02:17 2430173

Цитата:

Цитата Irenis
Подскажите пожалуйста команду, чтобы приложение автоматически установилось в папку "Мои документы". »

Irenis, Используй {userdocs}

Пример:
Код:

[Files]
Source: compiler:Languages\Russian.isl; DestDir: {userdocs}\Inno Setup 5; Flags: ignoreversion

и/или
Код:

[Files]
Source: compiler:Languages\*; DestDir: {userdocs}\Inno Setup 5; Flags: ignoreversion recursesubdirs createallsubdirs


saneksanek 16-11-2014 02:18 2430175

Dodakaedr, То что надо спс

saurn 16-11-2014 13:49 2430269

Цитата:

Цитата ispolin
Забыл..что нужно написать, чтобы было не ниже Seven sp1
MinVersion: xxxxxx »

6.1.7601
До кучи, проверка через код с помощью GetVersionEx:
читать дальше »
Код:

[CustomMessages]
IS_WINDOWS_SEVEN_TITLE=Неподдерживаемая операционная система
IS_WINDOWS_SEVEN_MSG=Устанавливаемое приложение несовместимо%nс используемой версией Windows.


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


const
    MB_ICONNONE = $00000000;
    MB_ICONSTOP = $00000010;
    MB_ICONEXCLAMATION = $00000030;
    MB_ICONASTERISK = $00000040;
    MB_CANCELTRYCONTINUE = $00000006;
    MB_APPLMODAL = $00000000;
    MB_SYSTEMMODAL = $00001000;
    MB_TASKMODAL = $00002000;
    MB_RIGHT = $00080000;
    IDTRYAGAIN = 10;
    IDCONTINUE = 11;
    VER_PLATFORM_WIN32_NT = 2;


type
    _OSVERSIONINFOEX = record
        dwOSVersionInfoSize: DWORD;
        dwMajorVersion: DWORD;
        dwMinorVersion: DWORD;
        dwBuildNumber: DWORD;
        dwPlatformId: DWORD;
        szCSDVersion: array [0..127] of Char;
        wServicePackMajor: WORD;
        wServicePackMinor: WORD;
        wSuiteMask: WORD;
        wProductType: BYTE;
        wReserved: BYTE;
    end;

function MessageBox( HWND: hWnd; lpText: String; lpCaption: String; uType: UINT ): Integer; external 'MessageBox{#A}@user32.dll stdcall';
function GetVersionEx( var lpVersionInformation: _OSVERSIONINFOEX ): BOOL; external 'GetVersionEx{#A}@kernel32.dll stdcall';


function IsWindowsSevenSPOneOnly(): Boolean; // только Windows 7 SP1
var
    osviEx: _OSVERSIONINFOEX;
begin
    osviEx.dwOSVersionInfoSize := SizeOf( osviEx );

    if ( not GetVersionEx( osviEx ) ) then
      Exit;

    Result := ( ( osviEx.dwPlatformId = VER_PLATFORM_WIN32_NT ) and // платформа NT
               
( osviEx.dwMajorVersion = 6 ) and // версия системы
               
( osviEx.dwMinorVersion = 1 ) and
                ( osviEx.wServicePackMajor = 1 ) ); // версия SP

   
if not Result then
    MessageBox( Application.Handle, CustomMessage( 'IS_WINDOWS_SEVEN_MSG' ), CustomMessage( 'IS_WINDOWS_SEVEN_TITLE' ), ( MB_OK + MB_ICONEXCLAMATION + MB_DEFBUTTON1 + MB_APPLMODAL ) );
end;


function InitializeSetup(): Boolean;
begin
    Result := IsWindowsSevenSPOneOnly();
end;


jack007 16-11-2014 22:59 2430471

Кто знает как это решить. После установки игры на мой ПК игра запускается, если установить на другой ПК, ничего не происходит, что делать?
Что то в реестр я слышал вносить нужно мб(

Dodakaedr 17-11-2014 16:20 2430845

Цитата:

Цитата jack007
Кто знает как это решить. После установки игры на мой ПК игра запускается, если установить на другой ПК, ничего не происходит, что делать?
Что то в реестр я слышал вносить нужно мб( »

Может и реестр, может и дополнительное программное обеспечение, может доп. файлы где-то в системе. Много вариантов...

Tixo 17-11-2014 16:49 2430861

естественнО в реестр нужно вносить что-то, а что именно - зависит от самой игры. regedit вводишь в поиске и ищешь там уже. если нужно распишу подробнее, что и куда смотреть

Irenis 17-11-2014 17:05 2430873

Возник вопрос по установке дополнительного ПО. Подскажите пожалуйста, как это все организовать? Конкретно, нужно чтобы при установке игры, автоматически установилось Microsoft Visual C++. Какой код в скрипте должен быть?

Dodakaedr 17-11-2014 17:33 2430892

Цитата:

Цитата Irenis
Конкретно, нужно чтобы при установке игры, автоматически установилось Microsoft Visual C++. Какой код в скрипте должен быть? »

Примеры для обозрения:
Для автоматической установки
Код:

[Run]
Filename: {src}\vcredist_x86.exe; Parameters: /q; StatusMsg: Установка Microsoft Visual С++ 2005 Redistributable;
Filename: {src}\vcredist_x64.exe; Parameters: /q; Check: "IsWin64"; StatusMsg: Установка Microsoft Visual С++ 2005 Redistributable x64;


С запросом

Код:

[Tasks]
Name: Soft; Description: Установка дополнительного программного обеспечения; GroupDescription: Дополнительное программное обеспечение:; Flags: unchecked
Name: Soft/vcredist_x86; Description: Microsoft Visual С++ 2005 Redistributable; Flags: unchecked
Name: Soft/vcredist_x64; Description: Microsoft Visual С++ 2005 Redistributable x64; Flags: unchecked; Check: IsWin64

[Run]
Filename: {src}\vcredist_x86.exe; Tasks: Soft/vcredist_x86; Parameters: /q; StatusMsg: Установка Microsoft Visual С++ 2005 Redistributable;
Filename: {src}\vcredist_x64.exe; Tasks: Soft/vcredist_x64; Parameters: /q; StatusMsg: Установка Microsoft Visual С++ 2005 Redistributable x64;


Файлы должны находится возле установщика.

jack007 17-11-2014 20:07 2431010

Цитата:

Цитата Tixo
естественнО в реестр нужно вносить что-то, а что именно - зависит от самой игры. regedit вводишь в поиске и ищешь там уже. если нужно распишу подробнее, что и куда смотреть »

если можно поподробнее напишите в ЛС, спасибо

saneksanek 17-11-2014 20:50 2431047

Dodakaedr, Можете-ли очистить часть сохраненных персональных сообщений а то в приват не написать.

VoLT 18-11-2014 10:33 2431326

Были возмущённые люди по поводу что callback не настоящий ))))))))))
... в общем был написан ISCallBack - настоящий!!! С барского плеча ))))
ISCallBack - callback (настоящий)
ISCallProc - вызов процедур (экспериментальный проект)
Использовались:
Inno Setup Compiler 5.5.5 (u) (build 121002) для других (в ISCallProc) придётся поменять адрес процедуры. Однако ISCallBack не имеет зависимости от версии Inno.
Delphi XE6, но думаю скомпилится в любой
PS Если есть любители погорячее C++ скажем ... переписать будет не сложно

ROMKA-1977 18-11-2014 16:47 2431518

Подскажите как выполнить автоматическую установку изолированного пакете центра обновления Microsoft (.msu) ?

saurn 18-11-2014 19:43 2431609

ROMKA-1977,
Код:

[Run]
Filename: {sys}\wusa.exe; WorkingDir: {src}; Parameters: {src}\файл.msu /quite /norestart; Flags: waituntilterminated;


diman_21Ru 19-11-2014 21:10 2432195

Как можно в установщике добавить прокрутку мышкай чтобы спуститься к нижнему списку

kotyarko@fb 20-11-2014 17:58 2432712

Цитата:

Цитата diman_21Ru
Как можно в установщике добавить прокрутку мышкай чтобы спуститься к нижнему списку »

Скроллбар? - Он и так должен быть. Если его нет - можно нажать на поле и прокручивать колёсиком.

diman_21Ru 20-11-2014 18:39 2432752

kotyarko@fb, с колесикам не работает приходится левой кнопкой мыши спускать

saurn 20-11-2014 18:45 2432754

diman_21Ru, за это отвечает свойство ScrollBars, если оное доступно для контрола.
Код:

ScrollBars := ssVertical;

diman_21Ru 21-11-2014 13:28 2433172

saurn, А куда вставить это чудо?

saurn 21-11-2014 15:42 2433239

diman_21Ru, в блоке параметров контрола, для которого требуется создать скролл, например:
Код:

with TMemo.Create( nil ) do
begin
    ...
    ScrollBars := ssVertical;
    ...
end;


diman_21Ru 22-11-2014 14:29 2433687

Как можно выключить страницу [Tasks]

saurn 22-11-2014 14:46 2433692

Цитата:

Цитата diman_21Ru
выключить страницу [Tasks] »

Добавить задачу\задачи в секцию [Tasks]. Справка -> Секции скриптов -> Секция [Tasks]

Painkiller 23-11-2014 21:07 2434301

Народ, подскажите ?? Экспортировал ключ из реестра
Код:

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Menu1]
"MUIVerb"="Администрирование"
"SubCommands"="msconfig;perfmon;relmon;trouble;services;event;taskschd;useracc;useracc2;network;wf;wu"
"Icon"="C:\\Program Files\\XTools\\XTools.dll,1"

Конвертировал reg-файл в формат *.iss
Получил
Код:

[Registry]
; файл создан программой Converter v.0.1.4 - 23 ноября 2014г., в 20 час. 39 мин. 00 сек.
Root: HKCR; SubKey: CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Menu1; ValueType: string; ValueName: MUIVerb; ValueData: Администрирование; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCR; SubKey: CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Menu1; ValueType: string; ValueName: SubCommands; ValueData: msconfig;perfmon;relmon;trouble;services;event;taskschd;useracc;useracc2;network;wf;wu; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKCR; SubKey: CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Menu1; ValueType: string; ValueName: Icon; ValueData: C:\Program Files\XTools\XTools.dll,1; Flags: uninsdeletevalue uninsdeletekeyifempty

Ну компилятору не нравится вот эта строчка кода
Код:

Root: HKCR; SubKey: CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Menu1; ValueType: string; ValueName: SubCommands; ValueData: msconfig;perfmon;relmon;trouble;services;event;taskschd;useracc;useracc2;network;wf;wu; Flags: uninsdeletevalue uninsdeletekeyifempty
Вот такая ошибка :

Larkod 23-11-2014 21:14 2434304

Всем привет. Помогите пожалуйста с установщиком весь форум перелазил и прочитал многие разделы и перепробовал все. Вопрос ранее уже не раз задавался, но у меня не получается. Делаю Модпак для World of Tanks. И пытаюсь сделать, чтобы он мод устанавливал допустим в "f:\Games\World of Tanks\res_mods\0.9.4". Я имею ввиду чтобы он путь сам находил не зависимо от пользователя. Спасибо за внимание.

01. Как сделать так, чтобы мой установщик автоматически находил местоположение игры, тоесть сам прописывал путь к папке World Of Tanks ???
02. Как сделать так, чтобы установщик копировал папку audio из папки World Of Tanks/res в папку World Of Tanks/res_mods/0.9.4 ???
03. Как сделать так, чтобы в окне выбора модов, при наведение на какой либо мод, высвечивалось описание мода и маленький скриншот ???
04. Как сделать так чтобы установщик автоматически очищал папку res_mods ???

Вот что у меня получилось
https://docs.google.com/file/d/0B7Ym...R0T2cyWHM/edit

Dodakaedr 23-11-2014 21:16 2434308

Painkiller,Попробуйте так
Код:

Root: HKCR; SubKey: CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\Menu1; ValueType: string; ValueName: "SubCommands"; ValueData: "msconfig;perfmon;relmon;trouble;services;event;taskschd;useracc;useracc2;network;wf;wu"; Flags: uninsdeletevalue uninsdeletekeyifempty

Painkiller 23-11-2014 21:20 2434309

Dodakaedr , все ок ))

Dodakaedr 23-11-2014 22:23 2434354

Цитата:

Цитата Larkod
Я имею ввиду чтобы он путь сам находил не зависимо от пользователя. Спасибо за внимание. »

Как-то так
Автоопределение установки
Код:

[Setup]
DefaultDirName={code:SetInstDir}

[Code]
function SetInstDir(const lpResult: String): String;
begin
    RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1\', 'InstallLocation',  lpResult);
    if lpResult <> '' then Result := RemoveBackslash(lpResult);
end;

function InitializeSetup(): Boolean;
begin
if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1') then
Result:=True else
MsgBox('Игра World_of_Tanks не найдена!', mbinformation, mb_ok);
Result:=False;
end;


Larkod 23-11-2014 22:30 2434355

Dodakaedr , ахахххаах пишет World of Tanks не найден

Dodakaedr 23-11-2014 22:33 2434357

Цитата:

Цитата Larkod
пишет World of Tanks не найден »

Если игра установлена, то найдите ключ в реестре как в примере и замените его в коде.

Painkiller 23-11-2014 22:34 2434359

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

Larkod 23-11-2014 22:35 2434360

Dodakaedr, тогда у меня пойдет, а у других людей будет писать World of Tanks не найден

Dodakaedr 23-11-2014 22:58 2434373

Цитата:

тогда у меня пойдет, а у других людей будет писать World of Tanks не найден
Тогда сделайте так:
Скрытый текст
Код:

[Setup]
DefaultDirName={code:SetInstDir}

[Code]
function SetInstDir(const lpResult: String): String;
begin
    RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1\', 'InstallLocation',  lpResult);
    if lpResult <> '' then Result := RemoveBackslash(lpResult) else Result := ExpandConstant('{pf}\');
end;

function InitializeSetup(): Boolean;
begin
if not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1') then
MsgBox('Игра World_of_Tanks не найдена! Укажите путь к папке с игрой вручную!', mbinformation, mb_ok);
Result:=True;
end;



Цитата:

Цитата Painkiller
создает дополнительную страницу с чебоксами и радиобутанами »

Кастомная страница с кнопками
Код:

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

[Code]
var
r1, r2: TNewRadioButton;
Page: TWizardPage;
But1, But2: TNewCheckBox;

procedure InitializeWizard();
begin
 Page := CreateCustomPage(wpSelectTasks, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');

r1 := TNewRadioButton.Create(WizardForm);
  with r1 do
  begin
    Parent := Page.Surface;
    SetBounds(ScaleX(20), ScaleY(20), ScaleX(100), ScaleY(15));
    Caption := 'Радиокнопка 1';
    Checked := True;
  end;

r2 := TNewRadioButton.Create(WizardForm);
  with r2 do
  begin
    Parent := Page.Surface;
    SetBounds(ScaleX(20), ScaleY(50), ScaleX(100), ScaleY(15));
    Caption := 'Радиокнопка 2';
  end;

But1 := TNewCheckBox.Create(WizardForm);
  with But1 do
  begin
    Parent := Page.Surface;
    SetBounds(ScaleX(20), ScaleY(80), ScaleX(100), ScaleY(15));
    Caption := 'Кнопка 1';
  end;

But1 := TNewCheckBox.Create(WizardForm);
  with But1 do
  begin
    Parent := Page.Surface;
    SetBounds(ScaleX(20), ScaleY(110), ScaleX(100), ScaleY(15));
    Caption := 'Кнопка 2';
    Checked := True;
  end;

end;



P.S. Larkod, если игра официальная, то не будет.

saurn 23-11-2014 23:00 2434374

Цитата:

Цитата Larkod
тогда у меня пойдет, а у других людей будет писать World of Tanks не найден »

AppId игры будет одинаковым на любой машине.

-----------------------------------------------------------------------------------------------------------------
Цитата:

Цитата Painkiller
скрипт который создает дополнительную страницу с чебоксами и радиобутанами . »

Цитата:

Цитата Dodakaedr
Кастомная страница с кнопками »

Добавлю еще такой вариант:
читать дальше »
Код:

AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=...


[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Check: IsChecked( 0 );
Source: compiler:Examples\MyProg.chm; DestDir: {app}; Check: IsChecked( 1 );
Source: compiler:Examples\Readme.txt; DestDir: {app}; Flags: isreadme; Check: IsChecked( 2 );


[Code]
var
    TasksPage: TInputOptionWizardPage;


function IsChecked( const nIndex: Integer ): Boolean;
begin
    Result := TasksPage.CheckListBox.Checked[nIndex];
end;


function CreateTasksPage( const nPageId: Integer ): TInputOptionWizardPage;
begin
    TasksPage := CreateInputOptionPage( nPageId, 'Заголовок', 'Подзаголовок', 'Текст', False, False );

    with TasksPage do
    begin
        Add( 'Задача 1' );
        Add( 'Задача 2' );
        Add( 'Задача 3' );

        AddEx( 'Задача 4', 0, False );
          AddEx( 'Радио 1', 1, True );
          AddEx( 'Радио 2', 1, True );
    end;

    Result := TasksPage.ID;
end;

 
procedure InitializeWizard;
begin
    CreateTasksPage( wpWelcome );
end;


Larkod 23-11-2014 23:10 2434380

Dodakaedr, а нельзя сделать чтобы путь сам прописывался без окон всплывающих Укажите путь сам
saurn, может быть, но в данном коде писало бы так Танки не найдены

Painkiller 23-11-2014 23:16 2434383

saurn , твой вариант я и искал . Вот только бы пример не помешал как привязать чебокс и радиобокс к действиям ???

Dodakaedr 23-11-2014 23:17 2434384

saurn, А как изначально отмеченным сделать? Разобрался.
Larkod, удалите
Код:

if not RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1') then
MsgBox('Игра World_of_Tanks не найдена! Укажите путь к папке с игрой вручную!', mbinformation, mb_ok);

Цитата:

Цитата Painkiller
как привязать чебокс и радиобокс к действиям ??? »

Посмотрите на
Код:

function IsChecked( const nIndex: Integer ): Boolean;
begin
    Result := TasksPage.CheckListBox.Checked[nIndex];
end;


Painkiller 23-11-2014 23:24 2434387

Dodakaedr ,saurn , все понял, сразу не заметил

Larkod 23-11-2014 23:28 2434389

Есть еще предложения?

saurn 23-11-2014 23:28 2434390

Цитата:

Цитата Larkod
но в данном коде писало бы так Танки не найдены »

Если указан оригинальный AppId, то нет.
Цитата:

Цитата Larkod
а нельзя сделать чтобы путь сам прописывался без окон всплывающих Укажите путь сам »

Скрытый текст
[code]
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={code:DefaultInstallDir}
OutputDir=...


[Code]
function DefaultInstallDir( const szResult: String ): String;
begin
    RegQueryStringValue( HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', szResult );
    if ( szResult <> '' ) then
      Result := RemoveBackslash( szResult ) else Result := ExpandConstant( '{pf}\My Program' );
end;



-------------------------------------------------------------------------------
Цитата:

Цитата Painkiller
Вот только бы пример не помешал как привязать чебокс и радиобокс к действиям ??? »

Булевая функция IsChecked возвращает True, если отмечен чекбокс, номер которого указан во входной константе nIndex, нумерация идет с нуля:
Для секций вне кода:
Код:

Check: IsChecked( 0 );
Для секции [code]:
Код:

if IsChecked( 0 ) then
...

---------------------------------------------------------------------
Цитата:

Цитата Dodakaedr
А как изначально отмеченным сделать? »

Скрытый текст
Код:

with TasksPage do
    begin
        Add( 'Задача 1' );
        Add( 'Задача 2' );
        Add( 'Задача 3' );

        AddEx( 'Задача 4', 0, False );
          AddEx( 'Радио 1', 1, True );
          AddEx( 'Радио 2', 1, True );

        Values[2] := True;  //отмечен контрол номер два
   
end;


Larkod 23-11-2014 23:35 2434394

saurn, без изменений
вот мой скрипт https://docs.google.com/file/d/0B7Ym...R0T2cyWHM/edit

saurn 23-11-2014 23:40 2434397

Цитата:

Цитата Larkod
без изменений »

Напортачил с функцией. Обновил пример постом выше, теперь будет работать, только ключ реестра укажите правильный.

Larkod 23-11-2014 23:56 2434407

saurn, А это что такое? OutputDir=...

saurn 24-11-2014 00:04 2434412

Цитата:

Цитата Larkod
А это что такое? OutputDir=... »

Папка для скомпилированного инсталятора. Это вам не нужно. Ваш пример, все, что в секции [code] и в секции [Setup] замените значение DefaultDirName на
Код:

DefaultDirName={code:DefaultInstallDir}


Larkod 24-11-2014 00:09 2434414

saurn, теплее тока оно указывает на диск C:\Program Files (x86)\, а как сделать чтобы указывала на другой диск там где игра?

saurn 24-11-2014 00:16 2434418

Цитата:

Цитата Larkod
а как сделать чтобы указывала на другой диск там где игра? »

Цитата:

Цитата saurn
только ключ реестра укажите правильный. »

Код:

function DefaultInstallDir( const szResult: String ): String;
begin
//    RegQueryStringValue( HKEY_LOCAL_MACHINE, 'Здесь ключ игры в реестре', 'Здесь строковый параметр, содержащий путь к папке с игрой', szResult );
{по типу - }
RegQueryStringValue( HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', szResult );
    if ( szResult <> '' ) then
      Result := RemoveBackslash( szResult ) else Result := ExpandConstant( '{pf}\My Program' );
end;


Larkod 24-11-2014 00:29 2434423

saurn, спасибо вроде получилось. Скажи еще вопрос есть он у меня указывает такой путь к игре F:\Games\World of Tanks вот а там когда моды лепить самому сделать, res_mods?Чтобы получилось
F:\Games\World of Tanks\res_mods\0.9.4 или и это прописать можено?

И еще вопрос. Как сделать так, чтобы установщик копировал папку audio из папки World Of Tanks/res в папку World Of Tanks/res_mods/0.9.4 ???

Nordek 24-11-2014 01:04 2434431

Цитата:

Цитата Larkod
Помогите пожалуйста с установщиком весь форум перелазил и прочитал многие разделы и перепробовал все. »

#1264, #1716

Цитата:

Цитата Larkod
ахахххаах пишет World of Tanks не найден »

ахахххаах сами бы попробовали хоть что нибудь сделать (Все такие умные, а сами сделать ничего не могут. Плиз, без сарказма.). Для начала.

Цитата:

Цитата Larkod
а у других людей будет писать World of Tanks не найден »

Вы смотрите внимательно расположение в реестре.
Сейчас установил World of Tanks, расположение деинсталляции было обнаружено в HKEY_CURRENT_USER, а не в HKEY_LOCAL_MACHINE.

Larkod 24-11-2014 18:02 2434789

Nordek, будь добор кинь ключ реестара World of Tanks. Я у себя найти не могу. А uninstall Tool и Revo Uninstaller не видят World of Tanks

Larkod 24-11-2014 18:28 2434814

Хорошо тогда еще вопрос. Как сделать, перед выбор папки куда устанавливать вверзу или внизу было написано "Пример: f:\Games\World of Tanks\res_mods\0.9.4". Спасибо за внимание

kotyarko@fb 24-11-2014 19:17 2434860

Цитата:

Цитата Larkod
ключ реестара World of Tanks. Я у себя найти не могу. »

Код:

RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', szResult);

Цитата:

Цитата Larkod
Как сделать, перед выбор папки куда устанавливать вверзу или внизу было написано "Пример: f:\Games\World of Tanks\res_mods\0.9.4". »

Код:

[Code*]
Procedure InitializeWizard();
var
 Primer: TLabel;
begin
 Primer := TLabel.Create(WizardForm);
 Primer.Parent := WizardForm.SelectDirPage;
 Primer.SetBounds(WizardForm.DirEdit.Top + 20, 0, WizardForm.Width, 20);
 Primer.Caption := 'Пример: f:\Games\World of Tanks\res_mods\0.9.4';
 Primer.WordWrap := False;
end;


Larkod 24-11-2014 20:03 2434890

kotyarko@fb, у меня почему то ключ не показывает просто пустая строка, наверно танки в реестре не прописано - очень странно. Кинул другу установщик тоже не работают работает пустое окно, где выбор папок должен быть. А запускаю моды от Джова находит путь все как надо
По поводу кода спасибо.

Хотя у себя вставил в реестр поиск {1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1 нашел
Еиньте пожалуйста код я лично пробую этот
[code]
function DefaultInstallDir( const szResult: String ): String;
begin
// RegQueryStringValue( HKEY_LOCAL_MACHINE, 'Здесь ключ игры в реестре', 'Здесь строковый параметр, содержащий путь к папке с игрой', szResult );
{по типу - } RegQueryStringValue(HKLM, 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', szResult);
if ( szResult <> '' ) then
Result := RemoveBackslash( szResult ) else Result := ExpandConstant( '' );
end;

kotyarko@fb 24-11-2014 20:20 2434911

Цитата:

Цитата Larkod
Еиньте пожалуйста код я лично пробую этот »

Помимо "этого", нужно ещё:
Код:

[Setup]
DefaultDirName={code:DefaultInstallDir}


Larkod 24-11-2014 20:25 2434915

kotyarko@fb , уже есть. Вот мой скрипт глянь, если не трудно
https://docs.google.com/file/d/0B7Ym...lrZXEzT0E/edit

kotyarko@fb 24-11-2014 20:40 2434935

Цитата:

Цитата Larkod
Вот мой скрипт глянь, если не трудно »

Или выложите в свободном доступе, или кидайте ссылку в ЛС.

Larkod 24-11-2014 20:50 2434948

Вложений: 1
Файл 119243 Вот тока в txt переименовал, а то в iss ругает

kotyarko@fb 24-11-2014 21:07 2434964

Вложений: 1
Цитата:

Цитата Larkod
Вот тока в txt переименовал, а то в iss ругает »

Архивировать надо. Или код под спойлер.

Зачем вы делаете две секции кода? То, что вам подсказывают туда вписать - вписывайте в существующую.
Держите ваш готовый *.txt :biggrin:

Larkod 24-11-2014 21:10 2434966

kotyarko@fb, так это черновик я специально вниз копирую, чтобы с ним работать, а не по всему документу бегать искать его.

kotyarko@fb, Ну что поможешь?

saurn 24-11-2014 21:31 2434978

kotyarko@fb, Larkod, вот так делать не надо:
  • SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1
Wow6432Node раздел для 32-х разрядных приложений в 64-х разрядных системах. Будете указывать ключ реестра в таком формате и на 32-х разрядных системах получите пустую строку. Для обоих разрядностей указывается просто:
  • SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1

Larkod 24-11-2014 21:35 2434982

saurn, Извините уже за наглость, но можете код кинуть, а то опять и это не работает.

Я использую этот

[Setup]
DefaultDirName={code:DefaultInstallDir}

[code]
function DefaultInstallDir( const szResult: String ): String;
begin
// RegQueryStringValue( HKEY_LOCAL_MACHINE, 'Здесь ключ игры в реестре', 'Здесь строковый параметр, содержащий путь к папке с игрой', szResult );
{по типу - } RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1', 'InstallLocation', szResult);
if ( szResult <> '' ) then
Result := RemoveBackslash( szResult ) else Result := ExpandConstant( '' );
end;

kotyarko@fb 24-11-2014 21:38 2434986

Цитата:

Цитата saurn
Wow6432Node раздел для 32-х разрядных приложений в 64-х разрядных системах. »

Спасибо, буду знать.

Цитата:

Цитата Larkod
Ну что поможешь? »

в этом "черновике" я сделал всё, что нужно.

Larkod 24-11-2014 21:40 2434989

Все спасибо большое разобрался :)
Еще 1 вопрос есть и опять он раньше тоже 1 мододелом задевался тока он узнал на форуме и промолчал в тихаря :)
Как можно при установки из папки World of Tanks\res\audio скопировать в World of Tanks\res_mods\0.9.4\audio

saurn 24-11-2014 21:41 2434990

Цитата:

Цитата Larkod
но можете код кинуть, а то опять и это не работает. »

Код, что я вам дал, на предыдущей странице, рабочий. От вас требуется лишь указать правильные корневой ключ, подключ и строковое значение содержащее путь. Что и куда пишет WOT в реестр я без понятия.
Цитата:

Цитата Larkod
Как можно при установки из папки World of Tanks\res\audio скопировать в World of Tanks\res_mods\0.9.4\audio »

Было http://forum.oszone.net/post-2136352-261.html

Larkod 24-11-2014 21:52 2434998

saurn, показывает, как ошибку
Source: {fonts}\*; DestDir: {code:GetInstallPath}\audio; Flags: external; Components: zvuk; Check: CheckInstallPath();

diman_21Ru 24-11-2014 22:02 2435003

Как можно добавить такую кнопку Удалить все файлы из папки Update на скрине выделил пример.

Путь к папке идет World of Tanks/Updates.

studentvnau@vk 24-11-2014 22:48 2435020

Цитата:

Цитата diman_21Ru
Как можно добавить такую кнопку Удалить все файлы из папки Update на скрине выделил пример.
Путь к папке идет World of Tanks/Updates. »

Спроси у Ekspointa, у него же ты скрин сделал, он наверняка знает;)

Larkod 24-11-2014 22:51 2435022

Как можно при установки из папки World of Tanks\res\audio скопировать в World of Tanks\res_mods\0.9.4\audio

studentvnau@vk 24-11-2014 22:54 2435024

Цитата:

Цитата Larkod
Как можно при установки из папки World of Tanks\res\audio скопировать в World of Tanks\res_mods\0.9.4\audio »

Вот так:
HTML код:

Source: "{app}\res\audio\*"; DestDir: "{app}\res_mods\0.9.4\audio\"; Flags: external recursesubdirs skipifsourcedoesntexist; Components: main\ass13;
Components: main\ass13; - компонент, к которому вы хотите привязать это действие, в данном случае просто пример:)

diman_21Ru 24-11-2014 23:12 2435034

studentvnau@vk, Логично

ekspoint 24-11-2014 23:23 2435046

че спросить слабо?:)

diman_21Ru 24-11-2014 23:26 2435051

ekspoint, А я и не знал что ты сидишь )

diman_21Ru 24-11-2014 23:41 2435058

ekspoint, Ну раз ты тут привет Можешь подсказать как добавить в скрипт функцию удаление папки Update.

ekspoint 24-11-2014 23:46 2435060

TListBox.Create(WizardForm.SelectDirPage)
Parent:=WizardForm.SelectDirPage
дальше сам делай

ekspoint 25-11-2014 00:11 2435069

народ есть ли библиотека ISSkin.dll для win 8.1?,а то найти не могу

Nordek 25-11-2014 06:31 2435120

Цитата:

Цитата Larkod
кинь ключ реестара World of Tanks »

Скрытый текст
Код:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\{1EAC1D02-C6AC-4FA6-9A44-96258C37C812RU}_is1]
"Inno Setup: Setup Version"="5.4.2 (u)"
"Inno Setup: App Path"="C:\\Games\\World_of_Tanks"
"InstallLocation"="C:\\Games\\World_of_Tanks\\"
"Inno Setup: Icon Group"="World of Tanks"
"Inno Setup: User"="-"
"Inno Setup: Selected Tasks"="desktopicon"
"Inno Setup: Deselected Tasks"=""
"Inno Setup: Language"="ru"
"DisplayName"="World of Tanks"
"DisplayIcon"="C:\\Games\\World_of_Tanks\\WoTLauncher.exe"
"UninstallString"="\"C:\\Games\\World_of_Tanks\\unins000.exe\""
"QuietUninstallString"="\"C:\\Games\\World_of_Tanks\\unins000.exe\" /SILENT"
"Publisher"="Wargaming.net"
"URLInfoAbout"="http://wargaming.net"
"HelpLink"="https://support.worldoftanks.ru"
"NoModify"=dword:00000001
"NoRepair"=dword:00000001
"InstallDate"="-"



Цитата:

Цитата ekspoint
дальше сам делай »

Это не ответ, а пустой трёп. Рабочий пример? Нет примера - зря вообще писали.

Цитата:

Цитата diman_21Ru
Как можно добавить такую кнопку Удалить все файлы из папки Update »

Пример
Код:

[Code]
var
 
CheckBox1: Boolean;
  CheckBox2: TNewCheckBox;
  S: String;

procedure CheckBox1Click(Sender: TObject);
begin
 
CheckBox1:=CheckBox2.Checked;
end;

procedure InitializeWizard();
begin
   
CheckBox2 := TNewCheckBox.Create(WizardForm);
  with CheckBox2 do
  begin
   
Parent := WizardForm.SelectDirPage;
    Left := ScaleX(0);
    Top := ScaleY(105);
    Width := ScaleX(500);
    Height := ScaleY(17);
    Caption := ExpandConstant('Удалить папку "Backup" из "{userdocs}"');
    OnClick := @CheckBox1Click;
    TabOrder := 0;
    Checked := False;
  end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
If
CurPageID=wpInstalling then
 begin
 If
CheckBox1 then
 
S:=ExpandConstant('{userdocs}')+'\Backup';
  If DirExists(S) then
    begin
     
DelTree(ExpandConstant('{userdocs}')+'\Backup', True, True, True);
    end;
 end;
end;



Цитата:

Цитата ekspoint
народ есть ли библиотека ISSkin.dll для win 8.1? »

Теперь ищите сами. А здесь последняя публичная версия.

Farser21 25-11-2014 14:31 2435277

Добрый день форумчане ;)
Назрел вопрос, хочу добавить выборку на страницу компонентов (секция [Types]), изначально она там есть (даже без секции [Types]), но в ней стандартные тексты (Компактная, полная и выборочная). Я же хочу добавить другие пункты (Стандартная конфигурация, наш выбор либо что-то в этом роде). Чтобы их добавить нужно прописать секцию [Types], но когда я ее включаю, то полоска выборки пропадает. И вот собственно в чем вопрос... Есть ли другие способы как подключить полоску выборки? Возможно она не появляется из-за того, что я использую скин?
Правильно ли я делал?
Код:

[Types]
Name: standart; Description: Стандартная конфигурация; Flags: iscustom
Name: recommended; Description: Наш выбор; Flags: iscustom
Name: nocolor; Description: Режим цветовой слепоты; Flags: iscustom


Dodakaedr 25-11-2014 17:42 2435374

Farser21, Что-то типа этого?
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Types]
Name: standart; Description: "Стандартная конфигурация"; Flags: iscustom
Name: recommended; Description: "Наш выбор";
Name: nocolor; Description: "Режим цветовой слепоты";

[Components]
Name: "main"; Description: "Main Files"; Types: standart;
Name: "help"; Description: "Help Files"; Types: recommended;
Name: "help2"; Description: "Dutch"; Types: nocolor


Farser21 25-11-2014 18:00 2435386

Dodakaedr, благодарю, все работает :)

Larkod 25-11-2014 19:12 2435443

Всем привет. Подскажите пожалуйста вчера задавал этот вопрос по поводу копирования папки audio из World of Tnaks. Пример из World of Tnaks\res\audio в папку World of Tnaks\res_mods\0.9.4\audio
Для данного вопроса использовал кода
Скрытый текст
[Setup]

InfoBeforeFile=compiler:Default.isl


[Components]
Name: "zvuk"; Description: "Звуки(перед установкой скопируйте папку audio в res_mods\XX.XX.XX\)"
Name: "zvuk\audio"; Description: "Звонок крита";
Name: "zvuk\zasvet"; Description: "Озвучка лампочки";


[Files]
; zvuk Files
Source: "{app}\res\audio\*"; DestDir: "{app}\res_mods\0.9.4\audio\"; Flags: external recursesubdirs skipifsourcedoesntexist;



[Dirs]
; for Test
Name: "{app}\res_mods\0.8.5\audio"
Name: "{app}\res_mods\0.8.6\audio"

; DUMMY:
Name: "{app}\res_mods\0.8.7"
Name: "{app}\res_mods\hl2"
Name: "{app}\res_mods\Valve"


[code]
var
InstallPath: String;


function GetInstallPath(const Dummy: String): String;
begin
if ForceDirectories(InstallPath) then Result := RemoveBackslash(InstallPath);
end;

function CheckInstallPath(): Boolean;
begin
Result := InstallPath <> '';
end;

///////////////////////////

function SearchForFolders(const RootFolder: String): array of String; // получить имена всех папок в папке (без рекурсии)
var
NewSearchPath: String;
FindRec: TFindRec;
Len: Integer;
begin
NewSearchPath := AddBackslash(RemoveBackslash(RootFolder));
if FindFirst(NewSearchPath + '*.*', FindRec) then
try
repeat
if (FindRec.Name <> '.') and (FindRec.Name <> '..') then if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY then
begin
Len := GetArrayLength(Result);
SetArrayLength(Result, Len+1);
Result[Len] := NewSearchPath + FindRec.Name;
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;


function OnlyVersion(const iStr: String): String; /// оставлять только цифры
var
i: Integer;
begin
Result := '';
if Length(iStr) > 0 then for i := 1 to Length(iStr) do
case iStr[i] of
'.', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': Result := Result + iStr[i];
end;
end;


function OnlyWithFolder(const FolderName: String ;const Path: array of String): array of String; // оставлять только пути с именем искомой папки
var
i, Len: Integer;
begin
for i := 0 to GetArrayLength(Path)-1 do if DirExists(AddBackslash(RemoveBackslash(Path[i])) + FolderName) then
begin
Len := GetArrayLength(Result);
SetArrayLength(Result, Len+1);
Result[Len] := Path[i];
end;
end;



function OnlyVersionFolders(const Path: array of String): array of String; // оставлять папки только с цифрами,
var
i, Len: Integer;
begin
for i := 0 to GetArrayLength(Path)-1 do if Length( OnlyVersion(ExtractFileName(Path[i])) ) = 5 then
begin
Len := GetArrayLength(Result);
SetArrayLength(Result, Len+1);
Result[Len] := Path[i];
end;
end;


function GetNormalTextLen(const Text: String): Integer;
begin
with TLabel.Create(nil) do
try
Caption := Text;
Result := Width;
finally
Free;
end;
end;


function AskForPath(const Path: array of String): String;
var
AskForm: TForm;
PathCombo: TNewComboBox;
Len, i: Integer;
begin
Len := GetArrayLength(Path);
if Len = 0 then Exit;

AskForm := TForm.Create(nil);
with AskForm do

begin
Caption := 'Какую папку патчить?';
Position := poScreenCenter;

PathCombo := TNewComboBox.Create(AskForm);
with PathCombo do
begin
Parent := AskForm;
SetBounds(ScaleX(7), ScaleY(7), ScaleX(GetNormalTextLen(Path[0]) + 25), ScaleY(23));
Style := csDropDownList;
for i := 0 to Len-1 do Items.Add(Path[i]);
ItemIndex := 0;
end;

ClientWidth := ScaleX(PathCombo.Width + 16);
ClientHeight := ScaleY(77);

with TButton.Create(AskForm) do
begin
Parent := AskForm;
Left := ScaleX(7);
Top := ScaleY(PathCombo.Top + PathCombo.Height + 16);
Caption := SetupMessage(msgButtonOK);
ModalResult := mrOk;
end;
with TButton.Create(AskForm) do
begin
Parent := AskForm;
Left := ScaleX(90);
Top := ScaleY(PathCombo.Top + PathCombo.Height + 16);
Caption := SetupMessage(msgButtonCancel);
ModalResult := mrCancel;
end;

if ShowModal = mrOk then Result := PathCombo.Text;
end;
end;


function NextButtonClick(CurPageID: Integer): Boolean;
var
UnefInstallPath: String;
begin
if CurPageID = wpSelectComponents then
begin
if IsComponentSelected('zvuk') then
begin
UnefInstallPath := AskForPath( OnlyWithFolder('audio', OnlyVersionFolders( SearchForFolders( AddBackslash(RemoveBackslash( WizardDirValue() )) + 'res_mods') ) ) );
Result := UnefInstallPath <> '';
if not Result then MsgBox('No', mbError, MB_OK) else InstallPath := UnefInstallPath;
end else Result := True;
end else Result := True;
end;

Но он при запуске выдает код на прочтение типа похожее на ознакомление с лицензией

Dodakaedr 25-11-2014 19:18 2435447

Цитата:

Цитата Larkod
Но он при запуске выдает код на прочтение типа похожее на ознакомление с лицензией »

Удалите
Код:

InfoBeforeFile=compiler:Default.isl

Larkod 25-11-2014 20:01 2435465

Dodakaedr , спасибо помогло. Еще одна просьба есть. помогите 2 кода совместить, а то ошибку выдает

Скрытый текст
Procedure InitializeWizard();
var
Primer: TLabel;
begin
Primer := TLabel.Create(WizardForm);
Primer.Parent := WizardForm.SelectDirPage;
Primer.SetBounds(WizardForm.DirEdit.Top - 80, 110, WizardForm.Width, 110);
Primer.Caption := 'Если не нашел путь к World of Tanks, то укажите так f:\Games\World of Tanks\';
Primer.WordWrap := False;
end;


Скрытый текст
procedure InitializeWizard();
begin
RedesignWizardForm;
RedesignWizardForm;
InitInfo();
RedesignWizardForm;
end;

function IsAppRunning(): Boolean;
begin
Result:=(FindWindowByWindowName('WoT Client') <> 0);
end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
Result:=True;
If CurPage=1 then
begin
if IsAppRunning() then
begin
MsgBox('Клиент игры World of Tanks в настоящее время запущен.' #13#13 'Необходимо закрыть его перед продолжением установки.', mbError, MB_OK);
Result:=False;
end
else
Result:=True;
end;
end;

Dodakaedr 25-11-2014 20:04 2435467

Цитата:

Цитата Larkod
спасибо помогло. Еще одна просьба есть. помогите 2 кода совместить, а то ошибку выдает »

Скрытый текст
Код:

procedure InitializeWizard();
var
Primer: TLabel;
begin
RedesignWizardForm;
InitInfo();
Primer := TLabel.Create(WizardForm);
Primer.Parent := WizardForm.SelectDirPage;
Primer.SetBounds(WizardForm.DirEdit.Top - 80, 110, WizardForm.Width, 110);
Primer.Caption := 'Если не нашел путь к World of Tanks, то укажите так f:\Games\World of Tanks\';
Primer.WordWrap := False;
end;

function IsAppRunning(): Boolean;
begin
Result:=(FindWindowByWindowName('WoT Client') <> 0);
end;

function NextButtonClick(CurPage: Integer): Boolean;
begin
Result:=True;
If CurPage=1 then
begin
if IsAppRunning() then
begin
MsgBox('Клиент игры World of Tanks в настоящее время запущен.' #13#13 'Необходимо закрыть его перед продолжением установки.', mbError, MB_OK);
Result:=False;
end
else
Result:=True;
end;
end;


Larkod 25-11-2014 20:18 2435471

Dodakaedr, теперь пишет ошибку function NextButtonClick(CurPageID: Integer): Boolean; Вот полный код

Скрытый текст
[Components]
Name: "zvuk"; Description: "Звуки(перед установкой скопируйте папку audio в res_mods\XX.XX.XX\)"
Name: "zvuk\audio"; Description: "Звонок крита";
Name: "zvuk\zasvet"; Description: "Озвучка лампочки";


[Files]
; zvuk Files
Source: "{app}\res\audio\*"; DestDir: "{app}\res_mods\0.9.4\audio\"; Flags: external recursesubdirs skipifsourcedoesntexist;



[Dirs]
; for Test
Name: "{app}\res_mods\0.8.5\audio"
Name: "{app}\res_mods\0.8.6\audio"

; DUMMY:
Name: "{app}\res_mods\0.8.7"
Name: "{app}\res_mods\hl2"
Name: "{app}\res_mods\Valve"


[code]
var
InstallPath: String;


function GetInstallPath(const Dummy: String): String;
begin
if ForceDirectories(InstallPath) then Result := RemoveBackslash(InstallPath);
end;

function CheckInstallPath(): Boolean;
begin
Result := InstallPath <> '';
end;

///////////////////////////

function SearchForFolders(const RootFolder: String): array of String; // получить имена всех папок в папке (без рекурсии)
var
NewSearchPath: String;
FindRec: TFindRec;
Len: Integer;
begin
NewSearchPath := AddBackslash(RemoveBackslash(RootFolder));
if FindFirst(NewSearchPath + '*.*', FindRec) then
try
repeat
if (FindRec.Name <> '.') and (FindRec.Name <> '..') then if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY then
begin
Len := GetArrayLength(Result);
SetArrayLength(Result, Len+1);
Result[Len] := NewSearchPath + FindRec.Name;
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;


function OnlyVersion(const iStr: String): String; /// оставлять только цифры
var
i: Integer;
begin
Result := '';
if Length(iStr) > 0 then for i := 1 to Length(iStr) do
case iStr[i] of
'.', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': Result := Result + iStr[i];
end;
end;


function OnlyWithFolder(const FolderName: String ;const Path: array of String): array of String; // оставлять только пути с именем искомой папки
var
i, Len: Integer;
begin
for i := 0 to GetArrayLength(Path)-1 do if DirExists(AddBackslash(RemoveBackslash(Path[i])) + FolderName) then
begin
Len := GetArrayLength(Result);
SetArrayLength(Result, Len+1);
Result[Len] := Path[i];
end;
end;



function OnlyVersionFolders(const Path: array of String): array of String; // оставлять папки только с цифрами,
var
i, Len: Integer;
begin
for i := 0 to GetArrayLength(Path)-1 do if Length( OnlyVersion(ExtractFileName(Path[i])) ) = 5 then
begin
Len := GetArrayLength(Result);
SetArrayLength(Result, Len+1);
Result[Len] := Path[i];
end;
end;


function GetNormalTextLen(const Text: String): Integer;
begin
with TLabel.Create(nil) do
try
Caption := Text;
Result := Width;
finally
Free;
end;
end;


function AskForPath(const Path: array of String): String;
var
AskForm: TForm;
PathCombo: TNewComboBox;
Len, i: Integer;
begin
Len := GetArrayLength(Path);
if Len = 0 then Exit;

AskForm := TForm.Create(nil);
with AskForm do

begin
Caption := 'Какую папку патчить?';
Position := poScreenCenter;

PathCombo := TNewComboBox.Create(AskForm);
with PathCombo do
begin
Parent := AskForm;
SetBounds(ScaleX(7), ScaleY(7), ScaleX(GetNormalTextLen(Path[0]) + 25), ScaleY(23));
Style := csDropDownList;
for i := 0 to Len-1 do Items.Add(Path[i]);
ItemIndex := 0;
end;

ClientWidth := ScaleX(PathCombo.Width + 16);
ClientHeight := ScaleY(77);

with TButton.Create(AskForm) do
begin
Parent := AskForm;
Left := ScaleX(7);
Top := ScaleY(PathCombo.Top + PathCombo.Height + 16);
Caption := SetupMessage(msgButtonOK);
ModalResult := mrOk;
end;
with TButton.Create(AskForm) do
begin
Parent := AskForm;
Left := ScaleX(90);
Top := ScaleY(PathCombo.Top + PathCombo.Height + 16);
Caption := SetupMessage(msgButtonCancel);
ModalResult := mrCancel;
end;

if ShowModal = mrOk then Result := PathCombo.Text;
end;
end;


function NextButtonClick(CurPageID: Integer): Boolean;
var
UnefInstallPath: String;
begin
if CurPageID = wpSelectComponents then
begin
if IsComponentSelected('zvuk') then
begin
UnefInstallPath := AskForPath( OnlyWithFolder('audio', OnlyVersionFolders( SearchForFolders( AddBackslash(RemoveBackslash( WizardDirValue() )) + 'res_mods') ) ) );
Result := UnefInstallPath <> '';
if not Result then MsgBox('No', mbError, MB_OK) else InstallPath := UnefInstallPath;
end else Result := True;
end else Result := True;
end;

Dodakaedr 25-11-2014 20:23 2435473

Цитата:

Цитата Larkod
теперь пишет ошибку »

У меня ничего не пишет

Larkod 25-11-2014 20:31 2435481

Вложений: 1
Dodakaedr, вот мой полный скрипт Файл 119271

Larkod 25-11-2014 20:54 2435500

Вот вся папка со скриптом https://drive.google.com/file/d/0B7Y...VnM/view?pli=1

Dodakaedr 25-11-2014 21:01 2435506

Вложений: 1
Larkod, :o зачем пичкать каждый пример в один код? Почитайте справку. Вот немного поправил.

Larkod 25-11-2014 21:03 2435507

Dodakaedr, я просто новичок, а справку я читал. Мне ориентироваться легче просто это пока черновик идет. А если я распихаю все по порядку, то мне тяжелее будет ошибки искать. Спасибо большое :)

Dodakaedr 25-11-2014 21:06 2435510

Цитата:

Цитата Larkod
А если я распихаю все по порядку, то мне тяжелее будет ошибки искать. »

Как раз на оборот. Будет проще. А так ошибки пол года бы исправляли.

Цитата:

Цитата Larkod
а справку я читал »

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

Larkod 25-11-2014 21:13 2435513

Dodakaedr , вопрос еще 1 сейчас поменял картинку в установщике с помощью "Редактора форм" теперь указывает на ошибку "procedure RedesignWizardForm;"

Скрытый текст
procedure RedesignWizardForm;
var
i: integer;
BtnPanel: TPanel;
BtnImage: TBitmapImage;

begin
ExtractTemporaryFile('logo.bmp')
BtnPanel:=TPanel.Create(WizardForm)
with BtnPanel do begin
Left:=0
Top:=315
Width:=179
Height:=46
Cursor:=crHand
OnClick:=@logoOnClick
Parent:=WizardForm
end;
BtnImage:=TBitmapImage.Create(WizardForm)
with BtnImage do begin
AutoSize:=True;
Enabled:=False;
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\logo.bmp')
Parent:=BtnPanel
end;

with WizardForm do
begin

end;

Dodakaedr 25-11-2014 21:19 2435515

Цитата:

Цитата Larkod
поменял картинку в установщике с помощью "Редактора форм" теперь указывает на ошибку "procedure RedesignWizardForm;" »

Это потому что дубль получился. Надо их соединить, заменяя одинаковые строки.

Larkod 25-11-2014 21:26 2435517

Уважаемый Dodakaedr, не подскажите для чайника более подробно, что надо сделать :)

Спасибо уже не надо чайник сам разобрался :)

studentvnau@vk 25-11-2014 23:10 2435581

Помогите если можете, искать уже обыскался страничку с ответом на вопрос о исправлении глюка с скролбарами, у меня была закладка, но виндовс скачал автообнову и полетел после этого... Теперь тоже найти немогу, если не трудно, скиньте ссылку на страницу, поиском искал, и так смотрел, никак не найду, выручите по человечески пожалуйста, не себе же делаем, людям:) А то сидят пока у меня без F.A.Q люди, а с этим глюком впиливать неохота. Заранее благодарен за помощь.

saurn 25-11-2014 23:43 2435599

Цитата:

Цитата studentvnau@vk
о исправлении глюка с скролбарами »

#2259

studentvnau@vk 26-11-2014 02:14 2435650

Вложений: 1
Цитата:

Цитата saurn
Цитата studentvnau@vk:
о исправлении глюка с скролбарами »
#2259 »

Спасибо за совет. И ещё...
Сразу видно лицо человека (уж простите, лучше быть "крысой", чем г*вном...), подсказали всем, как людям, а оно... Короче, смотрите сами, и думайте... Кто захочет, тот поймёт...
И потом он умного из себя строит, выдавая чужие советы за свои умственные выводы... Эх, как же убоги такие люди...

studentvnau@vk 26-11-2014 02:43 2435654

Цитата:

Цитата saurn
Цитата studentvnau@vk:
о исправлении глюка с скролбарами »
#2259 »

Кстати, не помогло.

kotyarko@fb 26-11-2014 17:35 2435900

studentvnau@vk, согласен, некрасиво, как-то. Подправил.

studentvnau@vk 26-11-2014 20:04 2435975

Цитата:

Цитата kotyarko@fb
согласен, некрасиво, как-то. Подправил. »

Вот это уже поступок взрослого человека, нужно уметь признавать свои ошибки.

Сантей 27-11-2014 02:12 2436133

El Sanchez, как правильно использовать создание ярлыка на панели задач Windows 7?
Код
Код:

const
    LOAD_LIBRARY_AS_DATAFILE = $2;

#define A = (Defined UNICODE) ? "W" : "A"

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';

/////////////////////////////////////////////////////////////////////////
function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;
//szFilename: full path to executable file
//IsPin: False - unpin to TaskBar, True - pin from TaskBar
var
    hInst: THandle;
    buf: array [0..255] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit;
    if IsPin then
    begin
        if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
        begin
            while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
            if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
        end;
        res := 5386;
    end else res := 5387;
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');
            colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
            for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
            begin
                colVerbs.Item[i].DoIt;
                Result := True;
                Break;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;



Код я вставил, а вот как вызвать функцию не знаю

saurn 27-11-2014 02:21 2436136

Цитата:

Цитата Сантей
как правильно использовать создание ярлыка на панели задач Windows 7? »

Скрытый текст
Код:

// закрепить ярлык
procedure CurStepChanged( CurStep: TSetupStep );
begin
    case CurStep of
        ssPostInstall: PinToTaskbar( имя исполняемого файла, включая полный путь, True );
    end;
end;

// удалить ярлык
procedure CurUninstallStepChanged( CurUninstallStep: TUninstallStep );
begin
    case CurUninstallStep of
        usUninstall: PinToTaskbar( имя исполняемого файла, включая полный путь, False );
    end;
end;


Dodakaedr 27-11-2014 10:10 2436214

Цитата:

Цитата Сантей
как правильно использовать создание ярлыка на панели задач Windows 7? »

Закрепление ярлыка на панели задач и в меню Пуск
Скрытый текст
Код:

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
    wpFinished:
        begin
      PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), True);
      PinToStartMenu(ExpandConstant('{app}\MyProg.exe'), True);
    end;
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
    case CurUninstallStep of
      usUninstall:
      begin
      PinToTaskbar(ExpandConstant('{app}\MyProg.exe'), False);
      PinToStartMenu(ExpandConstant('{app}\MyProg.exe'), False);
      end;
    end;
end;


studentvnau@vk 28-11-2014 09:41 2436773

Вопрос, как убрать фон у чекбоксов? при этом сами чекбоксы рисуются на WizardForm, инсталлятор на основе страниц, с png картинками вместо фона.

Larkod 28-11-2014 16:31 2436959

Вложений: 1
Всем привет. Помогите уже замучался понять не могу в чем ошибка.

Скрытый текст
Parameter "Name" include invalid characters.

It may only include alphanumeric character, underscores,slashes (/), and/or backslashes(\), may not start with a number and may not start or end with a slash or a backslash. Names 'not','and' and 'or' are reserved.


Это в Components.iss, где прописал пути Файл 119450

Larkod 28-11-2014 16:55 2436967

Вот ссылка на все файлы https://docs.google.com/file/d/0B7Ym...pOTzFaV0E/edit

studentvnau@vk 28-11-2014 17:32 2436980

Вложений: 1
Обосную поподробнее:
есть страница SelectDirPage (скрин ниже), на ней нужно активировать 2 чекбокса, для этих функций:
HTML код:

/////////-------------BACKUP---------/////////////
function BackupCheck_2(): Boolean;
begin
  If DeleteRadioButton.Checked then
begin
  DelTree(ExpandConstant('{app}\res_mods'), True, True, True);
  CreateDir(ExpandConstant('{app}\res_mods\{#Patch}'));
end;
end;

function BackupCheck_3(): Boolean;
begin
  If MoveRadioButton.Checked then
begin
  MoveDir(ExpandConstant('{app}\res_mods\{#Patch}\'),ExpandConstant('{app}\Darksoul Modpack\Backup\{#Patch}'));
  MoveDir(ExpandConstant('{app}\res_mods\xvm\'),ExpandConstant('{app}\Darksoul Modpack\Backup\xvm'));
  CreateDir(ExpandConstant('{app}\res_mods\{#Patch}'));
end;
end;
//////////----------BACKUP END----////////

Чекбокс задан картинкой в 8 состояниях, формат картинки png.
Ботва подключена.
Внимание вопрос: как заставить всё это взлететь?

TryRooM 28-11-2014 18:13 2436992

Вложений: 1
Larkod,
Пробуйте, измените так P_Mod

kotyarko@fb 28-11-2014 18:17 2436994

Цитата:

Цитата studentvnau@vk
function BackupCheck_2(): Boolean »

Такое компилятору не понравится. Лучше:
Код:

Procedure BackupCheck_2();

studentvnau@vk 28-11-2014 18:58 2437003

Цитата:

Цитата kotyarko@fb
Цитата studentvnau@vk:
function BackupCheck_2(): Boolean »
Такое компилятору не понравится. Лучше:
Код:
Procedure BackupCheck_2(); »

Без разницы, главное прикрутить

studentvnau@vk 28-11-2014 19:33 2437020

Ну так что, есть идеи у кого нить?

Dodakaedr 28-11-2014 20:27 2437037

Цитата:

Цитата studentvnau@vk
Ботва подключена. »

Ну так через нее и создайте. Пример

saurn 28-11-2014 23:04 2437117

Цитата:

Цитата kotyarko@fb
Такое компилятору не понравится. Лучше: »

С чего вдруг? И то и то: конструкции кода, позволяющие создавать подпрограммы. Основное отличие функции в том, что это процедура особого характера, возвращающая некое значение, результат. Если результат не нужен, можно использовать процедуру.

kotyarko@fb 28-11-2014 23:44 2437128

Цитата:

Цитата saurn
С чего вдруг? »

С того, что в кругах пользователей кореанрандома уже всем известно, как это применяется..
Код:

Procedure CurStepChanged(CurStep: TSetupStep);
begin
 if CurStep = чё-то там then
 begin
  BackupCheck_2();
 end;
end;

При таком раскладе, результат как раз и не нужен, + будет мусор в отладочном окне, типа "результат никогда не использовался". Как бы мелочь, а не приятно (ИМХО).

saurn 29-11-2014 01:06 2437148

Цитата:

Цитата kotyarko@fb
уже всем известно, как это применяется.. »

Применять можно по разному. А вот на счет ненужности результата - это, как посмотреть. Если та же MoveDir(...) не отработает по какой-либо причине, инсталлятор даже не пикнет, а пользователь останется без обещанного бекапа не подозревая об этом.

studentvnau@vk 29-11-2014 03:49 2437167

Цитата:

Цитата saurn
Если та же MoveDir(...) не отработает по какой-либо причине, инсталлятор даже не пикнет, а пользователь останется без обещанного бекапа не подозревая об этом. »

Было дело на юникоде, перешёл на анси:)

Larkod 29-11-2014 19:42 2437365

Всем привет. недавно задался таким вопросом. При установки модеов при наведении на данный мод показывается картинка, а как сделать, чтобы сразу две подряд показывало? Вот фрагмент как у меня
Скрытый текст
case TNewCheckListBox(Sender).ItemCaption[Index] of
'1. Прицел как у 40_tonn': UndefPic := '40_tonn.bmp';
else

Tco 03 29-11-2014 19:47 2437367

Всем привет.
Необходимо в .ini-файл записать только букву диска, куда была установлена программа. Как это можно реализовать, подскажите, пожалуйста.

kotyarko@fb 29-11-2014 22:23 2437429

Цитата:

Цитата studentvnau@vk
Было дело на юникоде, перешёл на анси »

SHFileOperation (ведь ты брал с корейки), нужно изменять для Юникода.
А если погуглить - спокойно можно найти ответ за секунду. http://krinkels.org/threads/shfileop...-unicode.2221/

Цитата:

Цитата Larkod
при наведении на данный мод показывается картинка, а как сделать, чтобы сразу две подряд показывало? »

Например, отредактировать это:
Цитата:

Цитата Larkod
'40_tonn.bmp' »

изображение.

kotyarko@fb 29-11-2014 22:42 2437438

Цитата:

Цитата Tco 03
Необходимо в .ini-файл записать только букву диска, куда была установлена программа. Как это можно реализовать, подскажите, пожалуйста. »

По примеру получения буквы каталога от Johny777 (http://forum.oszone.net/post-1998107-1061.html).
Скрытый текст
Код:

[INI]
Filename: "{app}\Directory.ini"; Section: "Letter"; Key: "Letter1"; String: {code:GetDirectoryLetter}; Flags: uninsdeleteentry

[*Code]
function GetFolderSize(FilePath: string): string;
var
  oFS: Variant;
begin
  oFS := CreateOleObject('Scripting.FileSystemObject');
  Result := oFS.GetDriveName(FilePath);
end;

Function GetDirectoryLetter(Where: String): String;
begin
 Where := ExpandConstant('{app}');
 Result := GetFolderSize(Where);
end;


Larkod 30-11-2014 00:40 2437479

kotyarko@fb, ты не понял. Чтобы было сразу 2 изображение ну типа этого '1. Прицел как у 40_tonn': UndefPic := '40_tonn.bmp' UndefPic := '40_tonn.bmp';

kotyarko@fb 30-11-2014 00:43 2437480

Цитата:

Цитата Larkod
ты не понял »

Как раз я всё понял. Ты хочешь, чтобы при наведении на компонент отображались два изображения. Так вот, я говорю о том, чтобы эти два изображения объединить в одно, и отображать его.
Если даже и выведутся два изображения (без изменения функции) - одно будет накладываться на второе (т.к. начальная точка - курсор). Без изменения самой функции, которая выводит изображение, вариантов больше нет.

saurn 30-11-2014 01:24 2437488

Цитата:

Цитата studentvnau@vk
Было дело на юникоде, перешёл на анси »

String меняйте на AnsiString, PChar на PAnsiChar
--------------------------------------------------------------
Цитата:

Цитата Tco 03
Необходимо в .ini-файл записать только букву диска, куда была установлена программа. »

Код:

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


[Code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
    case CurStep of
        ssPostInstall: SetIniString( 'Setings', 'DriveLetter', ExtractFileDrive( ExpandConstant( '{app}' ) ), ExpandConstant( '{app}\config.ini' ) );
    end;
end;


diman_21Ru 01-12-2014 16:31 2438085

В скрипте есть функция По нажатию на компонент выходить соответствующий звук но при нажатие на другой компонент звук проигрывается и там.

#include "Modules\sound modul.iss"

[Setup]
AppName=Sound
AppVerName=1.0
DefaultDirName={pf}\Sound
OutputDir=Output

RawDataResource=SndA:bugreporter_succeeded.wav |SndB:buttonclickreleaseo.WAV

[Components]
Name: "main"; Description: "Main Files";
Name: "main\a"; Description: "A Files";
Name: "main\b"; Description: "B Files";

[code]
procedure InitializeWizard();
begin
IndexLast := -1;

pSoundMemory_A := GetResourceSoundAddr('_IS_SNDA');
pSoundMemory_B := GetResourceSoundAddr('_IS_SNDB');

WizardForm.ComponentsList.OnClickCheck := @ComponentsOnClickCheck;
end;

saurn 02-12-2014 09:09 2438406

Вложений: 1
diman_21Ru

saneksanek 02-12-2014 09:35 2438422

Здрасте,может кто дать код,которые будет удалять данную программу если ее повторна устанавливают.То есть пользователь установил программу,и если пользователь снова запустить setup то вылезет окно на удаление программы,и если пользователь откажется то setup закроется,а если согласится произойдет деинсталляция после чего продолжится установка.

saurn 02-12-2014 10:34 2438463

Цитата:

Цитата saneksanek
будет удалять данную программу если ее повторна устанавливают »

#715

--------------------------------------------------------------------------------
В расширенной версии возможен и такой способ:
Код:

procedure CurStepChanged( CurStep: TSetupStep );
begin
    case CurStep of
        ssInstall: PerformPreviousUninstall( WizardForm.ProgressGauge );
    end;
end;


saneksanek 02-12-2014 13:30 2438572

Цитата:

Цитата saurn
#715 »

saurn, А реализовать под сгенерированный AppId не как нельзя?

saneksanek 02-12-2014 14:39 2438599

И еще вопрос,есть группа файлов с разной структурой,но название файла у всех одно.Возможно-ли добавь к этим файлам версии чтобы при установке если данный файл с большей версией уже был только что установлен то точно такой же файл,но с меньшей версией не устанавливался.

saurn 03-12-2014 06:32 2438904

Цитата:

Цитата saneksanek
А реализовать под сгенерированный AppId не как нельзя? »

Код:

RegQueryStringValue( HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + ExpandConstant( '{#SetupSetting( "AppId" )}_is1' ), 'UninstallString', Buff )

gvshil 03-12-2014 15:01 2439121

Подскажите, пожалуйста, как реализовать следующее:
Как при удалении программы удалить используемую системой DLL без перезагрузки системы?

kotyarko@fb 03-12-2014 17:19 2439192

Цитата:

Цитата gvshil
Как при удалении программы удалить используемую системой DLL без перезагрузки системы? »

Код:

UnloadDLL(ExpandConstant('*.dll'));
DeleteFile(ExpandConstant('*.dll'));

Это имеется ввиду?

gvshil 03-12-2014 17:53 2439205

kotyarko@fb
Можно целиком код?

kotyarko@fb 03-12-2014 18:21 2439214

Цитата:

Цитата gvshil
Можно целиком код? »

Ну так больше ничего и не надо. Просто вставить в то место, откуда он должен будет выгружать и удалять.
Код:

[*Code]
Procedure CurPageChanged(CurPageID: Integer);
begin
 if CurPageID = wpFinished then
 begin
  UnloadDLL(ExpandConstant('{app}\library.dll'));
  DeleteFile(ExpandConstant('{app}\library.dll'));
 end;
end;


gvshil 03-12-2014 18:39 2439222

kotyarko@fb
К сожалению, не удаляется dll - ка....
А нет, все ок, просто деинсталятор запускал из под Total Commander и поэтому библиотека не удалялась.

svs23 07-12-2014 20:59 2440920

помогите с кодом...
суть: при наведении мыши на пункт в меню выбора файлов для установки показывать доп. информацию и скрин в отдельном окне

со скрином разобрался, помогите добавить текст...

и еще вопрос, у меня почему-то картинки прозрачные какие-то, как исправить? (вопрос решен ALPHA_BLEND_LEVEL = 255; ) спс saneksanek

saneksanek 07-12-2014 23:50 2440983

svs23, А вы не думали что текст уже по верх скриншота?

Цитата:

Цитата svs23
и еще вопрос, у меня почему-то картинки прозрачные какие-то, как исправить? »

В своем коде измените параметры
Код:

ALPHA_BLEND_LEVEL = 255;

svs23 08-12-2014 07:04 2441040

Цитата:

Цитата saneksanek
А вы не думали что текст уже по верх скриншота?

так что это банально в то же пеинте (фотошопе) сделано?! просто на картинке текст написали? я то думал что это в скрипте прописали.... ах ах
или я что-то не так понял из вашей фразы?!

p.s: за ALPHA_BLEND_LEVEL = 255; спс

очередной вопрос:
возможно где-нибудь, например, в [Setup] или #define или еще где-то прописать константу версии (название папки в res_mods) игры (в данном случае 0.9.4) чтобы потом в коде ссылаться на нее {...}, а не исправлять код после каждого обновления?

решено: Код:
#define ModVer "0.9.4"
Вызывается {#ModVer}
спс Dodakaedr saurn

Dodakaedr 08-12-2014 10:40 2441095

Цитата:

Цитата svs23
возможно где-нибудь, например, в [Setup] или #define или еще где-то прописать константу версии »

Код:

#define ModVer "0.9.4"
Вызывается {#ModVer}

svs23 08-12-2014 11:36 2441130

Цитата:

Цитата Dodakaedr
Вызывается {#ModVer} »

вылетает ошибка

Dodakaedr 08-12-2014 11:51 2441141

svs23, Покажите строку где вызываете {#ModVer}. У меня все работает
Код:

#define ModVer "0.9.4"
//====={ Сюда прописываешь те файлы и папки которые закинул в Mods }=====\\
[Types]
Name: custom; Description: Full installation; Flags: iscustom

[Components]
Name: VGMP; Description: {#ModVer}; Types: custom; Flags: fixed


saurn 08-12-2014 11:53 2441143

Цитата:

Цитата svs23
вылетает ошибка »

Константа ModVer должна быть объявлена перед подключение Components.iss
Код:

#define ModVer "0.9.4"
#include Components.iss


svs23 08-12-2014 12:01 2441146

Цитата:

Цитата saurn
Константа ModVer должна быть объявлена перед подключение Components.iss
Код:
#define ModVer "0.9.4"
#include Components.iss »

помогло... спс

saurn 08-12-2014 16:52 2441326

Цитата:

Цитата svs23
добавить 4 пункт в BackUpPage »

Если еще актуально:
Скрытый текст
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp


[CustomMessages]
MSG_01=Резервные копии
MSG_02=
MSG_03=Во избежание проблем совместимости и конфликтов между модификациями рекомендуется удалить уже установленные на данный момент в игровом клиенте.%n%nВыберите необходимый пункт из представленных. При этом будет очищено содержимое папки "res_mods\0.9.4, удалена папка "res_mods\xvm" или созданы резервные копии Ваших файлов.
MSG_04=Удалить файлы
MSG_05=Сделать резервную копию файлов
MSG_06=Обновить существующие файлы
MSG_07=Ничего не трогать
MSG_08=Установщик удалит все файлы в папках.
MSG_09=Установщик сделает резервную копию всех файлов в папках.
MSG_10=Установщик создаст копию только заменяемых файлов.
MSG_11=Установщик оставит всё как есть.


[code]
var
    BackupOptionsPage: TWizardPage;
    ArrayRadio: array of TRadioButton;


function CreateBackupOptionsPage( const nPageId: Integer ): TWizardPage;
var
    i: Integer;
    Len: Integer;
begin
    BackupOptionsPage := CreateCustomPage( nPageId, CustomMessage( 'MSG_01' ), CustomMessage( 'MSG_02' ) );

    with BackupOptionsPage do
    begin
        with TNewStaticText.Create( nil ) do
        begin
            Parent := Surface;
            SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( 417 ), ScaleY( 98 ) );
            AutoSize := False;
            Caption := CustomMessage( 'MSG_03' );
            Transparent := True;
            WordWrap := True;
        end;

        SetArrayLength( ArrayRadio, 4 );
        Len := GetArrayLength( ArrayRadio ) - 1;

        for i := 0 to Len do
        begin
            ArrayRadio[i] := TRadioButton.Create( nil );
            with ArrayRadio[i] do
            begin
                Parent := Surface;
                SetBounds( ScaleX( 0 ), ScaleY( 102 + i * 32 ), ScaleX( 417 ), ScaleY( 17 ) );
                Font.Style := [fsBold];

                case i of
                    0: Caption := CustomMessage( 'MSG_04' );
                    1:
                    begin
                        Caption := CustomMessage( 'MSG_05' );
                        Checked := True;
                    end;
                    2: Caption := CustomMessage( 'MSG_06' );
                    Len: Caption := CustomMessage( 'MSG_07' );
                end;
            end;
        end;

        for i := 0 to 3 do
        with TNewStaticText.Create( nil ) do
        begin
            Parent := Surface;
            SetBounds( ScaleX( 17 ), ScaleY( 118 + i * 32 ), ScaleX( 417 ), ScaleY( 17 ) );

            case i of
                0: Caption := CustomMessage( 'MSG_08' );
                1: Caption := CustomMessage( 'MSG_09' );
                2: Caption := CustomMessage( 'MSG_10' );
                3: Caption := CustomMessage( 'MSG_11' );
            end;
        end;
    end;

    Result := BackupOptionsPage.ID;
end;


procedure InitializeWizard();
begin
    CreateBackupOptionsPage( wpSelectDir );
end;


//Проверить, отмечена ли нужная радио кнопка // для теста
function NextButtonClick( CurPageID: Integer ): Boolean;
begin
    case PageFromID( CurPageID ) of
        BackupOptionsPage: if ArrayRadio[1].Checked then //По индексу от 0 до 4
                           
MsgBox( ArrayRadio[1].Caption, mbInformation, MB_OK );
    end;

    Result := True;
end;


К функциям, думаю, привяжете сами.

svs23 08-12-2014 17:12 2441339

помогите исправить ошибку
код
Цитата:

#define ModVer "0.9.4"
#include "SHFileOperation.iss"



[Setup]


[code]
var
BackupPage: TWizardPage;
DeleteRadioButton, MoveRadioButton, Move2RadioButton, NoneRadioButton: TNewRadioButton;

const
BackupDescText =
'Во избежание проблем совместимости и конфликтов между модификациями рекомендуется удалить уже установленные на данный момент в игровом клиенте.' #13#13 'Выберите необходимый пункт из представленных. При этом будет очищено содержимое папки "res_mods\{#ModVer}, удалена папка "res_mods\xvm" или созданы резервные копии Ваших файлов.';
DeleteDescText =
'Установщик удалит все файлы в папках.';
MoveDescText =
'Установщик сделает резервную копию всех файлов в папках.';
Move2DescText =
'Установщик сделает резервную копию только заменяемых файлов в папках.';
NoneDescText =
'Установщик оставит всё как есть.';

function BackupCheck_1(): Boolean;
var
BackupDescLabel, DeleteDescLabel, MoveDescLabel, Move2DescLabel, NoneDescLabel: TLabel;
begin
BackupPage:=CreateCustomPage(wpWelcome, 'Создание резервных копий файлов перед установкой', 'Пожалуйста, прочтите следующую важную информацию перед тем, как продолжить.');
BackupDescLabel:=TLabel.Create(WizardForm);
BackupDescLabel.Parent:=BackupPage.Surface;
BackupDescLabel.Left:=0;
BackupDescLabel.Top:=0;
BackupDescLabel.Width:=BackupPage.SurfaceWidth;
BackupDescLabel.Height:=80;
BackupDescLabel.AutoSize:=False;
BackupDescLabel.Wordwrap:=True;
BackupDescLabel.Caption:=BackupDescText;

DeleteRadioButton:=TNewRadioButton.Create(WizardForm);
DeleteRadioButton.Parent:=BackupPage.Surface;
DeleteRadioButton.Checked:=False;
DeleteRadioButton.Top:=85;
DeleteRadioButton.Width:=BackupPage.SurfaceWidth;
DeleteRadioButton.Font.Style:=[fsBold];
DeleteRadioButton.Font.Size:=9;
DeleteRadioButton.Caption:='Удалить файлы'
DeleteDescLabel:=TLabel.Create(WizardForm);
DeleteDescLabel.Parent:=BackupPage.Surface;
DeleteDescLabel.Left:=18;
DeleteDescLabel.Top:=DeleteRadioButton.Top + DeleteRadioButton.Height + 4;
DeleteDescLabel.Width:=BackupPage.SurfaceWidth;
DeleteDescLabel.Height:=40;
DeleteDescLabel.AutoSize:=False;
DeleteDescLabel.Wordwrap:=True;
DeleteDescLabel.Caption:=DeleteDescText;

MoveRadioButton:=TNewRadioButton.Create(WizardForm);
MoveRadioButton.Parent:=BackupPage.Surface;
MoveRadioButton.Checked:=False;
MoveRadioButton.Top:=125;
MoveRadioButton.Width:=BackupPage.SurfaceWidth;
MoveRadioButton.Font.Style:=[fsBold];
MoveRadioButton.Font.Size:=9;
MoveRadioButton.Caption:='Сделать резервную копию файлов'
MoveDescLabel:=TLabel.Create(WizardForm);
MoveDescLabel.Parent:=BackupPage.Surface;
MoveDescLabel.Left:=18;
MoveDescLabel.Top:=MoveRadioButton.Top + MoveRadioButton.Height + 4;
MoveDescLabel.Width:=BackupPage.SurfaceWidth;
MoveDescLabel.Height:=40;
MoveDescLabel.AutoSize:=False;
MoveDescLabel.Wordwrap:=True;
MoveDescLabel.Caption:=MoveDescText;

NoneRadioButton:=TNewRadioButton.Create(WizardForm);
NoneRadioButton.Parent:=BackupPage.Surface;
NoneRadioButton.Checked:=True;
NoneRadioButton.Top:=165;
NoneRadioButton.Width:=BackupPage.SurfaceWidth;
NoneRadioButton.Font.Style:=[fsBold];
NoneRadioButton.Font.Size:=9;
NoneRadioButton.Caption:='Обновить существующие файлы'
NoneDescLabel:=TLabel.Create(WizardForm);
NoneDescLabel.Parent:=BackupPage.Surface;
NoneDescLabel.Left:=18;
NoneDescLabel.Top:=Move2RadioButton.Top + Move2RadioButton.Height + 4;
NoneDescLabel.Width:=BackupPage.SurfaceWidth;
NoneDescLabel.Height:=40;
NoneDescLabel.AutoSize:=False;
NoneDescLabel.Wordwrap:=True;
NoneDescLabel.Caption:=Move2DescText;

NoneRadioButton:=TNewRadioButton.Create(WizardForm);
NoneRadioButton.Parent:=BackupPage.Surface;
NoneRadioButton.Checked:=False;
NoneRadioButton.Top:=205;
NoneRadioButton.Width:=BackupPage.SurfaceWidth;
NoneRadioButton.Font.Style:=[fsBold];
NoneRadioButton.Font.Size:=9;
NoneRadioButton.Caption:='Ничего не трогать'
NoneDescLabel:=TLabel.Create(WizardForm);
NoneDescLabel.Parent:=BackupPage.Surface;
NoneDescLabel.Left:=18;
NoneDescLabel.Top:=NoneRadioButton.Top + NoneRadioButton.Height + 4;
NoneDescLabel.Width:=BackupPage.SurfaceWidth;
NoneDescLabel.Height:=40;
NoneDescLabel.AutoSize:=False;
NoneDescLabel.Wordwrap:=True;
NoneDescLabel.Caption:=NoneDescText;
end;

function BackupCheck_2(): Boolean;
begin
If DeleteRadioButton.Checked then
begin
DelTree(ExpandConstant('{app}\res_mods\{#ModVer}'), True, True, True);
DelTree(ExpandConstant('{app}\res_mods\xvm'), True, True, True);
CreateDir(ExpandConstant('{app}\res_mods\{#ModVer}'));
end;
end;

function BackupCheck_3(): Boolean;
begin
If MoveRadioButton.Checked then
begin
MoveDir(ExpandConstant('{app}\res_mods\{#ModVer}\'),ExpandConstant('{app}\res_mods\backup\{#ModVer}' ));
MoveDir(ExpandConstant('{app}\res_mods\xvm\'),ExpandConstant('{app}\res_mods\backup\xvm'));
CreateDir(ExpandConstant('{app}\res_mods\{#ModVer}'));
DelTree(ExpandConstant('{app}\res_mods\xvm'), True, True, True);
end;
end;

function BackupCheck_4(): Boolean;
var
srcFile, destFile: string;
basePath, shortPath: string;
begin
If Move2RadioButton.Checked then
begin
basePath := ExpandConstant('{app}\res_mods');
srcFile := ExpandConstant(CurrentFileName);
shortPath := srcFile;
StringChangeEx(shortPath, basePath, '', True);
destFile := ExpandConstant('{app}\res_mods\Backup') + shortPath;
ForceDirectories(ExtractFilePath(destFile));
MoveFile(PChar(srcFile), PChar(destFile));
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssInstall then
begin
BackupCheck_2();
BackupCheck_3();
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
CopyDir(ExpandConstant('{app}\res_mods\Backup\'),ExpandConstant('{app}\res_mods'));
DelTree(ExpandConstant('{app}\res_mods\Backup'), True, True, True);
end;
end;

procedure InitializeWizard();
begin
WizardForm.FileNameLabel.Visible:= False;
InitInfo();
BackupCheck_1();
end;


вот сама ошибка при запуске .ехе



Цитата:

Цитата saurn
Если еще актуально:

К функциям, думаю, привяжете сами. »

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

saurn 08-12-2014 19:17 2441404

svs23, в строке 268 обращение к элементу Move2RadioButton, которого не существует. Внимательно пересмотрите весь скрипт.

svs23 08-12-2014 19:33 2441411

Цитата:

Цитата saurn
svs23, в строке 268 обращение к элементу Move2RadioButton, которого не существует. Внимательно пересмотрите весь скрипт. »

в том то и проблема... я первый раз делаю установщик...
а как создать этот элемент Move2RadioButton?
вроде везде добавил Move2
и
Скрытый текст

NoneRadioButton:=TNewRadioButton.Create(WizardForm);
NoneRadioButton.Parent:=BackupPage.Surface;
NoneRadioButton.Checked:=True;
NoneRadioButton.Top:=165;
NoneRadioButton.Width:=BackupPage.SurfaceWidth;
NoneRadioButton.Font.Style:=[fsBold];
NoneRadioButton.Font.Size:=9;
NoneRadioButton.Caption:='Обновить существующие файлы'
NoneDescLabel:=TLabel.Create(WizardForm);
NoneDescLabel.Parent:=BackupPage.Surface;
NoneDescLabel.Left:=18;
NoneDescLabel.Top:=Move2RadioButton.Top + Move2RadioButton.Height + 4;
NoneDescLabel.Width:=BackupPage.SurfaceWidth;
NoneDescLabel.Height:=40;
NoneDescLabel.AutoSize:=False;
NoneDescLabel.Wordwrap:=True;
NoneDescLabel.Caption:=Move2DescText;

х.з что еще надо!
плиз хелп

kotyarko@fb 09-12-2014 01:37 2441549

Цитата:

Цитата svs23
а как создать этот элемент Move2RadioButton? »

Код:

[*Code]
var
 Move2RadioButton: TNewRadioButton;

Procedure BackupCheck_1(): Boolean;
begin
 Move2RadioButton := TNewRadioButton.Create(WizardForm);
 with Move2RadioButton do
 begin
  Parent := BackupPage.Surface;
  Left := ..;
  Top := ..;
  Width := ..;
  Height := ..;
  WordWrap := True;
  Caption := 'название';
 end;
end;


Цитата:

Цитата svs23
вроде везде добавил Move2 »

Из вашего примера:
Код:

NoneDescLabel.Top:=Move2RadioButton.Top + Move2RadioButton.Height + 4;
NoneDescLabel.Caption:=Move2DescText;

Здесь вы присваиваете значению Top лейбла NoneDescLabel координату положения по высоте + саму высоту Move2RadioButton (которого, подозреваю, в коде вообще нет). Это не значит создать.

svs23 09-12-2014 09:20 2441612

Цитата:

Цитата kotyarko@fb
Здесь вы присваиваете значению Top лейбла NoneDescLabel координату положения по высоте + саму высоту Move2RadioButton (которого, подозреваю, в коде вообще нет). Это не значит создать. »

скопировать объект ума хватило, а вот переименовать.... пропустил... спс

svs23 09-12-2014 10:10 2441626

и последний вопрос:как переименовать и изменить путь установки unins000.dat и unins000.exe

kotyarko@fb 09-12-2014 10:37 2441643

Цитата:

Цитата svs23
как переименовать и изменить путь установки unins000.dat и unins000.exe »

Переименовать примерно так:
Код:

[*Code]
Procedure CurStepChanged(CurStep: TSetupStep);
begin
 if CurStep = ssPostInstall then
 begin
  RenameFile(ExpandConstant('{app}\unins000.exe'), ExpandConstant('{app}\uninstall.exe'))
  RenameFile(ExpandConstant('{app}\unins000.dat'), ExpandConstant('{app}\uninstall.dat'))
 end;
end;

А изменить путь так:
Код:

[Setup]
UninstallFilesDir={app}\папка


svs23 09-12-2014 10:40 2441645

:( рано обрадовался... была ошибка


прописал в [Files]
Source: BeforeInstall: BackupCheck_4();

теперь вот такая ошибка... тут уже не пойму что делать!?


сам бэкап

Цитата:

#define ModVer "0.9.4"
#include "SHFileOperation.iss"

[code]
function MoveFile(const srcFile, destFile: PChar): Integer;
external 'MoveFileA@kernel32.dll stdcall';

var
BackupPage: TWizardPage;
DeleteRadioButton, MoveRadioButton, Move2RadioButton, NoneRadioButton: TNewRadioButton;

const
BackupDescText =
'Во избежание проблем совместимости и конфликтов между модификациями рекомендуется удалить уже установленные на данный момент в игровом клиенте.' #13#13 'Выберите необходимый пункт из представленных. При этом будет очищено содержимое папки "res_mods\{#ModVer}, удалена папка "res_mods\xvm" или созданы резервные копии Ваших файлов.';
DeleteDescText =
'Установщик удалит все файлы в папках.';
MoveDescText =
'Установщик сделает резервную копию всех файлов в папках.';
Move2DescText =
'Установщик сделает резервную копию только заменяемых файлов в папках.';
NoneDescText =
'Установщик оставит всё как есть.';

function BackupCheck_1(): Boolean;
var
BackupDescLabel, DeleteDescLabel, MoveDescLabel, Move2DescLabel, NoneDescLabel: TLabel;
begin
BackupPage:=CreateCustomPage(wpWelcome, 'Создание резервных копий файлов перед установкой', 'Пожалуйста, прочтите следующую важную информацию перед тем, как продолжить.');
BackupDescLabel:=TLabel.Create(WizardForm);
BackupDescLabel.Parent:=BackupPage.Surface;
BackupDescLabel.Left:=0;
BackupDescLabel.Top:=0;
BackupDescLabel.Width:=BackupPage.SurfaceWidth;
BackupDescLabel.Height:=80;
BackupDescLabel.AutoSize:=False;
BackupDescLabel.Wordwrap:=True;
BackupDescLabel.Caption:=BackupDescText;

DeleteRadioButton:=TNewRadioButton.Create(WizardForm);
DeleteRadioButton.Parent:=BackupPage.Surface;
DeleteRadioButton.Checked:=False;
DeleteRadioButton.Top:=85;
DeleteRadioButton.Width:=BackupPage.SurfaceWidth;
DeleteRadioButton.Font.Style:=[fsBold];
DeleteRadioButton.Font.Size:=9;
DeleteRadioButton.Caption:='Удалить файлы'
DeleteDescLabel:=TLabel.Create(WizardForm);
DeleteDescLabel.Parent:=BackupPage.Surface;
DeleteDescLabel.Left:=18;
DeleteDescLabel.Top:=DeleteRadioButton.Top + DeleteRadioButton.Height + 4;
DeleteDescLabel.Width:=BackupPage.SurfaceWidth;
DeleteDescLabel.Height:=40;
DeleteDescLabel.AutoSize:=False;
DeleteDescLabel.Wordwrap:=True;
DeleteDescLabel.Caption:=DeleteDescText;

MoveRadioButton:=TNewRadioButton.Create(WizardForm);
MoveRadioButton.Parent:=BackupPage.Surface;
MoveRadioButton.Checked:=False;
MoveRadioButton.Top:=125;
MoveRadioButton.Width:=BackupPage.SurfaceWidth;
MoveRadioButton.Font.Style:=[fsBold];
MoveRadioButton.Font.Size:=9;
MoveRadioButton.Caption:='Сделать резервную копию файлов'
MoveDescLabel:=TLabel.Create(WizardForm);
MoveDescLabel.Parent:=BackupPage.Surface;
MoveDescLabel.Left:=18;
MoveDescLabel.Top:=MoveRadioButton.Top + MoveRadioButton.Height + 4;
MoveDescLabel.Width:=BackupPage.SurfaceWidth;
MoveDescLabel.Height:=40;
MoveDescLabel.AutoSize:=False;
MoveDescLabel.Wordwrap:=True;
MoveDescLabel.Caption:=MoveDescText;

Move2RadioButton:=TNewRadioButton.Create(WizardForm);
Move2RadioButton.Parent:=BackupPage.Surface;
Move2RadioButton.Checked:=True;
Move2RadioButton.Top:=165;
Move2RadioButton.Width:=BackupPage.SurfaceWidth;
Move2RadioButton.Font.Style:=[fsBold];
Move2RadioButton.Font.Size:=9;
Move2RadioButton.Caption:='Обновить существующие файлы'
Move2DescLabel:=TLabel.Create(WizardForm);
Move2DescLabel.Parent:=BackupPage.Surface;
Move2DescLabel.Left:=18;
Move2DescLabel.Top:=Move2RadioButton.Top + Move2RadioButton.Height + 4;
Move2DescLabel.Width:=BackupPage.SurfaceWidth;
Move2DescLabel.Height:=40;
Move2DescLabel.AutoSize:=False;
Move2DescLabel.Wordwrap:=True;
Move2DescLabel.Caption:=Move2DescText;

NoneRadioButton:=TNewRadioButton.Create(WizardForm);
NoneRadioButton.Parent:=BackupPage.Surface;
NoneRadioButton.Checked:=False;
NoneRadioButton.Top:=205;
NoneRadioButton.Width:=BackupPage.SurfaceWidth;
NoneRadioButton.Font.Style:=[fsBold];
NoneRadioButton.Font.Size:=9;
NoneRadioButton.Caption:='Ничего не трогать'
NoneDescLabel:=TLabel.Create(WizardForm);
NoneDescLabel.Parent:=BackupPage.Surface;
NoneDescLabel.Left:=18;
NoneDescLabel.Top:=NoneRadioButton.Top + NoneRadioButton.Height + 4;
NoneDescLabel.Width:=BackupPage.SurfaceWidth;
NoneDescLabel.Height:=40;
NoneDescLabel.AutoSize:=False;
NoneDescLabel.Wordwrap:=True;
NoneDescLabel.Caption:=NoneDescText;
end;

function BackupCheck_2(): Boolean;
begin
If DeleteRadioButton.Checked then
begin
DelTree(ExpandConstant('{app}\res_mods\{#ModVer}'), True, True, True);
DelTree(ExpandConstant('{app}\res_mods\xvm'), True, True, True);
CreateDir(ExpandConstant('{app}\res_mods\{#ModVer}'));
end;
end;

function BackupCheck_3(): Boolean;
begin
If MoveRadioButton.Checked then
begin
MoveDir(ExpandConstant('{app}\res_mods\{#ModVer}\'),ExpandConstant('{app}\res_mods\backup\{#ModVer}' ));
MoveDir(ExpandConstant('{app}\res_mods\xvm\'),ExpandConstant('{app}\res_mods\backup\xvm'));
CreateDir(ExpandConstant('{app}\res_mods\{#ModVer}'));
DelTree(ExpandConstant('{app}\res_mods\xvm'), True, True, True);
end;
end;

function BackupCheck_4(): Boolean;
var
srcFile, destFile: string;
basePath, shortPath: string;
begin
If Move2RadioButton.Checked then
begin
basePath := ExpandConstant('{app}\res_mods');
srcFile := ExpandConstant(CurrentFileName);
shortPath := srcFile;
StringChangeEx(shortPath, basePath, '', True);
destFile := ExpandConstant('{app}\res_mods\Backup') + shortPath;
ForceDirectories(ExtractFilePath(destFile));
MoveFile(PChar(srcFile), PChar(destFile));
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssInstall then
begin
BackupCheck_2();
BackupCheck_3();
BackupCheck_4();
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
CopyDir(ExpandConstant('{app}\res_mods\Backup\'),ExpandConstant('{app}\res_mods'));
DelTree(ExpandConstant('{app}\res_mods\Backup'), True, True, True);
end;
end;

Dodakaedr 09-12-2014 10:41 2441647

Цитата:

Цитата svs23
как переименовать »

Скрытый текст
Код:

#define UninstallName "uninstall"


[Setup]
AppId={{6A9D1594-7791-48f5-9CAA-DE9BCB968320}


[*Code]

procedure RewritingUninstallData();
var
    OldUninstallDataFile, OldUninstallString, NewUninstallDataFile, NewUninstallString,
    RegUninstallDataFile, RegUninstallString, RegQuietUninstallString, AppID: String;
begin
    OldUninstallDataFile := ExpandConstant('{uninstallexe}');
    StringChange(OldUninstallDataFile, '.exe', '.dat');
    OldUninstallString := ExpandConstant('{uninstallexe}');

    NewUninstallDataFile := ExpandConstant('{app}\{#UninstallName}.dat');
    NewUninstallString := ExpandConstant('{app}\{#UninstallName}.exe');

    if FileExists(NewUninstallDataFile) or FileExists(NewUninstallString) then
    begin
        DeleteFile(NewUninstallDataFile);
        DeleteFile(NewUninstallString);
    end;

    RenameFile(OldUninstallDataFile, NewUninstallDataFile);
    RenameFile(OldUninstallString, NewUninstallString);

    AppID := ExpandConstant('{#SetupSetting("AppId")}') + '_is1';

    RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + AppID, 'UninstallDataFile', RegUninstallDataFile);
    RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + AppID, 'UninstallString', RegUninstallString);
    RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + AppID, 'QuietUninstallString', RegQuietUninstallString);

    StringChange(RegUninstallDataFile, OldUninstallDataFile, NewUninstallDataFile);
    StringChange(RegUninstallString, OldUninstallString, NewUninstallString);
    StringChange(RegQuietUninstallString, OldUninstallString, NewUninstallString);

    RegWriteStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + AppID, 'UninstallDataFile', RegUninstallDataFile);
    RegWriteStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + AppID, 'UninstallString', RegUninstallString);
    RegWriteStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + AppID, 'QuietUninstallString', RegQuietUninstallString);
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
    case CurStep of
        ssDone: RewritingUninstallData();
    end;
end;


svs23 09-12-2014 10:44 2441649

Цитата:

Цитата kotyarko@fb
Переименовать примерно так: »

Цитата:

Цитата kotyarko@fb
А изменить путь так: »

спс...

Dodakaedr,
Цитата:

Цитата Dodakaedr
как переименовать »

спс, но для меня это сложновато ;)

saurn 09-12-2014 10:46 2441652

svs23, kotyarko@fb, просто переименовать недостаточно. В этом случае запись в удалении программ будут вести в никуда. Dodakaedr предложил верный вариант. Где-то на форуме была еще пара примеров, но суть везде одна.

kotyarko@fb 09-12-2014 10:46 2441653

Цитата:

Цитата svs23
прописал в [Files]
Source: BeforeInstall: BackupCheck_4(); »

С какой целью?

И с какой целью вы используете переменную CurrentFileName (которая определяет обрабатываемый в данный момент файл, при установке)?

Dodakaedr 09-12-2014 10:48 2441654

Цитата:

Цитата svs23
спс, но для меня это сложновато »

но так будет правильнее

kotyarko@fb 09-12-2014 10:49 2441656

Цитата:

Цитата saurn
В этом случае ярлык деинсталятора(если есть) и запись в удалении программ будут вести в никуда. »

Ну тогда ещё реестр можно подправить:
Код:

RegWriteStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\Программа_is1','UninstallString', ExpandConstant('{app}\uninstall.exe'));

svs23 09-12-2014 10:52 2441659

Цитата:

Цитата kotyarko@fb
С какой целью?
И с какой целью вы используете переменную CurrentFileName (которая определяет обрабатываемый в данный момент файл, при установке)? »

нашел на одном из форумов код для создания резервных копий только для заменяемых файлов
сам код
Цитата:

procedure CreateBackup;
var
srcFile, destFile: string;
basePath, shortPath: string;
begin
if IsTaskSelected('src') then
begin
basePath := ExpandConstant('{app}\res_mods');
srcFile := ExpandConstant(CurrentFileName);
shortPath := srcFile;
StringChangeEx(shortPath, basePath, '', True);
destFile := ExpandConstant('{app}\res_mods\Backup') + shortPath;
ForceDirectories(ExtractFilePath(destFile));
MoveFile(PChar(srcFile), PChar(destFile));
end;
end;


так вот и пытаюсь его приспособить...

ранее, когда он был у меня в коде только один без этих BackupCheck, работал без проблем, а теперь....

Цитата:

Цитата saurn
svs23, kotyarko@fb, просто переименовать недостаточно. В этом случае запись в удалении программ будут вести в никуда. Dodakaedr предложил верный вариант. Где-то на форуме была еще пара примеров, но суть везде одна. »

Цитата:

Цитата Dodakaedr
но так будет правильнее »

спс, но я отключил отображение в УСТАНОВЛЕННЫХ ПРОГРАММАХ моего установщика, удаление через ярлык на рабочем столе или из папки где установлен

saurn 09-12-2014 10:58 2441662

svs23, если хотите использовать BackupCheck_4() в таком виде в BeforeInstall, то тогда function замените на procedure. И читайте в справке о использовании внешних и встроенных функций.
Цитата:

Цитата kotyarko@fb
Ну тогда ещё реестр можно подправить: »

Да. Ну и еще пару записей в реестре.

kotyarko@fb 09-12-2014 11:04 2441667

Цитата:

Цитата saurn
Да. Ну и еще пару записей в реестре. »

Хм.. значит, невнимательно просматривал. Буду знать.

svs23 09-12-2014 11:12 2441674

Цитата:

Цитата saurn
svs23, если хотите использовать BackupCheck_4() в таком виде в BeforeInstall, то тогда function замените на procedure. И читайте в справке о использовании внешних и встроенных функций. »

спс. вроде помогло, проверяю....

всем ОГРОМНОЕ спс за помощь, все заработало так как я хочу...
теперь еще unins домучаю и все, с меня хватит
еще раз всем спс :)

svs23 09-12-2014 11:44 2441686

последняя, надеюсь, просьба :)
помогите увязать в одной функции два кода
функция1
Цитата:

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssInstall then
begin
BackupCheck_2();
BackupCheck_3();
end;
end;


функция2
Цитата:

procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssDone: RewritingUninstallData();
end;
end;


у меня не получается...

Dodakaedr 09-12-2014 11:47 2441687

Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssInstall:
begin
BackupCheck_2();
BackupCheck_3();
end;
ssDone:
begin
RewritingUninstallData();
end;
end;
end;


svs23 09-12-2014 11:54 2441691

Dodakaedr,
спасибо!

вопрос, наверное не по адресу, но все же спрошу, можно как-нибудь прописать чтобы после установки указанные ярлыки (определенный файлы txt и xml) открывались с помощью Notepad++ (это для тех кто не знает что такое "открыть с помощью", да и еще найти там Notepad++)
сразу извиняюсь если не по адресу

Dodakaedr 09-12-2014 12:18 2441705

Цитата:

Цитата svs23
можно как-нибудь прописать чтобы после установки указанные ярлыки (определенный файлы txt и xml) открывались с помощью Notepad++ »

Notepad++ может быть и не установлен, поэтому открываем программой по умолчанию.
Код:

[Run]
Filename: "{app}\INIT.xml"; Description: "View file"; Flags: postinstall shellexec skipifsilent
Filename: "{app}\README.TXT"; Description: "View the README file"; Flags: postinstall shellexec skipifsilent


Kashtan007 09-12-2014 12:28 2441711

Всем привет, скажите пожалуйста, как можно убить нужный мне процесс перед началом установки, желательно уведомив о закрытии процесса?
Если можно, то скиньте оба варианта, заранее спасибо!

P.S. У меня Unicode

svs23 09-12-2014 12:37 2441720

Цитата:

Цитата Dodakaedr
Notepad++ может быть и не установлен, поэтому открываем программой по умолчанию. »

но я же могу его и скрыто установить ;)

Dodakaedr,
а как к View the README file и View file привязать Notepad++ (и я так понимаю он должен быть полноценно установлен в систему с записью в реестре?)

Dodakaedr 09-12-2014 13:10 2441735

Цитата:

Цитата svs23
но я же могу его и скрыто установить »

можете
Цитата:

Цитата svs23
а как к View the README file и View file привязать Notepad++ (и я так понимаю он должен быть полноценно установлен в систему с записью в реестре?) »

Да. И привязку через реестр нужно делать, но не советую такое делать, это мало кому понравится и к тому же дополнительный вес к инсталлу.
Допустим ситуация

Я установил вашу игру и по умолчанию у меня для открытия текстовых файлов стоит SynWrite, но после установки вашей игры установится Notepad++ который мне и даром не нужен и собьются настройки по умолчанию, мне это сразу не понравится и врядли больше буду устанавливать ваши репаки.


Цитата:

Цитата Kashtan007
как можно убить нужный мне процесс перед началом установки »

Какой именно процесс? IsTask.dll пробовали?

saurn 09-12-2014 13:12 2441736

Цитата:

Цитата svs23
а как к View the README file и View file привязать Notepad++ »

Код:

[Run]
Filename: Путь к папке\notepad++.exe; Parameters: "{app}\INIT.xml"; Description: "View file"; Flags: postinstall shellexec skipifsilent
Filename: Путь к папке\notepad++.exe; Parameters: "{app}\README.TXT"; Description: "View the README file"; Flags: postinstall shellexec skipifsilent

Цитата:

Цитата svs23
я так понимаю он должен быть полноценно установлен в систему с записью в реестре »

Необязательно. Можно использовать портативный вариант.
Цитата:

Цитата svs23
но я же могу его и скрыто установить »

А это нехороший вариант. Надо уважать пользователя.
Цитата:

Цитата Kashtan007
как можно убить нужный мне процесс перед началом установки »

В шапке темы есть примеры.

svs23 09-12-2014 13:21 2441740

Цитата:

Цитата saurn
[Run]
Filename: Путь к папке\notepad++.exe; Parameters: "{app}\INIT.xml"; Description: "View file"; Flags: postinstall shellexec skipifsilent
Filename: Путь к папке\notepad++.exe; Parameters: "{app}\README.TXT"; Description: "View the README file"; Flags: postinstall shellexec skipifsilent »

Цитата:

Цитата saurn
А это нехороший вариант. Надо уважать пользователя. »

так чтобы сделать такую привязку мне нужно что-бы у пользователя notepad++ был в определенной папке
так вот я его и установлю в DestDir: "{sd}\Notepad++\";
чтобы сделать вот так
Код:

[Run]
Filename: {sd}\Notepad++\notepad++.exe; Parameters: "{app}\INIT.xml"; Description: "View file"; Flags: postinstall shellexec skipifsilent
Filename: {sd}\Notepad++\notepad++.exe; Parameters: "{app}\README.TXT"; Description: "View the README file"; Flags: postinstall shellexec skipifsilent


saurn 09-12-2014 13:27 2441743

Цитата:

Цитата svs23
чтобы сделать такую привязку мне нужно что-бы у пользователя notepad++ был в определенной папке »

Разумеется. В данном случае подойдет и портативная версия, так как имя открываемого файла передается программе параметром комстроки. Говоря о нехорошем варианте, я имел ввиду, что не надо устанавливать некий дополнительный софт без ведома пользователя. Предупредите о том, что будет установлена дополнительная программа, а лучше предоставьте выбор.

Цитата:

Цитата Dodakaedr
Какой именно процесс? IsTask.dll пробовали? »

IsTask.dll не работает на Unicode версии. Где-то в предыдущей теме выкладывали IsTask.dll для юникода. Да и в шапке есть варинаты без дополнительных библиотек.

Kashtan007 09-12-2014 13:29 2441746

Цитата:

Цитата Dodakaedr
Какой именно процесс? IsTask.dll пробовали? »

Процесс WorldOfTanks.exe, да пробовал, процесс не убивается (

svs23 09-12-2014 13:41 2441757

saurn, посмотрел предложенный код... я ни это имел ввиду, но спасибо....
у меня в коде прописано, что после установки на рабочем столе создается новая папка, в ней ярлыки на файлы настроек модов (чтобы не по папкам их искать, а все в одном месте), вот эти ярлыки (файлы) открывать notepad++

saurn 09-12-2014 13:58 2441768

svs23
Скрытый текст
Тогда предложите пользователю установку notepad++, а он уже сам решит, нужен он ему или нет. Да и, на мой взгляд, совершенно не обязательно, чтобы файл открывался именно notepad++. Существует множество других редакторов. Я, например, пользуюсь, другой программой. Так что лучше будет устанавливать по выбору, чтобы потом уши не горели)).

Dodakaedr 09-12-2014 14:03 2441770

Цитата:

Цитата Kashtan007
Процесс WorldOfTanks.exe, да пробовал, процесс не убивается ( »

Должен. Тестировал на Калькуляторе. DLL-ка думаю имеется.

Цитата:

Цитата saurn
не работает на Unicode версии »

работает

Скрытый текст
Код:

[Setup]
AppName=My Program
AppVerName=My Program ver.1.5
DefaultDirName={pf}\My Program

[Files]
Source: "compiler:Dll Pack\ISTask.dll"; DestDir: "{app}"

[Code]
function KillTask(ExeFileName: ansistring): Integer; external 'KillTask@files:ISTask.dll stdcall delayload setuponly';
function RunTask(FileName: ansistring; bFullpath: Boolean): Boolean; external 'RunTask@files:ISTask.dll stdcall delayload setuponly';
function KillTaskA(ExeFileName: ansistring): Integer; external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';
function RunTaskA(FileName: ansistring; bFullpath: Boolean): Boolean; external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';

function InitializeSetup(): Boolean;
begin
  If RunTask('calc.exe', false) then begin
    if MsgBox('Программа установки обнаружила, что программа Калькулятор запущена в данный момент.'#13#13'Закрыть программу и продолжить установку?', mbError, mb_YesNo) = idYes then begin
      KillTask('calc.exe');
      Result := True;
    end else
      Exit;
    end;
    Result := True;
end;

function InitializeUninstall(): Boolean;
begin
  If RunTaskA('calc.exe', false) then begin
    if MsgBox('Программа удаления обнаружила, что программа Калькулятор запущена в данный момент.'#13#13'Закрыть программу и продолжить установку?', mbError, mb_YesNo) = idYes then begin
      KillTaskA('calc.exe');
      Result := True;
    end else
      Exit;
    end;
  Result := True;
  UnloadDLL(ExpandConstant('{app}\ISTask.dll'));
end;


svs23 09-12-2014 14:28 2441782

Цитата:

Цитата saurn
Тогда предложите пользователю установку notepad++, а он уже сам решит, нужен он ему или нет. Да и, на мой взгляд, совершенно не обязательно, чтобы файл открывался именно notepad++. Существует множество других редакторов. Я, например, пользуюсь, другой программой. Так что лучше будет устанавливать по выбору, чтобы потом уши не горели)). »

сделать предложение на установку notepad++ не проблема
просто есть люди для которых огромная проблема "Открыть с помощью" и найти там "подходящую" программу

txt они еще откроют, т.к. в системе имеется текстовый редактор, которым не рекомендуют править файлы настроек модов, а вот что делать с xml для них уже проблема (проверено на личном опыте, ТАКИЕ люди есть).....

svs23 09-12-2014 15:04 2441808

как добавить пустую строку в лог после окончания установки? чтобы видеть моменты между установками?
Скрытый текст
Код:

procedure ExtLog();
begin
SaveStringToFile(ExpandConstant('{app}\res_mods\SVS_mini_mod_pack_setup.log'), #13#10 + GetDateTimeString('dd/mm/yyyy hh:nn:ss', '-', ':') + ' - ' + ExpandConstant(CurrentFileName), True);
end;


Dodakaedr 09-12-2014 15:09 2441812

Цитата:

Цитата saurn
Потому что на деле используете ISTaskU.dll. Обычная же в юникоде не работает »

Нет, я использовал ISTask.dll.

saurn 09-12-2014 15:22 2441817

Цитата:

Цитата Dodakaedr
Нет, я использовал ISTask.dll. »

Действительно, работает. Но игнорирует некоторые процессы. В 64-х разрядной среде в упор не видит, к примеру, тот же запущенный калькулятор.

Kashtan007 09-12-2014 17:52 2441890

saurn, хм.. у меня 64-х разрядная среда, и процесс закрывается (по примеру Dodakaedr).

Kashtan007 10-12-2014 18:13 2442400

Dodakaedr, обнаружил проблему, когда нажимаю "Нет", то установка продолжается, и процесс не закрывается.

kotyarko@fb 10-12-2014 19:21 2442418

Цитата:

Цитата Kashtan007
когда нажимаю "Нет", то установка продолжается, и процесс не закрывается »

На нажатие "нет" можно повесить процедуру Abort. При этом не стоит забывать, что при аборте будет вызываться процедура DeinitializeSetup, и если в ней есть что-то связанное с визадом (например, WizardForm.Free), то программа будет ругаться. Это можно решить создав булевую переменную, и присваивать ей определённые значения, которые будут проверяться; и в зависимости от результата выполняться та же WizardForm.Free.
Это решение при нескольких функциях InitializeSetup, когда Result := False не решает.

habib2302 10-12-2014 21:12 2442484

Доброе время суток. Есть один вопрос. Дело в том, что когда идет распаковка в {tmp} нету никакого диалогового окна т.е приложение запущено, а окна или хотя бы прогресбара нет особенно если еще большой объем файлов. как избавиться

saurn 10-12-2014 21:29 2442496

Цитата:

Цитата Kashtan007
хм.. у меня 64-х разрядная среда, и процесс закрывается »

То у моей системы глюки были.
Цитата:

Цитата Kashtan007
обнаружил проблему, когда нажимаю "Нет", то установка продолжается, и процесс не закрывается. »

Да нет, работает, но, на всякий, альтернативный вариант:
Скрытый текст
Код:

function IsRunTask(): Boolean;
begin
    Result := ( not RunTask( 'calc.exe', False ) );
    if ( not Result ) then
      if ( mrYes = MsgBox( 'Программа установки обнаружила, что программа Калькулятор запущена в данный момент.'#13#13'Закрыть программу и продолжить установку?', mbError, mb_YesNo ) ) then
        Result := ( KillTask( 'calc.exe' ) <> 0 );
end;


function InitializeSetup(): Boolean;
begin
    Result := IsRunTask();
end;


Dodakaedr 10-12-2014 21:41 2442503

Цитата:

Цитата Kashtan007
обнаружил проблему, когда нажимаю "Нет", то установка продолжается, и процесс не закрывается. »

Какие еще задания выполняются у вас в InitializeSetup?

Irenis 11-12-2014 00:52 2442569

Здравствуйте :) Может кто подскажет, как создать ярлык в формате exe, чтобы этот ярлык просто открывал страницу в браузере? Нужен ярлык именно в формате exe, чтобы его можно было при создании скрипта назначить главным исполняемым файлом exe.

Ну или наоборот. Если я создам обычный ярлык со ссылкой, как тогда отредактировать скрипт, чтобы установщик автоматически выводил этот ярлык на рабочий стол (т.е. приложение установилось и на рабочем столе появился мой ярлык со ссылкой)? Спасибо :)

saurn 11-12-2014 01:06 2442575

Цитата:

Цитата Irenis
Если я создам обычный ярлык со ссылкой, как тогда отредактировать скрипт, чтобы установщик автоматически выводил этот ярлык на рабочий стол (т.е. приложение установилось и на рабочем столе появился мой ярлык со ссылкой)? »

Скрытый текст
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp


[INI]
Filename: {userdesktop}\Перейти на сайт.url; Section: InternetShortcut; Key: URL; String: http://forum.oszone.net;


[UninstallDelete]
Name: {userdesktop}\Перейти на сайт.url; Type: files;


icetanker 11-12-2014 11:11 2442715

Добрый день,а кто нибудь знает как написать так,чтобы файл активх скачивался с сервера,а то постоянно новый вкладывать в инсталлятор неудобно????

saurn 11-12-2014 15:07 2442807

icetanker,
#443, #1618
Пример из шапки Загрузка файла из Интернет
InnoTools Downloader

Kashtan007 11-12-2014 16:49 2442840

Цитата:

Цитата Dodakaedr
Какие еще задания выполняются у вас в InitializeSetup? »

Использование скина и автоопределение установки в реестре.

icetanker 11-12-2014 16:58 2442845

Цитата:

Цитата saurn
icetanker,
#443, #1618
Пример из шапки Загрузка файла из Интернет
InnoTools Downloader »

а можно как нибудь сделать без прогресс бара,он скачал в определенную папку и после этого зарегистрировал ActiveX,просто не совсем понятно как там исправить,чтобы он скачал,а потом зарегистривовал????

Dodakaedr 11-12-2014 17:36 2442862

Цитата:

Цитата Kashtan007
Использование скина и автоопределение установки в реестре. »

Если проблема не решилась, то попробуйте таким способом:
Скрытый текст
Код:

function InitializeSetup1(): Boolean;
begin
  If RunTask('calc.exe', false) then begin
    if MsgBox('Программа установки обнаружила, что программа Калькулятор запущена в данный момент.'#13#13'Закрыть программу и продолжить установку?', mbError, mb_YesNo) = idYes then begin
      KillTask('calc.exe');
      Result := True;
    end else
      Exit;
    end;
    Result := True;
end;

function InitializeSetup2(): Boolean;
begin
  ExtractTemporaryFile('{#SKinDll}');
  ExtractTemporaryFile('{#SKin}');
  LoadSkin(ExpandConstant('{tmp}\{#SKin}'), '{#SKinIni}');
  Result:=True;
end;

function InitializeSetup3(): Boolean;
begin
 Result:= True;
 if not RegKeyExists(HKLM, 'SOFTWARE\Company\ProgramNamePro') then
 begin
  if not RegKeyExists(HKLM, 'SOFTWARE\Company\ProgramNameLight') then
  begin
  MsgBox('Программа не найдена!', mberror, mb_ok);
  Result:=False;
  exit;
  end
 end
end;

function InitializeSetup(): Boolean;
begin
  Result := InitializeSetup1();  if not Result then exit;
  Result := InitializeSetup2();  if not Result then exit;
  Result := InitializeSetup3();  if not Result then exit;
end;


Kashtan007 11-12-2014 17:52 2442868

Dodakaedr, ругается на строку WizardForm.Free;
Код:

procedure DeinitializeSetup();
begin
    RemoveFontResource(ExpandConstant('{tmp}\{#Font}'), FR_PRIVATE, 0);
    WizardForm.Free;
  UnloadSkin;
end;

Это при нажатии "Нет".
P.S. Вот ошибка

Dodakaedr 11-12-2014 17:56 2442869

Kashtan007, добавьте такое
Скрытый текст
Код:

[Code]
var
Init: Boolean;

procedure InitializeWizard();
begin
  Init := True;
end;

procedure DeinitializeSetup();
begin
if Init <> False then
      begin
      RemoveFontResource(ExpandConstant('{tmp}\{#Font}'), FR_PRIVATE, 0);
      UnloadSkin;
      WizardForm.Free;     
      end;
end;


saurn 11-12-2014 20:26 2442933

Dodakaedr, Kashtan007, зачем плодить дубли InitializeSetup? Грамотней оформить действия отдельными блоками функций и последовательно проверять результат. Это, как минимум, упрощает читаемость и оптимизирует организацию структуры кода.
Скрытый текст
Код:

function MyFunc1(): Boolean;
begin
    Result := ...;
end;

function MyFunc2(): Boolean;
begin
    Result := ...;
end;

function InitializeSetup(): Boolean;
begin
    Result := MyFunc1();
    if Result then Result := MyFunc2();
end;



Цитата:

Цитата Kashtan007
WizardForm.Free; »

Форма и так разрушится при выходе.

Irenis 11-12-2014 21:44 2442953

Цитата:

Цитата saurn
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp
[INI]
Filename: {userdesktop}\Перейти на сайт.url; Section: InternetShortcut; Key: URL; String: http://forum.oszone.net;
[UninstallDelete]
Name: {userdesktop}\Перейти на сайт.url; Type: files; »

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

kotyarko@fb 11-12-2014 21:44 2442954

Цитата:

Цитата saurn
Форма и так разрушится при выходе. »

При некотором количестве хэндлов этой формы, при выходе программа может неправильно завершаться. Ошибок, как таковых, не будет, но окно "Программа неожиданно завершилась.." или что-то подобное (точно не помню), будет поднапрягать.

Kashtan007 11-12-2014 22:03 2442963

saurn, есть ли альтернативные способы, чтобы форма не рушилась?

P.S. Когда нажимаешь "Нет" либо "Да", все работает идеально. Но если закрываешь сам установщик, то сразу рушится скин.

saurn 11-12-2014 22:16 2442968

Цитата:

Цитата kotyarko@fb
При некотором количестве хэндлов этой формы, при выходе программа может неправильно завершаться »

Что мешает закрыть хэндлы?
Цитата:

Цитата Kashtan007
Но если закрываешь сам установщик, то сразу рушится скин. »

А это потому, что разрушаете форму раньше, чем выгружаете скин. При закрытии форма уничтожается. Ну или разрушайте ее после выполнения всех действий.
Код:

procedure DeinitializeSetup();
begin
    RemoveFontResource(ExpandConstant('{tmp}\{#Font}'), FR_PRIVATE, 0);
    UnloadSkin;

    WizardForm.Free;
end;

-----------------------------------------------------------------------------------------
Цитата:

Цитата Irenis
Единственное, подскажите пожалуйста, как задать свою картинку для ярлыка? »

Скрытый текст
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp


[INI]
Filename: {app}\Перейти на сайт.url; Section: InternetShortcut; Key: URL; String: http://forum.oszone.net;

[Icons]
Name: {userdesktop}\Сайт программы; Filename: {app}\Перейти на сайт.url; WorkingDir: {app}; IconFilename: {uninstallexe}; IconIndex: 0;


[UninstallDelete]
Name: {app}\Перейти на сайт.url; Type: files;


icetanker 11-12-2014 22:40 2442982

парни,подскажите,как без прогрессбара сделать,так,чтобы файл ActiveX качался с сайта в определенную директорию и после этого регистрировался?про прогрессбар в шапке прочитал,не совсем понял.

kotyarko@fb 11-12-2014 22:41 2442984

Цитата:

Цитата saurn
Что мешает закрыть хэндлы? »

Есть множество примеров, использующих хэндл визарда (или его "детей"). И не только лишь все не изменяют этот пример, при добавлении к себе в код. От этого появляются несколько хэндлов, которые нужно как-то освобождать. Решение тому - WizardForm.Free, при деинициализации.

saurn 11-12-2014 22:49 2442986

Цитата:

Цитата kotyarko@fb
И не только лишь все не изменяют этот пример, при добавлении к себе в код. »

Бесспорно. Однако WizardForm.Free - не решение. Скорее аварийный выход. Правильное решение - "разрушать" то, что создаешь.

kotyarko@fb 11-12-2014 23:02 2442991

Цитата:

Цитата saurn
Однако WizardForm.Free - не решение. Скорее аварийный выход. Правильное решение - "разрушать" то, что создаешь »

Не стоит забывать об прогромистах, которые не в силах изменить найденный и нужный им пример.

Kashtan007 11-12-2014 23:36 2443003

saurn, есть ли варианты без использования IsTasks.dll?

svs23 11-12-2014 23:42 2443004

помогите увязать
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
case CurStep of
ssInstall:
begin
BackupCheck_2();
BackupCheck_3();
end;
ssDone:
begin
RewritingUninstallData();
end;
end;
end;

и
Код:

begin
  If CurStep=ssInstall then
begin
  CreateDir(ExpandConstant('{app}\res_mods'));
  CreateLogMods();
end;
end;

заранее спс

Habetdin 11-12-2014 23:49 2443007

svs23,
Код:

procedure CurStepChanged(CurStep: TSetupStep);
begin
        case CurStep of
        ssInstall:
                begin
                        BackupCheck_2();
                        BackupCheck_3();
                        CreateDir(ExpandConstant('{app}\res_mods'));
                        CreateLogMods();
                end;
        ssDone:
                begin
                        RewritingUninstallData();
                end;
        end;
end;


saurn 12-12-2014 00:23 2443017

Цитата:

Цитата Kashtan007
есть ли варианты без использования IsTasks.dll? »

Объеденить примеры из шапки:
Запущен ли процесс, Закрытие процесса
Скрытый текст
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp


[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
    TH32CS_SNAPPROCESS = $2;
    INVALID_HANDLE_VALUE = -1;
    PROCESS_TERMINATE = $1;
    PROCESS_CREATE_THREAD = $2;
    PROCESS_QUERY_INFORMATION = $400;
    SYNCHRONIZE = $100000;
    TOKEN_QUERY = $8;
    TOKEN_ADJUST_PRIVILEGES = $20;
    SE_PRIVILEGE_ENABLED = $2;
    TA_FAILED = 0;
    TA_SUCCESS_CLEAN = 1;
    TA_SUCCESS_KILL = 2;
    WM_CLOSE = $10;
    WAIT_OBJECT_0 = $0;
    WAIT_TIMEOUT = $102;
    WAIT_FAILED = $FFFFFFFF;
    SMTO_BLOCK = $1;
    SMTO_ABORTIFHUNG = $2;

type
    TPROCESSENTRY32 = record
        dwSize, cntUsage, th32ProcessID: DWORD;
        th32DefaultHeapID: Longint;
        th32ModuleID, cntThreads, th32ParentProcessID: DWORD;
        pcPriClassBase: Longint;
        dwFlags: DWORD;
        szExeFile: array [0..259] of Char;
    end;

    LUID = record
        LowPart: DWORD;
        HighPart: Longint;
    end;

    LUID_AND_ATTRIBUTES = record
        Luid: LUID;
        Attributes: DWORD;
    end;

    TOKEN_PRIVILEGES = record
        PrivilegeCount: DWORD;
        Privileges: array [0..0] of LUID_AND_ATTRIBUTES;
    end;

function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle; external 'CreateToolhelp32Snapshot@kernel32.dll stdcall';
#ifdef UNICODE
function Process32First(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32First{#A}@kernel32.dll stdcall';
function Process32Next(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32Next{#A}@kernel32.dll stdcall';
#else
function Process32First(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32First@kernel32.dll stdcall';
function Process32Next(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32Next@kernel32.dll stdcall';
#endif
function OpenProcess(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; external 'OpenProcess@kernel32.dll stdcall';
function OpenProcessToken(ProcessHandle: THandle; DesiredAccess: DWORD; var TokenHandle: THandle): BOOL; external 'OpenProcessToken@advapi32.dll stdcall';
function GetCurrentProcess(): THandle; external 'GetCurrentProcess@kernel32.dll stdcall';
function LookupPrivilegeValue(lpSystemName, lpName: String; var lpLuid: LUID): BOOL; external 'LookupPrivilegeValue{#A}@advapi32.dll stdcall';
function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL; NewState: TOKEN_PRIVILEGES; BufferLength: DWORD; var PreviousState: TOKEN_PRIVILEGES; var ReturnLength: Longint): BOOL; external 'AdjustTokenPrivileges@advapi32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetProcessImageFileName(hProcess: THandle; var lpImageFileName: Char; nSize: DWORD): DWORD; external 'GetProcessImageFileName{#A}@psapi.dll stdcall';
function GetLogicalDrives(): DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
function QueryDosDevice(lpDeviceName: String; var lpTargetPath: Char; ucchMax: DWORD): DWORD; external 'QueryDosDevice{#A}@kernel32.dll stdcall';
function EnumWindows(lpEnumFunc, lParam: Longint): BOOL; external 'EnumWindows@user32.dll stdcall';
function WaitForSingleObject(hHandle: THandle; dwMilliseconds: DWORD): DWORD; external 'WaitForSingleObject@kernel32.dll stdcall';
function GetProcAddress(hModule: THandle; lpProcName: AnsiString): Longint; external 'GetProcAddress@kernel32.dll stdcall';
function GetModuleHandle(lpModuleName: String): THandle; external 'GetModuleHandle{#A}@kernel32.dll stdcall';
function CreateRemoteThread(hProcess: THandle; lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags: DWORD; var lpThreadId: DWORD): THandle; external 'CreateRemoteThread@kernel32.dll stdcall';
function TerminateProcess(hProcess: THandle; uExitCode: UINT): BOOL; external 'TerminateProcess@kernel32.dll stdcall';
function GetWindowThreadProcessId(hWnd: HWND; var lpdwProcessId: DWORD): DWORD; external 'GetWindowThreadProcessId@user32.dll stdcall';
function SendMessageTimeout(hWnd: HWND; Msg: UINT; wParam, lParam: Longint; fuFlags, uTimeout: UINT; var lpdwResult: Longint): Longint; external 'SendMessageTimeout{#A}@user32.dll stdcall';

////////////////////////////////////////////////////////////
function IsProcessRunning(FileName: String): Boolean; //FileName - имя exe-файла процесса
var
    hProcessSnap: THandle;
    pe32: TPROCESSENTRY32;
    szExeFile: String;
begin
    hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if hProcessSnap = INVALID_HANDLE_VALUE then Exit;
    pe32.dwSize := sizeof(pe32);
    if not Process32First(hProcessSnap, pe32) then Exit;
    while not Result and Process32Next(hProcessSnap, pe32) do
    begin
        szExeFile := '';
        while not (pe32.szExeFile[Length(szExeFile)] = #0) do szExeFile := szExeFile + pe32.szExeFile[Length(szExeFile)];
        Result := LowerCase(FileName) = LowerCase(szExeFile);
    end;
    CloseHandle(hProcessSnap);
end;

/////////////////////////////////////////////////////////
function CharArrayToString(aChar: array of Char): String;
begin
    Result := '';
    while aChar[Length(Result)] <> #0 do Insert(aChar[Length(Result)], Result, Length(Result)+1);
end;

////////////////////////////////////////////////////////////
function EnumWindowsProc(hwnd: HWND; lParam: Longint): BOOL;
var
    dwID: DWORD;
    lResult: Longint;
begin
    Result := True;
    GetWindowThreadProcessId(hwnd, dwID);
    if dwID = lParam then
        Result := SendMessageTimeout(hwnd, WM_CLOSE, 0, 0, SMTO_BLOCK or SMTO_ABORTIFHUNG, 5000, lResult) <> 0;
end;

//////////////////////////////////////////////////////////////////////////////////
function TerminateApp(const szProcessList: String; const dwTimeout: DWORD): DWORD;
// szProcessList :  process names or full paths of processes delimited by vertical bar, e.g. calc.exe|notepad.exe|c:\hungtest.exe
// dwTimeout.....:  kill timeout in ms
var
    hProcessSnap, hProc, hToken, hThread, lpProcName: THandle;
    pe32: TPROCESSENTRY32;
    aBuf: array [0..259] of Char;
    bProcFind: Boolean;
    szExeFile, szExePath, szFileName, szDeviceName: String;
    tkp: TOKEN_PRIVILEGES;
    SeDebugNameValue: LUID;
    i, ret: Longint;
    lpThreadId, dwDrives: DWORD;
begin
    hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if hProcessSnap = INVALID_HANDLE_VALUE then Exit;
    try
        with TStringList.Create do
        try
            StringChangeEx(szProcessList, '|', #13#10, True);
            Text := szProcessList;
            //
           
pe32.dwSize := SizeOf(pe32);
            if not Process32First(hProcessSnap, pe32) then Exit;
            repeat
                bProcFind := False;
                szExeFile := CharArrayToString(pe32.szExeFile);
                for i := 0 to Count-1 do
                begin
                    if CompareText(szExeFile, ExtractFileName(Strings[i])) = 0 then
                    begin
                        bProcFind := True;
                        szExePath := Strings[i];
                        Break;
                    end;
                end;
                if not bProcFind then Continue;

                // try open process
               
hProc := OpenProcess(PROCESS_TERMINATE or PROCESS_CREATE_THREAD or PROCESS_QUERY_INFORMATION or SYNCHRONIZE, False, pe32.th32ProcessID);
                if hProc = TA_FAILED then
                begin
                    // open process token adjust privileges
                   
if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then Exit;
                    if not LookupPrivilegeValue('', 'SeDebugPrivilege', SeDebugNameValue) then Exit;
                    try
                        // fill token privileges struct
                       
tkp.PrivilegeCount := 1;
                        tkp.Privileges[0].Luid := SeDebugNameValue;
                        tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

                        // set debug privileges
                       
if not AdjustTokenPrivileges(hToken, False, tkp, SizeOf(tkp), tkp, ret) then Exit;

                        // try open process with debug privileges
                       
hProc := OpenProcess(PROCESS_TERMINATE or PROCESS_CREATE_THREAD or PROCESS_QUERY_INFORMATION or SYNCHRONIZE, False, pe32.th32ProcessID);
                        if hProc = TA_FAILED then Exit;
                    finally
                        tkp.Privileges[0].Attributes := 0;
                        AdjustTokenPrivileges(hToken, False, tkp, SizeOf(tkp), tkp, ret);
                        CloseHandle(hToken);
                    end;
                end;

                // if szProcess is full path
               
if CompareText(szExePath, szExeFile) <> 0 then
                begin
                    GetProcessImageFileName(hProc, aBuf[0], SizeOf(aBuf));
                    szFileName := CharArrayToString(aBuf);
                    dwDrives := GetLogicalDrives();
                    for i := 2 to 25 do if dwDrives and (1 shl i) <> 0 then
                    begin
                        QueryDosDevice(Format('%s:', [Chr(Ord('A') + i)]), aBuf[0], SizeOf(aBuf));
                        szDeviceName := CharArrayToString(aBuf);
                        if Pos(szDeviceName, szFileName) = 0 then Continue;
                        StringChangeEx(szFileName, szDeviceName, Format('%s:', [Chr(Ord('A') + i)]), True);
                        if CompareText(szExePath, szFileName) = 0 then Break;
                    end;
                    if CompareText(szExePath, szFileName) <> 0 then
                    begin
                        CloseHandle(hProc);
                        Continue;
                    end;
                end;

                // try stop process
               
try
                    if not EnumWindows(CallbackAddr('EnumWindowsProc'), pe32.th32ProcessID) then
                    begin
                        if TerminateProcess(hProc, 0) then Result := TA_SUCCESS_KILL;
                    end else case WaitForSingleObject(hProc, dwTimeout) of
                        WAIT_OBJECT_0: Result := TA_SUCCESS_CLEAN;
                        WAIT_TIMEOUT: try
                            lpProcName := GetProcAddress(GetModuleHandle('kernel32.dll'), 'ExitProcess');
                            if lpProcName = 0 then Exit;
                            hThread := CreateRemoteThread(hProc, 0, 0, lpProcName, 0, 0, lpThreadId);
                            case WaitForSingleObject(hThread, dwTimeout) of
                                WAIT_OBJECT_0: Result := TA_SUCCESS_CLEAN;
                                WAIT_TIMEOUT, WAIT_FAILED: if TerminateProcess(hProc, 0) then Result := TA_SUCCESS_KILL;
                            end;
                        finally
                            CloseHandle(hThread);
                        end;
                    end;
                finally
                    CloseHandle(hProc);
                end;
            until not Process32Next(hProcessSnap, pe32);
        finally
            Free;
        end;
    finally
        CloseHandle(hProcessSnap);
    end;
end;

/////////////////////////////
function IsCheckProcessRunning( const ProcName: String ): Boolean;
begin
    Result := not IsProcessRunning( ProcName );
    if not Result then
      if ( mrYes = MsgBox( Format( '%s "%s" %s'#13#13'%s', ['Процесс', ProcName, 'запущен. Закрыть процесс?', 'Нажатие "Нет" прервет установку.']), mbError, mb_YesNo ) ) then
        begin
            TerminateApp(ProcName, 5000);
            Result := True;
        end;
end;

function InitializeSetup(): Boolean;
begin
    Result := IsCheckProcessRunning( 'calc.exe' );
end;


icetanker 12-12-2014 12:06 2443117

Код:

// save dialog
        szFileName := ExtractFileName(szURL);
        if GetSaveFileName('Сохранить как...', szFileName, '', Format('*%s', [ExtractFileExt(szFileName)]), ExtractFileExt(szFileName)) then
        try
            hFile := CreateFile(szFileName, GENERIC_READ or GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);  //create file
            if hFile = 0 then Exit;
            hHeap := GetProcessHeap();
            lpBuffer := HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 4*1024);    // buffer size must be >= 512Kb
            ib.dwStructSize := SizeOf(ib);
            ib.lpvBuffer := lpBuffer;
            ib.dwBufferLength := HeapSize(hHeap, 0, lpBuffer);

как изменить данный блог,чтобы файл сохранялся в определенную директорию???

saurn 12-12-2014 12:59 2443131

icetanker, без диалога сохранить как?
http://forum.oszone.net/post-2149509-442.html

Shkutu 12-12-2014 13:24 2443139

Всем доброго дня!
Подскажите плиз, вот есть 2 типа установки (полный и выборочный) и компоненты, два из которых взаимоисключающие.
Код:

[Types]
Name: "full"; Description: {cm:full}
Name: "custom"; Description: {cm:custom}; Flags: iscustom
[Components]
Name: "srv"; Description: {cm:srv}; Types: full custom;
Name: "srv\k7"; Description: {cm:srvk7}; Types: full custom; Flags: exclusive
Name: "srv\k6"; Description: {cm:srvk6}; Types: full custom; Flags:  exclusive
Name: "client"; Description: {cm:client}; Types: full custom

При этом, если на странице выбора компонентов выбирать 1й exclusive компонент, то тип установки получается "выборочный", а если 2й, то "полный". Можно ли как-то это поправить?

nik1967 12-12-2014 14:00 2443154

Цитата:

Цитата Shkutu
Можно ли как-то это поправить? »

Что именно поправить? Конкретнее.
Name: "srv\k7"; Description: {cm:srvk7}; Types: full custom; Flags: exclusive - почему 2 значения типа сразу? Либо full, либо custom
Name: "srv\k6"; Description: {cm:srvk6}; Types: full custom; Flags: exclusive - почему 2 значения типа сразу? Либо full, либо custom
Name: "client"; Description: {cm:client}; Types: full custom - почему 2 значения типа сразу? Либо full, либо custom

Shkutu 12-12-2014 14:28 2443158

Вложений: 1
nik1967, почему либо-либо? Это компоненты, которые относятся к обоим типам установки. Отличие полного от неполного в том, что при полном выбран _весь_ набор компонентов, а при выборочном какие-то компоненты не выбраны, при этом выбрать можно _любой_.
Теперь попытаюсь еще раз объяснить, в чем проблема. Есть один родительский компонент, у которого 2 дочерних exclusive компонента (грубо говоря 2 варианта реализации одного сервера, которые выбираются в зависимости от условий). Когда мы выбираем все компоненты, включая этот сервер, тип установки доложен быть полным (собственно при отсутствии exclusive так и происходит). Но в данном случае по факту получаем, что при выборе сервера 1го варианта тип не полный, а выборочный (при выборе второго варианта exclusive тип полный). Вопрос в том, как сделать так, чтобы при выборе любого варианта сервера вместе с остальными компонентами, тип установки становился полным.

Dodakaedr 12-12-2014 14:48 2443163

Цитата:

Цитата Irenis
как создать ярлык в формате exe, чтобы этот ярлык просто открывал страницу в браузере? »

Можно вот так создать
Скрытый текст
Код:

[Setup]
AppName=TestIcon
AppVersion=1.0
CreateAppDir=no
OutputDir=Ярлык в .exe формате
SetupIconFile=icon.ico

[Code]
function InitializeSetup(): Boolean;
var
rcode: Integer;
begin
 ShellExec('', 'www.oszone.net', '', '', SW_SHOW, ewNoWait, rcode);
 Result := False;
end;


diman_21Ru 12-12-2014 15:03 2443166

Как в установщике убрать Noscroll нету прокрутки мышкай.

saurn 12-12-2014 16:39 2443192

Цитата:

Цитата diman_21Ru
Как в установщике убрать Noscroll нету прокрутки мышкай. »

Писал же уже: за это отвечает свойство контрола ScrollBars
  • ScrollBars := ssVertical;

Если же речь идет о отсутствии скрола при использовании скина, то решение уже давалось:
http://forum.oszone.net/post-2308009-2259.html

diman_21Ru 12-12-2014 17:32 2443216

saurn, а куда это вставить

nikolaha86med 12-12-2014 18:34 2443230

Народ подскажите как сделать прозрачными такие формы как TEdit например?

Dodakaedr 12-12-2014 18:55 2443237

Цитата:

Цитата diman_21Ru
а куда это вставить »

Можно сюда...
Пример
Код:

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

[Languages]
Name: "default"; MessagesFile: "compiler:Default.isl"

[Code]
var
  NewMemo1: TNewMemo;

procedure RedesignWizardForm;
begin
  NewMemo1 := TNewMemo.Create(WizardForm);
  with NewMemo1 do
  begin
    Parent := WizardForm.WelcomePage;
    Left := ScaleX(176);
    Top := ScaleY(184);
    Width := ScaleX(301);
    Height := ScaleY(113);
    Lines.Text := 'Описание программы:' + #13#10 +
        'My Autoplay Professional - программа для создания ' + #13#10 +
        'меню ' + #13#10 +
        'автозапуска, презентаций и прочих проектов. Вам ' + #13#10 +
        'не ' + #13#10 +
        'нужен опыт работы с такими программами, все ' + #13#10 +
        'предельно ясно и удобно, плюс есть Русская ' + #13#10 +
        'поддержка, много готовых шаблонов. Стоит ' + #13#10 +
        'выделить ' + #13#10 +
        'удобный редактор, который позволит в короткие ' + #13#10 +
        'сроки сделать профессиональное меню ' + #13#10 +
        'автозапуска.';
    ScrollBars := ssVertical; //возможны значения ssBoth, ssHorizontal, ssNone, ssVertical
  end;
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;



Цитата:

Цитата nikolaha86med
Народ подскажите как сделать прозрачными такие формы как TEdit например? »

Пример. На страницах 31, 32 это уже обсуждалось

nikolaha86med 12-12-2014 23:01 2443323

Вложений: 1
Dodakaedr, Не поможешь вставить нужное из этого примера в мой скрипт,а то у меня чет не получается!

saurn 13-12-2014 16:43 2443512

Цитата:

Цитата diman_21Ru
а куда это вставить »

http://forum.oszone.net/post-2433239-1969.html

petrmissial@fb 14-12-2014 02:10 2443722

Подскажите пожалуйста. Есть пример
Код:

  // Ask the user a Yes/No question, defaulting to No
  if MsgBox('Are you sure?', mbConfirmation, MB_YESNO or MB_DEFBUTTON2) = IDYES then
  begin
    // user clicked Yes
  end;

Как мне в этом примере подсветить кнопку YES? Просто хочу сделать обводку вокруг...

saurn 14-12-2014 04:07 2443732

petrmissial@fb,
MB_DEFBUTTON2, где цифра указывает на номер кнопки. Кнопка номер 1 - YES, кнопка номер 2 - NO. Следовательно, чтобы сделать кнопку YES дефолтной, надо указать ее номер, тоесть 1. Или вобще убрать MB_DEFBUTTON, по умолчанию будет активна первая кнопка.
Код:

MsgBox(  'Are you sure?', mbConfirmation, MB_YESNO + MB_DEFBUTTON1 )
// MsgBox(  'Are you sure?', mbConfirmation, MB_YESNO )


icetanker 15-12-2014 09:27 2444133

код
Код:

#define A = (Defined UNICODE) ? "W" : "A"
const
    INTERNET_OPEN_TYPE_PRECONFIG = 0;
    INTERNET_FLAG_NO_CACHE_WRITE = $4000000;
    INTERNET_FLAG_PRAGMA_NOCACHE = $100;
    INTERNET_FLAG_RELOAD = $80000000;
    INTERNET_FLAG_NEED_FILE = $10;
    INTERNET_FLAG_NO_AUTO_REDIRECT = $200000;
    HTTP_QUERY_FLAG_NUMBER = $20000000;
    HTTP_QUERY_LOCATION = 33;
    HTTP_QUERY_CONTENT_LENGTH = 5;
    HTTP_QUERY_STATUS_CODE = 19;
    ERROR_INSUFFICIENT_BUFFER = 122;
    HTTP_STATUS_OK = 200;
    HTTP_STATUS_REDIRECT = 302;
    GENERIC_READ = $80000000;
    GENERIC_WRITE = $40000000;
    CREATE_ALWAYS = 2;
    HEAP_ZERO_MEMORY = $8;
    IRF_SYNC = $4;

type
    INTERNET_BUFFERS = record
        dwStructSize: DWORD;
        Next: Longint;
        lpcszHeader: String;
        dwHeadersLength: DWORD;
        dwHeadersTotal: DWORD;
        lpvBuffer: Longint;
        dwBufferLength: DWORD;
        dwBufferTotal: DWORD;
        dwOffsetLow: DWORD;
        dwOffsetHigh: DWORD;
    end;

var
    g_DownloadPage: TOutputProgressWizardPage;

function InternetOpen(lpszAgent: String; dwAccessType: DWORD; lpszProxyName, lpszProxyBypass: String; dwFlags: DWORD): Integer; external 'InternetOpen{#A}@wininet.dll stdcall';
function InternetOpenUrl(hInternet: Longint; lpszUrl, lpszHeaders: String; dwHeadersLength, dwFlags: DWORD; dwContext: DWORD_PTR): Integer; external 'InternetOpenUrl{#A}@wininet.dll stdcall';
function InternetReadFileEx(hFile: Longint; var lpBuffersOut: INTERNET_BUFFERS; dwFlags: DWORD; dwContext: DWORD_PTR): BOOL; external 'InternetReadFileEx{#A}@wininet.dll stdcall';
function InternetCloseHandle(hInternet: Longint): BOOL; external 'InternetCloseHandle@wininet.dll stdcall';
function HttpQueryInfo(hRequest: Longint; dwInfoLevel: DWORD; var lpvBuffer: Longint; var lpdwBufferLength, lpdwIndex: DWORD): BOOL; external 'HttpQueryInfo{#A}@wininet.dll stdcall';
function _HttpQueryInfo(hRequest: Longint; dwInfoLevel: DWORD; lpvBuffer: String; var lpdwBufferLength, lpdwIndex: DWORD): BOOL; external 'HttpQueryInfo{#A}@wininet.dll stdcall';
function StrFormatByteSize64(qdw: Currency; pszBuf: AnsiString; cchBuf: UINT): Longint; external 'StrFormatByteSize64A@shlwapi.dll stdcall';
function StrFromTimeInterval(pszOut: String; cchMax: UINT; dwTimeMS: DWORD; digits: Byte): Integer; external 'StrFromTimeInterval{#A}@shlwapi.dll stdcall';
function CreateFile(lpFileName: String; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: Longint; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle): THandle; external 'CreateFile{#A}@kernel32.dll stdcall';
function WriteFile(hFile: THandle; lpBuffer: Longint; nNumberOfBytesToWrite: DWORD; var lpNumberOfBytesWritten: DWORD; lpOverlapped: Longint): BOOL; external 'WriteFile@kernel32.dll stdcall';
function GetProcessHeap(): THandle; external 'GetProcessHeap@kernel32.dll stdcall';
function HeapAlloc(hHeap: THandle; dwFlags, dwBytes: DWORD): Longint; external 'HeapAlloc@kernel32.dll stdcall';
function HeapFree(hHeap: THandle; dwFlags: DWORD; lpMem: Longint): BOOL; external 'HeapFree@kernel32.dll stdcall';
function HeapSize(hHeap: THandle; dwFlags: DWORD; lpMem: Longint): DWORD; external 'HeapSize@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';

///////////////////////////////////////////////////
function TicksToTime(const dwTicks: DWORD): String;
begin
    Result := StringOfChar(#0, StrFromTimeInterval(Result, 0, dwTicks, 8));
    StrFromTimeInterval(Result, Length(Result)+1, dwTicks, 8);
end;

////////////////////////////////////////////////////////
function BytesToSize(const exBytes: Double): AnsiString;
begin
    Result := StringOfChar(#0, 15);
    if Abs(exBytes) > 9.223372036854775807E18 then exBytes := 0;
#ifdef UNICODE
    Result := CastIntegerToAnsiString(StrFormatByteSize64(Abs(exBytes div 1E4), Result, Length(Result)));
#else
    Result := CastIntegerToString(StrFormatByteSize64(Abs(exBytes div 1E4), Result, Length(Result)));
#endif
end;

////////////////////////////////////////////////////
function DownloadFile(const szURL: String): Boolean;
var
    hConnect, hSession, hFile, hHeap: THandle;
    szHeader, szFileName: String;
    dwBufferLength, dwIndex, dwStartDownload, dwStart, dwElapsed, dwWritten: DWORD;
    lpBuffer, lpStatus, lpSize: Longint;
    ib: INTERNET_BUFFERS;
begin
    try
        hSession := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, '', '', 0);
        if hSession = 0 then Exit;

        // additional header
        szHeader := 'Referer: http://example.org/'#13#10;

        // try direct link
        repeat
            hConnect := InternetOpenUrl(hSession, szURL, szHeader, Length(szHeader), INTERNET_FLAG_NO_CACHE_WRITE or INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_RELOAD or INTERNET_FLAG_NO_AUTO_REDIRECT, 0);
            if hConnect = 0 then Exit;
            dwBufferLength := SizeOf(lpBuffer);
            dwIndex := 0;
            lpStatus := 0;
            if not HttpQueryInfo(hConnect, HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER, lpStatus, dwBufferLength, dwIndex) then Exit;
            lpBuffer := 0;
            HttpQueryInfo(hConnect, HTTP_QUERY_LOCATION, lpBuffer, dwBufferLength, dwIndex);
            if DLLGetLastError = ERROR_INSUFFICIENT_BUFFER then
            begin
                szURL := StringOfChar(#0, dwBufferLength-1);
                if not _HttpQueryInfo(hConnect, HTTP_QUERY_LOCATION, szURL, dwBufferLength, dwIndex) then Exit;
                if lpStatus = HTTP_STATUS_REDIRECT then InternetCloseHandle(hConnect);
            end;
        until lpStatus = HTTP_STATUS_OK;

        // get file size
        dwBufferLength := 4;
        dwIndex := 0;
        if not HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER, lpSize, dwBufferLength, dwIndex) then Exit;

        // save dialog
        procedure DownloadFile(urlFilename, szDestDir: String);
        if DirExists(szDestDir) then
        try
    fName := Format('%s\%s', [szDestDir, fName]);
                  hFile := CreateFile(szFileName, GENERIC_READ or GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);  //create file
            if hFile = 0 then Exit;
            hHeap := GetProcessHeap();
            lpBuffer := HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 4*1024);    // buffer size must be >= 512Kb
            ib.dwStructSize := SizeOf(ib);
            ib.lpvBuffer := lpBuffer;
            ib.dwBufferLength := HeapSize(hHeap, 0, lpBuffer);
0);  //create file
            if hFile = 0 then Exit;
            hHeap := GetProcessHeap();
            lpBuffer := HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 4*1024);    // buffer size must be >= 512Kb
            ib.dwStructSize := SizeOf(ib);
            ib.lpvBuffer := lpBuffer;
            ib.dwBufferLength := HeapSize(hHeap, 0, lpBuffer);
        szFileName := ExtractFileName(szURL);
        if GetSaveFileName('Сохранить как...', szFileName, '', Format('*%s', [ExtractFileExt(szFileName)]), ExtractFileExt(szFileName)) then
        try
            hFile := CreateFile(szFileName, GENERIC_READ or GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);  //create file
            if hFile = 0 then Exit;
            hHeap := GetProcessHeap();
            lpBuffer := HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 4*1024);    // buffer size must be >= 512Kb
            ib.dwStructSize := SizeOf(ib);
            ib.lpvBuffer := lpBuffer;
            ib.dwBufferLength := HeapSize(hHeap, 0, lpBuffer);

            // show page
            g_DownloadPage.Show;
            g_DownloadPage.ProgressBar.Show;
            g_DownloadPage.SetProgress(0, lpSize);

            // try download
            try
                // initial labels
                g_DownloadPage.Msg1Label.Caption := Format(
                    'Файл:'#9#9'%s'#13#10 +
                    'Загружено:'#9'%s из %s', [ExtractFileName(szFileName), BytesToSize(0), BytesToSize(lpSize)]
                );
                g_DownloadPage.Msg2Label.Caption := Format(
                    'Прогресс:'#9'%s'#13#10 +
                    'Скорость:'#9'%s/сек'#13#10 +
                    'Прошло:'#9'0 сек'#13#10 +
                    'Осталось:'#9'%d сек', [FormatFloat('0.#0 %', MulDiv(g_DownloadPage.ProgressBar.Position, 100, lpSize)), BytesToSize(0), MaxInt]
                );

                // download
                dwStartDownload := GetTickCount;
                while ib.dwBufferLength > 0 do
                begin
                    dwStart := GetTickCount;
                    dwElapsed := 0;
                    while dwElapsed < 1000 do
                    begin
                        // read file
                        InternetReadFileEx(hConnect, ib, IRF_SYNC, 0);

                        // write file
                        WriteFile(hFile, ib.lpvBuffer, ib.dwBufferLength, dwWritten, 0);
                        ib.dwBufferTotal := ib.dwBufferTotal + dwWritten;

                        // update progressbar
                        g_DownloadPage.ProgressBar.Position := ib.dwBufferTotal;

                        // process messages
                        Application.ProcessMessages;
                        dwElapsed := GetTickCount - dwStart;
                    end;

                    // update labels
                    dwElapsed := GetTickCount-dwStartDownload;
                    g_DownloadPage.Msg1Label.Caption := Format(
                        'Файл:'#9#9'%s'#13#10 +
                        'Загружено:'#9'%s из %s', [ExtractFileName(szFileName), BytesToSize(ib.dwBufferTotal), BytesToSize(lpSize)]
                    );
                    g_DownloadPage.Msg2Label.Caption := Format(
                        'Прогресс:'#9'%d %%'#13#10 +
                        'Скорость:'#9'%s/сек'#13#10 +
                        'Прошло:'#9'%s'#13#10 +
                        'Осталось:'#9'%d сек', [MulDiv(ib.dwBufferTotal, 100, lpSize), BytesToSize(MulDiv(ib.dwBufferTotal, 1000, dwElapsed)), TicksToTime(dwElapsed), MulDiv(lpSize-ib.dwBufferTotal, dwElapsed, 1000)/(ib.dwBufferTotal + 1)]
                    );
                end;
            except
                Result := False;    // error
            finally
            end;
        finally
            CloseHandle(hFile);
            HeapFree(hHeap, 0, lpBuffer);
            Result := ib.dwBufferTotal = lpSize;    // success
        end;
    except
        Result := False;    // error
    finally
        InternetCloseHandle(hConnect);
        InternetCloseHandle(hSession);
        g_DownloadPage.Hide;
    end;
end;

/////////////////////////////////////
procedure CreateDownloadProgressPage;
begin
    g_DownloadPage := CreateOutputProgressPage('Загрузка файла', '');
    with g_DownloadPage do
    begin
        Msg1Label.Height := Msg1Label.Height shl 1;
        Msg2Label.Height := Msg2Label.Height shl 2;
        Msg2Label.Top := ProgressBar.Top + ProgressBar.Height + ScaleY(5);
    end;
end;

/////////////////////////////
procedure InitializeWizard();
begin
    CreateDownloadProgressPage();
end;

//////////////////////////////////////////////////////
function NextButtonClick(CurPageID: Integer): Boolean;
begin
    Result := True;
    case CurPageID of
        wpWelcome: DownloadFile('http://yandex.ru/1.gif');

    end;
end;


подскажите,пытался сделать загрузку файла без сохранить как,сделать все как указано #442,но почему то не работает?что не так?где нужно указать саму директорию сохранения тоже не совсем понятно???

kotyarko@fb 15-12-2014 11:23 2444179

Цитата:

Цитата icetanker
где нужно указать саму директорию сохранения тоже не совсем понятно? »

Можно так.. (по этому примеру):
Код:

[*Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
    INTERNET_OPEN_TYPE_PRECONFIG = 0;
    INTERNET_FLAG_NO_CACHE_WRITE = $4000000;
    INTERNET_FLAG_PRAGMA_NOCACHE = $100;
    INTERNET_FLAG_RELOAD = $80000000;
    INTERNET_FLAG_NEED_FILE = $10;
    INTERNET_FLAG_NO_AUTO_REDIRECT = $200000;
    HTTP_QUERY_FLAG_NUMBER = $20000000;
    HTTP_QUERY_LOCATION = 33;
    HTTP_QUERY_CONTENT_LENGTH = 5;
    HTTP_QUERY_STATUS_CODE = 19;
    ERROR_INSUFFICIENT_BUFFER = 122;
    HTTP_STATUS_OK = 200;
    HTTP_STATUS_REDIRECT = 302;
    GENERIC_READ = $80000000;
    GENERIC_WRITE = $40000000;
    CREATE_ALWAYS = 2;
    HEAP_ZERO_MEMORY = $8;
    IRF_SYNC = $4;

type
    INTERNET_BUFFERS = record
        dwStructSize: DWORD;
        Next: Longint;
        lpcszHeader: String;
        dwHeadersLength: DWORD;
        dwHeadersTotal: DWORD;
        lpvBuffer: Longint;
        dwBufferLength: DWORD;
        dwBufferTotal: DWORD;
        dwOffsetLow: DWORD;
        dwOffsetHigh: DWORD;
    end;

var
    g_DownloadPage: TOutputProgressWizardPage;

function InternetOpen(lpszAgent: String; dwAccessType: DWORD; lpszProxyName, lpszProxyBypass: String; dwFlags: DWORD): Integer; external 'InternetOpen{#A}@wininet.dll stdcall';
function InternetOpenUrl(hInternet: Longint; lpszUrl, lpszHeaders: String; dwHeadersLength, dwFlags: DWORD; dwContext: DWORD_PTR): Integer; external 'InternetOpenUrl{#A}@wininet.dll stdcall';
function InternetReadFileEx(hFile: Longint; var lpBuffersOut: INTERNET_BUFFERS; dwFlags: DWORD; dwContext: DWORD_PTR): BOOL; external 'InternetReadFileEx{#A}@wininet.dll stdcall';
function InternetCloseHandle(hInternet: Longint): BOOL; external 'InternetCloseHandle@wininet.dll stdcall';
function HttpQueryInfo(hRequest: Longint; dwInfoLevel: DWORD; var lpvBuffer: Longint; var lpdwBufferLength, lpdwIndex: DWORD): BOOL; external 'HttpQueryInfo{#A}@wininet.dll stdcall';
function _HttpQueryInfo(hRequest: Longint; dwInfoLevel: DWORD; lpvBuffer: String; var lpdwBufferLength, lpdwIndex: DWORD): BOOL; external 'HttpQueryInfo{#A}@wininet.dll stdcall';
function StrFormatByteSize64(qdw: Currency; pszBuf: AnsiString; cchBuf: UINT): Longint; external 'StrFormatByteSize64A@shlwapi.dll stdcall';
function StrFromTimeInterval(pszOut: String; cchMax: UINT; dwTimeMS: DWORD; digits: Byte): Integer; external 'StrFromTimeInterval{#A}@shlwapi.dll stdcall';
function CreateFile(lpFileName: String; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: Longint; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle): THandle; external 'CreateFile{#A}@kernel32.dll stdcall';
function WriteFile(hFile: THandle; lpBuffer: Longint; nNumberOfBytesToWrite: DWORD; var lpNumberOfBytesWritten: DWORD; lpOverlapped: Longint): BOOL; external 'WriteFile@kernel32.dll stdcall';
function GetProcessHeap(): THandle; external 'GetProcessHeap@kernel32.dll stdcall';
function HeapAlloc(hHeap: THandle; dwFlags, dwBytes: DWORD): Longint; external 'HeapAlloc@kernel32.dll stdcall';
function HeapFree(hHeap: THandle; dwFlags: DWORD; lpMem: Longint): BOOL; external 'HeapFree@kernel32.dll stdcall';
function HeapSize(hHeap: THandle; dwFlags: DWORD; lpMem: Longint): DWORD; external 'HeapSize@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';

///////////////////////////////////////////////////
function TicksToTime(const dwTicks: DWORD): String;
begin
    Result := StringOfChar(#0, StrFromTimeInterval(Result, 0, dwTicks, 8));
    StrFromTimeInterval(Result, Length(Result)+1, dwTicks, 8);
end;

////////////////////////////////////////////////////////
function BytesToSize(const exBytes: Double): AnsiString;
begin
    Result := StringOfChar(#0, 15);
    if Abs(exBytes) > 9.223372036854775807E18 then exBytes := 0;
#ifdef UNICODE
    Result := CastIntegerToAnsiString(StrFormatByteSize64(Abs(exBytes div 1E4), Result, Length(Result)));
#else
    Result := CastIntegerToString(StrFormatByteSize64(Abs(exBytes div 1E4), Result, Length(Result)));
#endif
end;

////////////////////////////////////////////////////
function DownloadFile(const szURL: String): Boolean;
var
    hConnect, hSession, hFile, hHeap: THandle;
    szHeader, szFileName: String;
    dwBufferLength, dwIndex, dwStartDownload, dwStart, dwElapsed, dwWritten: DWORD;
    lpBuffer, lpStatus, lpSize: Longint;
    ib: INTERNET_BUFFERS;
begin
    try
        hSession := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, '', '', 0);
        if hSession = 0 then Exit;

        // additional header
        szHeader := 'Referer: http://example.org/'#13#10;

        // try direct link
        repeat
            hConnect := InternetOpenUrl(hSession, szURL, szHeader, Length(szHeader), INTERNET_FLAG_NO_CACHE_WRITE or INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_RELOAD or INTERNET_FLAG_NO_AUTO_REDIRECT, 0);
            if hConnect = 0 then Exit;
            dwBufferLength := SizeOf(lpBuffer);
            dwIndex := 0;
            lpStatus := 0;
            if not HttpQueryInfo(hConnect, HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER, lpStatus, dwBufferLength, dwIndex) then Exit;
            lpBuffer := 0;
            HttpQueryInfo(hConnect, HTTP_QUERY_LOCATION, lpBuffer, dwBufferLength, dwIndex);
            if DLLGetLastError = ERROR_INSUFFICIENT_BUFFER then
            begin
                szURL := StringOfChar(#0, dwBufferLength-1);
                if not _HttpQueryInfo(hConnect, HTTP_QUERY_LOCATION, szURL, dwBufferLength, dwIndex) then Exit;
                if lpStatus = HTTP_STATUS_REDIRECT then InternetCloseHandle(hConnect);
            end;
        until lpStatus = HTTP_STATUS_OK;

        // get file size
        dwBufferLength := 4;
        dwIndex := 0;
        if not HttpQueryInfo(hConnect, HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER, lpSize, dwBufferLength, dwIndex) then Exit;

        // save dialog
        szFileName := ExpandConstant('{userdesktop}\' + ExtractFileName(szURL));
        if szFileName <> '' then
        try
            hFile := CreateFile(szFileName, GENERIC_READ or GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);  //create file
            if hFile = 0 then Exit;
            hHeap := GetProcessHeap();
            lpBuffer := HeapAlloc(hHeap, HEAP_ZERO_MEMORY, 4*1024);    // buffer size must be >= 512Kb
            ib.dwStructSize := SizeOf(ib);
            ib.lpvBuffer := lpBuffer;
            ib.dwBufferLength := HeapSize(hHeap, 0, lpBuffer);

            // show page
            g_DownloadPage.Show;
            g_DownloadPage.ProgressBar.Show;
            g_DownloadPage.SetProgress(0, lpSize);

            // try download
            try
                // initial labels
                g_DownloadPage.Msg1Label.Caption := Format(
                    'Файл:'#9#9'%s'#13#10 +
                    'Загружено:'#9'%s из %s', [ExtractFileName(szFileName), BytesToSize(0), BytesToSize(lpSize)]
                );
                g_DownloadPage.Msg2Label.Caption := Format(
                    'Прогресс:'#9'%s'#13#10 +
                    'Скорость:'#9'%s/сек'#13#10 +
                    'Прошло:'#9'0 сек'#13#10 +
                    'Осталось:'#9'%d сек', [FormatFloat('0.#0 %', MulDiv(g_DownloadPage.ProgressBar.Position, 100, lpSize)), BytesToSize(0), MaxInt]
                );

                // download
                dwStartDownload := GetTickCount;
                while ib.dwBufferLength > 0 do
                begin
                    dwStart := GetTickCount;
                    dwElapsed := 0;
                    while dwElapsed < 1000 do
                    begin
                        // read file
                        InternetReadFileEx(hConnect, ib, IRF_SYNC, 0);

                        // write file
                        WriteFile(hFile, ib.lpvBuffer, ib.dwBufferLength, dwWritten, 0);
                        ib.dwBufferTotal := ib.dwBufferTotal + dwWritten;

                        // update progressbar
                        g_DownloadPage.ProgressBar.Position := ib.dwBufferTotal;

                        // process messages
                        Application.ProcessMessages;
                        dwElapsed := GetTickCount - dwStart;
                    end;

                    // update labels
                    dwElapsed := GetTickCount-dwStartDownload;
                    g_DownloadPage.Msg1Label.Caption := Format(
                        'Файл:'#9#9'%s'#13#10 +
                        'Загружено:'#9'%s из %s', [ExtractFileName(szFileName), BytesToSize(ib.dwBufferTotal), BytesToSize(lpSize)]
                    );
                    g_DownloadPage.Msg2Label.Caption := Format(
                        'Прогресс:'#9'%d %%'#13#10 +
                        'Скорость:'#9'%s/сек'#13#10 +
                        'Прошло:'#9'%s'#13#10 +
                        'Осталось:'#9'%d сек', [MulDiv(ib.dwBufferTotal, 100, lpSize), BytesToSize(MulDiv(ib.dwBufferTotal, 1000, dwElapsed)), TicksToTime(dwElapsed), MulDiv(lpSize-ib.dwBufferTotal, dwElapsed, 1000)/(ib.dwBufferTotal + 1)]
                    );
                end;
            except
                Result := False;    // error
            finally
            end;
        finally
            CloseHandle(hFile);
            HeapFree(hHeap, 0, lpBuffer);
            Result := ib.dwBufferTotal = lpSize;    // success
        end;
    except
        Result := False;    // error
    finally
        InternetCloseHandle(hConnect);
        InternetCloseHandle(hSession);
        g_DownloadPage.Hide;
    end;
end;

/////////////////////////////////////
procedure CreateDownloadProgressPage;
begin
    g_DownloadPage := CreateOutputProgressPage('Загрузка файла', '');
    with g_DownloadPage do
    begin
        Msg1Label.Height := Msg1Label.Height shl 1;
        Msg2Label.Height := Msg2Label.Height shl 2;
        Msg2Label.Top := ProgressBar.Top + ProgressBar.Height + ScaleY(5);
    end;
end;

/////////////////////////////
procedure InitializeWizard();
begin
    CreateDownloadProgressPage();
end;

//////////////////////////////////////////////////////
function NextButtonClick(CurPageID: Integer): Boolean;
begin
    Result := True;
    case CurPageID of
        wpWelcome: DownloadFile('http://mse.dlservice.microsoft.com/download/7/6/0/760B9188-4468-4FAD-909E-4D16FE49AF47/ruRU/x86/mseinstall.exe');
    end;
end;

Директория теперь будет указываться здесь, без участия окна "Сохранить как...":
Код:


  // save dialog
    szFileName := ExpandConstant('{userdesktop}\' + ExtractFileName(szURL));
    if szFileName <> '' then


icetanker 15-12-2014 12:21 2444205

а как сделать,чтобы сначала выполнялся блок CODE,когда скачивается файл,а потом Source: "1.ocx"; DestDir:"{sys}"; Flags:ignoreversion regserver

kotyarko@fb 15-12-2014 13:17 2444226

Цитата:

Цитата icetanker
а как сделать,чтобы сначала выполнялся блок CODE,когда скачивается файл,а потом Source: "1.ocx"; DestDir:"{sys}"; Flags:ignoreversion regserver »

А потом блок [Files]*.

Можно сделать функцию, которая будет возвращать определённый результат, в зависимости от чего-то:
Код:

[Files]
Source: "1.ocx"; DestDir: "{sys}"; Flags: ignoreversion regserver; Check: Checker

[*Code]
Function Checker(): Boolean;
begin
 Result := IsComponentSelected('aa');
end;


icetanker 15-12-2014 13:23 2444230

я правильно понял,у нас идет выполнение блоков,как они идут по коду общему?если я меняю блоки местами у меня этот блок так и пойдет?

kotyarko@fb 15-12-2014 13:27 2444232

Вложений: 1
Цитата:

Цитата icetanker
я правильно понял,у нас идет выполнение блоков,как они идут по коду общему? »

Нет, у них определённый порядок выполнения. В справке можно посмотреть (как они там перечислены, такой у них и порядок).
Всё приведено на прикреплённом скрине. Секция кода всегда последняя, а сетапа - первая.

icetanker 16-12-2014 08:57 2444493

а есть ли возможность вывести статус с регистрации ActiveX?
в Source в мануале про это не пишется,а хотелось бы понять регистрирует или нет?

Юрій_Окропірідзе@vk 16-12-2014 23:10 2444819

Здравствуйте. Подскажите пожалуйста как изменить размер окна инсталлятора и как подогнать кнопки

kotyarko@fb 16-12-2014 23:16 2444823

Цитата:

Цитата Юрій_Окропірідзе@vk
Подскажите пожалуйста как изменить размер окна инсталлятора и как подогнать кнопки »

Код:

[*Code]
Procedure InitializeWizard();
var
 HeigthAdv, WidthAdv: Integer;
begin
 HeightAdv := 200;
 WidthAdv := 200;
 with WizardForm do
 begin
  Width := WizardForm.Width + WidthAdv;
  Height := WizardForm.Height + HeightAdv;
  NextButton.Top := .... + HeightAdv;
  NextButton.Left := .... + WidthAdv;
  CancelButton......
  .....
 end;
end;

И дальше по компонентам, нуждающимся в перемещении, после увеличения размера визарда.

saurn 16-12-2014 23:32 2444836

Юрій_Окропірідзе@vk, kotyarko@fb, добавлю, координаты правильней указывать так:
Код:

Left := ScaleX( ... );
Top := ScaleY( ... );
Width := ScaleX( ... );
Height := ScaleX( ... );
//SetBounds( ScaleX( Left ), ScaleY( Top ), ScaleX( Width ), ScaleY( Height ) )

Чтобы потом невозникало проблем, типа: кнопка съехала, текст оказался не там, где должен быть и т.д.

kotyarko@fb 17-12-2014 00:19 2444865

Цитата:

Цитата saurn
координаты правильней указывать так »

Не сказал бы.

Цитата:

Цитата saurn
Чтобы потом невозникало проблем, типа: кнопка съехала, текст оказался не там, где должен быть и т.д. »

Имеется ввиду масштабирование? - Тут есть два варианта: либо указывать всё по-простому, как в моём примере, либо указывать всё через шкалы. Но и это не решит полностью проблему.

Юрій_Окропірідзе@vk 17-12-2014 00:25 2444869

Цитата:

Цитата saurn
Юрій_Окропірідзе@vk, kotyarko@fb, добавлю, координаты правильней указывать так:
Код:
Left := ScaleX( ... );
Top := ScaleY( ... );
Width := ScaleX( ... );
Height := ScaleX( ... );
//SetBounds( ScaleX( Left ), ScaleY( Top ), ScaleX( Width ), ScaleY( Height ) )
Чтобы потом невозникало проблем, типа: кнопка съехала, текст оказался не там, где должен быть и т.д. »

Ребята , я только начинаю все это учить и для начинающего можна как то по проще ?

saurn 17-12-2014 00:37 2444875

Цитата:

Цитата kotyarko@fb
Не сказал бы. »

При указании по-простому координаты являются фактическими. И в этом случае колличество точек на дюйм, на конечной машине, до лампочки.
Для наглядности:
Скрытый текст
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp


[code]
procedure InitializeWizard();
begin
  WizardForm.ClientHeight := 376;
  WizardForm.ClientWidth := 691;
  //WizardForm.ClientHeight := ScaleY(376);
  //WizardForm.ClientWidth := ScaleX(691);
end;


Запустите такой инстал при стандартном размере текста и, на первый взгляд, все будет нормально. А теперь измените размер шрифта в системе, скажем на средний. Так что, хозяин-барин, но пользователям это врятли понравится.

Юрій_Окропірідзе@vk 17-12-2014 00:44 2444878

Короче как сделать инстал так как справа , примерных размеров https://yadi.sk/i/G9y08jdjdRhpL

saurn 17-12-2014 01:02 2444893

Цитата:

Цитата Юрій_Окропірідзе@vk
я только начинаю все это учить »

Скрытый текст
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[code]
procedure ModifyWizardForm();
begin
    with WizardForm do
    begin
        //форма мастера
       
BorderStyle := bsDialog;// Стиль бордюра окна
       
ClientWidth := ScaleX( 700 );// ширина окна
       
ClientHeight := ScaleY( 355 ); // высота окна
       
Position := poScreenCenter; // позиция окна, в данном случае по центру экрана
        //основные элементы формы
        // указываем координаты с помощью procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
        //procedure SetBounds(отступ от левого края, отступ от веркнего края, ширина, высота: Integer);
       
OuterNotebook.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( ClientWidth ), ScaleY( 302 ) );// внешний ноутбук
       
InnerNotebook.SetBounds( ScaleX( 12 ), ScaleY( 62 ), ScaleX( 474 ), ScaleY( 238 ) );// внутренний ноутбук
       
Bevel1.SetBounds( ScaleX( 0 ), ScaleY( 60 ), ScaleX( ClientWidth ), ScaleY( 3 ) );// верхняя линия
       
Bevel.SetBounds( ScaleX( 0 ), ScaleY( 302 ), ScaleX( ClientWidth ), ScaleY( 2 ) );// нижняя линия
       
BeveledLabel.Top := ScaleY( 294 );

        MainPanel.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( ClientWidth ), ScaleY( 60 ) ); // заглавная панель
       
WizardSmallBitmapImage.SetBounds( ScaleX( 0 ), ScaleY( 0 ), ScaleX( ClientWidth ), ScaleY( 60 ) );// маленькое изображение в углу мастера
       
PageNameLabel.SetBounds( ScaleX( 16 ), ScaleY( 10 ), ScaleX( 324 ), ScaleY( 14 ) );// заголовок страницы
       
PageDescriptionLabel.SetBounds( ScaleX( 24 ), ScaleY( 26 ), ScaleX( 316 ), ScaleY( 28 ) );// подзаголовок страницы

       
BackButton.SetBounds( ScaleX( 454 ), ScaleY( 318 ), ScaleX( 75 ), ScaleY( 23 ) );// кнопка назад
       
NextButton.SetBounds( ScaleX( 534 ), ScaleY( 318 ), ScaleX( 75 ), ScaleY( 23 ) );// кнопка далее
       
CancelButton.SetBounds( ScaleX( 614 ), ScaleY( 318 ), ScaleX( 75 ), ScaleY( 23 ) );// кнопка отмена
   
end;
end;

procedure InitializeWizard();
begin
    ModifyWizardForm();
end;


kotyarko@fb 17-12-2014 01:27 2444908

Цитата:

Цитата saurn
Запустите такой инстал при стандартном размере текста и, на первый взгляд, все будет нормально. А теперь измените размер шрифта в системе, скажем на средний. »

Одно и то же.

saurn 17-12-2014 01:38 2444916

Цитата:

Цитата kotyarko@fb
Одно и то же. »

Ой ли?
Скрытый текст

Следует учитывать, что хотя бы у одного из тысячи ваших пользователей может быть установлен другой размер шрифта(колличество точек на дюйм)

kotyarko@fb 17-12-2014 01:55 2444920

Цитата:

Цитата saurn
Следует учитывать, что хотя бы у одного из тысячи ваших пользователей может быть установлен другой размер шрифта(колличество точек на дюйм) »

Для этого было введено предупреждение, если масштабирование включено.

saurn 17-12-2014 02:08 2444922

Цитата:

Цитата kotyarko@fb
предупреждение, если масштабирование включено. »

Скрин с вашего инстала, при разрешении 120 на дюйм. На нем видно о чем я говорил. Думаю коментарии излишни.
Скрытый текст

Чтобы избежать этих проблем, координаты контролов необходимо указывать согласно размеру клиента, что и происходит при использовании функций ScaleX( ... ), ScaleY( ... ).
Лирическое отступление
Понятно, что проще и быстрее написать проверку на предмет нестандартного размера шрифта, чем перелопативать половину скрипта, но каков смысл этого предупреждения? Увидел пользователь сообщение, что у него в системе включено масштабирование, и начинаются лишние телодвижения(пойди, измени размер шрифта, если вообще знаешь где, выйди из системы, чтобы применить изменения)... Большинству это не понравится. По опыту знаю, многие даже не снимают гирьку с кнопочки Далее, не говоря уж о изменениях настроек системы. Лучше и правильней потратить больше времени на написание скрипта, чтобы результат устраивал автора и не вызывал головной боли у пользователя. Но это мое мнение. А там, конечно, кому как.

kotyarko@fb 17-12-2014 15:19 2445067

Цитата:

Цитата saurn
Скрин с вашего инстала, при разрешении 120 на дюйм. На нем видно о чем я говорил. Думаю коментарии излишни. »

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

Цитата:

Цитата saurn
но каков смысл этого предупреждения? Увидел пользователь сообщение, что у него в системе включено масштабирование »

..и будет в курсе, в чём проблема если что-то не так.

Цитата:

Цитата saurn
Лучше и правильней потратить больше времени на написание скрипта, чтобы результат устраивал автора и не вызывал головной боли у пользователя. »

Согласен. Тогда попробую всё сделать через шкалы, спасибо за разъяснения.

El Sanchez 18-12-2014 10:22 2445288

Цитата:

Цитата Юрій_Окропірідзе@vk
Подскажите пожалуйста как изменить размер окна инсталлятора »

Вот процедура, в параметрах указываем относительные/абсолютные размеры.
Скрытый текст

Код:

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[CustomMessages]
ru.WizardDeltaWidthInvalid=Прирост формы по ширине должен быть в диапазоне от %1 до %2
ru.WizardDeltaHeightInvalid=Прирост формы по высоте должен быть в диапазоне от %1 до %2
ru.WizardWidthInvalid=Ширина формы должна быть в диапазоне от 0 до %1
ru.WizardHeightInvalid=Высота формы должна быть в диапазоне от 0 до %1

[code]
#define A = (Defined UNICODE) ? "W" : "A"
const
   
SPI_GETWORKAREA = $0030;

// Large Integer Functions
function MulDiv(nNumber, nNumerator, nDenominator: Integer): Integer; external 'MulDiv@kernel32.dll stdcall';
// Configuration Reference
function SystemParametersInfo(uiAction, uiParam: UINT; var pvParam: TRect; fWinIni: UINT): BOOL; external 'SystemParametersInfo{#A}@user32.dll stdcall';

////////////////////////////////////////////////////////////////////////////
procedure RecreateWizardForm(const cx, cy: Longint; const IsDelta: Boolean);
// IsDelta : True - cx, cy is delta width/height, False - cx, cy is width/height
// cx......: delta width / width
// cy......: delta height / height
var
   
rt: TRect;
    dx, dy: Longint;
begin
   
{ get deltas }
   
if not IsDelta then
    begin
       
cx := cx - WizardForm.Width;
        cy := cy - WizardForm.Height;
    end;

    { check deltas }
   
if SystemParametersInfo(SPI_GETWORKAREA, 0, rt, 0) then
    begin
       
{ check delta width }
       
if (cx < -WizardForm.Width) or (cx > rt.Right - WizardForm.Width) then
        begin
            if
IsDelta then
               
MsgBox(FmtMessage(CustomMessage('WizardDeltaWidthInvalid'), [IntToStr(-WizardForm.Width), IntToStr(rt.Right - WizardForm.Width)]), mbError, MB_OK)
            else
               
MsgBox(FmtMessage(CustomMessage('WizardWidthInvalid'), [IntToStr(rt.Right)]), mbError, MB_OK);
            Exit;
        end;

        { check delta height }
       
if (cy < -WizardForm.Height) or (cy > rt.Bottom - WizardForm.Height) then
        begin
            if
IsDelta then
               
MsgBox(FmtMessage(CustomMessage('WizardDeltaHeightInvalid'), [IntToStr(-WizardForm.Height), IntToStr(rt.Bottom - WizardForm.Height)]), mbError, MB_OK)
            else
               
MsgBox(FmtMessage(CustomMessage('WizardHeightInvalid'), [IntToStr(rt.Bottom)]), mbError, MB_OK);
            Exit;
        end;
    end;

    { WizardForm }
   
with WizardForm do
    begin
       
{ WizardForm }
       
Width := Width + cx;
        Height := Height + cy;

        { buttons }
       
CancelButton.Left := CancelButton.Left + cx;
        CancelButton.Top := CancelButton.Top + cy;
        NextButton.Left := NextButton.Left + cx;
        NextButton.Top := NextButton.Top + cy;
        BackButton.Left := BackButton.Left + cx;
        BackButton.Top := BackButton.Top + cy;

        { common }
       
OuterNotebook.ClientWidth := ClientWidth;
        OuterNotebook.ClientHeight := OuterNotebook.ClientHeight + cy;
        InnerNotebook.Width := InnerNotebook.Width + cx;
        InnerNotebook.Height := InnerNotebook.Height + cy;
        MainPanel.ClientWidth := ClientWidth;
        WizardSmallBitmapImage.Left := WizardSmallBitmapImage.Left + cx;
        PageNameLabel.Width := PageNameLabel.Width + cx;
        PageDescriptionLabel.Width := PageDescriptionLabel.Width + cx;
        Bevel1.Width := Bevel1.Width + cx;
        Bevel.Width := Bevel.Width + cx;
        Bevel.Top := Bevel.Top + cy;
        BeveledLabel.Top := BeveledLabel.Top + cy;

        { wpWelcome }
       
dx := MulDiv(cy, WizardBitmapImage.Width, WizardBitmapImage.Height);
        WizardBitmapImage.Width := WizardBitmapImage.Width + dx;
        WizardBitmapImage.Height := WizardBitmapImage.Height + cy;
        WelcomeLabel1.Left := WelcomeLabel1.Left + dx;
        WelcomeLabel1.Width := WelcomeLabel1.Width + cx - dx;
        dy := WelcomeLabel1.Height;
        WelcomeLabel1.AdjustHeight;
        dy := WelcomeLabel1.Height - dy;
        WelcomeLabel2.Top := WelcomeLabel2.Top + dy;
        WelcomeLabel2.Left := WelcomeLabel2.Left + dx;
        WelcomeLabel2.Width := WelcomeLabel2.Width + cx - dx;
        WelcomeLabel2.AdjustHeight;

        { wpLicense }
       
LicenseLabel1.Width := LicenseLabel1.Width + cx;
        dy := LicenseLabel1.Height;
        LicenseLabel1.AdjustHeight;
        dy := LicenseLabel1.Height - dy;
        LicenseMemo.Top := LicenseMemo.Top + dy;
        LicenseMemo.Width := LicenseMemo.Width + cx;
        LicenseMemo.Height := LicenseMemo.Height + cy - dy;
        LicenseAcceptedRadio.Top := LicenseAcceptedRadio.Top + cy;
        LicenseAcceptedRadio.Width := LicenseAcceptedRadio.Width + cx;
        LicenseNotAcceptedRadio.Top := LicenseNotAcceptedRadio.Top + cy;
        LicenseNotAcceptedRadio.Width := LicenseNotAcceptedRadio.Width + cx;

        { wpPassword }
       
PasswordLabel.Width := PasswordLabel.Width + cx;
        dy := PasswordLabel.Height;
        PasswordLabel.AdjustHeight;
        dy := PasswordLabel.Height - dy;
        PasswordEditLabel.Top := PasswordEditLabel.Top + dy;
        PasswordEditLabel.Width := PasswordEditLabel.Width + cx;
        PasswordEdit.Top := PasswordEdit.Top + dy;
        PasswordEdit.Width := PasswordEdit.Width + cx;

        { wpInfoBefore }
       
InfoBeforeClickLabel.Width := InfoBeforeClickLabel.Width + cx;
        dy := InfoBeforeClickLabel.Height;
        InfoBeforeClickLabel.AdjustHeight;
        dy := InfoBeforeClickLabel.Height - dy;
        InfoBeforeMemo.Top := InfoBeforeMemo.Top + dy;
        InfoBeforeMemo.Width := InfoBeforeMemo.Width + cx;
        InfoBeforeMemo.Height := InfoBeforeMemo.Height + cy - dy;

        { wpUserInfo }
       
UserInfoNameLabel.Width := UserInfoNameLabel.Width + cx;
        UserInfoNameEdit.Width := UserInfoNameEdit.Width + cx;
        UserInfoOrgLabel.Width := UserInfoOrgLabel.Width + cx;
        UserInfoOrgEdit.Width := UserInfoOrgEdit.Width + cx;
        UserInfoSerialLabel.Width := UserInfoSerialLabel.Width + cx;
        UserInfoSerialEdit.Width := UserInfoSerialEdit.Width + cx;

        { wpSelectDir }
       
SelectDirLabel.Width := SelectDirLabel.Width + cx;
        SelectDirLabel.AdjustHeight;
        SelectDirBrowseLabel.Width := SelectDirBrowseLabel.Width + cx;
        dy := SelectDirBrowseLabel.Height;
        SelectDirBrowseLabel.AdjustHeight;
        dy := SelectDirBrowseLabel.Height - dy;
        DirEdit.Top := DirEdit.Top + dy;
        DirEdit.Width := DirEdit.Width + cx;
        DirBrowseButton.Top := DirBrowseButton.Top + dy;
        DirBrowseButton.Left := DirBrowseButton.Left + cx;
        DiskSpaceLabel.Width := DiskSpaceLabel.Width + cx;
        dy := DiskSpaceLabel.Height;
        DiskSpaceLabel.AdjustHeight;
        dy := DiskSpaceLabel.Height - dy;
        DiskSpaceLabel.Top := DiskSpaceLabel.Top + cy - dy;

        { wpSelectComponents }
       
SelectComponentsLabel.Width := SelectComponentsLabel.Width + cx;
        dy := SelectComponentsLabel.Height;
        SelectComponentsLabel.AdjustHeight;
        dy := SelectComponentsLabel.Height - dy;
        TypesCombo.Top := TypesCombo.Top + dy;
        TypesCombo.Width := TypesCombo.Width + cx;
        ComponentsList.Top := ComponentsList.Top + dy;
        ComponentsList.Width := ComponentsList.Width + cx;
        ComponentsList.Height := ComponentsList.Height + cy - dy;
        ComponentsDiskSpaceLabel.Width := ComponentsDiskSpaceLabel.Width + cx;
        dy := ComponentsDiskSpaceLabel.Height;
        ComponentsDiskSpaceLabel.AdjustHeight;
        dy := ComponentsDiskSpaceLabel.Height - dy;
        ComponentsDiskSpaceLabel.Top := ComponentsDiskSpaceLabel.Top + cy - dy;

        { wpSelectProgramGroup }
       
SelectStartMenuFolderLabel.Width := SelectStartMenuFolderLabel.Width + cx;
        SelectStartMenuFolderLabel.AdjustHeight;
        SelectStartMenuFolderBrowseLabel.Width := SelectStartMenuFolderBrowseLabel.Width + cx;
        dy := SelectStartMenuFolderBrowseLabel.Height;
        SelectStartMenuFolderBrowseLabel.AdjustHeight;
        dy := SelectStartMenuFolderBrowseLabel.Height - dy;
        GroupEdit.Top := GroupEdit.Top + dy;
        GroupEdit.Width := GroupEdit.Width + cx;
        GroupBrowseButton.Top := GroupBrowseButton.Top + dy;
        GroupBrowseButton.Left := GroupBrowseButton.Left + cx;
        NoIconsCheck.Top := NoIconsCheck.Top + cy;
        NoIconsCheck.Width := NoIconsCheck.Width + cx;

        { wpSelectTasks }
       
SelectTasksLabel.Width := SelectTasksLabel.Width + cx;
        dy := SelectTasksLabel.Height;
        SelectTasksLabel.AdjustHeight;
        dy := SelectTasksLabel.Height - dy;
        TasksList.Top := TasksList.Top + dy;
        TasksList.Width := TasksList.Width + cx;
        TasksList.Height := TasksList.Height + cy - dy;

        { wpReady }
       
ReadyLabel.Width := ReadyLabel.Width + cx;
        dy := ReadyLabel.Height;
        ReadyLabel.AdjustHeight;
        dy := ReadyLabel.Height - dy;
        ReadyMemo.Top := ReadyMemo.Top + dy;
        ReadyMemo.Width := ReadyMemo.Width + cx;
        ReadyMemo.Height := ReadyMemo.Height + cy - dy;

        { wpPreparing }
       
PreparingLabel.Width := PreparingLabel.Width + cx;
        PreparingMemo.Width := PreparingMemo.Width + cx;
        PreparingMemo.Height := PreparingMemo.Height + cy;

        { wpInstalling }
       
StatusLabel.Width := StatusLabel.Width + cx;
        FilenameLabel.Width := FilenameLabel.Width + cx;
        ProgressGauge.Width := ProgressGauge.Width + cx;

        { wpInfoAfter }
       
InfoAfterClickLabel.Width := InfoAfterClickLabel.Width + cx;
        dy := InfoAfterClickLabel.Height;
        InfoAfterClickLabel.AdjustHeight;
        dy := InfoAfterClickLabel.Height - dy;
        InfoAfterMemo.Top := InfoAfterMemo.Top + dy;
        InfoAfterMemo.Width := InfoAfterMemo.Width + cx;
        InfoAfterMemo.Height := InfoAfterMemo.Height + cy - dy;

        { wpFinished }
       
WizardBitmapImage2.Width := WizardBitmapImage2.Width + dx;
        WizardBitmapImage2.Height := WizardBitmapImage2.Height + cy;
        FinishedHeadingLabel.Left := FinishedHeadingLabel.Left + dx;
        FinishedHeadingLabel.Width := FinishedHeadingLabel.Width + cx - dx;
        dy := FinishedHeadingLabel.Height;
        FinishedHeadingLabel.AdjustHeight;
        dy := FinishedHeadingLabel.Height - dy;
        FinishedLabel.Top := FinishedLabel.Top + dy;
        FinishedLabel.Left := FinishedLabel.Left + dx;
        FinishedLabel.Width := FinishedLabel.Width + cx - dx;
        FinishedLabel.AdjustHeight;
        RunList.Left := RunList.Left + dx;
        RunList.Width := RunList.Width + cx - dx;
        dy := RunList.Top;
        RunList.Top := FinishedPage.Height - RunList.Height;
        dy := RunList.Top - dy;
        YesRadio.Top := YesRadio.Top + dy;
        YesRadio.Left := YesRadio.Left + dx;
        YesRadio.Width := YesRadio.Width + cx - dx;
        NoRadio.Top := NoRadio.Top + dy;
        NoRadio.Left := NoRadio.Left + dx;
        NoRadio.Width := NoRadio.Width + cx - dx;

        { new position }
       
Center;
    end;
end;

///////////////////////////
procedure InitializeWizard;
begin
   
RecreateWizardForm(150, 50, True);
end;


Kashtan007 20-12-2014 13:40 2446073

Всем привет.
Как на странице TasksPage изменить текст на кнопке, вместо "Далее" написать "Установить".
Заранее спасибо за ответ!

saurn 20-12-2014 13:57 2446077

Цитата:

Цитата Kashtan007
Как на странице TasksPage изменить текст на кнопке, вместо "Далее" написать "Установить". »

Код:

procedure CurPageChanged( CurPageID: Integer );
begin
    case CurPageID of
        wpSelectTasks: WizardForm.NextButton.Caption := SetupMessage( msgButtonInstall );
    end;
end;


Irenis 20-12-2014 19:18 2446155

Всем приветик :) Возник небольшой вопрос. Нужно сделать такой установщик, который бы автоматически устанавливал некоторые файлы игры по пути C:\Users\%Username%\AppData\Local\Temp\Client. Где и что в скрипте написать, какой код?

То есть например, когда мне нужно было, чтоб установка происходила в ProgramData, подсказали такой код:
[Files]
Source: "C:\ProgramData\Firefly Studios\*"; DestDir: "{commonappdata}\Firefly Studios"; Flags: ignoreversion recursesubdirs createallsubdirs

Может тут тоже все просто и нужно просто что то другое написать вместо {commonappdata}? Подскажите пожалуйста. Спасибо :yes:

TryRooM 20-12-2014 20:05 2446168

Irenis,

Папка Local {localappdata}
Папка Temp служит для хранения временных файлов. Настройки и компоненты там не хранят.

Irenis 20-12-2014 20:22 2446174

Цитата:

Цитата TryRooM
Папка Local {localappdata}
Папка Temp служит для хранения временных файлов. Настройки и компоненты там не хранят. »

Спасибо большое, сейчас попробую, что получится :) Вообще да, читала, что Temp для хранения временных файлов. Но игру качала с оф. сайта. И основной контент установился именно в эту папку.

Kashtan007 21-12-2014 00:08 2446232

При нажатии на компонент воспроизводится звук, делал по этому примеру Скачать
Есть проблема, что когда ты выбираешь компонент, к которому прикручен звук, то после этого звук воспроизводится на всех компонентах.
На сколько я понимаю, то когда мы выбираем компонент со звуком, то все остальные компоненты унаследуют от него звук, как сделать так, чтобы звук не воспроизводился на других компонентах.
Заранее спасибо за помощь!

Dodakaedr 21-12-2014 00:15 2446234

Цитата:

Цитата Kashtan007
то все остальные компоненты унаследуют от него звук »

Проверил, у меня такого нету, все норм.

Kashtan007 21-12-2014 00:26 2446238

Dodakaedr, сорри, немного не то кинул.
Вот держите Тык
Выберите компонент со звуком, а потом нажмите на компонент "Пример".

Dodakaedr 21-12-2014 00:30 2446240

Kashtan007, "Тык" - страница с ошибкой.

Kashtan007 21-12-2014 00:34 2446242

Dodakaedr, исправил.

saurn 21-12-2014 09:20 2446297

Kashtan007, http://forum.oszone.net/post-2438406-2071.html

Kashtan007 21-12-2014 10:53 2446318

saurn, благодарю.

Kashtan007 21-12-2014 11:08 2446320

При использовании скина не работает прокрутка мышкой, так как в установщике много компонентов, то прокручивать скроллбаром неудобно.
Как можно вернуть прокрутку мышкой? Заранее спасибо!

kotyarko@fb 21-12-2014 16:33 2446426

Цитата:

Цитата Kashtan007
Как можно вернуть прокрутку мышкой? »

http://forum.oszone.net/post-2308009-2259.html

Kashtan007 21-12-2014 17:30 2446451

kotyarko@fb, пробовал этот вариант, не работает.

sergey3695 21-12-2014 19:09 2446498

Kashtan007, https://code.google.com/p/vcl-styles...tylesInnoSetup

Okta_333 22-12-2014 09:59 2446727

Здравствуйте!
Подскажите пожалуйста как можно менять размер и положение кнопок. Пробовала скачать ISFD, но он у меня не работает (Windows 7).

Dodakaedr 22-12-2014 10:18 2446729

Okta_333, В свойствах кнопок задаете нужные вам параметры. В вашем случае вам нужен SetBounds
Скрытый текст
Код:

[setup]
appname=myprog
appversion=1.1
defaultdirname={pf}\myprog

[Code]
procedure RedesignWizardForm;
begin
  //кнопка далее
  with WizardForm.NextButton do
  begin
    SetBounds(ScaleX(261), ScaleY(319), ScaleX(128), ScaleY(31));
  end;

  //кнопка отмена
  with WizardForm.CancelButton do
  begin
    SetBounds(ScaleX(399), ScaleY(319), ScaleX(88), ScaleY(39));
  end;

  //кнопка назад
  with WizardForm.BackButton do
  begin
    Left := ScaleX(149);
  end;

end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;



Цитата:

Цитата Okta_333
Пробовала скачать ISFD »

Установите Inno Setup Ultra

Nordek 22-12-2014 16:32 2446874

Цитата:

Цитата Dodakaedr
Установите Inno Setup Ultra »

Не стоит предоставлять зеркала на файлы, если имеется возможность скачать с ссылок которые ранее предоставлял автор.
Ссылки имеются здесь на форуме в публичном доступе. Достаточно перейти в соседнюю тему. Ссылка на соседнюю тему предоставлена в первом сообщении данной темы. Ссылка на соседнюю тему: Inno Setup. Прочие вопросы
Полное местонахождение темы:
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Inno Setup. Прочие вопросы.

В теме Inno Setup. Прочие вопросы, перейдите к первому сообщению .
Левым щелчком мыши, нажмите на "Показать/скрыть: Различные сборки, русификаторы и полезные ссылки"
После нажатия на "Показать/скрыть: Различные сборки, русификаторы и полезные ссылки", отобразится содержание где первым будет видно:
Цитата:

Цитата El Sanchez


diman_21Ru 22-12-2014 22:45 2447015

Всем привет, Есть вариан зачеркнутый компонент уже с поставленной галочкой?

saurn 23-12-2014 07:21 2447110

Цитата:

Цитата diman_21Ru
Есть вариан зачеркнутый компонент уже с поставленной галочкой? »

Так, что ли?
Скрытый текст
Код:

[Setup]
AppName=MyProgram
AppVerName=1.0
DefaultDirName={pf}\MyProgram
OutputDir=...


[Components]
Name: one; Description: "Компонент 1";
Name: two; Description: "Компонент 2";


[Code]
var
    _OldEvent: TNotifyEvent;


procedure TNewCheckListBoxOnClickCheck( Sender: TObject );
var
    i: Integer;
begin
    _OldEvent( Sender );

    for i := TNewCheckListBox( Sender ).ItemCount - 1 downto 0 do
      case TNewCheckListBox( Sender ).Checked[i] of
          True: TNewCheckListBox( Sender ).ItemFontStyle[i] := [fsStrikeOut];
          False: TNewCheckListBox( Sender ).ItemFontStyle[i] := [];
      end;
end;


procedure InitializeWizard();
begin
  _OldEvent := WizardForm.ComponentsList.OnClickCheck;
  WizardForm.ComponentsList.OnClickCheck := @TNewCheckListBoxOnClickCheck;
end;


diman_21Ru 23-12-2014 09:54 2447142

saurn, Тут их можно снять мне нужно чтобы их нельзя было снимать вот код на зачеркнутый но без галочки Types: custom; Flags: fixed

saurn 23-12-2014 10:44 2447162

Цитата:

Цитата diman_21Ru
нужно чтобы их нельзя было снимать »

Ну тогда, так:
Скрытый текст
Код:

[Setup]
AppName=MyProgram
AppVerName=1.0
DefaultDirName={pf}\MyProgram
OutputDir=...


[Components]
Name: one; Description: "Компонент 1"; Flags: fixed; Types: full custom;
Name: two; Description: "Компонент 2"; Flags: fixed; Types: full custom;
Name: two2; Description: "Компонент 3"; Types: full;


[Code]
procedure InitializeWizard();
var
    i: Integer;
begin
    for i := WizardForm.ComponentsList.ItemCount - 1 downto 0 do
      case WizardForm.ComponentsList.ItemEnabled[i] of
          True: WizardForm.ComponentsList.ItemFontStyle[i] := [];
          False: WizardForm.ComponentsList.ItemFontStyle[i] := [fsStrikeOut];
      end;
end;


icetanker 23-12-2014 15:35 2447292

можно ли распаковать .exe,который уже был скомпилирован и посмотреть содержимое и как это сделать?

TryRooM 23-12-2014 16:00 2447299

icetanker,

Для распаковки инсталляторов созданных с помощью Inno Setup существую специальные программы.
Например, InnoExtractor,UniExtractor,Inno Setup Unpacker.
Одно но, при использовании расширенной версии от Restool, распаковать exe-шник не получиться.

Kashtan007 23-12-2014 17:59 2447344

При использовании скина не работает прокрутка мышкой, так как в установщике много компонентов, то прокручивать скроллбаром неудобно.
Как можно вернуть прокрутку мышкой? Заранее спасибо!

sergey3695, я не разобрался в том, что вы мне скинули (

Юрій_Окропірідзе@vk 24-12-2014 15:50 2447697

Здравствуйте. Вот столкнулся с одной проблемой , решил сделать лого через батву , и вот что получилось , пробылав на остальних репаках та же проблема. Помогите . Пожалуйста https://yadi.sk/i/5fQ_5ScNdas6X

saurn 24-12-2014 16:27 2447711

Юрій_Окропірідзе@vk, чтобы вам могли помочь, заливайте, пожалуйста скрипт с минимальным набором файлов, необходимых для компиляции и работы инстала, на какой-нибудь бесплатный обменник и прикрепляйте ссылку к сообщению.

Юрій_Окропірідзе@vk 24-12-2014 17:00 2447727

http://rghost.ru/59951236 Здесь чистый скрипт и на основе NFS

saurn 24-12-2014 17:28 2447731

Юрій_Окропірідзе@vk, http://rghost.ru/59951768

Юрій_Окропірідзе@vk 24-12-2014 17:39 2447736

Извините за столь глупый вопрос , но как вы это сделали? Просто я этот скрипт буду не здесь использовать , и очень интересно как вы ето сделали

saurn 24-12-2014 17:47 2447740

Юрій_Окропірідзе@vk, вы пошли по верному пути, но в оконцовке напутали с порядком применения процедур, переписав вызваную ранее другой, из-за этого был глюк с фоном, плюс совершенно ненужный дубль InitializeWizard2. Все что я изменил выделено в блоки линиями слешев (////////////////////////////)
Это:
Скрытый текст
Код:

MyLogo:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(480), ScaleX(300), ScaleY(100), False, False); - строка 326
и
with TLabel.Create(nil) do
  begin
      Parent := WizardForm;
      SetBounds(ScaleX(20), ScaleY(480), ScaleX(130), ScaleY(40));
      Transparent:=True;
      Cursor := crHand;
      OnClick:=@LogoLabelOnClick;
  end;  - строка 916 - 923


sergey3695 24-12-2014 18:21 2447752

Цитата:

Цитата Kashtan007
sergey3695, я не разобрался в том, что вы мне скинули ( »

Kashtan007, http://rghost.ru/59952866
В чем там разбираться? :dont-know

Юрій_Окропірідзе@vk 24-12-2014 20:06 2447781

Цитата:

Цитата saurn
Юрій_Окропірідзе@vk, вы пошли по верному пути, но в оконцовке напутали с порядком применения процедур, переписав вызваную ранее другой, из-за этого был глюк с фоном, плюс совершенно ненужный дубль InitializeWizard2. Все что я изменил выделено в блоки линиями слешев (////////////////////////////) »

Чувак, спасибо , все получилось , ты лучший!!!

Nordek 24-12-2014 23:20 2447868

Цитата:

Цитата sergey3695
В чем там разбираться? »

Скрипт не рабочий.


Скрытый текст
Код:

[Setup]
AppName=VCL Styles Example
AppVerName=VCL Styles Example v1.0
AppVersion=1.0.0.0
AppCopyright=The Road To Delphi
DefaultDirName={pf}\The Road To Delphi\VCL Styles Inno Demo
DefaultGroupName=The Road To Delphi
Compression=lzma
SolidCompression=true
OutputDir=.
OutputBaseFilename=Setup
VersionInfoVersion=1.0.0.0
VersionInfoCompany=The Road To Delphi
VersionInfoDescription=VCL Styles Setup
VersionInfoTextVersion=1, 0, 0, 0
InternalCompressLevel=max

[Files]
Source: VclStyles.dll; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system;
Source: Skin.vsf; DestDir: {app}; Flags: ignoreversion; Attribs: hidden system;

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
procedure LoadVCLStyle(VClStyleFile: String); external 'LoadVCLStyle{#A}@{tmp}\VclStyles.dll stdcall delayload';
procedure UnLoadVCLStyles; external 'UnLoadVCLStyles@{tmp}\VclStyles.dll stdcall delayload';

function InitializeSetup(): Boolean;
begin
  if not
FileExists(ExpandConstant('{tmp}\VclStyles.dll')) then ExtractTemporaryFile('VclStyles.dll');
  if not FileExists(ExpandConstant('{tmp}\Skin.vsf')) then ExtractTemporaryFile('Skin.vsf');
  LoadVCLStyle(ExpandConstant('{tmp}\Skin.vsf'));
  Result := True;
end;

procedure DeinitializeSetup();
begin
  UnLoadVCLStyles;
end;

function InitializeUninstall(): Boolean;
begin
 
FileCopy(ExpandConstant('{app}\VclStyles.dll'), ExpandConstant('{tmp}\VclStyles.dll'), False);
  FileCopy(ExpandConstant('{app}\Skin.vsf'), ExpandConstant('{tmp}\Skin.vsf'), False);
  LoadVCLStyle(ExpandConstant('{tmp}\Skin.vsf'));
  Result := True;
end;

procedure DeinitializeUninstall;
begin
 
UnLoadVCLStyles;
end;


sergey3695 25-12-2014 10:13 2447977

Цитата:

Цитата Nordek
Скрипт не рабочий. »

для Ansi. забыл :sorry:

ROMKA-1977 26-12-2014 18:03 2448650

Подскажите возможно ли в инсталяторах Inno Setup (использую стандартную Ansi) на странице распаковки архивов вывести подробный список установки как в инсталяторах NSIS ?

Dodakaedr 26-12-2014 20:09 2448705

ROMKA-1977,
Пример
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[Files]
Source: "compiler:Languages\*"; DestDir: {app}; BeforeInstall: AddToMemo; Flags: nocompression recursesubdirs createallsubdirs
Source: "compiler:Examples\*"; DestDir: {app}; BeforeInstall: AddToMemo; Flags: nocompression recursesubdirs createallsubdirs

[Code]
var
  FilesMemo: TNewMemo;

procedure AddToMemo();
var
  AFile: String;
begin
  AFile := ExpandConstant(CurrentFilename);
  if ExtractFileExt(AFile) = '' then
  FilesMemo.Lines.Add('CreateFolder: ' + RemoveBackslash(AFile))
  else
    FilesMemo.Lines.Add('Extract: ' + AFile);
end;

procedure InitializeWizard();
begin
  FilesMemo := TNewMemo.Create(WizardForm);
  FilesMemo.SetBounds(ScaleX(0), ScaleY(80), ScaleX(418), ScaleY(120));
  FilesMemo.WordWrap := False;
  FilesMemo.Parent := WizardForm.InstallingPage;
  FilesMemo.ScrollBars := ssVertical;
  FilesMemo.ReadOnly := True;
  FilesMemo.Clear;
end;


ekspoint 27-12-2014 00:09 2448803

[code]
var
DetailsButton: TNewButton;
FilesMemo: TNewMemo;
Flag: Boolean;

procedure AddToMemo();
var
AFile: String;
begin
AFile:=ExpandConstant(CurrentFilename);
If ExtractFileExt(AFile)='' then
FilesMemo.Lines.Add('Копирование: '+RemoveBackslash(AFile)) else
FilesMemo.Lines.Add('Извлечение: '+AFile);
end;

procedure HideShow(Sender: TObject);
begin
If not Flag then begin
FilesMemo.Hide;
DetailsButton.Caption:='Детали';
Flag:=True;
end else begin
FilesMemo.Show;
DetailsButton.Caption:='Скрыть';
Flag:=False;
end;
end;

procedure InitializeWizard12();
begin
WizardForm.ProgressGauge.Top:=ScaleY(34);

FilesMemo:=TNewMemo.Create(WizardForm);
with FilesMemo do
begin
SetBounds(ScaleX(50), ScaleY(80), ScaleX(630), ScaleY(321));
Parent:=WizardForm.InstallingPage;
WordWrap:=True;
ScrollBars:=ssVertical;
ReadOnly:=True;
Visible:=false;
Clear;
end;

DetailsButton:=TNewButton.Create(WizardForm);
with DetailsButton do
begin
Parent:=WizardForm.InstallingPage;
Left := ScaleX(605);
Top := ScaleY(35);
Width := ScaleX(75);
Height := ScaleY(30);
Font.Size:=9;
Font.Style:= [fsItalic];
Caption:='Детали';
OnClick:=@HideShow
end;
Flag:=True;
end;

ROMKA-1977 27-12-2014 10:30 2448864

Dodakaedr, ekspoint, код работает при упаковке средствами Inno Setup, а возможен ли вариант если упаковка в архивы (в моём случае архивы FreeArc + ISDone) ?

Irenis 28-12-2014 15:45 2449205

Подскажите пожалуйста, как сделать, чтобы приложение по умолчанию устанавливалось на диск C в Program Files.
Например, в этом случае, я так понимаю, установка будет происходить туда, куда укажет пользователь:

[Files]
Source: "D:\Games\Launcher\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

Что поменять, чтоб установилось в Program Files по умолчанию? Может вместо "{app}" что то поменять? Или как? Подскажите пожалуйста :yes:

saurn 28-12-2014 16:24 2449227

Irenis, Параметр DefaultDirName в секции Setup определяет каталог установки по умолчанию. Константа {pf} = ProgramFiles и ProgramFiles(x86) на 64-х разрядных системах.
  • DefaultDir={pf}\MyApp - создание папки приложения в корне папки ProgramFiles.
Если необходимо, чтобы программа всегда устанавливалась только в ProgramFiles, имеет смысл запретить пользователю выбор папки установки.
Скрытый текст
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

;отключить страницу выбора папки.
DisableDirPage=yes

[Files]
Source: "D:\Games\Launcher\*"; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs


Dodakaedr 28-12-2014 17:45 2449261

Цитата:

Цитата Irenis
Что поменять, чтоб установилось в Program Files по умолчанию? Может вместо "{app}" что то поменять? Или как? Подскажите пожалуйста »

Или же запретить изменять путь установки
Скрытый текст
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp

[Files]
Source: "D:\Games\Launcher\*"; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs

[Code]
procedure InitializeWizard();
begin
  with WizardForm.DirEdit do
  begin
    Enabled := False;
  end;

  with WizardForm.DirBrowseButton do
  begin
    Enabled := False;
  end;
end;


Irenis 28-12-2014 21:55 2449355

Спасибо :) Тут еще вот в чем дело. Игра состоит из лаунчера (который собственно и нужно было установить в Program Files), и из файлов самой игры. Так вот файлы эти должны устанавливаться в папку, которую укажет пользователь. В общем то разделить это все получилось и все устанавливается, куда надо. Единственное, что не так получается. На рабочем столе должен создаться ярлык, который запускает лаунчер, находящийся на диске С. Ярлык то создается, но находится файлик .exe не на диске С, а в папке с файлами игры и рабочая папка соответственно тоже та, в которую устанавливаются файлы игры. И ярлыком естественно ничего не запускается, так как он должен находиться на С. Вернее на диске С тоже есть этот .exe, но ярлык создается не из него. В общем ладно, сама уже запуталась, не знаю, как объяснить правильно :)

Решила в итоге не мудрить дальше, а поместить файлы игры и лаунчера в одну папку. Но вот думаю, будет ли это работать на виндовс 8. Просто это сам разработчик игры пишет, что лаунчер лучше устанавливать на диск С (особенно на виндовс 8). У меня виндовс 7, я этот лаунчер уже куда только не перемещала, все работает. А восьмерка никогда не стояла, вот и не знаю, отличаются ли они чем то существенно или нет. Но почему то кажется, если на семерке все работает, то и восьмерке должно работать?

saurn 28-12-2014 23:30 2449375

Irenis
Скрытый текст
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp


[Files]
;лаунчер ставим в x:\Program Files, независимо от выбора папки пользователем
Source: "путь_к_лаунчеру"; DestDir: {pf}\папка программы; Flags: ignoreversion

;остальные файлы устанавливаем в папку по выбору пользователя
Source: "D:\Games\Launcher\*"; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs


[Icons]
;создаем ярлык для лаунчера
Name: {group}\имя; Filename: {pf}\папка программы\файл; WorkingDir: {pf}\папка программы;
Name: {commondesktop}\имя; Filename: {pf}\папка программы\файл; WorkingDir: {pf}\папка программы;


Цитата:

Цитата Irenis
будет ли это работать на виндовс 8 »

Разницы нет. Ну если только не считать индивидуальные глюки каждой новой системы за особенность.

Lex_from_Belarus 29-12-2014 00:45 2449391

Подскажите пожалуйста может кто сталкивался, что при использовании UninsHs (анинсталлер с возможностью модифицирования, а не просто удаления), когда количество компонентов много, то запоминание выбранных не происходит, если выбрать несколько компонентов, то всё ОК. Может кто сталкивался и вылечил либо вооще альтернативный вариант знает?

Nordek 29-12-2014 01:01 2449393

Цитата:

Цитата Irenis
не знаю, как объяснить правильно »

Цитата:

Цитата Пример
Есть игра которая отличается от обычной установки.
Одна часть представляет из себя большую часть файлов игры.
Вторая часть представляет из себя исполняющий файл Launcher.exe или исполняющий файл Launcher.exe и необходимые для его запуска компоненты.

Нужно, чтоб:
Одна часть установилась по умолчанию, т.е другими словами туда, куда укажет пользователь (в данном случае ярлык на рабочем столе не нужен).
Вторая часть была жёстко привязана к пути (путь примерной установки: "C:\Program Files\Launcher\"), затем на рабочем столе создавался ярлык для запуска Launcher.exe из этой же папки.



Цитата:

Цитата Irenis
как сделать »

Пример 1
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: Game\Files\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Game\Launcher\Launcher.exe; DestDir: {pf}\Launcher; Flags: ignoreversion

[Icons]
Name: {group}\My Program; Filename: {pf}\Launcher\Launcher.exe
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}
Name: {commondesktop}\My Program; Filename: {pf}\Launcher\Launcher.exe; Tasks: desktopicon

[Run]
Filename: {app}\Launcher\Launcher.exe; Description: {cm:LaunchProgram,My Program}; Flags: nowait postinstall skipifsilent


Пример 2
Код:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Files]
Source: Game\Files\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs
Source: Game\Launcher\*; DestDir: {pf}\Launcher; Flags: ignoreversion recursesubdirs createallsubdirs

[Icons]
Name: {group}\My Program; Filename: {pf}\Launcher\Launcher.exe
Name: {group}\{cm:UninstallProgram,My Program}; Filename: {uninstallexe}
Name: {commondesktop}\My Program; Filename: {pf}\Launcher\Launcher.exe; Tasks: desktopicon

[Run]
Filename: {app}\Launcher\Launcher.exe; Description: {cm:LaunchProgram,My Program}; Flags: nowait postinstall skipifsilent


Юрій_Окропірідзе@vk 31-12-2014 12:27 2450308

Здравствуйте. Как мне сделать такую же кнопку(info) в своем инсталляторе https://yadi.sk/i/sJ_2-at3divCk

saurn 31-12-2014 12:36 2450314

Цитата:

Цитата Юрій_Окропірідзе@vk
сделать такую же кнопку(info) »

Скрытый текст
Код:

[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp


[code]
procedure TButtonOnClick( Sender: TObject );
var
    MainForm: TSetupForm;
begin
    begin
        MainForm := CreateCustomForm();
        with MainForm do
        try
            BorderIcons := [];
            ClientWidth := ScaleX( 300 );
            ClientHeight := ScaleY( 300 );
            Caption := 'Информация';
            Position := poScreenCenter;

            with TBevel.Create( nil ) do
            begin
                Parent := MainForm;
                SetBounds( ScaleX( 8 ), ScaleY( 8 ), ScaleX( 284 ), ScaleY( 249 ) );
                Shape := bsFrame;
            end;

            with TNewStaticText.Create( nil ) do
            begin
                Parent := MainForm;
                SetBounds( ScaleX( 12 ), ScaleY( 12 ), ScaleX( 276 ), ScaleY( 241 ) );
                AutoSize := False;
                Caption := 'Информация:' + #13#10 +
                            'Версия:'    + #13#10 +
                            'И т.д.';
                WordWrap := True;
            end;

            with TButton.Create( nil ) do
            begin
                Parent := MainForm;
                SetBounds( ScaleX( 112 ), ScaleY( 266 ), ScaleX( 76 ), ScaleY( 25 ) );
                ModalResult := mrOk;
                Caption := 'Закрыть';
            end;

            ShowModal();
        finally

            Free;
        end;
    end;
end;


procedure InitializeWizard();
begin
    with TButton.Create( nil ) do
    begin
        Parent := WizardForm;
        Left := ScaleX( 12 );
        Top := ScaleY( 327 );
        Caption := 'Info';
        OnClick := @TButtonOnClick;
    end;
end;


Юрій_Окропірідзе@vk 31-12-2014 14:47 2450372

https://yadi.sk/i/vtpmpXtLdj2qU , тут вот какая то ошибка

Юрій_Окропірідзе@vk 31-12-2014 14:56 2450380

Вложений: 3
http://forum.oszone.net/attachment.p...1&d=1420026870
http://forum.oszone.net/attachment.p...1&d=1420026870
http://forum.oszone.net/attachment.p...1&d=1420026870
И еще , как в инстале изобразить такое ?

saurn 31-12-2014 15:08 2450386

Цитата:

Цитата Юрій_Окропірідзе@vk
тут вот какая то ошибка »

ANSI? Исправил пример в предыдущем посте.

Юрій_Окропірідзе@vk 31-12-2014 17:06 2450423

saurn, извините а вы знаете как изобразить так в инсталляторе как я написал выше ?

Юрій_Окропірідзе@vk 31-12-2014 23:28 2450538

Цитата:

Цитата saurn
[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirname={pf}\MyApp
[code]
procedure TButtonOnClick( Sender: TObject );
var
MainForm: TSetupForm;
begin
begin
MainForm := CreateCustomForm();
with MainForm do
try
BorderIcons := [];
ClientWidth := ScaleX( 300 );
ClientHeight := ScaleY( 300 );
Caption := 'Информация';
Position := poScreenCenter;
with TBevel.Create( nil ) do
begin
Parent := MainForm;
SetBounds( ScaleX( 8 ), ScaleY( 8 ), ScaleX( 284 ), ScaleY( 249 ) );
Shape := bsFrame;
end;
with TNewStaticText.Create( nil ) do
begin
Parent := MainForm;
SetBounds( ScaleX( 12 ), ScaleY( 12 ), ScaleX( 276 ), ScaleY( 241 ) );
AutoSize := False;
Caption := 'Информация:' + #13#10 +
'Версия:' + #13#10 +
'И т.д.';
WordWrap := True;
end;
with TButton.Create( nil ) do
begin
Parent := MainForm;
SetBounds( ScaleX( 112 ), ScaleY( 266 ), ScaleX( 76 ), ScaleY( 25 ) );
ModalResult := mrOk;
Caption := 'Закрыть';
end;
ShowModal();
finally
Free;
end;
end;
end;
procedure InitializeWizard();
begin
with TButton.Create( nil ) do
begin
Parent := WizardForm;
Left := ScaleX( 12 );
Top := ScaleY( 327 );
Caption := 'Info';
OnClick := @TButtonOnClick;
end;
end; »

Извините , а как на кнопку Info наложить текстуру ?

ROMKA-1977 01-01-2015 00:07 2450544

Вложений: 1
Юрій_Окропірідзе@vk,
Цитата:

Цитата Юрій_Окропірідзе@vk
И еще , как в инстале изобразить такое ? »

Так:

Юрій_Окропірідзе@vk 01-01-2015 01:58 2450553

Спасибо. Ах да , ребята , всех с Новым Годом :-))

habib2302 04-01-2015 13:23 2451713

Доброе время суток. Проблема в том, что после запуска инсталлятора для распаковки в {tmp} большого объема (8 гб), то инсталлятор долго грузится. можно ли как нибудь это исправить?

Dodakaedr 04-01-2015 16:02 2451789

Цитата:

Цитата habib2302
можно ли как нибудь это исправить? »

А обязательно все сразу распаковывать? Попробуйте непосредственно перед действием...

habib2302 04-01-2015 20:26 2451934

Цитата:

Цитата Dodakaedr
А обязательно все сразу распаковывать? Попробуйте непосредственно перед действием... »

в каком смысле

Dodakaedr 04-01-2015 20:38 2451935

Цитата:

Цитата habib2302
в каком смысле »

распаковать файл(ы) в тот момент когда они вызываются

habib2302 04-01-2015 21:13 2451962

Dodakaedr, и как организовать?

sergey3695 05-01-2015 18:59 2452324

habib2302, интересно как должны отвечать тебе без скрипта. 8 гб - что же там?

habib2302 05-01-2015 20:27 2452374

sergey3695, то я запаковываю Adobe Master Collection для лучшего сжатия в запакованном он весит 7.62 а без запаковки 11.5
Скрытый текст
Код:

; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "Adobe Creative Suite 6 Master Collection"
#define MyAppVersion "7.0.0.324"
#include "WinTB.iss"
#include "botva2.iss"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
DefaultGroupName={#MyAppName}
AllowNoIcons=true
DefaultDirName={tmp}\{#MyAppName}
OutputBaseFilename=Adobe Creative Suite 6 Master Collection
SetupIconFile=ico.ico
Compression=lzma/Ultra64
SolidCompression=false
InternalCompressLevel=Ultra64
DiskSpanning=true
DiskSliceSize=1572864000
ShowLanguageDialog=yes
SlicesPerDisk=1
RawDataResource=Botva:botva2.dll|b2p:b2p.dll|Logo:logo.png|bPic:bPic.png|LiPic:LiPic.png|aPic:aPic.png
AppModifyPath={app}
VersionInfoProductName={#MyAppName}
DirExistsWarning=no
DisableReadyPage=true
AppID={#MyAppName}
VersionInfoDescription={#MyAppName} RePack by Xabib
AppCopyright=Xabib © 2015
VersionInfoCopyright=Xabib © 2015
DisableFinishedPage=true
UninstallDisplayName={#MyAppName}
ComponentsListTVStyle=true
ShowComponentSizes=false
DisableProgramGroupPage=yes
InfoBeforeFile=Info.rtf
DisableDirPage=yes
Uninstallable=false
CreateAppDir=true
ReserveBytes=0

[Languages]
Name: "Russian"; MessagesFile: "Russian.isl"

[Files]
;Файлы распаковываемые в папку с игрой. Необходимы для деинсталлятора;
Source: {app}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs;
Source: WinTB.dll; Flags: dontcopy;
Source: ico.ico; DestDir: "{app}"; Flags: ignoreversion;
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов

[Run]
Filename: {win}\explorer.exe; Parameters: {app}\Crack; Flags: NoWait;
Filename: {app}\Crack\Activation_Keygen.exe; Flags: NoWait;
Filename: {sys}\notepad.exe; Parameters: {app}\Crack\readme.txt; Flags: NoWait;
Filename: {app}\Crack\Check_Disable.cmd; Flags: NoWait;
Filename: {app}\Adobe CS6\Set-up.exe;

[Code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
///////////////////////////////////Относится к лого и изображениям мастера
  RT_RCDATA            = 10;
LOAD_LIBRARY_AS_DATAFILE = $2;

var
///////////////////////////////////Лого и изображения
 lPLogo, bPicHandle, bPicHandle2, lPicHandle: THandle;
 BtnImage: TBitmapImage;
///////////////////////////////////////////
 iInitialize: Boolean;


///////////////////////////////////Ресурсы(относится к лого и изображениям мастера)
function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
  lResStream: TResourceStream;
begin
  lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
  try
    lResStream.SaveToFile(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  finally
  lResStream.Free;
  Result := FileExists(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  end;
end;

procedure RedesignWizardForm;
begin
  with WizardForm.ProgressGauge do
  begin
    Style := npbstMarquee;
  end;
end;

procedure InitializeWizard;
begin
  RedesignWizardForm;
  with WizardForm do
  begin

///////////////////////////////////Логотип и изображения мастера
    iInitialize := True;
    if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
    begin
///////////////////////////////////Изображения
      bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
      WizardBitmapImage.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(WelcomePage.Handle);

      bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
      WizardBitmapImage2.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(FinishedPage.Handle);

      lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
      WizardSmallBitmapImage.Hide;
      DiskSpaceLabel.Hide;
      ComponentsDiskSpaceLabel.Hide;
      ImgSetVisibility(lPicHandle, True);
      ImgApplyChanges(MainPanel.Handle);
////////////////////////////////////////////

///////////////////////////////////Логотип

      lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
      ImgApplyChanges(WizardForm.Handle);
    end;

///////////////////////////////////WinTB
    ExtractTemporaryFile('WinTB.dll');
    TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
//////////////////////////////////////

    with TLabel.Create(WizardForm) do
    begin
      Parent:=WizardForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
    end;
  end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
  wpSelectComponents: if WizardForm.Tag = 1 then
  begin
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
 end;
end;

procedure DeinitializeSetup();
begin
  if iInitialize then
  begin
    gdipShutdown;
    TaskBarDestroy;
  end;
end;


Habetdin 05-01-2015 20:57 2452390

habib2302, бедный установщик распаковывает всю папку {app}, чтобы добраться до WinTB.dll, используемого в секции кода.
Нужно переместить файл в начало архива + разделить его от solid-части:
Код:

[Files]
Source: WinTB.dll; Flags: ignoreversion dontcopy noencryption nocompression solidbreak;
Source: {app}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs;
Source: ico.ico; DestDir: {app}; Flags: ignoreversion;


palsn2000 06-01-2015 15:03 2452617

Здравствуйте, всех с Новым Годом! Здоровья, счастья и удачи.
__________________________

Столкнулся со следующей проблемой.
Делаю для себя набор программ - мелкие утилиты, ридеры, и прочее - в общем целая куча полезного разнообразия (чтобы при переустановке системы не тратить часы на поиск, установку и настройку). Часть программ 32-битные, другие 64/32-битные поэтому инсталлятор у меня работает в 32-битном режиме (как в Инно по умолчанию).

Проблема собственно заключается в том, что при установке на Windows 64 Inno setup отправляет записи в реестре в подпапку Wow6432Node и в связи с этим 64-битные программы работают некорректно.

Вот на примере программы Unlocker:
Строка реестра, отвечающая за язык программы (в моем случае русский):
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Unlocker]
"Language"="1049"
(вот такая причуда разработчиков, что файл конфигурации языка считывается из информации для удаления) но речь в общем то не об этом.

В Инно я пишу такую строку:
Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Unlocker; ValueType: string; ValueName: Language; ValueData: 1049; Flags: uninsdeletevalue uninsdeletekey

На выходе (в смысле в реестре ОС после инсталляции) имею:
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Unlocker]
"Language"="1049"

В итоге Unlocker на английском языке (64-битный Unlocker)

Можно ли как нибудь заставить Inno не добавлять Wow6432Node в эту запись в реестре?

saurn 06-01-2015 15:18 2452625

palsn2000, писать в HKLM64. В справке: Секция [Registry]

palsn2000 06-01-2015 15:35 2452642

saurn, Большое спасибо, а я всю голову изломал и в справку заглядывал, только вот рылся в поисках какого-нибудь параметра Flags или Check, а вопрос оказывается ещё проще решался.

ShadeUa 06-01-2015 18:29 2452707

Здраствуйте. Как сделать свою кнопку"Информация "(скрин1) с от таким окном(скрин2) из своей текстурой , но не через bmp ?
Скрин 1- https://yadi.sk/i/3y1tLu3zdp8dZ
скрин 2- https://yadi.sk/i/oBbSaT9sdp8ec

Okta_333 06-01-2015 19:04 2452720

Помогите пожалуйста разобраться. Когда в свой скрипт добавляю музыку, он прекрасно компилируется, но при запуске EXE, выдаёт вот такую ошибку:

Runtime Error (at 81:1179):
Access violation at address B0000001. Write of address B0000001.

Runtime Error (at 277:21):
Could not call proc.


Скрытый текст


#define GameName "My Programm"
#define PathGameName "My Programm"
#define GameEXE "MP.exe"
#define GameVersion "1.0"
#define InstallVersion "1.0"
#define RePacker "CaT"
#define NeedSize "7343"
#define NeedInstallSize "7353"
#define NeedMem "512"

;#define Components

#define Tasks

#define Music

;#define Splash

#define Russophobia


;#define records
;#define PrecompInside
;#define SrepInside
;#define facompress
;#define precomp "0.38"
;#define unrar /*
;#define XDelta /*
;#define PackZIP /*


[Setup]
AppName={#GameName}
AppPublisher=RePack by {#RePacker}
AppVerName={#GameName}
AppCopyright=© RePack by {#RePacker}
DefaultDirName={pf}\{#PathGameName}
DefaultGroupName={#PathGameName}
VersionInfoDescription=Installer - {#GameName}
VersionInfoTextVersion={#GameVersion}
VersionInfoVersion={#InstallVersion}
InternalCompressLevel=ultra64
SolidCompression=true
SetupIconFile="InstallFiles/MP.ico"
ShowTasksTreeLines=Yes
Compression=lzma/ultra64
OutputBaseFilename=MP
UninstallDisplayIcon={app}\{#GameEXE}
UninstallFilesDir={app}\Uninstall

;VersionInfoVersion=1.0
;VersionInfoCompany=

[Files]
Source: InstallFiles\*; DestDir: {tmp}; Flags: dontcopy
Source: dllFiles\*; DestDir: {tmp}; Flags: dontcopy

#ifdef Music
Source: Music\*; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef Splash
Source: Splash\*; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
#endif

Source: Include\russian.ini; DestDir: {tmp}; Flags: dontcopy
Source: Include\unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\ISDone.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef records
Source: Include\records.inf; DestDir: {tmp}; Flags: dontcopy
#endif

#ifdef PrecompInside
Source: Include\CLS-precomp.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packjpg_dll1.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\zlib1.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef SrepInside
Source: Include\CLS-srep.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef facompress
Source: Include\facompress.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef precomp
#if precomp == "0.38"
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.4"
Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
#else
#if precomp == "0.41"
Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
#else
Source: Include\precomp038.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp040.exe; DestDir: {tmp}; Flags: dontcopy
Source: Include\precomp041.exe; DestDir: {tmp}; Flags: dontcopy
#endif
#endif
#endif
#endif
#ifdef unrar
Source: Include\Unrar.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef XDelta
Source: Include\XDelta3.dll; DestDir: {tmp}; Flags: dontcopy
#endif
#ifdef PackZIP
Source: Include\7z.dll; DestDir: {tmp}; Flags: dontcopy
Source: Include\packZIP.exe; DestDir: {tmp}; Flags: dontcopy
#endif

[Registry]

#ifdef Components
[Types]
Name: full; Description: Ïîëíàÿ óñòàíîâêà; Flags: iscustom

[Components]
Name: InterfaceLanguage; Description: ßçûê Èíòåðôåéñà:; Flags: fixed; Types: Full;
Name: InterfaceLanguage\Russian; Description: Ðóññêèé; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
Name: InterfaceLanguage\English; Description: Àíãëèéñêèé; Flags: exclusive; ExtraDiskSpaceRequired: 200000000
Name: SoundLanguage; Description: ßçûê Îçâó÷êè:; Flags: fixed; Types: Full;
Name: SoundLanguage\Russian; Description: Ðóññêèé; Flags: exclusive; ExtraDiskSpaceRequired: 500000000
Name: SoundLanguage\English; Description: Àíãëèéñêèé; Flags: exclusive; ExtraDiskSpaceRequired: 600000000
#endif

#ifdef Tasks
[Tasks]
Name: Icons; Description: {cm:Icons}; Flags: unchecked;
Name: Icons\DesktopIcon; Description: {cm:CreateDesktopIcon};
#ifdef GameEXE2
Name: Icons\DesktopIcon2; Description: {cm:CreateDesktopIcon2};
#endif
Name: Icons\QuickLaunchIcon; Description: {cm:CreateQuickLaunchIcon};
Name: Soft; Description: {cm:Soft};
Name: Soft\DirectX; Description: DirectX.;
Name: Soft\VCCheck; Description: Microsoft Visual C++ 2010.; Flags:
Name: Soft\PhysXCheck; Description: NVIDIA PhysX
#endif

[Run]
Filename: {src}\Soft\DirectX\DXSETUP.exe; WorkingDir: {src}\Soft\DirectX\; Flags: waituntilterminated; Tasks: Soft\DirectX; StatusMsg: Óñòàíîâêà DirectX...; Check: CheckError
Filename: {src}\Soft\Redist\vcredist_x86.exe; StatusMsg: Óñòàíàâëèâàåì Microsoft Visual C++ 2010 Redist...; Flags: skipifdoesntexist; Tasks: Soft\VCCheck; Components: ; Check: CheckError and not IsWin64;
Filename: {src}\Soft\Redist\vcredist_x64.exe; StatusMsg: Óñòàíàâëèâàåì Microsoft Visual C++ 2010 Redist...; Flags: skipifdoesntexist; Tasks: Soft\VCCheck; Components: ; Check: CheckError and IsWin64
Filename: {src}\Soft\PhysX\PhysX-9.12.1031-SystemSoftware.exe; Parameters: /qn; StatusMsg: Óñòàíàâëèâàåì NVIDIA PhysX...; Flags: skipifdoesntexist; Tasks: Soft\PhysXCheck; Check: CheckError

[UninstallDelete]
Type: filesandordirs; Name: {app}

[code]
#ifdef Splash
procedure ShowSplashScreen(p1:HWND;p2:string;p3,p4,p5,p6,p7:integer;p8:boolean;p9:Cardinal;p10:integer); external 'ShowSplashScreen@files:isgsg.dll stdcall delayload';
#endif
#include "Modules\Messages.iss"
#include "Modules\botva2.iss"
#include "Modules\BASS_Module.iss"
#include "Modules\PB.iss"
#include "Modules\botva2u.iss"
#include "Modules\Header.iss"
#include "Modules\ISDone.iss"

procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin.dll stdcall';

procedure UnloadSkin();
external 'UnloadSkin@files:isskin.dll stdcall';

#ifdef Russophobia
const
A1='À';
Z1='ß';
A2='à';
Z2='ÿ';
X1='¸';
X2='¨';
function NextButtonClick(CurPageID: Integer): Boolean;
var i: integer;
c: char;
begin
Result := True;
if CurPageID = wpSelectDir then begin
for i:=1 to length(WizardForm.DirEdit.text) do begin
c:=WizardForm.DirEdit.text[i];
if (c>=A1)and(c<=Z1) or (c>=A2)and(c<=Z2) or (c=X1) or (c=X2) then begin
MsgBox( 'Â ïóòè óñòàíîâêè ïðèñóòñòâóþò ðóññêèå áóêâû, ÷òî íåäîïóñòèìî'#13#13'Ïîæàëóéñòà, ïîâòîðèòå ââîä.', mbError, mb_Ok);
Result := False ;
exit;
end;
end;
end;
end;
#endif
////////////////////////////////////////////////////////////Òåêñòóðà êíîïîê\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
procedure SetStateNewButtons;
begin
with WizardForm.BackButton do begin
BtnSetText(hBackBtn,PAnsiChar(Caption));
BtnSetVisibility(hBackBtn,Visible);
BtnSetEnabled(hBackBtn,Enabled);
end;
with WizardForm.NextButton do begin
BtnSetText(hNextBtn,PAnsiChar(Caption));
BtnSetVisibility(hNextBtn,Visible);
BtnSetEnabled(hNextBtn,Enabled);
end;
with WizardForm.CancelButton do begin
BtnSetText(hCancelBtn,PAnsiChar(Caption));
BtnSetVisibility(hCancelBtn,Visible);
BtnSetEnabled(hCancelBtn,Enabled);
end;
BtnSetText(hDirBrowseBtn,PAnsiChar(WizardForm.DirBrowseButton.Caption));
BtnSetText(hGroupBrowseBtn,PAnsiChar(WizardForm.GroupBrowseButton.Caption));
end;

procedure WizardFormBtnClick(hBtn:HWND);
var
Btn:TButton;
begin
case hBtn of
hCancelBtn: Btn:=WizardForm.CancelButton;
hNextBtn: Btn:=WizardForm.NextButton;
hBackBtn: Btn:=WizardForm.BackButton;
hDirBrowseBtn: Btn:=WizardForm.DirBrowseButton;
hGroupBrowseBtn: Btn:=WizardForm.GroupBrowseButton;
end;
Btn.OnClick(Btn);
SetStateNewButtons;
BtnRefresh(hBtn);
end;

procedure WFBtnEnter(hBtn:HWND);
begin
end;

procedure ButtonsTextures;
begin
with WizardForm.BackButton do begin
hBackBtn:=BtnCreate(WizardForm.Handle,447,364,80,24,ExpandConstant('Btn.png'),0,False);
BtnSetEvent(hBackBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hBackBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(hBackBtn,WFButtonFont.Handle);
BtnSetFontColor(hBackBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
BtnSetCursor(hBackBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.NextButton do begin
hNextBtn:=BtnCreate(WizardForm.Handle,530,364,80,24,ExpandConstant('Btn.png'),1,False);
BtnSetEvent(hNextBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hNextBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(hNextBtn,WFButtonFont.Handle);
BtnSetFontColor(hNextBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
BtnSetCursor(hNextBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.CancelButton do begin
hCancelBtn:=BtnCreate(WizardForm.Handle,613,364,80,24,ExpandConstant('Btn.png'),1,False);
BtnSetEvent(hCancelBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hCancelBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(hCancelBtn,WFButtonFont.Handle);
BtnSetFontColor(hCancelBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
BtnSetCursor(hCancelBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.DirBrowseButton do begin
hDirBrowseBtn:=BtnCreate(WizardForm.Handle,530,269,73,24,ExpandConstant('browse.png'),1,False);
BtnSetEvent(hDirBrowseBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hDirBrowseBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(hDirBrowseBtn,WFButtonFont.Handle);
BtnSetFontColor(hDirBrowseBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
BtnSetCursor(hDirBrowseBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.GroupBrowseButton do begin
hGroupBrowseBtn:=BtnCreate(WizardForm.Handle,530,269,73,24,ExpandConstant('browse.png'),1,False);
BtnSetEvent(hGroupBrowseBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hGroupBrowseBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(hGroupBrowseBtn,WFButtonFont.Handle);
BtnSetFontColor(hGroupBrowseBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
BtnSetCursor(hGroupBrowseBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;
end;

/////////////////////////////////////////////////êîíåö\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
////////////////////////////////////////////////Âñòàâêà èçîáðàæåíèé\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

procedure CreateWizardForm;
var
n: Integer;
begin
with WizardForm do begin
InnerNotebook.Hide;
OuterNotebook.Hide;
Bevel.Hide;
ClientWidth:=ScaleX(700);
ClientHeight:=ScaleY(394);
DirEdit.OnChange:=@ObjectFunc;
GroupEdit.OnChange:= @ObjectFunc
OnMouseDown:=@LabelOnMouseDown;
BorderIcons := [];
Center;
end;

WFButtonFont:=TFont.Create;
with WFButtonFont do begin
Style:=[fsBold];
Size:=10;
Name:='Tahoma';
end;

BGImageStream := TMemoryStream.Create;
ExtractTemporaryFileToStream('BMPImage.bmp', BGImageStream);
BGImageStream.Position := 0;

BTNImageStream := TMemoryStream.Create;
ExtractTemporaryFileToStream('btnimage.bmp', BTNImageStream);
BTNImageStream.Position := 0;

BGImage := TBitmapImage.Create(WizardForm);
BGImage.Bitmap.LoadFromStream(BGImageStream);

BTNImage := TBitmapImage.Create(WizardForm);
BTNImage.Bitmap.LoadFromStream(BTNImageStream);

ImgLoad(WizardForm.Handle,ExpandConstant('MainImage.png'),0,0,0,0,False,True);

//////////////////////////////////////////---\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

/////////////////////////////////////////////////// ñò. Ãëàâíàÿ\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
WelcomeLabel1:= CreateLabel(WizardForm, ScaleX(0), ScaleY(245), ScaleX(700), ScaleY(80), ExpandConstant('{cm:WelcomeLabel1}'), False);
LabelSetFont(WelcomeLabel1, 10, 'Tahoma', $FFFFFF, [fsBold]);
WelcomeLabel1.Alignment := taCenter;

WelcomeLabel2:= CreateLabel(WizardForm, ScaleX(0), ScaleY(275), ScaleX(700), ScaleY(150), ExpandConstant('{cm:WelcomeLabel2}'), False);
LabelSetFont(WelcomeLabel2, 8, 'Tahoma', $FFFFFF, [fsBold]);
WelcomeLabel2.Alignment := taCenter;
//////////////////////////////////////////////////ñò.Âûáîð Äèðèêòîðèè\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
DirFolder:=ImgLoad(WizardForm.Handle,ExpandConstant('DirFolder.png'),ScaleX(106),ScaleY(210),ScaleX( 60),ScaleY(59),True,True);
DirEditImg:=ImgLoad(WizardForm.Handle,ExpandConstant('DirEditImg.png'),ScaleX(105),ScaleY(270),Scale X(420),ScaleY(22),True,True);
HDD:=ImgLoad(WizardForm.Handle,ExpandConstant('HDD.png'),ScaleX(105),ScaleY(297),ScaleX(57),ScaleY(5 7),True,True);

SelectDirLabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(219), ScaleX(0), ScaleY(0), ExpandConstant('{cm:SelectDirLabel}'), true);
LabelSetFont(SelectDirLabel, 9, 'Tahoma', $FFFFFF, [fsBold]);

SelectDirBrowseLabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(238), ScaleX(0), ScaleY(0), ExpandConstant('{cm:SelectDirBrowseLabel}'), true);
LabelSetFont(SelectDirBrowseLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);
SelectDirBrowseLabel.Alignment := taLeftJustify;

DirEditLabel:= CreateLabel(WizardForm, ScaleX(110), ScaleY(272), ScaleX(450), ScaleY(20), '', false);
LabelSetFont(DirEditLabel, 10, 'Tahoma', $FFFFFF, [fsBold]);
DirEditLabel.Caption := MinimizePathName(WizardForm.DirEdit.Text, DirEditLabel.Font, DirEditLabel.Width);

TotalSpaceLabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(295), ScaleX(0), ScaleY(0), ExpandConstant('{cm:TotalSpaceLabel}'), true);
LabelSetFont(TotalSpaceLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);

FreeSpaceLabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(310), ScaleX(0), ScaleY(0), ExpandConstant('{cm:FreeSpaceLabel}'), true);
LabelSetFont(FreeSpaceLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);

InstallSpacelabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(325), ScaleX(0), ScaleY(0), ExpandConstant('{cm:InstallSpacelabel}'), true);
LabelSetFont(InstallSpacelabel, 8, 'Tahoma', $FFFFFF, [fsBold]);

NeedSpaceLabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(340), ScaleX(0), ScaleY(0), ExpandConstant('{cm:NeedSpaceLabel}'), true);
LabelSetFont(NeedSpaceLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);

TotalSpaceLabel2:= CreateLabel(WizardForm, ScaleX(520), ScaleY(295), ScaleX(0), ScaleY(0), '', true);
LabelSetFont(TotalSpaceLabel2, 8, 'Tahoma', $FFFFFF, [fsBold]);
TotalSpaceLabel2.Alignment := taRightJustify;

FreeSpaceLabel2:= CreateLabel(WizardForm, ScaleX(520), ScaleY(310), ScaleX(0), ScaleY(0), '', true);
LabelSetFont(FreeSpaceLabel2, 8, 'Tahoma', $FFFFFF, [fsBold]);
FreeSpaceLabel2.Alignment := taRightJustify;

InstallSpacelabel2:= CreateLabel(WizardForm, ScaleX(520), ScaleY(325), ScaleX(0), ScaleY(0), '', true);
LabelSetFont(InstallSpacelabel2, 8, 'Tahoma', $FFFFFF, [fsBold]);
InstallSpacelabel2.Alignment := taRightJustify;

NeedSpaceLabel2:= CreateLabel(WizardForm, ScaleX(520), ScaleY(340), ScaleX(0), ScaleY(0), '', true);
LabelSetFont(NeedSpaceLabel2, 8, 'Tahoma', $FFFFFF, [fsBold]);
NeedSpaceLabel2.Alignment := taRightJustify;

#ifdef Components
//////////////////////////////////////////ñò.Êîìïîíåíòîâ\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
SelectComponentsLabel:= CreateLabel(WizardForm, ScaleX(345), ScaleY(208), ScaleX(0), ScaleY(0), ExpandConstant('{cm:SelectComponentsLabel}'), true);
LabelSetFont(SelectComponentsLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);
SelectComponentsLabel.Alignment := taLeftJustify;
with WizardForm.ComponentsList do begin
Parent:= WizardForm;
SetBounds(ScaleX(5), ScaleY(208), ScaleX(335), ScaleY(148));
Color:=$000000;
Font.Name:='Tahoma';
Font.Size:= 8;
Font.Color:=$FFFFFF;
for n:=0 to ItemCount-1 do begin
ItemFontStyle[n]:= [fsBold];
SubItemFontStyle[n]:= [fsBold];
end;
BorderWidth := (WizardForm.ComponentsList.Width-WizardForm.ComponentsList.ClientWidth) div 2;
LoadBGBmpFromBitmap(BGImage.Bitmap, WizardForm.ComponentsList.Left+BorderWidth, WizardForm.ComponentsList.Top+BorderWidth);
LoadBtnBmpFromBitmap(btnimage.Bitmap);
end;
#endif

/////////////////////////////////////////////////ñò.Âûáîð Ãðóïïû\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
GroupFolder:=ImgLoad(WizardForm.Handle,ExpandConstant('GroupFolder.png'),ScaleX(106),ScaleY(210),Sca leX(60),ScaleY(59),True,True);

SelectStartMenuFolderLabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(219), ScaleX(0), ScaleY(0), ExpandConstant('{cm:SelectStartMenuFolderLabel}'), true);
LabelSetFont(SelectStartMenuFolderLabel, 9, 'Tahoma', $FFFFFF, [fsBold]);
SelectStartMenuFolderLabel.Alignment := taLeftJustify;

SelectStartMenuFolderBrowseLabel:= CreateLabel(WizardForm, ScaleX(175), ScaleY(238), ScaleX(0), ScaleY(0), ExpandConstant('{cm:SelectDirBrowseLabel}'), true);
LabelSetFont(SelectStartMenuFolderBrowseLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);
SelectStartMenuFolderBrowseLabel.Alignment := taLeftJustify;

GroupEditLabel:= CreateLabel(WizardForm, ScaleX(110), ScaleY(272), ScaleX(450), ScaleY(20), WizardForm.GroupEdit.Text, false);
LabelSetFont(GroupEditLabel, 10, 'Tahoma', $FFFFFF, [fsBold]);

NoIconsCheck:=BtnCreate(WizardForm.Handle,ScaleX(110),ScaleY(305),ScaleX(13),ScaleY(13),ExpandConsta nt('CheckBox.png'),1,True);
BtnSetEvent(NoIconsCheck,BtnClickEventID,WrapBtnCallback(@NoIconsClick,1));
BtnSetCursor(NoIconsCheck,GetSysCursorHandle(32649));

NoIconsLabel:= CreateLabel(WizardForm, ScaleX(126), ScaleY(305), ScaleX(0), ScaleY(0), ExpandConstant('{cm:NoIconsCheck}'), true);
LabelSetFont(NoIconsLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);
with NoIconsLabel do begin
Cursor := crHand;
OnClick:= @ObjectFunc;
end;
/////////////////////////////////////////////ñò.Çàäà÷ü\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
#ifdef Tasks
SelectTasksLabel:= CreateLabel(WizardForm, ScaleX(345), ScaleY(208), ScaleX(0), ScaleY(0), ExpandConstant('{cm:SelectTasksLabel}'), true);
LabelSetFont(SelectTasksLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);
SelectTasksLabel.Alignment := taLeftJustify;

with WizardForm.TasksList do begin
Parent:= WizardForm;
SetBounds(ScaleX(5), ScaleY(208), ScaleX(335), ScaleY(148));
Color:=$000000;
Font.Name:='Tahoma';
Font.Size:= 8;
Font.Color:=$FFFFFF;
BorderStyle := bsSingle;
//TreeViewStyle := True;
BorderWidth := (WizardForm.TasksList.Width-WizardForm.TasksList.ClientWidth) div 2;
LoadBGBmpFromBitmap(BGImage.Bitmap, WizardForm.TasksList.Left+BorderWidth, WizardForm.TasksList.Top+BorderWidth);
LoadBtnBmpFromBitmap(btnimage.Bitmap);
end;
#endif

/////////////////////////////////////////////////ñò.Èòîãî\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
BGImageStream.position:=0;

ReadyLabel:= CreateLabel(WizardForm, ScaleX(345), ScaleY(208), ScaleX(0), ScaleY(0), ExpandConstant('{cm:ReadyLabel}'), true);
LabelSetFont(ReadyLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);
ReadyLabel.Alignment := taLeftJustify;

ReadyPanel := TPanel.Create(WizardForm);
with ReadyPanel do begin
Parent := WizardForm;
SetBounds(ScaleX(5), ScaleY(208), ScaleX(335), ScaleY(148));
BorderStyle := bsSingle;
end;

ReadyBitmap := TBitmapImage.Create(WizardForm);
with ReadyBitmap do begin
Parent := ReadyPanel;
SetBounds(ScaleX(-7), ScaleY(-210), ScaleX(700), ScaleY(394));
Bitmap.LoadFromStream(BGImageStream);
end;

ReadyScrollBar := TScrollBar.Create(WizardForm);
with ReadyScrollBar do begin
Parent := ReadyPanel;
SetBounds(ScaleX(315), ScaleY(0), ScaleX(144), ScaleY(16));
Kind := sbVertical;
OnScroll:=@ScrollText3Scroll;
end;

ReadyPanelLabel := TLabel.Create(WizardForm);
with ReadyPanelLabel do begin
Parent := ReadyPanel;
WordWrap := true;
Transparent:=true;
Font.Name:='Tahoma';
Font.Size:= 8;
Font.Color:=$FFFFFF;
Font.Style:=[fsBold];
SetBounds(ScaleX(5), ScaleY(5), ScaleX(325), ScaleY(130));
Caption := WizardForm.ReadyMemo.Lines.Text;
end;
////////////////////////////////////////////ñò.Óñòàíîâêà\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

IsDoneAddComponents

InstallingLabel:= CreateLabel(WizardForm, ScaleX(105), ScaleY(220), ScaleX(0), ScaleY(0), ExpandConstant('{cm:InstallingLabel}'), true);
LabelSetFont(InstallingLabel, 9, 'Tahoma', $FFFFFF, [fsBold]);

StatusLabel:= CreateLabel(WizardForm, ScaleX(105), ScaleY(240), ScaleX(0), ScaleY(0), ExpandConstant('{cm:Extracted}'), true);
LabelSetFont(StatusLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);

/////////////////////////////////////////////ñò.Êîíåö\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

FinishedHeadingLabel:= CreateLabel(WizardForm, ScaleX(0), ScaleY(245), ScaleX(700), ScaleY(80), ExpandConstant('{cm:FinishedHeadingLabel}'), false);
LabelSetFont(FinishedHeadingLabel, 10, 'Tahoma', $FFFFFF, [fsBold]);
FinishedHeadingLabel.Alignment := taCenter;

FinishedLabel:= CreateLabel(WizardForm, ScaleX(0), ScaleY(275), ScaleX(700), ScaleY(150), ExpandConstant('{cm:FinishedLabel}'), false);
LabelSetFont(FinishedLabel, 8, 'Tahoma', $FFFFFF, [fsBold]);
FinishedLabel.Alignment := taCenter;
end;



procedure HideComponents;
begin;
WelcomeLabel1.Hide;
WelcomeLabel2.Hide;
SelectDirLabel.Hide;
SelectDirBrowseLabel.Hide;
#ifdef Components
SelectComponentsLabel.Hide;
WizardForm.ComponentsList.Hide;
#endif
#ifdef Tasks
SelectTasksLabel.Hide;
WizardForm.TasksList.Hide;
#endif
SelectStartMenuFolderLabel.Hide;
SelectStartMenuFolderBrowseLabel.Hide;
DirEditLabel.Hide;
TotalSpaceLabel.Hide;
FreeSpaceLabel.Hide;
InstallSpacelabel.Hide;
NeedSpaceLabel.Hide;
TotalSpaceLabel2.Hide;
FreeSpaceLabel2.Hide;
InstallSpacelabel2.Hide;
NeedSpaceLabel2.Hide;
GroupEditLabel.Hide;
NoIconsLabel.Hide;
InstallingLabel.Hide;
StatusLabel.Hide;
FinishedHeadingLabel.Hide;
FinishedLabel.Hide;
IMGSetVisibility(DirFolder,False);
IMGSetVisibility(DirEditImg,False);
IMGSetVisibility(HDD,False);
IMGSetVisibility(GroupFolder,False);
BtnSetVisibility(hDirBrowseBtn,False);
BtnSetVisibility(hGroupBrowseBtn,False);
BtnSetVisibility(NoIconsCheck,False);
ReadyPanel.Hide;
ReadyBitmap.Hide;
ReadyScrollBar.Hide;
ReadyPanelLabel.Hide;
ReadyLabel.Hide;
IsDoneHide;
end;

procedure ShowComponents(CurPageID: Integer);
begin
case CurPageID of
wpWelcome: begin
WelcomeLabel1.Show;
WelcomeLabel2.Show;
end;

wpSelectDir: begin
SelectDirLabel.Show;
SelectDirBrowseLabel.Show;
DirEditLabel.Show;
TotalSpaceLabel.Show;
FreeSpaceLabel.Show;
InstallSpacelabel.Show;
NeedSpaceLabel.Show
TotalSpaceLabel2.Show;
FreeSpaceLabel2.Show;
InstallSpacelabel2.Show;
NeedSpaceLabel2.Show;
IMGSetVisibility(DirFolder,True);
IMGSetVisibility(DirEditImg,True);
IMGSetVisibility(HDD,True);
BtnSetVisibility(hDirBrowseBtn,True);
end;

#ifdef Components
wpSelectComponents: begin
SelectComponentsLabel.Show;
WizardForm.ComponentsList.Show;
end;
#endif

wpSelectProgramGroup: begin
SelectStartMenuFolderLabel.Show;
SelectStartMenuFolderBrowseLabel.Show;
GroupEditLabel.Show;
NoIconsLabel.Show;
IMGSetVisibility(DirEditImg,True);
IMGSetVisibility(GroupFolder,True);
BtnSetVisibility(NoIconsCheck,True);
BtnSetVisibility(hGroupBrowseBtn,True);
end;

#ifdef Tasks
wpSelectTasks: begin
SelectTasksLabel.Show;
WizardForm.TasksList.Show;
end;
#endif

wpReady: begin
ReadyBitmap.Show;
ReadyScrollBar.Show;
ReadyPanelLabel.Show;
ReadyPanel.Show;
ReadyLabel.Show;
ReadyPanelLabel.Caption := WizardForm.ReadyMemo.Lines.Text;
end;

wpInstalling: begin
InstallingLabel.Show;
StatusLabel.Show;
IsDoneShow();
end;

wpFinished: begin
FinishedHeadingLabel.Show;
FinishedLabel.Show;
LabelTime3.Show;
end;
end;
end;

function UninstPBProc(h:hWnd;Msg,wParam,lParam:Longint):Longint;
var
pr,i1,i2:Extended;
p:string;
begin
if Msg=$2 then SetWindowLong(h,-4,UninstPBOldProc);
Result:=CallWindowProc(UninstPBOldProc,h,Msg,wParam,lParam);
if (Msg=$402) and (UninstallProgressForm.ProgressBar.Position>UninstallProgressForm.ProgressBar.Min) then begin
i1:=UninstallProgressForm.ProgressBar.Position-UninstallProgressForm.ProgressBar.Min;
i2:=UninstallProgressForm.ProgressBar.Max-UninstallProgressForm.ProgressBar.Min;
pr:=(i1*100)/i2;
p:=+Format('%f',[pr])+'%';
UnLabelPct.Caption:=p;
StringChange(p,',','.');
ImgPBSetPositionUn(UninstPB,pr);
ImgApplyChangesBotvaU(UninstallProgressForm.Handle);
end;
end;


procedure CurPageChanged(CurPageID: Integer);
begin
HideComponents;
ShowComponents(CurPageID);
WizardForm.NextButton.Enabled:= True;
if CurPageID = wpSelectDir then
ObjectFunc(WizardForm.DirEdit);
if (CurPageID = wpFinished) and ISDoneError then begin
LabelTime3.Hide;
WizardForm.Caption:= ExpandConstant('{cm:Error}');
FinishedLabel.Font.Color:= $0000FF;
FinishedHeadingLabel.Caption:= ExpandConstant('{cm:ErrorFinishedHeadingLabel}');
FinishedLabel.Caption:= ExpandConstant('{cm:ErrorFinishedLabel}');
DelTree(ExpandConstant('{app}'), True, True, True);
end;
SetStateNewButtons;
ImgApplyChanges(WizardForm.Handle);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
IsDoneUnpack(CurStep);
end;


procedure InitializeWizard;
begin
#ifdef Music
ExtractTemporaryFile('bass.dll');
ExtractTemporaryFile('CallbackCtrl.dll');
ExtractTemporaryFile('botva2.dll');
ExtractTemporaryFile('music.mp3');
ExtractTemporaryFile('MusicButton.png');

BASS_Init('{tmp}\music.mp3')
BASS_CreateOnOffButton(WizardForm, '{tmp}\MusicButton.png', 20, 320, 36, 36, 4)
#endif

#ifdef Splash
ExtractTemporaryFile('Splash.png');
ExtractTemporaryFile('isgsg.dll');
ShowSplashScreen(WizardForm.Handle,ExpandConstant('{tmp}')+'\Splash.png',1000,3000,1000,0,255,False, $FFFFFF,10);
#endif
CreateWizardForm;
ButtonsTextures;
end;


function InitializeSetup: Boolean;
begin
ExtractTemporaryFile('botva2.dll');
ExtractTemporaryFile('b2p.dll');
ExtractTemporaryFile('CallbackCtrl.dll');
ExtractTemporaryFile('Click.wav');
ExtractTemporaryFile('skin.cjstyles');
LoadSkin(ExpandConstant('{tmp}\skin.cjstyles'), '');
Result := True;
end;


procedure DeinitializeSetup;
begin
BGImageStream.Free();
BTNImageStream.Free();
WFButtonFont.Free();
BASS_DeInit;
gdipShutdown();
UnloadSkin();
end;


saurn 06-01-2015 20:46 2452758

Okta_333, запихните скрипт и необходимые для работы инстала файлы(библиотеки, картинки, модули и т.д.) в архив, залейте на любой бесплантынй хостинг и прикрепите ссылку на архив к сообщению.

Okta_333 06-01-2015 22:17 2452791

Я вам в личку брошу

palsn2000 09-01-2015 16:16 2453795

Доброе время суток.

Опять столкнулся с трудностью:

Имеется программа, к ней прилагается библиотека для интеграции в оболочку проводника, библиотека находится в отдельной подпапке в которой расположен файл конфигурации, указывающий путь к самой программе. Файл называется config.lua и содержит запись:

--This file uses UTF8 encuding without BOM-- Path to Program = "\"C:\\Program Files\\My prog\\prog.exe\""

программу я включил в сборник и по пути "\"C:\\Program Files программа соответственно находиться не будет.

С помощью секции ini такие записи у меня не получаются.

Можно ли каким-то образом с пошью Инно внести изменения в этот файл или создать пустой и уже потом вписать в него строку с расположением пути к программе --This file uses UTF8 encuding without BOM-- Path to Program = "\"{app}\\My prog\\prog.exe\""

Причём именно в одну строку, начиная с --This file uses UTF8 encuding without BOM-- иначе (без этой записи или если запись первой строкой, а "Path to Program =" уже на следующей строке) в проводнике интеграция не отображается [пробовал редактировать в ручную]

Можно ли это реализовать в секции Code и если можно, то чтобы работало только тогда, когда выбран к примеру Components: component_1 ?

Заранее Спасибо.

sergey3695 10-01-2015 12:51 2454079

palsn2000,
Скрытый текст
Код:

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

[Files]
Source: config.ini; DestDir: {app}; Flags: ignoreversion;

[Types]
Name: full; Description: Полная установка; Flags: iscustom;

[Components]
Name: Comp1; Description: "Запись в config.lua"; Flags: checkablealone; Types: Full;

[code_]
var
  s: string;

function DoubleSlash(S: String): String;
var i: Integer;
begin
Result:='';
  while Length(S)>0 do begin
    i:=Pos('\', S);
    if i>0 then begin
      Result:= Result+Copy(S, 1, i-1)+'\\';
      Delete(S, 1, i);
    end else begin
      Result:= Result+S;
      SetLength(S, 0);
    end;;
  end;
end;

procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
  S: TStringList;
  i : Integer;
begin
if FileExists(FilePath) then begin
  S:=tstringlist.create;
  S.LoadFromFile(FilePath);
for i := 0 to S.Count-1 do
begin
if S.Names[i]=find then
begin
  S.Delete(i);
  S.Insert(i,find+'='+replace);
end;
end;
  S.SaveToFile(FilePath);
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
if WizardForm.ComponentsList.Checked[0] then
begin
  s:=  '"\"'+DoubleSlash(ExpandConstant('{app}'))+'\""';
  RePlaceTextinFile(ExpandConstant('{app}\config.ini'),'Path to Program',AddQuotes(s));
end;
end;
end;


Config.ini
Код:

-This file uses UTF8 encuding without BOM--
Path to Program=

config.ini должен быть такого содержания. Как должно быть прописано сам подредактируешь и замену
RePlaceTextinFile(ExpandConstant('{app}\config.ini'),'Path to Program',AddQuotes(s));

StongCool 10-01-2015 13:05 2454084

[code][Files]
Source: "C:\Program Files (x86)\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: Button.bmp; Flags: dontcopy

Код:

procedure logoOnClick(Sender: TObject);
begin
  MsgBox('RePacked by Evilboy', mbInformation, mb_Ok);
end;
 
procedure InitializeWizard();
var
  BtnPanel: TPanel;
  BtnImage: TBitmapImage;
begin
  ExtractTemporaryFile('Button.bmp')
   
  BtnPanel:=TPanel.Create(WizardForm)
  with BtnPanel do begin
    Left:=20
    Top:=325
    Width:=132
    Height:=27
    Cursor:=crHand
    OnClick:=@logoOnClick
    Parent:=WizardForm
  end
  BtnImage:=TBitmapImage.Create(WizardForm)
  with BtnImage do begin
    AutoSize:=True;
    Enabled:=False;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
    Parent:=BtnPanel
  end
end;

Ошибка выскакивает на этом BtnImage:=TBitmapImage.Create(WizardForm). Подскажите как исправить

sergey3695 10-01-2015 14:21 2454108

StongCool,
Код:

Source: Button.bmp; DestDir: "{tmp}"; Flags: dontcopy
должно же быть. не проверял.

StongCool 10-01-2015 14:27 2454109

Вложений: 1
Поменял, осталось прежней.

Dodakaedr 10-01-2015 14:28 2454111

StongCool, отсутствие точки с запятой
Скрытый текст
Код:

procedure InitializeWizard();
var
  BtnPanel: TPanel;
  BtnImage: TBitmapImage;
begin
  ExtractTemporaryFile('Button.bmp')
   
  BtnPanel:=TPanel.Create(WizardForm)
  with BtnPanel do begin
    Left:=20
    Top:=325
    Width:=132
    Height:=27
    Cursor:=crHand
    OnClick:=@logoOnClick
    Parent:=WizardForm
  end;
  BtnImage:=TBitmapImage.Create(WizardForm)
  with BtnImage do begin
    AutoSize:=True;
    Enabled:=False;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
    Parent:=BtnPanel
  end;
end;


StongCool 10-01-2015 14:50 2454117

Dodakaedr, Спасибо.

Код:

procedure logoOnClick(Sender: TObject);
begin
  MsgBox('RePacked by Evilboy', mbInformation, mb_Ok);
end;

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

Т.е.
- Repack asfafsasf
- добавлено бла бла бла
- вырезано бла бла

sergey3695 10-01-2015 14:57 2454119

StongCool, '+#13+'

Dodakaedr 10-01-2015 15:02 2454120

Вложений: 1
StongCool, Через CustomMessages
Скрытый текст
Код:

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

[Files]
Source: "compiler:Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: Button.bmp; Flags: dontcopy

[CustomMessages]
Repack=- Repack asfafsasf%n- добавлено бла бла бла%n- вырезано бла бла

[code]
procedure logoOnClick(Sender: TObject);
begin
  MsgBox(CustomMessage('Repack'), mbInformation, mb_Ok);
end;

procedure InitializeWizard();
var
  BtnPanel: TPanel;
  BtnImage: TBitmapImage;
begin
  ExtractTemporaryFile('Button.bmp')

  BtnPanel:=TPanel.Create(WizardForm)
  with BtnPanel do begin
    Left:=20
    Top:=325
    Width:=132
    Height:=27
    Cursor:=crHand
    OnClick:=@logoOnClick
    Parent:=WizardForm
  end;
  BtnImage:=TBitmapImage.Create(WizardForm)
  with BtnImage do begin
    AutoSize:=True;
    Enabled:=False;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
    Parent:=BtnPanel
  end;
end;



Цитата:

Цитата palsn2000
Причём именно в одну строку, начиная с »

Благодаря коду sergey3695. Пробуйте...

sergey3695 10-01-2015 15:36 2454134

Dodakaedr, да я специально не стал так делать, чтоб человек сам отредактировал, за одно разобрался бы. Ну да ладно...

StongCool 10-01-2015 15:44 2454136

Вложений: 1
Вписал код, изменения нигде не заметил.

Мне именно в этом окошке нужно.

Давно давно, я нашел команду(уже не помню какую) строка переносилась как надо.

Примерно MsgBox('RePacked by Evilboy', mbInformation, mb_Ok); так: MsgBox('RePacked by Evilboy' ??? '- вырезано бла бла' ??? 'Блабла', mbInformation, mb_Ok);

Где вопросы там знак должен быть, почему то мне хочется вставить + но это не он.

palsn2000 10-01-2015 15:53 2454141

sergey3695, Спасибо за
код

Код:

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

[Files]
Source: config.ini; DestDir: {app}; Flags: ignoreversion;

[Types]
Name: full; Description: Полная установка; Flags: iscustom;

[Components]
Name: Comp1; Description: "Запись в config.lua"; Flags: checkablealone; Types: Full;

[code_]
var
  s: string;

function DoubleSlash(S: String): String;
var i: Integer;
begin
Result:='';
  while Length(S)>0 do begin
    i:=Pos('\', S);
    if i>0 then begin
      Result:= Result+Copy(S, 1, i-1)+'\\';
      Delete(S, 1, i);
    end else begin
      Result:= Result+S;
      SetLength(S, 0);
    end;;
  end;
end;

procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
  S: TStringList;
  i : Integer;
begin
if FileExists(FilePath) then begin
  S:=tstringlist.create;
  S.LoadFromFile(FilePath);
for i := 0 to S.Count-1 do
begin
if S.Names[i]=find then
begin
  S.Delete(i);
  S.Insert(i,find+'='+replace);
end;
end;
  S.SaveToFile(FilePath);
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
if WizardForm.ComponentsList.Checked[0] then
begin
  s:=  '"\"'+DoubleSlash(ExpandConstant('{app}'))+'\""';
  RePlaceTextinFile(ExpandConstant('{app}\config.ini'),'Path to Program',AddQuotes(s));
end;
end;
end;



Но вот какое дело: в коде используется замена текста
s:= '"\"'+DoubleSlash(ExpandConstant('{app}'))+'\""';
RePlaceTextinFile(ExpandConstant('{app}\config.ini'),'Path to Program',AddQuotes(s));

а для моей программы вместо 'Path to Program' приходится писать '--This file uses UTF8 encuding without BOM-- Path to Program'
а вот это самое '--This file uses UTF8 encuding without BOM-- Path to Program=' в файле config.lua имеет не совсем простой текстовый формат (если скопировать в ворд то там эта одна строка распадается на три строки) и после работы скрипта Инно
мой новый файл config.lua также разваливается на три строки и ничего в путь не дописывается.

Вопрос: можно ли как нибудь заставить инно не переписывать всё вместе с --This file uses UTF8 encuding without BOM-- Path to Program=' , а только добавить к нему 'DoubleSlash(ExpandConstant('{app}'))+'\""' сам я этого сделать не могу, так как в программировании даже не 0, а наверно -1 :)

Dodakaedr 10-01-2015 15:56 2454142

palsn2000, Вы это смотрели http://forum.oszone.net/post-2454120-2270.html

StongCool 10-01-2015 16:03 2454145

Dodakaedr, немного покопался...

Вот это команда с которой я работал давно(Про неё я и спрашива) +#13#10+

Код:

procedure logoOnClick(Sender: TObject);
begin
  MsgBox('RePacked by блабла'+#13#10+ '- ничего не вырез....', mbInformation, mb_Ok);
end;


palsn2000 10-01-2015 16:26 2454157

sergey3695, Dodakaedr, Спасибо за потраченное время, со всем разобрался, последний вопрос снимается - всё оказалось намного проще: строка '--This file uses UTF8 encuding without BOM-- Path to Program=' в Ворде распадается не на три, а на четыре - и всё приходит в логический вид:
--This file uses UTF8 encuding without BOM

-- Path to
Program=

В итоге 1, 2(пустая) и 3 строки вообще необязательны, а библиотека работает только со строкой 'Program=' ( проверил вручную) сейчас попробую реализовать в Инно.

Ещё раз всем спасибо.

palsn2000 10-01-2015 17:23 2454177

В итоге выложу то, что у меня получилось - может кому-то пригодится:

Код

Код:

[_Code_]
//Дописывание произвольной информации в строку текстового файда (любого)
var
  s: string;
// замена одинарного слэша \ на двойной \\ в пути к файлу
function DoubleSlash(S: String): String;
var i: Integer;
begin
Result:='';
  while Length(S)>0 do begin
    i:=Pos('\', S);
    if i>0 then begin
      Result:= Result+Copy(S, 1, i-1)+'\\';
      Delete(S, 1, i);
    end else begin
      Result:= Result+S;
      SetLength(S, 0);
    end;;
  end;
end;
// конец замена одинарного слэша \ на двойной \\ в пути к файлу

procedure RePlaceTextinFile(FilePath:string; find:string; replace:string);
var
  S: TStringList;
  i : Integer;
begin
if FileExists(FilePath) then begin
  S:=tstringlist.create;
  S.LoadFromFile(FilePath);
for i := 0 to S.Count-1 do
begin
if S.Names[i]=find then
begin
  S.Delete(i);
  S.Insert(i,find+'='+replace);
end;
end;
  S.SaveToFile(FilePath);
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
// 'Component_5\integrate' - Это имя необходимого компонента в секции [Components]
if (IsComponentSelected('Component_5\integrate') = True) then
begin
// +'\\My Prog'+'\\Prog.exe'+'\""' - Это путь к exe программы c подпапкой и самим exe, двойной слэш и слэш с кавычками в начале и конце - необходимость в данном частном случае.
  s:=  '"\"'+DoubleSlash(ExpandConstant('{app}'))+'\\My Prog'+'\\Prog.exe'+'\""'
// 'Program' - это текст в строке которую надо заполнить, '{app}\My Prog\DllFolder\config.lua' - путь к файлу, который редактируем
  RePlaceTextinFile(ExpandConstant('{app}\My Prog\DllFolder\config.lua'),'Program',AddQuotes(s));
end;
end;
end;
//конец Дописывание произвольной информации в строку текстового файда (любого)



На выходе получаем в файле по адресу D:\My Prog\DllFolder\config.lua из имеющегося Program=
Program="\D:\\My Prog\\Prog.exe\"" (Вместо D: будет полный путь установки {app}) и всё это будет выполняться только при выборе компонента (в данном случае Component_5\integrate).

sergey3695 10-01-2015 18:35 2454206

StongCool, слепота :o

ShadeUa 11-01-2015 16:41 2454568

Здравствуйте. Подскажите пожалуйста , добавить в инстал новую страницу таких же размеров как предыдущие , и так же с возможность слайд шоу ?

Dodakaedr 11-01-2015 22:44 2454722

ShadeUa, Создание новой странички
Код:

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

[Code]
var
  Page: TWizardPage;


procedure InitializeWizard();
begin
 Page := CreateCustomPage(wpWelcome, 'ISCustomPage1_Caption', 'ISCustomPage1_Description');
end;

Цитата:

Цитата ShadeUa
и так же с возможность слайд шоу ? »

В смысле? Какой слайдшоу?

ShadeUa 12-01-2015 00:08 2454758

Цитата:

Цитата Dodakaedr
В смысле? Какой слайдшоу? »

Извиите, я ошибся , не слайд шоу а своя отдельная картинка на инстолятор

Dodakaedr 12-01-2015 00:15 2454765

ShadeUa, предыдущий мой пост смотрели? Оно?

ShadeUa 12-01-2015 12:18 2454893

Цитата:

Цитата Dodakaedr
ShadeUa, предыдущий мой пост смотрели? Оно? »

Огромное спасибо , ето оно , вы меня спасли )))
Кстати вы незнаете как поменять тукстуру кнопки ?

Dodakaedr 12-01-2015 12:44 2454907

Цитата:

Цитата ShadeUa
Кстати вы незнаете как поменять тукстуру кнопки ? »

Скрытый текст
Код:

                            ;Скрипт текстурирования кнопок, с четырмя видами состояния кнопок
;Используется текстура размером 320х23, где размер одной кнопки 80х23
;Скрипт написал Shegorat
[Setup]
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
OutputDir=userdocs:Test.

[Languages]
Name: "rus"; MessagesFile: "compiler:Languages\Russian.isl";

[Files]
;Изображение размером 320х23
Source: button2.bmp; DestDir: {tmp}; Flags: dontcopy

[Code]
const
ButtonWidth = 80;
ButtonHeight = 23;

var
WizardLabel: TLabel;
ButtonPanel: array of TPanel;
ButtonImage: array of TBitmapImage;
ButtonLabel: array of TLabel;
UsedButtons: array of TButton;
ButtonsCount: Integer;

procedure ButtonLabelClick(Sender: TObject);
var Button: TButton; n, i: Integer;
begin
i:= TLabel(Sender).Tag; ButtonImage[i].Left:= 0
for n:=0 to (ButtonsCount-1) do begin
if i = n then Button:= UsedButtons[n];
end;
Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth*2
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure ButtonLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var n, I: Integer;
begin
I:=TLabel(Sender).Tag;
//Сначала восстанавливаем картинку у всех кнопок, так надо иначе могут быть глюки
for n:=0 to (ButtonsCount-1) do begin if (ButtonLabel[n].Enabled)and(ButtonImage[n].Left <> -ButtonWidth*2)and(I<>N) then ButtonImage[n].Left:= 0; end;
//Теперь собственно ставим нужную картинку
if (ButtonLabel[i].Enabled)and(ButtonImage[i].Left <> -ButtonWidth*2) then begin ButtonImage[i].Left:= -ButtonWidth; end;
end;

procedure WizardLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var n: Integer;
begin
//Т.к Sender'ом выступает WizardLabel то не получится испльзовать индекс кнопки
for n:=0 to (ButtonsCount-1) do if (ButtonLabel[n].Enabled)and(ButtonImage[n].Left <> -ButtonWidth*2) then begin ButtonImage[n].Left:= 0; end;
end;

procedure LoadButtonImage(AButton: TButton);
var n: Integer;
begin
n:=ButtonsCount; SetArrayLength(ButtonPanel, n+1);
SetArrayLength(ButtonImage, n+1); SetArrayLength(ButtonLabel, n+1);
SetArrayLength(UsedButtons, n+1); UsedButtons[n]:= AButton;

ButtonPanel[n]:=TPanel.Create(WizardForm)
ButtonPanel[n].SetBounds(AButton.Left, AButton.Top, AButton.Width, AButton.Height)
ButtonPanel[n].Tag:= n
ButtonPanel[n].Enabled:= AButton.Enabled
ButtonPanel[n].Parent:=AButton.Parent

ButtonImage[n]:=TBitmapImage.Create(WizardForm)
ButtonImage[n].SetBounds(ScaleX(0), ScaleY(0), ScaleX(320), ScaleY(23))
ButtonImage[n].Enabled:=False
ButtonImage[n].Bitmap.LoadFromFile(ExpandConstant('{tmp}\Button2.bmp'))
ButtonImage[n].Parent:=ButtonPanel[n]

with TLabel.Create(WizardForm) do begin
Tag:=n
Parent:=ButtonPanel[n]
Width:=AButton.Width
Height:=AButton.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseMove:=@ButtonLabelMove
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end;

ButtonLabel[n]:=TLabel.Create(WizardForm)
ButtonLabel[n].Autosize:=True
ButtonLabel[n].Alignment:=taCenter
ButtonLabel[n].Tag:=n
ButtonLabel[n].Enabled:= AButton.Enabled
ButtonLabel[n].Transparent:=True
ButtonLabel[n].Font.Color:=clWhite
ButtonLabel[n].Caption:=AButton.Caption
ButtonLabel[n].OnClick:=@ButtonLabelClick
ButtonLabel[n].OnDblClick:=@ButtonLabelClick
ButtonLabel[n].OnMouseMove:=@ButtonLabelMove
ButtonLabel[n].OnMouseDown:=@ButtonLabelMouseDown
ButtonLabel[n].OnMouseUp:=@ButtonLabelMouseUp
ButtonLabel[n].Parent:=ButtonPanel[n]

ButtonsCount:= ButtonsCount+1
end;

procedure UpdateButtons();
var n: Integer;
begin
for n:=0 to ButtonsCount-1 do begin
ButtonLabel[n].Caption:=UsedButtons[n].Caption
ButtonPanel[n].Visible:=UsedButtons[n].Visible
if (UsedButtons[n].Enabled = False) then ButtonImage[n].Left:= -ButtonWidth*3 else ButtonImage[n].Left:= 0;
ButtonLabel[n].Enabled:= UsedButtons[n].Enabled;
ButtonPanel[n].Enabled:= UsedButtons[n].Enabled;
//Ставим Left и Top лейбла соразмерно размеру лейбла
ButtonLabel[n].Left:= ButtonPanel[n].Width div 2 - ButtonLabel[n].Width div 2;
ButtonLabel[n].Top:= ButtonPanel[n].Height div 2 - ButtonLabel[n].Height div 2;
end;
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
//Делаем кнопку активной
WizardForm.NextButton.Enabled:= True;
//Обновляем текстурированную кнопку (обновляем активность и текстуру)
UpdateButtons();
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
//Делаем кнопку неактивной
WizardForm.NextButton.Enabled:= False;
//Обновляем текстурированную кнопку (обновляем активность и текстуру)
UpdateButtons()
end;

procedure InitializeWizard();
begin
WizardLabel:= TLabel.Create(WizardForm)
WizardLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(WizardForm.Width), ScaleY(WizardForm.Height))
WizardLabel.Transparent:= True;
WizardLabel.AutoSize:=false;
WizardLabel.OnMouseMove:=@WizardLabelMove
WizardLabel.Parent:= WizardForm;

WizardForm.BackButton.Width:= ButtonWidth
WizardForm.BackButton.Height:= ButtonHeight

WizardForm.NextButton.Width:= ButtonWidth
WizardForm.NextButton.Height:= ButtonHeight

WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:= ButtonHeight

WizardForm.DirBrowseButton.Left:=ScaleX(337)
WizardForm.DirBrowseButton.Width:= ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=ScaleX(337)
WizardForm.GroupBrowseButton.Width:= ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick

WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button2.bmp')
LoadButtonImage(WizardForm.BackButton)
LoadButtonImage(WizardForm.NextButton)
LoadButtonImage(WizardForm.CancelButton)
LoadButtonImage(WizardForm.DirBrowseButton)
LoadButtonImage(WizardForm.GroupBrowseButton)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
UpdateButtons()
end;


ShadeUa 12-01-2015 13:44 2454927

Ну тут через . bmp а можна как то через. png ?
вот мне нужно наложить на кнопку info а я не доганяю как https://yadi.sk/i/ViCRXsTndv4wD

kotyarko@fb 12-01-2015 14:47 2454946

Цитата:

Цитата ShadeUa
Ну тут через . bmp а можна как то через. png ? »

Пользуйтесь ботвой (botva2).

ShadeUa 12-01-2015 16:12 2454961

Цитата:

Цитата kotyarko@fb
Пользуйтесь ботвой (botva2). »

Я пробЫвал , вот даже сейчас пробую , но я не доганяю как ето реализовать

ShadeUa 12-01-2015 22:59 2455175

Ну вот если даже взять готовый скрипт nfs , от как туда добавить кнопку и затекстурить ее?

ROMKA-1977 13-01-2015 13:35 2455380

Помогите пож. со следующей проблемой:
На InfoBeforeMemo отбражается текст из файла RTF и фыглядит примерно так:

После того как перенёс InfoBeforeMemo на новую панель текст из файла RTF стал отображатся так:

Подскажите что необходимо прописать чтобы текст отображался как и прежде.

Dodakaedr 13-01-2015 19:58 2455591

ROMKA-1977, покажите скрипт.

ROMKA-1977 13-01-2015 20:11 2455596

Цитата:

Цитата Dodakaedr
покажите скрипт »

читать дальше »

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
InfoBeforeFile=Files\Readme.rtf
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true
ShowTasksTreeLines=true

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[code]
var
InfoBeforePage_pnl: TPanel;

procedure InitializeWizard();
begin
InfoBeforePage_pnl:= TPanel.Create(WizardForm);
with InfoBeforePage_pnl do
begin
Top := ScaleY(60);
Width:= ScaleX(497);
Height := ScaleY(253);
BevelOuter := bvNone;
Parent:= WizardForm;
end;
with WizardForm.InfoBeforeMemo do
begin
Top := ScaleY(39);
Height := ScaleY(174);
Left := ScaleX(40);
Parent:= InfoBeforePage_pnl;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
InfoBeforePage_pnl.Hide;
case CurPageID of
wpInfoBefore: InfoBeforePage_pnl.Show;
end;
end;

Dodakaedr 13-01-2015 20:26 2455601

ROMKA-1977, у меня все норм...
Скрытый текст

saurn 13-01-2015 20:35 2455606

ROMKA-1977, а в rtf файле другое форматирование?

ROMKA-1977 13-01-2015 20:52 2455617

Цитата:

Цитата saurn
а в rtf файле другое форматирование? »

http://rghost.ru/60329493
saurn, может посмотрите возможно дело и в rtf.

Dodakaedr 13-01-2015 20:57 2455621

Цитата:

Цитата ROMKA-1977
может посмотрите возможно дело и в rtf. »

У вас Ansi?
Скрытый текст

На Unicode

ROMKA-1977 13-01-2015 21:03 2455622

Dodakaedr,
Чудеса! как же так получается? Использую стандартную анси 5.5.5.

Nordek 13-01-2015 21:13 2455627

ROMKA-1977, Используйте расширенную версию Inno.

saurn 13-01-2015 21:29 2455634

Цитата:

Цитата ROMKA-1977
возможно дело и в rtf. »

Нет, не в rtf. Впрочем, Nordek уже ответил.

habib2302 14-01-2015 17:09 2456024

Доброе время суток. Помогите исправить

Скрытый текст
Код:

; Скрипт создан через Мастер Inno Setup Script.
; ИСПОЛЬЗУЙТЕ ДОКУМЕНТАЦИЮ ДЛЯ ПОДРОБНОСТЕЙ ИСПОЛЬЗОВАНИЯ INNO SETUP!

#define MyAppName "BlueScreenView"
#define MyAppVersion "1.52"
#define MyAppURL "https://href.li/?http://www.nirsoft.net/utils/blue_screen_view.html"
#define MyAppExeName "BlueScreenView.exe"
#include "WinTB.iss"
#include "botva2.iss"
#include "BrowseForm.iss"

[Setup]
; Примечание: Значение AppId идентифицирует это приложение.
; Не используйте одно и тоже значение в разных установках.
; (Для генерации значения GUID, нажмите Инструменты | Генерация GUID.)
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=true
OutputBaseFilename={#MyAppName} {#MyAppVersion} RePack (& Portable) by Xabib
SetupIconFile=ico.ico
Compression=lzma/Ultra64
SolidCompression=true
InternalCompressLevel=Ultra64
DiskSpanning=false
DiskSliceSize=736000000
ShowLanguageDialog=yes
SlicesPerDisk=4
UninstallDisplayIcon={app}\ico.ico
RawDataResource=Botva:botva2.dll|b2p:b2p.dll|Logo:logo.png|bPic:bPic.png|LiPic:LiPic.png|aPic:aPic.png
AppModifyPath={app}
VersionInfoProductName={#MyAppName}
DirExistsWarning=no
DisableReadyPage=true
AppID={#MyAppName}
VersionInfoDescription={#MyAppName} RePack by Xabib
AppCopyright=Xabib © 2014
VersionInfoVersion={#MyAppVersion}
VersionInfoProductVersion={#MyAppVersion}
VersionInfoCopyright=Xabib © 2014
DisableFinishedPage=false
UninstallDisplayName={#MyAppName}
ComponentsListTVStyle=true
ShowComponentSizes=false
Uninstallable=false
DisableProgramGroupPage=yes
CreateUninstallRegKey=false
InfoBeforeFile=Info.rtf
AlwaysRestart=false

[Languages]
Name: "Russian"; MessagesFile: "Russian.isl"

[Types]
Name: full; Description: Полная установка; Flags: iscustom

[Tasks]
Name: ic; Description: {cm:AdditionalIcons}; Components: BSOD\I;
Name: ic\desktop; Description: {cm:CreateDesktopIcon}; Components: BSOD\I;
Name: ic\group; Description: {cm:CreateGroupeIcon}; Components: BSOD\I;
Name: ic\quicklaunch; Description: {cm:CreateQuickLaunchIcon}; OnlyBelowVersion: 0,6.1; Components: BSOD\I; Flags: unchecked
Name: ic\taskbar; Description: {cm:TaskBarIcon}; MinVersion: 0.0,6.1.7600; Components: BSOD\I; Flags: unchecked
Name: ic\startmenu; Description: {cm:StartMenuIcon}; MinVersion: 0.0,6.1.7600; Components: BSOD\I; Flags: unchecked

[Components]
Name: BSOD; Description: {#MyAppName}; Flags: fixed disablenouninstallwarning; Types: full;
Name: BSOD\I; Description: Установить {#MyAppName}; Flags: exclusive disablenouninstallwarning
Name: BSOD\P; Description: Распаковать {#MyAppName}; Flags: exclusive disablenouninstallwarning
Name: L; Description: {cm:InterfaceLang}; Flags: fixed disablenouninstallwarning; Types: full;
Name: L\R; Description: Русский; Flags: exclusive disablenouninstallwarning;
Name: L\E; Description: Английский; Flags: exclusive disablenouninstallwarning;
Name: L\U; Description: Украинский; Flags: exclusive disablenouninstallwarning;

[Files]
;Файлы распаковываемые в папку с игрой. Необходимы для деинсталлятора;
Source: WinTB.dll; Flags: dontcopy;
Source: ico.ico; DestDir: {app}; Flags: ignoreversion
Source: ru.ini; DestDir: {app}; Flags: ignoreversion; Components: L\R; DestName: BlueScreenView_lng.ini;
Source: ua.ini; DestDir: {app}; Flags: ignoreversion; Components: L\U; DestName: BlueScreenView_lng.ini;
; Примечание: Не используйте "Flags: ignoreversion" для системных файлов
Source: {app}\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs;

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: BSOD\I; Tasks: ic\group; IconFilename: {app}\ico.ico;
Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}; Components: BSOD\I; Tasks: ic\group; IconFilename: {app}\ico.ico;
Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {#MyAppURL}; Components: BSOD\I; Tasks: ic\group;
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: BSOD\I; Tasks: ic\desktop; IconFilename: {app}\ico.ico;
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Components: BSOD\I; Tasks: ic\quicklaunch; IconFilename: {app}\ico.ico;

[Run]
Filename: {app}\{#MyAppExeName}; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait skipifsilent PostInstall Unchecked;

[Code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

#define A = (Defined UNICODE) ? "W" : "A"

const
///////////////////////////////////Относится к лого и изображениям мастера
  RT_RCDATA            = 10;
LOAD_LIBRARY_AS_DATAFILE = $2;

var
///////////////////////////////////Лого и изображения
 lPLogo, bPicHandle, bPicHandle2, lPicHandle: THandle;
 BtnImage: TBitmapImage;
///////////////////////////////////////////
 iInitialize: Boolean;

///////////////////////////////////Ресурсы(относится к лого и изображениям мастера)
function GetFromRes(const ResName, SaveFileName: String): Boolean;
var
  lResStream: TResourceStream;
begin
  lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
  try
    lResStream.SaveToFile(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  finally
  lResStream.Free;
  Result := FileExists(AddBackslash(ExpandConstant('{tmp}')) + SaveFileName);
  end;
end;

function OnShouldSkipPage(Sender: TWizardPage): Boolean;
begin
    if WizardForm.ComponentsList.Items.Count > 0 then WizardForm.Tag:= 1; // отображаются страницы выбора папки и компонентов
end;

procedure InitializeWizard;
begin
PageFromID(wpSelectDir).OnShouldSkipPage:= @OnShouldSkipPage
  with WizardForm do
  begin

///////////////////////////////////Логотип и изображения мастера
    iInitialize := True;
    if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_BPIC', 'bPic.png') and GetFromRes('_IS_LIPIC', 'LiPic.png') and GetFromRes('_IS_APIC', 'aPic.png') then
    begin
///////////////////////////////////Изображения
      bPicHandle := ImgLoad(WelcomePage.Handle, ExpandConstant('{tmp}\aPic.png'), WizardBitmapImage.Left, WizardBitmapImage.Top, WizardBitmapImage.Width, WizardBitmapImage.Height, True, True);
      WizardBitmapImage.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(WelcomePage.Handle);

      bPicHandle := ImgLoad(FinishedPage.Handle, ExpandConstant('{tmp}\bPic.png'), WizardBitmapImage2.Left, WizardBitmapImage2.Top, WizardBitmapImage2.Width, WizardBitmapImage2.Height, True, True);
      WizardBitmapImage2.Hide;
      ImgSetVisibility(bPicHandle, True);
      ImgApplyChanges(FinishedPage.Handle);

      lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
      WizardSmallBitmapImage.Hide;
      DiskSpaceLabel.Hide;
      ComponentsDiskSpaceLabel.Hide;
      ImgSetVisibility(lPicHandle, True);
      ImgApplyChanges(MainPanel.Handle);

///////////////////////////////////Логотип
      lPLogo:= ImgLoad(WizardForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
      ImgApplyChanges(WizardForm.Handle);
    end;

///////////////////////////////////WinTB
    ExtractTemporaryFile('WinTB.dll');
    TaskBarV10(MainForm.Handle, WizardForm.Handle, false, false, 0, 0, _m_);
//////////////////////////////////////

    with TLabel.Create(WizardForm) do
    begin
      Parent:=WizardForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
    end;
  DirBrowseButton.OnClick:= @BrowseClick;
  end;
end;

function LoadLibraryEx(lpFileName: String; hFile: THandle; dwFlags: DWORD): THandle; external 'LoadLibraryEx{#A}@kernel32.dll stdcall';
function LoadString(hInstance: THandle; uID: SmallInt; var lpBuffer: Char; nBufferMax: Integer): Integer; external 'LoadString{#A}@user32.dll stdcall';
function SHGetNewLinkInfo(pszLinkTo, pszDir: String; var pszName: Char; var pfMustCopy: Longint; uFlags: UINT): BOOL; external 'SHGetNewLinkInfo{#A}@shell32.dll stdcall';

function PinToTaskbar(const szFilename: String; IsPin: Boolean): Boolean;
// szFilename : full path to executable file
// IsPin......: False - unpin from TaskBar, True - pin to TaskBar
var
    hInst: THandle;
    buf: array [0..255] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if (GetWindowsVersion < $06010000) or not FileExists(szFilename) then Exit; { below Windows 7 }

    { String resources }
    if IsPin then
    begin
        if SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0) then
        begin
            while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
            if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\') + ExtractFileName(strLnk)) then Exit;
        end;
        res := 5386;        { Pin to Tas&kbar }
    end else res := 5387;  { Unpin from Tas&kbar }

    { Load string resource }
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');
            colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
            for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
            begin
                colVerbs.Item[i].DoIt;
                Result := True;
                Break;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;

/////////////////////////////////////////////////////////////////////////
function PinToStartMenu(const szFilename: String; IsPin: Boolean): Boolean;
// szFilename : full path to exe- or lnk-file
// IsPin......: False - unpin from StartMenu, True - pin to StartMenu
var
    hInst: THandle;
    buf: array [0..259] of Char;
    i, res: Integer;
    strLnk, strVerb: String;
    objShell, colVerbs: Variant;
begin
    Result := False;
    if not FileExists(szFilename) then Exit;
    if GetWindowsVersion > $06020000 then Exit; { Window 8 and above }

    { Windows 7 }
    if (GetWindowsVersion >= $06010000) and boolean(SHGetNewLinkInfo(szFilename, ExpandConstant('{tmp}'), buf[0], res, 0)) then
    begin
        while buf[Length(strLnk)] <> #0 do Insert(buf[Length(strLnk)], strLnk, Length(strLnk)+1);
        if FileExists(ExpandConstant('{userappdata}\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu\') + ExtractFileName(strLnk)) then Exit;
    end;

    { String resources }
    if IsPin then
        res := 5381    { Pin to Start Men&u }
    else
        res := 5382;    { Unpin from Start Men&u }

    { Load string resource }
    hInst := LoadLibraryEx(ExpandConstant('{sys}\shell32.dll'), 0, LOAD_LIBRARY_AS_DATAFILE);
    if hInst <> 0 then
    try
        for i := 0 to LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);
        try
            objShell := CreateOleObject('Shell.Application');

            { below Windows 7 }
            if GetWindowsVersion < $06010000 then
            begin
                objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).InvokeVerb(strVerb);
                Result := True;
            end;

            { Windows 7 }
            if GetWindowsVersion >= $06010000 then
            begin
                colVerbs := objShell.Namespace(ExtractFileDir(szFilename)).ParseName(ExtractFileName(szFilename)).Verbs;
                for i := 1 to colVerbs.Count do if CompareText(colVerbs.Item[i].Name, strVerb) = 0 then
                begin
                    colVerbs.Item[i].DoIt;
                    Result := True;
                    Break;
                end;
            end;
        except
            Exit;
        end;
    finally
        FreeDLL(hInst);
    end;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
      wpFinished:
        begin
      if IsTaskSelected('ic\taskbar') then
        PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), True);
      if IsTaskSelected('ic\startmenu') then
        PinToStartMenu(ExpandConstant('{app}\{#MyAppExeName}'), True);
    end;
  wpSelectTasks:
    if IsComponentSelected('BSOD\I') then
  begin
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
  wpSelectDir: if WizardForm.Tag = 1 then
  begin
    WizardForm.SelectDirPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
    WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectComponents);
    WizardForm.Hint:= WizardForm.PageDescriptionLabel.Caption; // запомнить SetupMessage(msgSelectDirDesc)
    WizardForm.PageDescriptionLabel.Caption:= SetupMessage(msgSelectComponentsDesc);
  end;
  wpSelectComponents: if WizardForm.Tag = 1 then
  begin
    WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
    WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
    WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir);
    WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint; // иначе вместо названия программы [name]
    if not WizardSilent then
    if IsComponentSelected('BSOD\I') then
  begin
    WizardForm.DirEdit.Text :=(ExpandConstant('{#SetupSetting("DefaultDirName")}'))
  end else
      if not WizardSilent then
      if IsComponentSelected('BSOD\P') then
  begin
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Portable'
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
  end;
 end;
end;

procedure DeinitializeSetup();
begin
  if iInitialize then
  begin
    gdipShutdown;
    TaskBarDestroy;
  end;
end;

procedure InitializeUninstallProgressForm;
begin
  with UninstallProgressForm do
    begin
///////////////////////////////////Логотип и изображения мастера
      if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_B2P', 'b2p.dll') and GetFromRes('_IS_LOGO', 'logo.png') and GetFromRes('_IS_LIPIC', 'LIPic.png') then
      begin
///////////////////////////////////Изображения
        lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\LiPic.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, True);
        WizardSmallBitmapImage.Hide;
        ImgSetVisibility(lPicHandle, True);
        ImgApplyChanges(MainPanel.Handle);

///////////////////////////////////Логотип
        lPLogo:= ImgLoad(UninstallProgressForm.Handle, ExpandConstant('{tmp}\logo.png'), ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40), True, True);
        ImgApplyChanges(UninstallProgressForm.Handle);
      end;

    with TLabel.Create(nil) do
    begin
      Parent:=UninstallProgressForm;
      AutoSize:=False;
      Transparent:= true;
      SetBounds(ScaleX(20), ScaleY(318), ScaleX(124), ScaleY(40));
    end;
  end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  instPath: string;
begin
    case CurUninstallStep of
      usUninstall:
      begin
      PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), False);
      PinToStartMenu(ExpandConstant('{app}\{#MyAppExeName}'), False);
      end;
    end;
end;

procedure DeinitializeUninstall();
begin
  if iInitialize then gdipShutdown;
end;

[UninstallDelete]
Name: {app}; Type: filesandordirs;


kotyarko@fb 14-01-2015 17:47 2456062

Цитата:

Цитата habib2302
Помогите исправить »

Вы про серый фон радиобаттонов?

habib2302 14-01-2015 17:51 2456064

kotyarko@fb, ага

ROMKA-1977 15-01-2015 10:03 2456291

Nordek, saurn, Dodakaedr, спасибо за советы, с расширенной версией Inno всё получается. Но всётаки поюзав код нашел вариант для стандартной Ansi:
читать дальше »

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
InfoBeforeFile=Readme.rtf
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true
ShowTasksTreeLines=true

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;
Source: "ReadMe.rtf"; DestDir: "{tmp}"; Flags: ignoreversion

[code]
var
InfoBeforePage_pnl: TPanel;
Readme: AnsiString;

procedure InitializeWizard();
begin
InfoBeforePage_pnl:= TPanel.Create(WizardForm);
with InfoBeforePage_pnl do
begin
Top := ScaleY(60);
Width:= ScaleX(497);
Height := ScaleY(253);
BevelOuter := bvNone;
Parent:= WizardForm;
end;
ExtractTemporaryFile('ReadMe.rtf');
LoadStringFromFile(ExpandConstant('{tmp}')+'\ReadMe.rtf', Readme);
with WizardForm.InfoBeforeMemo do
begin
Top := ScaleY(39);
Height := ScaleY(174);
Left := ScaleX(40);
Parent:= InfoBeforePage_pnl;
RTFText:=Readme
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
InfoBeforePage_pnl.Hide;
case CurPageID of
wpInfoBefore: InfoBeforePage_pnl.Show;
end;
end;

StongCool 15-01-2015 13:05 2456368

Какие есть скрипты на установку Дополнительного ПО(Желательно с отметкой галочкой)

ROMKA-1977 15-01-2015 13:48 2456382

StongCool,
читать дальше »

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}

Name: Soft; Description: Установка дополнительного программного обеспечения; GroupDescription: Дополнительное программное обеспечение:; Flags: unchecked
Name: Soft/DirectX; Description: Microsoft DirectX; Flags: unchecked
Name: Soft/vcredist_x86; Description: Microsoft Visual С++ 2008 Redistributable; Flags: unchecked
Name: Soft/vcredist_x64; Description: Microsoft Visual С++ 2008 Redistributable x64; Flags: unchecked; Check: IsWin64

Shift85 15-01-2015 14:00 2456393

Вложений: 1
Цитата:

Цитата StongCool
Какие есть скрипты на установку Дополнительного ПО(Желательно с отметкой галочкой) »


StongCool 15-01-2015 14:46 2456427

ROMKA-1977, Очень хорошо.

А вот например, если мне необходимо тихую установку сделать для этого .reg файла. Что нужно?

Код:

Name: Soft; Description: Установка дополнительного программного обеспечения; GroupDescription: Дополнительное программное обеспечение:; Flags: unchecked
Name: Soft/Reg; Description: Reg файл; Flags: unchecked


Shift85 15-01-2015 15:09 2456443

Цитата:

Цитата StongCool
А вот например, если мне необходимо тихую установку сделать для этого .reg файла. Что нужно? »

StongCool, Читай справку.

Скрытый текст
http://rghost.ru/users/Arsen19/releases/Russkaya-spravka-k-Inno-Setup

StongCool 15-01-2015 15:36 2456465

Вложений: 1
Не знаю почему, но справка у меня некорректно работает. Есть еще варианты?

Dodakaedr 15-01-2015 15:39 2456468

StongCool, ПКМ по файлу справки, выбрать свойства и внизу нажмите разблокировать

habib2302 15-01-2015 17:35 2456539

Доброе время суток. Я хочу вернуться к этому вопросу http://forum.oszone.net/post-2369688-1001.html (if not WizardSilent then)
Если добавить if not WizardSilent then, то при тихом использовании (/VERYSILENT) без команды DIR прога будет распаковываться по пути из DefaultDirName. Как исправить
И хочу вернуться к этому вопросу http://forum.oszone.net/post-2456024-2299.html

Shift85 15-01-2015 17:55 2456552

habib2302, По поводу этого вопроса.
http://forum.oszone.net/post-2456024-2299.html

Все элементарно.
Открывай редактор форм и двигай куда надо. :)


habib2302 15-01-2015 18:07 2456562

Shift85, и что? :) от этого серый фон не исчезнит

Shkutu 16-01-2015 17:07 2457093

Цитата:

Цитата habib2302
Если добавить if not WizardSilent then, то при тихом использовании (/VERYSILENT) без команды DIR прога будет распаковываться по пути из DefaultDirName »

очевидно потому, что у вас в этом случае никак не задается директория установки
Цитата:

Цитата habib2302
Как исправить »

очевидно, задать директорию :)
Скрытый текст

Код:

if not WizardSilent then
          begin

          end
else
 WizardForm.DirEdit.Text := ExpandConstant('{pf}\{#MyAppName}'); // директория, которая нужна при тихой установке

Если с тем кодом, что вы приводите, то (все переписывать лень, поэтому только кусок, касающийся страницы SelectComponents)
Код:

wpSelectComponents: if WizardForm.Tag = 1 then
  begin
    WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
    WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
    WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir);
    WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint; // иначе вместо названия программы [name]
    if not WizardSilent then
    begin
      if IsComponentSelected('DDU\I') then
        WizardForm.DirEdit.Text :=(ExpandConstant('{#SetupSetting("DefaultDirName")}'))
    else
    if IsComponentSelected('DDU\P') then
      begin
      WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Portable'
      WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
    end;
    end
  else //тихая установки
    WizardForm.DirEdit.Text := ExpandConstant('{pf}\{#MyAppName}'); // директория, которая нужна при тихой установке
  end;


ShadeUa 16-01-2015 19:32 2457157

Здраствуйте , на каком языке пишуться если скрипты ?

kotyarko@fb 16-01-2015 20:29 2457185

Цитата:

Цитата ShadeUa
на каком языке пишуться если скрипты ? »

Object Pascal.

ROMKA-1977 16-01-2015 21:43 2457209

Помогите пож. к данному коду прикрутить автоматическую смену названия кнопки "open"
читать дальше »

Код:

const
    GWL_EXSTYLE = (-20);
    WS_EX_COMPOSITED = $2000000;
    AW_HIDE = $10000;
    AW_VER_POSITIVE = $4;
    AW_VER_NEGATIVE = $8;

function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
function AnimateWindow(hwnd: HWND; dwTime, dwFlags: DWORD): BOOL; external 'AnimateWindow@user32.dll stdcall';

var
    SettingPanel: TPanel;

procedure NewButton1Click(Sender: TObject);
begin
    with SettingPanel do
    begin
        //временно отрубаем стиль WS_EX_COMPOSITED, а то AnimateWindow плавненько не отработает
        SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) xor WS_EX_COMPOSITED);
        AnimateWindow(Handle, 1000, (AW_VER_POSITIVE * dword(not Visible)) or ((AW_HIDE or AW_VER_NEGATIVE) * dword(Visible)));
        SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED);
        Visible := not Visible;
    end;
end;

procedure InitializeWizard();
begin
    SetWindowLong(WizardForm.Handle, GWL_EXSTYLE, GetWindowLong(WizardForm.Handle, GWL_EXSTYLE) or WS_EX_COMPOSITED);

    SettingPanel := TPanel.Create(WizardForm);
    with SettingPanel do
    begin
        Parent := WizardForm;
        SetBounds(ScaleX(0), ScaleY(0), WizardForm.ClientWidth, WizardForm.OuterNotebook.ClientHeight);
        Visible := False;
    end;

    with TNewButton.Create(WizardForm) do
    begin
        Parent := WizardForm;
        SetBounds(ScaleX(40), ScaleY(327), ScaleX(75), ScaleY(25));
        Caption := 'open';
        OnClick := @NewButton1Click;
    end;
end;


Dodakaedr 16-01-2015 21:52 2457217

Цитата:

Цитата ROMKA-1977
автоматическую »

в зависимости от чего? Какая основа автоматизации? Язык?
Скрытый текст
Код:

[Setup]
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl
Name: en; MessagesFile: compiler:Languages\english.isl

[CustomMessages]
ru.open=Открыть
en.open=Open

[code]
procedure InitializeWizard();
begin
    with TNewButton.Create(WizardForm) do
    begin
        Parent := WizardForm;
        SetBounds(ScaleX(40), ScaleY(327), ScaleX(75), ScaleY(25));
        Caption := CustomMessage('open');
    end;
end;


Shift85 16-01-2015 21:56 2457218

Цитата:

Цитата ROMKA-1977
автоматическую смену названия кнопки "open" »

Это че то новенькое даже не слышал. :)

Если только сменить название.

Код:

Caption := 'open';
на

Код:

Caption := 'Кнопка';

Shift85 16-01-2015 22:11 2457228

Вложений: 1
Цитата:

Цитата ROMKA-1977
Помогите пож. к данному коду прикрутить автоматическую смену названия кнопки "open" »

ROMKA-1977, Пример.

habib2302 16-01-2015 22:20 2457235

Shkutu, это точно не сработает. да и команда dir не работает даже при обычной установке

Shkutu 17-01-2015 00:55 2457310

Цитата:

Цитата habib2302
это точно не сработает. да и команда dir не работает даже при обычной установке »

во-первых, почему это не сработает? вы проверяли?
а во-вторых, вы код вообще смотрели? в каком месте там команда dir?
я порекомендовала это:
Код:

WizardForm.DirEdit.Text := ExpandConstant('{pf}\{#MyAppName}');
это обычное присвоение, где WizardForm.DirEdit - поле объекта формы установщика, содержащее путь установки вашего приложения. и конструкция эта прекрасно работает и при обычной установке и при тихой.

habib2302 17-01-2015 10:14 2457372

Shkutu, ну вот мой код который на данный момент стоит
Скрытый текст
Код:

Procedure CurPageChanged(CurPageID: Integer);
Begin
  Case CurPageID of
      wpFinished:
        begin
      if IsTaskSelected('ic\taskbar') then
        PinToTaskbar(ExpandConstant('{app}\{#MyAppExeName}'), True);
      if IsTaskSelected('ic\startmenu') then
        PinToStartMenu(ExpandConstant('{app}\{#MyAppExeName}'), True);
    end;
  wpSelectTasks:
    if IsComponentSelected('BSOD\I') then
  begin
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
  wpSelectDir: if WizardForm.Tag = 1 then

  begin
    WizardForm.SelectDirPage.Notebook.ActivePage:= WizardForm.SelectComponentsPage;
    WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectComponents);
    WizardForm.Hint:= WizardForm.PageDescriptionLabel.Caption; // запомнить SetupMessage(msgSelectDirDesc)
    WizardForm.PageDescriptionLabel.Caption:= SetupMessage(msgSelectComponentsDesc);
  end;
  wpSelectComponents: if WizardForm.Tag = 1 then
  begin
    WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
    WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
    WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir);
    WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint; // иначе вместо названия программы [name]
    if not WizardSilent then
    if IsComponentSelected('BSOD\I') then
  begin
    WizardForm.DirEdit.Text :=(ExpandConstant('{#SetupSetting("DefaultDirName")}'))
  end else
      if not WizardSilent then
      if IsComponentSelected('BSOD\P') then
  begin
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Portable'
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;
  end;
 end;
end;


вот и сделайте как вы говорили. а вообще мне кажется проблема из-за кода для смены страниц местами

StongCool 17-01-2015 12:34 2457400

Не нашел я нормально рабочего скрипта на счет redist.

Кто какими пользуется, скиньте пожалуйста)

Shift85 17-01-2015 13:10 2457414

Цитата:

Цитата StongCool
Не нашел я нормально рабочего скрипта на счет redist. »

StongCool, Плохо искал.

Вот через секцию код + ISDone:

Код:

procedure Soft(CurStep: TSetupStep);
var res: integer;
begin
if (CurStep = ssPostInstall) and not ISDoneError then begin
  if BtnGetChecked(SoftCheck) then begin
    MainLabel.Left:= ScaleX(0);
    MainLabel.Caption:=ExpandConstant('{cm:SoftInstall1}');
    StatusLabel.Caption:=ExpandConstant('{cm:Status3}');
    BtnSetEnabled(hCancelBtn, False);
    Exec(ExpandConstant('{src}\Redist\DirectX\DXSETUP.exe'), '/silent', ExpandConstant('{src}'), SW_SHOW, ewWaitUntilTerminated, Res);
    Exec(ExpandConstant('{src}\Redist\VC\vcredist_x86.exe'), '/Q', ExpandConstant('{src}'), SW_SHOW, ewWaitUntilTerminated, Res);
  end;
end;
end;


Shkutu 17-01-2015 18:08 2457520

habib2302, в вашем коде вообще не прописана ветка, где WizardSilent=true, и не работает именно из-за этого, я думаю.
Код:

wpSelectComponents: if WizardForm.Tag = 1 then
  begin
    WizardForm.SelectComponentsPage.Notebook.ActivePage:= WizardForm.SelectDirPage;
    WizardForm.DiskSpaceLabel.Caption:= WizardForm.ComponentsDiskSpaceLabel.Caption;
    WizardForm.PageNameLabel.Caption:= SetupMessage(msgWizardSelectDir);
    WizardForm.PageDescriptionLabel.Caption:= WizardForm.Hint; // иначе вместо названия программы [name]
    if not WizardSilent then
    if IsComponentSelected('BSOD\I') then
  begin
    WizardForm.DirEdit.Text :=(ExpandConstant('{#SetupSetting("DefaultDirName")}'))
  end  else
      if not WizardSilent then
      if IsComponentSelected('BSOD\P') then
  begin
    WizardForm.DirEdit.Text := AddBackslash(ExpandConstant('{src}')) + '{#MyAppName} Portable'
    WizardForm.NextButton.Caption:= SetupMessage(msgButtonInstall);
  end;

По поводу как надо, я тоже уже писала. Собственно, этот кусок я и переписывала в своем посте http://forum.oszone.net/post-2457093-2313.html. Но судя по всему вам лень не только пробовать, что вам советуют, но даже просто читать, что вам отвечают. Правда в этом случае, уж извините за резкость, вообще непонятно, зачем вы тут вопросы задаете.

habib2302 17-01-2015 19:24 2457547

Shkutu, мне уже дали код в krinkels
Код:

function ParamExists(S: String): Boolean;
var
  i: Integer;
begin
  Result:= False;
  for i:= 0 to ParamCount() do begin
    if Pos('/'+Uppercase(S), Uppercase(ParamStr(i))) > 0 then begin
      Result:= true;
      Break;
    end;
  end;
end;

function GetCmdDirValue(): String;
var
  i: Integer;
begin
  Result:= '';
  for i:= 0 to ParamCount() do begin
    if (Pos('/DIR', Uppercase(ParamStr(i))) > 0) then begin
      Result:= Copy(ParamStr(i), 6, Length(ParamStr(i)));
      StringChange(Result, 'expand:', '');
      StringChange(Result, 'EXPAND:', '');
      Result:= ExpandConstant(Result);
      Break;;
    end;
  end;
end;

***
if (ParamExists('dir')) then
  WizardForm.DirEdit.Text:= GetCmdDirValue();
***

но куда пихать
Код:

if (ParamExists('dir')) then
  WizardForm.DirEdit.Text:= GetCmdDirValue();


StongCool 18-01-2015 01:30 2457671

Вложений: 1
Как сделать нижнею панель прозрачной?

kotyarko@fb 18-01-2015 02:52 2457690

Вложений: 1
Цитата:

Цитата StongCool
Как сделать нижнею панель прозрачной? »


Пример прикрепил (взят с Krinkels).

habib2302 18-01-2015 10:04 2457736

StongCool, ISWin7 бесполезен если вы используйте WinTB и добавлено лого в нижней панельке

StongCool 18-01-2015 12:48 2457805

Вложений: 1
kotyarko@fb, Ссылка битая на скриншот.

И еще хотелось узнать.

Как сделать стартовой эту страницу + окошко такое.

habib2302 18-01-2015 13:18 2457822

StongCool,
Цитата:

Цитата StongCool
Ссылка битая на скриншот. »



http://krinkels.org/threads/iswin7.1946/
Код:

[Setup]
DisableWelcomePage=true
InfoBeforeFile=файл с описанием.rtf


ShadeUa 18-01-2015 13:45 2457842

Здраствуйте. Я не так давно завадал вопрос но на него так не кто не ответил , а сам не мог розобраться. Как мне затекстурировать кнопку info через батву, и как сдлеать что при нажатии на кнопку открівалось не окно а картинка ?
http://forum.oszone.net/attachment.p...1&d=1421577903

kotyarko@fb 18-01-2015 15:22 2457898

Цитата:

Цитата ShadeUa
Как мне затекстурировать кнопку info через батву »

Так же, как и текстурировали остальные.

Цитата:

Цитата ShadeUa
и как сдлеать что при нажатии на кнопку открівалось не окно а картинка ? »

Создать функцию\процедуру, рисующую эту картинку и вызывать её через свойство OnClick вашей кнопки.

ShadeUa 18-01-2015 15:54 2457908

Еще один вопрос , а что ето за ошибка?
http://forum.oszone.net/attachment.p...1&d=1421585491

kotyarko@fb 18-01-2015 16:36 2457922

Цитата:

Цитата ShadeUa
Еще один вопрос , а что ето за ошибка? »

У вас два раза подряд создаётся InfBtn, это во-первых.
Во-вторых, InfBtn должен быть объявлен как HWND.
В-третьих, последний заданный параметр функции BtnCreate - это:
Код:

//IsCheckBtn - если True, то будет создана кнопка (аналог CheckBox) имеющая включенное и выключенное состояние
//            если False, то создастся обычная кнопка

По логике (если кнопка просто должна открывать изображение) должен быть выставлен False, а у вас True.

ShadeUa 18-01-2015 16:51 2457928

Цитата:

Цитата kotyarko@fb
У вас два раза подряд создаётся InfBtn, это во-первых.
Во-вторых, InfBtn должен быть объявлен как HWND.
В-третьих, последний заданный параметр функции BtnCreate - это:
Код: Выделить весь код
//IsCheckBtn - если True, то будет создана кнопка (аналог CheckBox) имеющая включенное и выключенное состояние
// если False, то создастся обычная кнопка
По логике (если кнопка просто должна открывать изображение) должен быть выставлен False, а у вас True. »

Я все исправил , но тоже самое , я то не програмист просто любитель , вот каникулы начались решил опять етим позаниматься но нечего не полуаеться
Я сделал все как вы говорили , и обьявил его
([code]
var
hCancelBtn, hNextBtn, hBackBtn, hDirBrowseBtn, hGroupBrowseBtn, InfBtn (*, TButtonOnClick *):HWND;
ButtonFont: TFont ; ) но нечего не изменилось

Dodakaedr 18-01-2015 20:12 2458010

Цитата:

Цитата ShadeUa
и как сдлеать что при нажатии на кнопку открівалось не окно а картинка ? »

Такой пример не пойдет?
Скрытый текст
Код:

[Setup]
AppName=My Programm
AppVersion=1.1
DefaultDirName={pf}\My Programm
OutputDir=.

[Files]
DestName: "WizardForm.BitmapImage1.bmp"; Source: "compiler:WizModernSmallImage-IS.bmp"; Flags: dontcopy solidbreak

[Code]
const
  GCL_STYLE = -26;
  CS_NOCLOSE = $200;

var
  BitmapImage1: TBitmapImage;
  NewButton1, NewButton2: TButton;
  Form: TSetupForm;

function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLongA@user32.dll stdcall';
function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLongA@user32.dll stdcall';

procedure ButtonOnClick(Sender: TObject);
begin
  Form.Close;
  WizardForm.Enabled:=true;
end;

procedure ButtonOnClick2(Sender: TObject);
begin
  Form.Show;
  WizardForm.Enabled:=false;
end;

procedure RedesignWizardForm;
begin
  Form:= CreateCustomForm;
  Form.ClientWidth := ScaleX(150);
  Form.ClientHeight := ScaleY(100);
  Form.Caption := 'Инфо';
  Form.Center;
  Form.FormStyle := fsStayOnTop;
  SetClassLong(Form.Handle, GCL_STYLE, GetClassLong(Form.Handle, GCL_STYLE) or CS_NOCLOSE);

  NewButton2 := TButton.Create(Form);
  NewButton2.Parent := Form;
  NewButton2.Width := ScaleX(55);
  NewButton2.Height := ScaleY(23);
  NewButton2.Left := Form.ClientWidth - ScaleY(57);
  NewButton2.Top := Form.ClientHeight - ScaleY(25);
  NewButton2.Caption := 'OK';
  NewButton2.OnClick := @ButtonOnClick;

  BitmapImage1 := TBitmapImage.Create(Form);
  with BitmapImage1 do
  begin
    Parent := Form;
    Left := ScaleX(0);
    Top := ScaleY(0);
    Width := ScaleX(50);
    Height := ScaleY(50);
    ExtractTemporaryFile('WizardForm.BitmapImage1.bmp');
    Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardForm.BitmapImage1.bmp'));
  end;

  NewButton1 := TButton.Create(WizardForm);
  with NewButton1 do
  begin
    Parent := WizardForm;
    Left := ScaleX(48);
    Top := ScaleY(328);
    Width := ScaleX(75);
    Height := ScaleY(25);
    Caption := 'Инфо';
    OnClick := @ButtonOnClick2;
  end;
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;


ShadeUa 18-01-2015 21:18 2458033

Цитата:

Цитата Dodakaedr
Такой пример не пойдет? »

к сожилению нет , я вам сейчас покажу что я хочу сделать

ShadeUa 18-01-2015 21:24 2458041

Цитата:

Цитата Dodakaedr
Такой пример не пойдет? »

Вот так хотелося б сделать .Весь скрипт перелапошил и непонял как ето сделать
http://forum.oszone.net/attachment.p...1&d=1421605464
http://forum.oszone.net/attachment.p...1&d=1421605464

sergey3695 18-01-2015 21:59 2458064

ShadeUa,
Скрытый текст
Код:

function InitializeSetup:boolean;
begin
  if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
  if not FileExists(ExpandConstant('{tmp}\1.png')) then ExtractTemporaryFile('1.png');
  Result:=True;
end;

#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

const
  GWL_WNDPROC = -4;
  WM_NCLBUTTONDOWN = $00A1;
type
  LPARAM = Integer;
  WPARAM = Integer;
  LRESULT = Integer;
  TFNWndProc = Integer;
var
  OldWindowProc: Longint;

function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';

function WindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
  case Msg of
    WM_NCLBUTTONDOWN:
    begin
      Msg := 0;
      WizardForm.Close;
    end;
  end;
  Result := CallWindowProc(OldWindowProc, hWnd, Msg, wParam, lParam);
end;

procedure CloseForm(Sender: TObject);
begin
  WizardForm.Close;
end;

procedure InitializeWizard;
begin
  CreateFormFromImage(wizardform.Handle,ExpandConstant('{tmp}\1.png'));
  ImgApplyChanges(WizardForm.Handle);
  OldWindowProc := SetWindowLong(WizardForm.Handle, GWL_WNDPROC, CallbackAddr('WindowProc'));
end;

procedure DeinitializeSetup();
begin
  SetWindowlong(WizardForm.Handle, GWL_WNDPROC, OldWindowProc);
  gdipShutdown;
end;


на кнопку, на форму, картинку. удачи :)

ShadeUa 18-01-2015 23:57 2458145

Цитата:

Цитата sergey3695
на кнопку, на форму, картинку. удачи »

Спасибо , вот какраз удача не улыбнулась. Тут какая то ошибка , я думал его нужно обьявить , но я незнаю пока как , с етим у меня проблемы http://forum.oszone.net/attachment.p...1&d=1421614575

sergey3695 19-01-2015 11:20 2458264

ShadeUa, botva2.iss подключи.

ShadeUa 19-01-2015 11:49 2458268

Цитата:

Цитата sergey3695
botva2.iss подключи. »

Вроде , да

#define MyAppName "Test"
#define MyAppVerName "Test"
#define MyDefaultDirName "Test"
#define MyDefaultGroupName "Test"

[Setup]
SourceDir=.
OutputDir=Setup
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\{#MyDefaultDirName}
DefaultGroupName={#MyDefaultGroupName}
OutputBaseFilename=Setup
AllowNoIcons=true
ShowTasksTreeLines=true
[files]
Source: 1.png; DestDir: {tmp}; Flags: dontcopy
Source: botva2.dll; DestDir: {tmp}; Flags: dontcopy
Source: botva2.iss; DestDir: {tmp}; Flags: dontcopy

[code]
(*var
CreateFormFromImage : *)
#include "botva2.iss"
function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
if not FileExists(ExpandConstant('{tmp}\1.png')) then ExtractTemporaryFile('1.png');
Result:=True;
end;

#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

const
GWL_WNDPROC = -4;
WM_NCLBUTTONDOWN = $00A1;
type
LPARAM = Integer;
WPARAM = Integer;
LRESULT = Integer;
TFNWndProc = Integer;
var
OldWindowProc: Longint;

function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';

function WindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
case Msg of
WM_NCLBUTTONDOWN:
begin
Msg := 0;
WizardForm.Close;
end;
end;
Result := CallWindowProc(OldWindowProc, hWnd, Msg, wParam, lParam);
end;

procedure CloseForm(Sender: TObject);
begin
WizardForm.Close;
end;

procedure InitializeWizard;
begin
CreateFormFromImage(wizardform.Handle,ExpandConstant('{tmp}\1.png'));
ImgApplyChanges(WizardForm.Handle);
OldWindowProc := SetWindowLong(WizardForm.Handle, GWL_WNDPROC, CallbackAddr('WindowProc'));
end;

procedure DeinitializeSetup();
begin
SetWindowlong(WizardForm.Handle, GWL_WNDPROC, OldWindowProc);
gdipShutdown;
end;

sergey3695 19-01-2015 14:40 2458358

Цитата:

Цитата ShadeUa
Source: botva2.iss; DestDir: {tmp}; Flags: dontcopy »

Зачем? Открой botva2.iss и почитай что там. Это не полностью готовый пример а лишь главный кусок решения. Я думал ты разбираешься хоть малость.

ROMKA-1977 19-01-2015 22:45 2458580

Подскажите пож. в чём может бать проблема:
В код инсталятора на SelectDirPage прописана кастомная кнопка "Обзор", работает отлично но если ошибочно выбрать путь установки DVD ROM и далее повторно нажать на "Обзор" всплывает сообщение "Вставьте диск в устройство "DVD RW" которого при стандартной кнопке нет. Как отключить это сообщение?
читать дальше »

Код:

#define Name "Test"

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[Icons]
Name: {group}\MyProg; Filename: {app}; WorkingDir: {app}

[CustomMessages]
russian.RestoreButton=Сброс

[Code_]
var
  BrowseForm: TSetupForm;
  BrowseForm2: TSetupForm;
  DirTreeView: TFolderTreeView;
  DirFolderTreeView: TStartMenuFolderTreeView;
  EditTreeView: TNewEdit;
  EditFolderTreeView: TNewEdit;
  DB_Button: TNewButton;
  GB_Button: TNewButton;
  OldEvent_NoIconsCheckClick: TNotifyEvent;

procedure DirTreeViewChange(Sender: TObject);
begin
  if DirTreeView.Directory <> WizardForm.DirEdit.Text then
  EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}' else
  EditTreeView.Text := DirTreeView.Directory;
end;

procedure DirFolderTreeViewChange(Sender: TObject);
begin
  if DirFolderTreeView.Directory <> WizardForm.GroupEdit.Text then
  EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}' else
  EditFolderTreeView.Text := DirFolderTreeView.Directory;
end;

procedure BrowseFormButtonsTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    1: EditTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#SetupSetting("DefaultDirName")}'));

    2: begin
          DirTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}';
        end;

    3: if EditTreeView.Text <> WizardForm.DirEdit.Text then WizardForm.DirEdit.Text := EditTreeView.Text;
  end;
end;

procedure BrowseFormButtonsFolderTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    4: EditFolderTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#Name}'));

    5: begin
          DirFolderTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}';
        end;

    6: if EditFolderTreeView.Text <> WizardForm.GroupEdit.Text then WizardForm.GroupEdit.Text := EditFolderTreeView.Text;
  end;
end;

procedure BrowseDirTreeViewClick(Sender: TObject);
begin
  BrowseForm := CreateCustomForm();
  with BrowseForm do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm;
      Font.Size := 8;
    end;

    DirTreeView := TFolderTreeView.Create(nil)
    with DirTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      OnChange := @DirTreeViewChange;
      Parent := BrowseForm;
    end;

    EditTreeView := TNewEdit.Create(nil);
    with EditTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirTreeView.Directory;
      Parent := BrowseForm;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 1;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 2;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonOK);
      Tag := 3;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirTreeView.ChangeDirectory(AddBackslash(WizardForm.DirEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure BrowseDirFolderTreeViewClick(Sender: TObject);
begin
  BrowseForm2 := CreateCustomForm();
  with BrowseForm2 do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm2;
      Font.Size := 8;
    end;

    DirFolderTreeView := TStartMenuFolderTreeView.Create(nil)
    with DirFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
      OnChange := @DirFolderTreeViewChange;
      Parent := BrowseForm2;
    end;

    EditFolderTreeView := TNewEdit.Create(nil);
    with EditFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirFolderTreeView.Directory;
      Parent := BrowseForm2;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 4;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 5;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonOK);
      Tag := 6;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirFolderTreeView.ChangeDirectory(AddBackslash(WizardForm.GroupEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure NoIconsCheckClick(Sender: TObject);
 begin
  OldEvent_NoIconsCheckClick(Sender);
  GB_Button.Enabled := not WizardForm.NoIconsCheck.Checked;
 end;

procedure InitializeWizard();
begin
  OldEvent_NoIconsCheckClick := WizardForm.NoIconsCheck.OnClick;
  WizardForm.NoIconsCheck.OnClick := @NoIconsCheckClick;

  WizardForm.DirBrowseButton.Hide;
  DB_Button := TNewButton.create(WizardForm);
  with DB_Button do
  begin
    Parent := WizardForm.SelectDirPage;
    SetBounds(WizardForm.DirBrowseButton.Left, WizardForm.DirBrowseButton.Top, WizardForm.DirBrowseButton.Width, WizardForm.DirBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirTreeViewClick;
  end;

  WizardForm.GroupBrowseButton.Hide;
  GB_Button := TNewButton.create(WizardForm);
  with GB_Button do
  begin
    Parent := WizardForm.SelectProgramGroupPage;
    SetBounds(WizardForm.GroupBrowseButton.Left, WizardForm.GroupBrowseButton.Top, WizardForm.GroupBrowseButton.Width, WizardForm.GroupBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirFolderTreeViewClick;
  end;

end;


sergey3695 19-01-2015 23:03 2458587

ROMKA-1977, так и должно быть. при стандартной также.

saurn 19-01-2015 23:16 2458591

Цитата:

Цитата ROMKA-1977
Как отключить это сообщение? »

Можно указать инсталу не реагировать, если выбран CD-ROM, как вариант.
Скрытый текст
Код:

#define Name "Test"

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[Icons]
Name: {group}\MyProg; Filename: {app}; WorkingDir: {app}

[CustomMessages]
russian.RestoreButton=Сброс

[Code]
/////////////////////////////////////////////////////////
#define A = (Defined UNICODE) ? "W" : "A"
/////////////////////////////////////////////////////////
const
    DRIVE_CDROM = 5;
/////////////////////////////////////////////////////////
function GetDriveType( lpRootPathName: String ): UINT; external 'GetDriveType{#A}@kernel32.dll stdcall';
/////////////////////////////////////////////////////////


var
  BrowseForm: TSetupForm;
  BrowseForm2: TSetupForm;
  DirTreeView: TFolderTreeView;
  DirFolderTreeView: TStartMenuFolderTreeView;
  EditTreeView: TNewEdit;
  EditFolderTreeView: TNewEdit;
  DB_Button: TNewButton;
  GB_Button: TNewButton;
  OldEvent_NoIconsCheckClick: TNotifyEvent;

procedure DirTreeViewChange(Sender: TObject);
begin
  if DirTreeView.Directory <> WizardForm.DirEdit.Text then
  EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}' else
  EditTreeView.Text := DirTreeView.Directory;
end;

procedure DirFolderTreeViewChange(Sender: TObject);
begin
  if DirFolderTreeView.Directory <> WizardForm.GroupEdit.Text then
  EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}' else
  EditFolderTreeView.Text := DirFolderTreeView.Directory;
end;

procedure BrowseFormButtonsTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    1: EditTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#SetupSetting("DefaultDirName")}'));

    2: begin
          DirTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}';
        end;

    3: if EditTreeView.Text <> WizardForm.DirEdit.Text then
    /////////////////////////////////////////////////////////////////
       
if GetDriveType( AddBackslash( ExtractFileDrive( EditTreeView.Text ) ) ) <> DRIVE_CDROM then
    /////////////////////////////////////////////////////////////////
         
WizardForm.DirEdit.Text := EditTreeView.Text;
  end;
end;

procedure BrowseFormButtonsFolderTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    4: EditFolderTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#Name}'));

    5: begin
          DirFolderTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}';
        end;

    6: if EditFolderTreeView.Text <> WizardForm.GroupEdit.Text then WizardForm.GroupEdit.Text := EditFolderTreeView.Text;
  end;
end;

procedure BrowseDirTreeViewClick(Sender: TObject);
begin
  BrowseForm := CreateCustomForm();
  with BrowseForm do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm;
      Font.Size := 8;
    end;

    DirTreeView := TFolderTreeView.Create(nil)
    with DirTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      OnChange := @DirTreeViewChange;
      Parent := BrowseForm;
    end;

    EditTreeView := TNewEdit.Create(nil);
    with EditTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirTreeView.Directory;
      Parent := BrowseForm;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 1;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 2;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonOK);
      Tag := 3;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirTreeView.ChangeDirectory(AddBackslash(WizardForm.DirEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure BrowseDirFolderTreeViewClick(Sender: TObject);
begin
  BrowseForm2 := CreateCustomForm();
  with BrowseForm2 do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm2;
      Font.Size := 8;
    end;

    DirFolderTreeView := TStartMenuFolderTreeView.Create(nil)
    with DirFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
      OnChange := @DirFolderTreeViewChange;
      Parent := BrowseForm2;
    end;

    EditFolderTreeView := TNewEdit.Create(nil);
    with EditFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirFolderTreeView.Directory;
      Parent := BrowseForm2;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 4;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 5;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonOK);
      Tag := 6;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirFolderTreeView.ChangeDirectory(AddBackslash(WizardForm.GroupEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure NoIconsCheckClick(Sender: TObject);
 begin
  OldEvent_NoIconsCheckClick(Sender);
  GB_Button.Enabled := not WizardForm.NoIconsCheck.Checked;
 end;

procedure InitializeWizard();
begin
  OldEvent_NoIconsCheckClick := WizardForm.NoIconsCheck.OnClick;
  WizardForm.NoIconsCheck.OnClick := @NoIconsCheckClick;

  WizardForm.DirBrowseButton.Hide;
  DB_Button := TNewButton.create(WizardForm);
  with DB_Button do
  begin
    Parent := WizardForm.SelectDirPage;
    SetBounds(WizardForm.DirBrowseButton.Left, WizardForm.DirBrowseButton.Top, WizardForm.DirBrowseButton.Width, WizardForm.DirBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirTreeViewClick;
  end;

  WizardForm.GroupBrowseButton.Hide;
  GB_Button := TNewButton.create(WizardForm);
  with GB_Button do
  begin
    Parent := WizardForm.SelectProgramGroupPage;
    SetBounds(WizardForm.GroupBrowseButton.Left, WizardForm.GroupBrowseButton.Top, WizardForm.GroupBrowseButton.Width, WizardForm.GroupBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirFolderTreeViewClick;
  end;

end;



Тем же способом можете выводить сообщение, если выбран CD-ROM, типа "установка на выбранный диск невозможна" и т.д.

ROMKA-1977 19-01-2015 23:29 2458598

Цитата:

Цитата saurn
Можно указать инсталу не реагировать, если выбран CD-ROM »

а возможен ли вариант полностью удалить отображение CD-ROM из DirTreeView?

saurn 19-01-2015 23:37 2458601

Цитата:

Цитата ROMKA-1977
возможен ли вариант полностью удалить отображение CD-ROM из DirTreeView »

Нет.

nik1967 20-01-2015 11:00 2458719

ROMKA-1977, можешь ещё, как вариант, при выборе CD-ROM'а сделать неактивной нужную кнопку.
Вариант с nextbutton

sergey3695 20-01-2015 11:47 2458746

ROMKA-1977, при неправильном пути DirTreeView ничего не отображает. (в основе пример saurn,).
Скрытый текст
Код:

#define Name "Test"

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[Icons]
Name: {group}\MyProg; Filename: {app}; WorkingDir: {app}

[CustomMessages]
russian.RestoreButton=Сброс

[code_]
/////////////////////////////////////////////////////////
#define A = (Defined UNICODE) ? "W" : "A"
/////////////////////////////////////////////////////////
const
    DRIVE_CDROM = 5;
/////////////////////////////////////////////////////////
function GetDriveType( lpRootPathName: String ): UINT; external 'GetDriveType{#A}@kernel32.dll stdcall';
/////////////////////////////////////////////////////////

var
  BrowseForm: TSetupForm;
  BrowseForm2: TSetupForm;
  DirTreeView: TFolderTreeView;
  DirFolderTreeView: TStartMenuFolderTreeView;
  EditTreeView: TNewEdit;
  EditFolderTreeView: TNewEdit;
  DB_Button: TNewButton;
  GB_Button: TNewButton;
  OldEvent_NoIconsCheckClick: TNotifyEvent;
  DEdit: boolean;

procedure DirTreeViewChange(Sender: TObject);
begin
if DEdit then
begin
  if DirTreeView.Directory <> WizardForm.DirEdit.Text then
  EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}' else
  EditTreeView.Text := DirTreeView.Directory;
end;
end;

procedure DirFolderTreeViewChange(Sender: TObject);
begin
  if DirFolderTreeView.Directory <> WizardForm.GroupEdit.Text then
  EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}' else
  EditFolderTreeView.Text := DirFolderTreeView.Directory;
end;

procedure BrowseFormButtonsTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    1: EditTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#SetupSetting("DefaultDirName")}'));

    2: begin
          DirTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}';
        end;

    3: if EditTreeView.Text <> WizardForm.DirEdit.Text then
    /////////////////////////////////////////////////////////////////
        if GetDriveType( AddBackslash( ExtractFileDrive( EditTreeView.Text ) ) ) <> DRIVE_CDROM then
    /////////////////////////////////////////////////////////////////
          WizardForm.DirEdit.Text := EditTreeView.Text;
  end;
end;

procedure BrowseFormButtonsFolderTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    4: EditFolderTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#Name}'));

    5: begin
          DirFolderTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}';
        end;

    6: if EditFolderTreeView.Text <> WizardForm.GroupEdit.Text then WizardForm.GroupEdit.Text := EditFolderTreeView.Text;
  end;
end;

procedure BrowseA(Sender: TObject);
begin
  DEdit:= True;
end;

procedure BrowseC(Sender: TObject; var action: TCloseAction);
begin
  DEdit:= False;
end;

procedure BrowseDirTreeViewClick(Sender: TObject);
begin
  BrowseForm := CreateCustomForm();
  with BrowseForm do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;
    OnActivate:= @BrowseA;
    OnClose:= @BrowseC;
   
    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm;
      Font.Size := 8;
    end;

    DirTreeView := TFolderTreeView.Create(nil)
    with DirTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      OnChange := @DirTreeViewChange;
      Parent := BrowseForm;
    end;

    EditTreeView := TNewEdit.Create(nil);
    with EditTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := WizardForm.DirEdit.Text;
      Parent := BrowseForm;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 1;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 2;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonOK);
      Tag := 3;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
      ModalResult := mrOk;
    end;

    if GetDriveType( AddBackslash( ExtractFileDrive( WizardForm.DirEdit.Text ) ) ) <> DRIVE_CDROM then
    DirTreeView.ChangeDirectory(AddBackslash(WizardForm.DirEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure BrowseDirFolderTreeViewClick(Sender: TObject);
begin
  BrowseForm2 := CreateCustomForm();
  with BrowseForm2 do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm2;
      Font.Size := 8;
    end;

    DirFolderTreeView := TStartMenuFolderTreeView.Create(nil)
    with DirFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
      OnChange := @DirFolderTreeViewChange;
      Parent := BrowseForm2;
    end;

    EditFolderTreeView := TNewEdit.Create(nil);
    with EditFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirFolderTreeView.Directory;
      Parent := BrowseForm2;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 4;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 5;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonOK);
      Tag := 6;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirFolderTreeView.ChangeDirectory(AddBackslash(WizardForm.GroupEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure NoIconsCheckClick(Sender: TObject);
 begin
  OldEvent_NoIconsCheckClick(Sender);
  GB_Button.Enabled := not WizardForm.NoIconsCheck.Checked;
 end;

procedure InitializeWizard();
begin
  OldEvent_NoIconsCheckClick := WizardForm.NoIconsCheck.OnClick;
  WizardForm.NoIconsCheck.OnClick := @NoIconsCheckClick;

  WizardForm.DirBrowseButton.Hide;
  DB_Button := TNewButton.create(WizardForm);
  with DB_Button do
  begin
    Parent := WizardForm.SelectDirPage;
    SetBounds(WizardForm.DirBrowseButton.Left, WizardForm.DirBrowseButton.Top, WizardForm.DirBrowseButton.Width, WizardForm.DirBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirTreeViewClick;
  end;

  WizardForm.GroupBrowseButton.Hide;
  GB_Button := TNewButton.create(WizardForm);
  with GB_Button do
  begin
    Parent := WizardForm.SelectProgramGroupPage;
    SetBounds(WizardForm.GroupBrowseButton.Left, WizardForm.GroupBrowseButton.Top, WizardForm.GroupBrowseButton.Width, WizardForm.GroupBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirFolderTreeViewClick;
  end;
end;


El Sanchez 20-01-2015 13:46 2458801

Цитата:

Цитата ROMKA-1977
а возможен ли вариант полностью удалить отображение CD-ROM из DirTreeView? »

ROMKA-1977, можно только на Unicode-компиляторе, ибо придется работать с интерфейсом IFolderFilterSite для функции SHBrowseForFolder.
Цитата:

Цитата nik1967
как вариант, при выборе CD-ROM'а сделать неактивной нужную кнопку. »

ROMKA-1977, например, этой кнопкой может быть кнопка OK диалога.
Скрытый текст

Код:

[Setup]
AppName=test
AppVerName=test
DefaultDirName={tmp}
CreateAppDir=no
Uninstallable=no
CreateUninstallRegKey=no

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[code]
#define A = (Defined UNICODE) ? "W" : "A"
const
   
COINIT_APARTMENTTHREADED  = $2;
    MAX_PATH = 260;
    BIF_RETURNONLYFSDIRS = $1;
    BIF_DONTGOBELOWDOMAIN = $2;
    BIF_NEWDIALOGSTYLE = $40;
    BIF_UAHINT = $0100;
    BFFM_INITIALIZED = $1;
    BFFM_SELCHANGED = $2;
    WM_USER = $0400;
    BFFM_ENABLEOK = (WM_USER + 101);
    BFFM_SETSELECTION = (WM_USER + 102);
    DRIVE_REMOVABLE = 2;
    DRIVE_FIXED = 3;
    DRIVE_RAMDISK = 6;
   
type
   
BROWSEINFO = record
       
hwndOwner: HWND;
        pidlRoot: Longint;
        pszDisplayName: String;
        lpszTitle: String;
        ulFlags: UINT;
        lpfn: Longint;
        lParam: Longint;
        iImage: Integer;
    end;

function CoInitializeEx(pvReserved: Longint; dwCoInit: DWORD): Longint; external 'CoInitializeEx@ole32.dll stdcall';
procedure CoUninitialize; external 'CoUninitialize@ole32.dll stdcall';
function SHBrowseForFolder(lpbi: BROWSEINFO): Longint; external 'SHBrowseForFolder{#A}@shell32.dll stdcall';
function SHGetPathFromIDList(pidl: Longint; pszPath: String): BOOL; external 'SHGetPathFromIDList{#A}@shell32.dll stdcall';
function GetDriveType(lpRootPathName: String): UINT; external 'GetDriveType{#A}@kernel32.dll stdcall';

var
   
AButton: TButton;
    AEdit: TEdit;

//////////////////////////////////////////////////////////////////////////////////////
function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam, lpData: Longint): Integer;
var
   
szDrive: String;
begin
    case
uMsg of
       
BFFM_INITIALIZED: SendMessage(hwnd, BFFM_SETSELECTION, 1, lpData);
        BFFM_SELCHANGED:
            begin
               
SendMessage(hwnd, BFFM_ENABLEOK, 0, 0);
                szDrive := StringOfChar(#0, MAX_PATH);
                if SHGetPathFromIDList(lParam, szDrive) then
                begin
                   
szDrive := AddBackslash(ExtractFileDrive(Trim(szDrive)));
                    case GetDriveType(szDrive) of
                       
DRIVE_REMOVABLE,
                        DRIVE_FIXED,
                        DRIVE_RAMDISK: SendMessage(hwnd, BFFM_ENABLEOK, 0, 1);
                    end;
                end;
            end;
    end;
    Result := 0;
end;

//////////////////////////////////////////
procedure AButtonOnClick(Sender: TObject);
var
   
bi: BROWSEINFO;
    szSel: AnsiString;
    pidl: Longint;
begin
   
{ fill BROWSEINFO struct }
   
bi.pszDisplayName := StringOfChar(#0, MAX_PATH);
    bi.lpszTitle := SetupMessage(msgBrowseDialogLabel);
    bi.ulFlags := BIF_RETURNONLYFSDIRS or BIF_DONTGOBELOWDOMAIN or BIF_NEWDIALOGSTYLE or BIF_UAHINT;
    szSel := AEdit.Text;
    if (szSel <> '') then
   
#ifdef UNICODE
       
bi.lParam := CastAnsiStringToInteger(szSel);
    #else
       
bi.lParam := CastStringToInteger(szSel);
    #endif
   
bi.lpfn := CallbackAddr('BrowseCallbackProc');

    { browse }
   
try
        if
CoInitializeEx(0, COINIT_APARTMENTTHREADED) = 0 then Exit;
        pidl := SHBrowseForFolder(bi);
        if (pidl <> 0) then
        begin
            if
SHGetPathFromIDList(pidl, bi.pszDisplayName) then
               
AEdit.Text := Trim(bi.pszDisplayName);
        end;
    finally
       
CoUninitialize;
    end;
end;

///////////////////////////
procedure InitializeWizard;
begin
   
WizardForm.OuterNotebook.Hide;
   
    { AButton }
   
AButton := TButton.Create(WizardForm);
    with AButton do
    begin
       
Parent := WizardForm;
        Left := Parent.ClientWidth - Width;
        Caption := SetupMessage(msgButtonWizardBrowse);
        OnClick := @AButtonOnClick;
    end;

    { AEdit }
   
AEdit := TEdit.Create(WizardForm);
    with AEdit do
    begin
       
Parent := WizardForm;
        Top := Top + (AButton.Height - Height) div 2;
        Width := AButton.Left;
    end;
end;


ROMKA-1977 20-01-2015 15:06 2458845

Цитата:

Цитата saurn
Тем же способом можете выводить сообщение, если выбран CD-ROM, типа "установка на выбранный диск невозможна" »

Ели вы про MsgBox то подскажите как правильно его в данном случае применить (с MsgBox опыта у меня мало) например вывод сообщения при на жатии на кнопку "OK".

nik1967 20-01-2015 16:47 2458905

ROMKA-1977,
как вариант.
Код:

[Setup]
AppName=Game
AppVersion=Game_v1
DefaultDirName=D:\Games
OutputDir=.

[Languages]
Name: ru; MessagesFile: compiler:Languages\russian.isl

[Code]
#define A = (Defined UNICODE) ? "W" : "A"
const
  DRIVE_CDROM = 5;
var
        AboutButton: TButton;

function GetDriveType(nDrive: string): Longint; external 'GetDriveType{#A}@kernel32.dll stdcall';

function CDROM(Drive: String): Boolean;
begin
  Result:= GetDriveType(Drive) = 5;
end;

procedure GetDrive(Sender: TObject);
var
  Path: String;
begin
        Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
        WizardForm.NextButton.Enabled:= not CDROM(Path);
        AboutButton.Enabled:= not CDROM(Path);
                if CDROM(Path) then MsgBox('Установка на выбранный диск невозможна!', mbError, MB_OK);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
        case CurPageID of
                wpSelectDir:
                begin
                        GetDrive(nil);
                        WizardForm.DirEdit.OnChange:= @GetDrive;
                end;
        end;
end;

procedure AboutButtonClick(Sender: TObject);
begin
        MsgBox('Это очень замечательная игра!', mbInformation, MB_OK);
end;

procedure InitializeWizard;
begin
        AboutButton:= TButton.Create(WizardForm);
        with AboutButton do begin
                SetBounds(ScaleX(10), WizardForm.NextButton.Top, WizardForm.NextButton.Width, WizardForm.NextButton.Height);
                Caption:= 'О релизе';
                OnClick:= @AboutButtonClick;
                Parent:= WizardForm;       
        end;
end;


ROMKA-1977 21-01-2015 13:09 2459240

Подскажите:
в выше описанный мною код по вашим совтам прописол код сообщения "установка на выбранный диск невозможна" с блокировкой кнопки "Далее". Получилось так:
читать дальше »

Код:

#define Name "Test"

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[Icons]
Name: {group}\MyProg; Filename: {app}; WorkingDir: {app}

[CustomMessages]
russian.RestoreButton=Сброс

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

const
  DRIVE_CDROM = 5;

var
  BrowseForm: TSetupForm;
  BrowseForm2: TSetupForm;
  DirTreeView: TFolderTreeView;
  DirFolderTreeView: TStartMenuFolderTreeView;
  EditTreeView: TNewEdit;
  EditFolderTreeView: TNewEdit;
  DB_Button: TNewButton;
  GB_Button: TNewButton;
  OldEvent_NoIconsCheckClick: TNotifyEvent;

function GetDriveType(nDrive: string): Longint; external 'GetDriveType{#A}@kernel32.dll stdcall';

function CDROM(Drive: String): Boolean;
begin
  Result:= GetDriveType(Drive) = 5;
end;

procedure GetDrive(Sender: TObject);
var
  Path: String;
begin
        Path:= ExtractFileDrive(WizardForm.DirEdit.Text);
        WizardForm.NextButton.Enabled:= not CDROM(Path);
                if CDROM(Path) then MsgBox('Установка на выбранный диск невозможна!', mbError, MB_OK);
end;

procedure DirTreeViewChange(Sender: TObject);
begin
  if DirTreeView.Directory <> WizardForm.DirEdit.Text then
  EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}' else
  EditTreeView.Text := DirTreeView.Directory;
end;

procedure DirFolderTreeViewChange(Sender: TObject);
begin
  if DirFolderTreeView.Directory <> WizardForm.GroupEdit.Text then
  EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}' else
  EditFolderTreeView.Text := DirFolderTreeView.Directory;
end;

procedure BrowseFormButtonsTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    1: EditTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#SetupSetting("DefaultDirName")}'));

    2: begin
          DirTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}';
        end;

    3: if EditTreeView.Text <> WizardForm.DirEdit.Text then WizardForm.DirEdit.Text := EditTreeView.Text;
  end;
end;

procedure BrowseFormButtonsFolderTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    4: EditFolderTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#Name}'));

    5: begin
          DirFolderTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}';
        end;

    6: if EditFolderTreeView.Text <> WizardForm.GroupEdit.Text then WizardForm.GroupEdit.Text := EditFolderTreeView.Text;
  end;
end;

procedure BrowseDirTreeViewClick(Sender: TObject);
begin
  BrowseForm := CreateCustomForm();
  with BrowseForm do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm;
      Font.Size := 8;
    end;

    DirTreeView := TFolderTreeView.Create(nil)
    with DirTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      OnChange := @DirTreeViewChange;
      Parent := BrowseForm;
    end;

    EditTreeView := TNewEdit.Create(nil);
    with EditTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirTreeView.Directory;
      Parent := BrowseForm;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 1;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 2;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonOK);
      Tag := 3;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirTreeView.ChangeDirectory(AddBackslash(WizardForm.DirEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure BrowseDirFolderTreeViewClick(Sender: TObject);
begin
  BrowseForm2 := CreateCustomForm();
  with BrowseForm2 do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm2;
      Font.Size := 8;
    end;

    DirFolderTreeView := TStartMenuFolderTreeView.Create(nil)
    with DirFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
      OnChange := @DirFolderTreeViewChange;
      Parent := BrowseForm2;
    end;

    EditFolderTreeView := TNewEdit.Create(nil);
    with EditFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirFolderTreeView.Directory;
      Parent := BrowseForm2;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 4;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 5;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonOK);
      Tag := 6;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirFolderTreeView.ChangeDirectory(AddBackslash(WizardForm.GroupEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure NoIconsCheckClick(Sender: TObject);
 begin
  OldEvent_NoIconsCheckClick(Sender);
  GB_Button.Enabled := not WizardForm.NoIconsCheck.Checked;
 end;

procedure InitializeWizard();
begin
  OldEvent_NoIconsCheckClick := WizardForm.NoIconsCheck.OnClick;
  WizardForm.NoIconsCheck.OnClick := @NoIconsCheckClick;

  WizardForm.DirBrowseButton.Hide;
  DB_Button := TNewButton.create(WizardForm);
  with DB_Button do
  begin
    Parent := WizardForm.SelectDirPage;
    SetBounds(WizardForm.DirBrowseButton.Left, WizardForm.DirBrowseButton.Top, WizardForm.DirBrowseButton.Width, WizardForm.DirBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirTreeViewClick;
  end;

  WizardForm.GroupBrowseButton.Hide;
  GB_Button := TNewButton.create(WizardForm);
  with GB_Button do
  begin
    Parent := WizardForm.SelectProgramGroupPage;
    SetBounds(WizardForm.GroupBrowseButton.Left, WizardForm.GroupBrowseButton.Top, WizardForm.GroupBrowseButton.Width, WizardForm.GroupBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirFolderTreeViewClick;
  end;

end;

procedure CurPageChanged(CurPageID: Integer);
begin
    case CurPageID of
      wpSelectDir:
      begin
          GetDrive(nil);
          WizardForm.DirEdit.OnChange:= @GetDrive;
      end;
  end;
end;


Проблема: если ошибочно выбрать путь установки DVD ROM и нажать на кнопку "OK" всплывает окно с сообщением "установка на выбранный диск невозможна" после закрытия которого окно выбора директории закрывается. Возможно ли сделать так чтобы после закрытия окна с сообщением окно выбора директории не закрывалось.

Юрій_Окропірідзе@vk 22-01-2015 14:36 2459706

Вложений: 1
Здраствуйте , в чем может быть проблема?
http://forum.oszone.net/attachment.p...1&d=1421926584

kotyarko@fb 22-01-2015 14:52 2459712

Цитата:

Цитата Юрій_Окропірідзе@vk
Здраствуйте , в чем может быть проблема? »

Когда вы создаёте кастомную кнопку, к ней нужно обращаться не через её родителя WizardForm, как к родным кнопкам, а напрямую.
Код:

hNewBtnClick: Btn := NewButton1;

Юрій_Окропірідзе@vk 22-01-2015 15:50 2459744

Цитата:

Цитата kotyarko@fb
Когда вы создаёте кастомную кнопку, к ней нужно обращаться не через её родителя WizardForm, как к родным кнопкам, а напрямую.
Код: Выделить весь код
hNewBtnClick: Btn := NewButton1; »

Спасибо . Еще вопрос , можна как то что б при нажатии на кнопку , вместо окна з информацией открывалася картинка ?

kotyarko@fb 22-01-2015 16:17 2459757

Цитата:

Цитата Юрій_Окропірідзе@vk
Еще вопрос , можна как то что б при нажатии на кнопку , вместо окна з информацией открывалася картинка ? »

Можно. Через BtnSetEvent выполнять функцию\процедуру, в которой создаётся форма для изображения и само изображение на этой форме.

Юрій_Окропірідзе@vk 22-01-2015 18:12 2459807

Цитата:

Цитата kotyarko@fb
Можно. Через BtnSetEvent выполнять функцию\процедуру, в которой создаётся форма для изображения и само изображение на этой форме. »

BtnSetEvent(INFbtn,BtnClickEventID,WrapBtnCallback(@LogoClick,4));
BtnSetEvent(INFBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(INFBtn,GetSysCursorHandle(32649));
ето вот ета форма?

nik1967 22-01-2015 20:09 2459847

Цитата:

Цитата ROMKA-1977
Возможно ли сделать так чтобы после закрытия окна с сообщением окно выбора директории не закрывалось.»

Возможно :)
Код:

#define Name "Test"

[Setup]
SourceDir=.
OutputDir=Setup
AppName=Test
AppVerName=Test
DefaultDirName={pf}\Test
DefaultGroupName=Test
OutputBaseFilename=Setup
AllowNoIcons=true

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;

[Icons]
Name: {group}\MyProg; Filename: {app}; WorkingDir: {app}

[CustomMessages]
russian.RestoreButton=Сброс

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

const
  DRIVE_CDROM = 5;

var
  BrowseForm: TSetupForm;
  BrowseForm2: TSetupForm;
  DirTreeView: TFolderTreeView;
  DirFolderTreeView: TStartMenuFolderTreeView;
  EditTreeView: TNewEdit;
  EditFolderTreeView: TNewEdit;
  DB_Button: TNewButton;
  GB_Button: TNewButton;
  OldEvent_NoIconsCheckClick: TNotifyEvent;
  OKButton, ButtonNewFolder: TButton;

function GetDriveType(nDrive: string): Longint; external 'GetDriveType{#A}@kernel32.dll stdcall';

function CDROM(Drive: String): Boolean;
begin
  Result:= GetDriveType(Drive) = 5;
end;

procedure GetDrive(Sender: TObject);
var
  Path, Path1: String;
begin
  Path:= ExtractFileDrive(DirTreeView.Directory);
  Path1:= ExtractFileDrive(EditTreeView.Text);
  ButtonNewFolder.Enabled:= not CDROM(Path);
  OKButton.Enabled:= not CDROM(Path1);
    if CDROM(Path1) then MsgBox('Установка на выбранный диск невозможна!', mbError, MB_OK);
end;

procedure DirTreeViewChange(Sender: TObject);
begin
  if DirTreeView.Directory <> WizardForm.DirEdit.Text then begin
    EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}';
    GetDrive(nil);
  end else
    EditTreeView.Text := DirTreeView.Directory;
end;

procedure DirFolderTreeViewChange(Sender: TObject);
begin
  if DirFolderTreeView.Directory <> WizardForm.GroupEdit.Text then
  EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}' else
  EditFolderTreeView.Text := DirFolderTreeView.Directory;
end;

procedure BrowseFormButtonsTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    1:        begin
          EditTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#SetupSetting("DefaultDirName")}'));
          GetDrive(nil);
        end;
    2:        begin
          DirTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditTreeView.Text := AddBackslash(DirTreeView.Directory) + '{#Name}';
        end;

    3:        if EditTreeView.Text <> WizardForm.DirEdit.Text then WizardForm.DirEdit.Text := EditTreeView.Text;
  end;
end;

procedure BrowseFormButtonsFolderTreeViewOnClick(Sender: TObject);
begin
  case TButton(Sender).Tag of
    4:        EditFolderTreeView.Text := RemoveBackslashUnlessRoot(ExpandConstant('{#Name}'));

    5:        begin
          DirFolderTreeView.CreateNewDirectory(SetupMessage(msgNewFolderName));
          EditFolderTreeView.Text := AddBackslash(DirFolderTreeView.Directory) + '{#Name}';
        end;

    6:        if EditFolderTreeView.Text <> WizardForm.GroupEdit.Text then WizardForm.GroupEdit.Text := EditFolderTreeView.Text;
  end;
end;

procedure BrowseDirTreeViewClick(Sender: TObject);
begin
  BrowseForm := CreateCustomForm();
  with BrowseForm do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm;
      Font.Size := 8;
    end;

    DirTreeView := TFolderTreeView.Create(nil)
    with DirTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      OnChange := @DirTreeViewChange;
      Parent := BrowseForm;
    end;

    EditTreeView := TNewEdit.Create(nil);
    with EditTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirTreeView.Directory;
      Parent := BrowseForm;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 1;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    ButtonNewFolder:= TButton.Create(nil)
    with ButtonNewFolder do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 2;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
    end;

    OKButton:= TButton.Create(nil);
    with OKButton do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm;
      Caption := SetupMessage(msgButtonOK);
      Tag := 3;
      OnClick := @BrowseFormButtonsTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirTreeView.ChangeDirectory(AddBackslash(WizardForm.DirEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure BrowseDirFolderTreeViewClick(Sender: TObject);
begin
  BrowseForm2 := CreateCustomForm();
  with BrowseForm2 do
  begin
    Width := ScaleX(413);
    Height := ScaleY(361);
    Caption := SetupMessage(msgBrowseDialogTitle);
    Position := poScreenCenter;

    with TLabel.Create(nil) do
    begin
      SetBounds(ScaleX(12), ScaleY(12), ScaleX(207), ScaleY(16));
      Caption := SetupMessage(msgBrowseDialogLabel);
      Parent := BrowseForm2;
      Font.Size := 8;
    end;

    DirFolderTreeView := TStartMenuFolderTreeView.Create(nil)
    with DirFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(64), ScaleX(375), ScaleY(225));
      SetPaths(ExpandConstant('{userprograms}'),ExpandConstant('{commonprograms}'),ExpandConstant('{userstartup}'),ExpandConstant('{commonstartup}'));
      OnChange := @DirFolderTreeViewChange;
      Parent := BrowseForm2;
    end;

    EditFolderTreeView := TNewEdit.Create(nil);
    with EditFolderTreeView do
    begin
      SetBounds(ScaleX(16), ScaleY(36), ScaleX(376), ScaleY(21));
      Text := DirFolderTreeView.Directory;
      Parent := BrowseForm2;
      Font.Color := clWindowText;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(16), ScaleY(301), ScaleX(90), ScaleX(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonCancel);
      ModalResult := mrCancel;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(111), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := ExpandConstant('{cm:RestoreButton}');
      Tag := 4;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(206), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonNewFolder);
      Tag := 5;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
    end;

    with TButton.Create(nil) do
    begin
      SetBounds(ScaleX(301), ScaleY(301), ScaleX(90), ScaleY(23));
      Parent := BrowseForm2;
      Caption := SetupMessage(msgButtonOK);
      Tag := 6;
      OnClick := @BrowseFormButtonsFolderTreeViewOnClick;
      ModalResult := mrOk;
    end;

    DirFolderTreeView.ChangeDirectory(AddBackslash(WizardForm.GroupEdit.Text), True);
    ShowModal;
    Free;
  end;
end;

procedure NoIconsCheckClick(Sender: TObject);
 begin
  OldEvent_NoIconsCheckClick(Sender);
  GB_Button.Enabled := not WizardForm.NoIconsCheck.Checked;
 end;

procedure InitializeWizard();
begin
  OldEvent_NoIconsCheckClick := WizardForm.NoIconsCheck.OnClick;
  WizardForm.NoIconsCheck.OnClick := @NoIconsCheckClick;

  WizardForm.DirBrowseButton.Hide;
  DB_Button := TNewButton.create(WizardForm);
  with DB_Button do
  begin
    Parent := WizardForm.SelectDirPage;
    SetBounds(WizardForm.DirBrowseButton.Left, WizardForm.DirBrowseButton.Top, WizardForm.DirBrowseButton.Width, WizardForm.DirBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirTreeViewClick;
  end;

  WizardForm.GroupBrowseButton.Hide;
  GB_Button := TNewButton.create(WizardForm);
  with GB_Button do
  begin
    Parent := WizardForm.SelectProgramGroupPage;
    SetBounds(WizardForm.GroupBrowseButton.Left, WizardForm.GroupBrowseButton.Top, WizardForm.GroupBrowseButton.Width, WizardForm.GroupBrowseButton.Height - ScaleY(1));
    Caption := SetupMessage(msgButtonBrowse);
    OnClick := @BrowseDirFolderTreeViewClick;
  end;
end;


kotyarko@fb 22-01-2015 20:34 2459852

Цитата:

Цитата Юрій_Окропірідзе@vk
ето вот ета форма? »

Нет. Это только ссылание на процедуру создания. Сама процедура это то, что идёт после символа "@".

Юрій_Окропірідзе@vk 22-01-2015 20:48 2459860

Цитата kotyarko@fb:
Нет. Это только ссылание на процедуру создания. Сама процедура это то, что идёт после символа "@". »
Вот етот скрипт , я немогу понят где та процедура , я его перелопатил , некоторые процедури к себе скопировал , но так нечего не изменилось , я не понимаю в чем может быть проблема
Скрытый текст
[code]
var
pb, pb1: Longint;
WFButtonFont, UPFButtonFont: TFont;
CurrentImage, ProgressStep: integer;
mp3Name, OldDisk, TimeLeft: string;
w1, w2, w3,w4,w5, w6, w7: Longint;
Welcome, System, Catalogue, StartMenu, Tasks, Installing, Finish, Uninstalling,
PageNameLabel, PageDescriptionLabel,
WelcomeLabel1, WelcomeLabel2,
RequirementsLbl, ProcessorLbl, VideoCardLbl, SoundCardLbl, RAMLbl, SystemLbl,
ProcessorNameLbl, VideoCardNameLbl, SoundCardNameLbl, RAMTotalLbl, SystemNameLbl,

SelectDirBrowseLabel, DirEditLabel, TotalSpaceLabel, NeedSpaceLabel, FreeSpaceLabel,
SelectStartMenuFolderBrowseLabel, GroupEditLabel, NoIconsLabel,
SelectTasksLabel, DesktopLabel, QuickLaunchLabel, DirectXLabel, LanguageLabel, LngNameLbl,
FilenameLabel, StatusLabel, ProgressInfoLabel,
FinishedHeadingLabel, FinishedLabel,
WizardUninstLabel, UninstPageDescriptLabel, StatusUninstLabel : TLabel;
function InitializeSetup: Boolean;
begin
ExtractTemporaryFile('botva2.dll');
ExtractTemporaryFile('Click.wav');
ExtractTemporaryFile('isskin.dll');
ExtractTemporaryFile('Tiger.cjstyles');

LoadSkin(ExpandConstant('{tmp}\Tiger.cjstyles'), '');
Result:=True;
end;

procedure CreateWizardImage;
var
i: integer;
begin
WizardForm.ClientWidth:=ScaleX(877);
WizardForm.ClientHeight:=ScaleY(485);
WizardForm.Center;
WizardForm.BorderStyle := bsDialog;
WizardForm.OuterNotebook.Hide;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel.Hide;

ExtractTemporaryFile('WizardImage.jpg');
ExtractTemporaryFile('button.png');
ExtractTemporaryFile('buttonNext.png');
ExtractTemporaryFile('buttonBack.png');
ExtractTemporaryFile('buttonCancel.png');
ExtractTemporaryFile('buttonBrowse.png');
ExtractTemporaryFile('buttonInstall.png');
ExtractTemporaryFile('buttonEnd.png');
ExtractTemporaryFile('MusicButton.png');
ExtractTemporaryFile('RequirementsPanel.png');
ExtractTemporaryFile('Edit.png');
ExtractTemporaryFile('DirFolder.png');
ExtractTemporaryFile('HardDrivePanel.png');
ExtractTemporaryFile('HDD.png');
ExtractTemporaryFile('GroupFolder.png');
ExtractTemporaryFile('CheckBox.png');
ExtractTemporaryFile('ProgressBackground.png');
ExtractTemporaryFile('ProgressImg.png');
ExtractTemporaryFile('INF.png');
ExtractTemporaryFile('back.png');

ExtractTemporaryFile('w1.png');
ExtractTemporaryFile('w2.png');
ExtractTemporaryFile('w3.png');
ExtractTemporaryFile('w4.png');
ExtractTemporaryFile('w5.png');
ExtractTemporaryFile('w6.png');
ExtractTemporaryFile('w7.png');

ExtractTemporaryFile('WFEnter.wav');
ExtractTemporaryFile('Check.wav');
ExtractTemporaryFile('Music.ogg');
ExtractTemporaryFile('BASS.dll');
ExtractTemporaryFile('LogoButton.png');


WizardImg:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\WizardImage.jpg'),ScaleX(0),ScaleY(0),Wiz ardForm.ClientWidth,WizardForm.ClientHeight,True,True);

SetArrayLength(AImg,5);
for i:=0 to GetArrayLength(AImg)-1 do begin
AImg[i]:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\'+IntToStr(i+1)+'.jpg'),0,0,WizardForm.ClientWidth ,WizardForm.ClientHeight,True,True);
ImgSetVisibility(AImg[i],False);
end;


(*w1:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\w1.png'),ScaleX(0), ScaleY(0),WizardForm.ClientWidth,WizardForm.ClientHeight,True,True);
w2:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\w2.png'),ScaleX(0), ScaleY(0),WizardForm.ClientWidth,WizardForm.ClientHeight,True,True);
w3:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\w3.png'),ScaleX(0), ScaleY(0),WizardForm.ClientWidth,WizardForm.ClientHeight,True,True);
w4:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\w4.png'),ScaleX(0), ScaleY(0),WizardForm.ClientWidth,WizardForm.ClientHeight,True,True);
w5:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\w5.png'),ScaleX(0), ScaleY(0),WizardForm.ClientWidth,WizardForm.ClientHeight,True,True);
w6:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\w6.png'),ScaleX(0), ScaleY(0),WizardForm.ClientWidth,WizardForm.ClientHeight,True,True);
w7:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\w7.png'),ScaleX(0), ScaleY(0),WizardForm.ClientWidth,WizardForm.ClientHeight,True,True); *)

Logo:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\INF.png'),ScaleX(0), ScaleY(0),WizardForm.ClientWidth,WizardForm.ClientHeight,False,false);
ImgSetVisibility(logo,false); ////


(* ImgSetVisibility(w1,False);
ImgSetVisibility(w2,False);
ImgSetVisibility(w3,False);
ImgSetVisibility(w4,False);
ImgSetVisibility(w5,False);
ImgSetVisibility(w6,False);
ImgSetVisibility(w7,False); *)

ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\back.png'),ScaleX(0), ScaleY(0),877,485,True,True);
(*RequirementsPanel:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\RequirementsPanel.png'),ScaleX( 75), ScaleY(0),ScaleX(700),ScaleY(485),True,True);
Edit:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\Edit.png'),ScaleX(307), ScaleY(240),ScaleX(420),ScaleY(22),True,True);
DirFolder:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\DirFolder.png'),ScaleX(233), ScaleY(215),ScaleX(80),ScaleY(80),True,True);
HardDrivePanel:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\HardDrivePanel.png'),ScaleX(307), ScaleY(283),ScaleX(420),ScaleY(70),True,True);
HDD:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\HDD.png'),ScaleX(243), ScaleY(283),ScaleX(60),ScaleY(74),True,True);
GroupFolder:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\GroupFolder.png'),ScaleX(223), ScaleY(210),ScaleX(80),ScaleY(80),True,True);*)

ImgApplyChanges(WizardForm.Handle);
end;

procedure SetStateNewButtons;
begin
(*with WizardForm.BackButton do begin
BtnSetText(hBackBtn,PAnsiChar(Caption));
BtnSetVisibility(hBackBtn,Visible);
BtnSetEnabled(hBackBtn,Enabled);
end;
with WizardForm.NextButton do begin
BtnSetText(hNextBtn,PAnsiChar(Caption));
BtnSetVisibility(hNextBtn,Visible);
BtnSetEnabled(hNextBtn,Enabled);
end;
with WizardForm.NextButton do begin
BtnSetText(NextBtn,PAnsiChar(Caption));
BtnSetVisibility(NextBtn,Visible);
BtnSetEnabled(NextBtn,Enabled);
end;

with WizardForm.NextButton do begin
BtnSetText(Next2Btn,PAnsiChar(Caption));
BtnSetVisibility(Next2Btn,Visible);
BtnSetEnabled(Next2Btn,Enabled);
end;
with WizardForm.CancelButton do begin
BtnSetText(hCancelBtn,PAnsiChar(Caption));
BtnSetVisibility(hCancelBtn,Visible);
BtnSetEnabled(hCancelBtn,Enabled);
end; *)
BtnSetText(hDirBrowseBtn,PAnsiChar(WizardForm.DirBrowseButton.Caption));
BtnSetText(hGroupBrowseBtn,PAnsiChar(WizardForm.GroupBrowseButton.Caption));
end;

procedure WizardFormBtnClick(hBtn:HWND);
var
Btn:TButton;
begin
sndPlaySound(ExpandConstant('{tmp}\Click.wav'),$0001);
case hBtn of
hCancelBtn: Btn:=WizardForm.CancelButton;
hNextBtn: Btn:=WizardForm.NextButton;
NextBtn: Btn:=WizardForm.NextButton;
Next2Btn: Btn:=WizardForm.NextButton;
hBackBtn: Btn:=WizardForm.BackButton;
hDirBrowseBtn: Btn:=WizardForm.DirBrowseButton;
hGroupBrowseBtn: Btn:=WizardForm.GroupBrowseButton;
end;
Btn.OnClick(Btn);
SetStateNewButtons;
BtnRefresh(hBtn);
end;

procedure WFBtnEnter(hBtn:HWND);
begin
sndPlaySound(ExpandConstant('{tmp}\WFEnter.wav'),$0001);
end;

procedure LogoClick(hBtn:HWND);
var
Check:boolean;
begin
Check:=BtnGetChecked(hBtn);
sndPlaySound(ExpandConstant('{tmp}\Click.wav'),$0001);
Check:=BtnGetChecked(hBtn);
BtnSetEnabled(hBackBtn, not Check);
BtnSetEnabled(hNextBtn, not Check);
BtnSetEnabled(NextBtn, not Check);
BtnSetEnabled(Next2Btn, not Check);
BtnSetEnabled(hCancelBtn, not Check);
BtnSetEnabled(hDirBrowseBtn, not Check);
BtnSetEnabled(hGroupBrowseBtn, not Check);
BtnSetEnabled(QuickLaunchCheck, not Check);
BtnSetEnabled(DesktopCheck, not Check);
BtnSetEnabled(NoIconsCheck, not Check);
BtnSetEnabled(MusicButton, not Check);
ImgSetVisibility(Logo, not ImgGetVisibility(Logo));
ImgApplyChanges(WizardForm.Handle);
end;

procedure ButtonsTextures;
begin
WFButtonFont:=TFont.Create;
WFButtonFont.Style:=[fsBold];

(* with WizardForm.BackButton do begin
hBackBtn:=BtnCreate(WizardForm.Handle,Left+285,Top+110,Width+31,Height+16,ExpandConstant('{tmp}\butt onBack.png'),18,False);
BtnSetEvent(hBackBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hBackBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(hBackBtn,WFButtonFont.Handle);
BtnSetFontColor(hBackBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
BtnSetCursor(hBackBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.NextButton do begin
hNextBtn:=BtnCreate(WizardForm.Handle,Left+312,Top+110,Width+31,Height+16,ExpandConstant('{tmp}\butt onNext.png'),18,False);
BtnSetEvent(hNextBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hNextBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(hNextBtn,WFButtonFont.Handle);
BtnSetFontColor(hNextBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
BtnSetCursor(hNextBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.NextButton do begin
NextBtn:=BtnCreate(WizardForm.Handle,Left+676767,Top+110,Width+106,Height+39,ExpandConstant('{tmp}\b uttonInstall.png'),18,False);
BtnSetEvent(NextBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(NextBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(NextBtn,WFButtonFont.Handle);
BtnSetFontColor(NextBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
BtnSetCursor(NextBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.NextButton do begin
Next2Btn:=BtnCreate(WizardForm.Handle,Left+676767,Top+110,Width+106,Height+39,ExpandConstant('{tmp}\ buttonEnd.png'),18,False);
BtnSetEvent(Next2Btn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(Next2Btn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(Next2Btn,WFButtonFont.Handle);
BtnSetFontColor(Next2Btn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
BtnSetCursor(Next2Btn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.CancelButton do begin
hCancelBtn:=BtnCreate(WizardForm.Handle,Left+335,Top+110,Width+31,Height+16,ExpandConstant('{tmp}\bu ttonCancel.png'),18,False);
BtnSetEvent(hCancelBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hCancelBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(hCancelBtn,WFButtonFont.Handle);
BtnSetFontColor(hCancelBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
BtnSetCursor(hCancelBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end; *)

INFBtn:=BtnCreate(WizardForm.Handle,ScaleX(40), ScaleY(435), ScaleX(120), ScaleY(45),ExpandConstant('{tmp}\LogoButton.png'),0,True);
BtnSetEvent(INFbtn,BtnClickEventID,WrapBtnCallback(@LogoClick,4));
BtnSetEvent(INFBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(INFBtn,GetSysCursorHandle(32649));

InfBtnt:=BtnCreate(WizardForm.Handle,ScaleX(40), ScaleY(435), ScaleX(120), ScaleY(45),ExpandConstant('{tmp}\LogoButton.png'),0,True);
BtnSetEvent(INFbtn,BtnClickEventID,WrapBtnCallback(@LogoClick,4));
BtnSetEvent(INFBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetCursor(INFBtn,GetSysCursorHandle(32649));

(* with WizardForm.DirBrowseButton do begin
hDirBrowseBtn:=BtnCreate(WizardForm.Handle,Left+398,Top+150,Width+31,Height+16,ExpandConstant('{tmp} \buttonBrowse.png'),18,False);
BtnSetEvent(hDirBrowseBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hDirBrowseBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(hDirBrowseBtn,WFButtonFont.Handle);
BtnSetFontColor(hDirBrowseBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
BtnSetCursor(hDirBrowseBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end;

with WizardForm.GroupBrowseButton do begin
hGroupBrowseBtn:=BtnCreate(WizardForm.Handle,Left+398,Top+150,Width+31,Height+16,ExpandConstant('{tm p}\buttonBrowse.png'),18,False);
BtnSetEvent(hGroupBrowseBtn,BtnMouseEnterEventID,WrapBtnCallback(@WFBtnEnter,1));
BtnSetEvent(hGroupBrowseBtn,BtnClickEventID,WrapBtnCallback(@WizardFormBtnClick,1));
BtnSetFont(hGroupBrowseBtn,WFButtonFont.Handle);
BtnSetFontColor(hGroupBrowseBtn,$FFFFFF,$FFFFFF,$FFFFFF,$B6B6B6);
BtnSetCursor(hGroupBrowseBtn,GetSysCursorHandle(32649));
Width:=0;
Height:=0;
end; *)
end;

Юрий_Онищенко@vk 24-01-2015 00:55 2460476

Вложений: 1
Здрастуйте , в чем может быть проблема
http://forum.oszone.net/attachment.p...1&d=1422050080

sergey3695 24-01-2015 13:12 2460594

Юрий_Онищенко@vk, винду активируй :laugh:
Неизвестный идентификатор "ImgLoad" - и что не понятного? b2p.iss или botva2.iss поищи там раскомменти #include "_".
Судя по коду выше у тебя нету этого.
narod.ru/disk/7844037001/botva2_0.9.5.130.7z.html
оттуда возьми. там и примеры и библа и примеры

Юрий_Онищенко@vk 24-01-2015 13:32 2460602

Цитата sergey3695:
винду активируй
Неизвестный идентификатор "ImgLoad" - и что не понятного? b2p.iss или botva2.iss поищи там раскомменти #include "_".
Судя по коду выше у тебя нету этого.
narod.ru/disk/7844037001/botva2_0.9.5.130.7z.html »
Ахаха , вина подождет , окно прозрачное и мне не мешает))), с ImgLoag , я розобрался еще вчера. Я конешно понимаю что я етот форм уже задолбал с етим вопросом , но уж больно немогу понять именно етот момент с картинкой. Вот вы прислали код , но теперь у меня другой вопрос , как ето превьязать к любой кнопке. Я пытался в етом коде розобраться , но там все процедуры розрошенны , и не используеться модуль ботви. И вы же рание кидаль мне готовый скрипт , я пробЫвал розобраться , но так и не понял как его превьязать к кнопке
Скрытый текст
function InitializeSetup:boolean;
begin
if not FileExists(ExpandConstant('{tmp}\botva2.dll')) then ExtractTemporaryFile('botva2.dll');
if not FileExists(ExpandConstant('{tmp}\1.png')) then ExtractTemporaryFile('1.png');
Result:=True;
end;

#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif

const
GWL_WNDPROC = -4;
WM_NCLBUTTONDOWN = $00A1;
type
LPARAM = Integer;
WPARAM = Integer;
LRESULT = Integer;
TFNWndProc = Integer;
var
OldWindowProc: Longint;

function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLong{#A}@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: TFNWndProc; hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; external 'CallWindowProc{#A}@user32.dll stdcall';

function WindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
begin
case Msg of
WM_NCLBUTTONDOWN:
begin
Msg := 0;
WizardForm.Close;
end;
end;
Result := CallWindowProc(OldWindowProc, hWnd, Msg, wParam, lParam);
end;

procedure CloseForm(Sender: TObject);
begin
WizardForm.Close;
end;

procedure InitializeWizard;
begin
CreateFormFromImage(wizardform.Handle,ExpandConstant('{tmp}\1.png'));
ImgApplyChanges(WizardForm.Handle);
OldWindowProc := SetWindowLong(WizardForm.Handle, GWL_WNDPROC, CallbackAddr('WindowProc'));
end;

procedure DeinitializeSetup();
begin
SetWindowlong(WizardForm.Handle, GWL_WNDPROC, OldWindowProc);
gdipShutdown;
end;

sergey3695 24-01-2015 16:24 2460668

Юрий_Онищенко@vk, а я вот не пойму там один ник, теперь такой. понаделал акков.
к какой кнопке? (большой и красной). я ж тебе давал пример на кринкелс с кнопкой, что там непонятно?

Юрий_Онищенко@vk 24-01-2015 17:11 2460679

Вложений: 1
Цитата:

Цитата sergey3695
, а я вот не пойму там один ник, теперь такой. понаделал акков.
к какой кнопке? (большой и красной). я ж тебе давал пример на кринкелс с кнопкой, что там непонятно? »

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

http://forum.oszone.net/attachment.p...1&d=1422108545

sergey3695 24-01-2015 17:16 2460682

Юрий_Онищенко@vk, кинь код (на файлобменик с файлами) что сделал, напиши что надо. я переделаю и скину.

Юрий_Онищенко@vk 24-01-2015 17:27 2460689

Цитата:

Цитата sergey3695
кинь код (на файлобменик с файлами) что сделал, напиши что надо. я переделаю и скину. »

я вам скину пример и сам скрипт https://yadi.sk/d/t2Yx2aq1eCz5z

sergey3695 24-01-2015 18:24 2460709

Юрий_Онищенко@vk, https://yadi.sk/d/l-SdcyXoeD4CC как-то так.

Юрий_Онищенко@vk 24-01-2015 19:35 2460742

Цитата:

Цитата sergey3695
https://yadi.sk/d/l-SdcyXoeD4CC как-то так. »

еее, так то был пример , ну откуда я взял ету идею, просто я все закоментировал что б знать что за что отвечает

sergey3695 24-01-2015 20:06 2460751

Юрий_Онищенко@vk, :jester: кнопка инфо как надо работает. не пиши чушь.

Юрий_Онищенко@vk 24-01-2015 20:17 2460754

Цитата:

Цитата sergey3695
кнопка инфо как надо работает. не пиши чушь. »

она да , а вот в новой папке 4 , при закритии видает ошибку

Цитата:

Цитата sergey3695
кнопка инфо как надо работает. не пиши чушь. »

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

Okta_333 25-01-2015 13:11 2460971

Здравия всем! А к кому можно обратиться за помощью. Не могу понять ошибку в своём скрипте.

Dodakaedr 25-01-2015 15:56 2461069

Опишить ошибку, по возможности предоставте скрипт или скриншотскриншот. Знающие люди подскажут в чем проблема...

Shift85 25-01-2015 17:43 2461121

Цитата:

Цитата Okta_333
Здравия всем! А к кому можно обратиться за помощью. Не могу понять ошибку в своём скрипте. »

1-Опиши ошибку. :read:
2-Скрип в студию. :whitevoid:

Okta_333 25-01-2015 18:50 2461156

С той проблемой разобралась.
Подскажите пожалуйста как правильно в IsDone прописать пароль к arc-архиву.

Shift85 25-01-2015 18:56 2461161

Цитата:

Цитата Okta_333
Подскажите пожалуйста как правильно в IsDone прописать пароль к arc-архиву. »

Okta_333, Типа так:

Код:

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.arc'), ExpandConstant('{app}'), '', false, 'Пароль', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;

Okta_333 25-01-2015 19:23 2461181

У меня немного другая строчка:
Код:

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\D-3.arc'), ExpandConstant('{app}\'),  false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
Как вы написали - ругается (Invalid Numbers of Parameters)

Farser21 25-01-2015 19:35 2461192

Добрый вечер.
В моем установщике используется большое количество картинок в формате bmp, из-за этого установщик подвисает, возможно ли как-то вместо bmp использовать картинки в формате png?

Shift85 25-01-2015 19:36 2461193

Okta_333, Пробуйте:

Код:

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\D-3.arc'), ExpandConstant('{app}\'), '', false, 'пароль', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
Цитата:

Цитата Farser21
Добрый вечер.
В моем установщике используется большое количество картинок в формате bmp, из-за этого установщик подвисает, возможно ли как-то вместо bmp использовать картинки в формате png? »

Farser21, Конечно можно с помощью ботвы.

Пример:http://rghost.ru/60554844

Okta_333 25-01-2015 19:47 2461204

Shift85

Та же ошибка.

Shift85 25-01-2015 19:51 2461208

Цитата:

Цитата Okta_333
Та же ошибка. »

Okta_333, У вас какая версия инно (анси или юнникод)

Okta_333 25-01-2015 19:56 2461213

Inno Setup 5.4.2.ee2 (a) (build 110319)
А вот Анси или Юникод, я не знаю.

Shift85 25-01-2015 20:04 2461218

Цитата:

Цитата Okta_333
Inno Setup 5.4.2.ee2 (a) (build 110319)
А вот Анси или Юникод, я не знаю. »

Анси.

Установите расширенную версию Inno Setup

Okta_333 25-01-2015 20:13 2461222

Shift85

У меня и есть расширенная. Inno Ultra, зелёненькая.

Farser21 25-01-2015 20:17 2461226

Shift85, можно ли подправить этот код, чтобы он мог использовать png картинки?
Код:

procedure ShowCompDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var
  i: Integer;
begin
  if Index = LastIndex then Exit;
  CompIndex := -1;
  for i := 0 to GetArrayLength(CompDescs) -1 do
  begin
    if (CompDescs[i].Index = Index) then
    begin
      CompIndex := i;
      Break;
    end;
  end;
  if (CompIndex >= 0) and (Area = iaItem) then
  begin
    if not FileExists(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName) then
      ExtractTemporaryFile(CompDescs[CompIndex].ImageName);
    CompDescImg.Bitmap.LoadFromFile(ExpandConstant('{tmp}\') + CompDescs[CompIndex].ImageName);
    CompDescImg.Show;
    BitmapImage.Hide;
    CompDescText.Caption := CompDescs[CompIndex].Description;
    CompDescText.Enabled := True;
    end else
  begin
    CompDescText.Caption := CustomMessage('ComponentsInfo');
    CompDescText.Enabled := False;
    CompDescImg.Hide;
    BitmapImage.Show;
    end;
  LastIndex := Index;

end;

procedure CompListMouseLeave(Sender: TObject);
begin
  CompDescImg.Hide;
  CompDescText.Caption := CustomMessage('ComponentsInfo');
  CompDescText.Enabled := False;
  LastIndex := -1;
  BitmapImage.Show;
end;

procedure AddCompDescription(AIndex: Integer; ADescription: String; AImageName: String);
var
  i: Integer;
begin
  i := GetArrayLength(CompDescs);
  SetArrayLength(CompDescs, i + 1);
  CompDescs[i].Description := ADescription;
  CompDescs[i].ImageName := AImageName;
  CompDescs[i].Index := AIndex - 1
end;


Shift85 25-01-2015 20:19 2461227

Цитата:

Цитата Okta_333
У меня и есть расширенная. Inno Ultra, зелёненькая. »

Okta_333, Давайте скрипт с файлами гляну че да как.
Залейте куда нибудь на файлообменик.

Farser21, Весь скрипт с нуля придется переписывать.

SBalykov 25-01-2015 21:11 2461241

Добрый день!
Имеется вопрос. Как можно убрать средствами IS последнюю папку в стринге "Dir":
Код:

function GetInstallDir(Dir:string):string;
begin
        RegQueryStringValue(HKLM,'SOFTWARE\Maxis\Programs','Install Dir',Dir);
  Result:=Dir;  //Dir - C:\Games\Maxis\Programs
end;

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

nik1967 25-01-2015 21:48 2461266

Цитата:

Цитата Okta_333
Inno Setup 5.4.2.ee2 (a) (build 110319) »

Да ладно? Последняя расширенная - Inno Setup 5.5.1.ee2 (a) (build 121216)/Inno Setup 5.5.1.ee2 (u) (build 121216)

Gnom_aka_Lexander 25-01-2015 21:49 2461267

SBalykov,
Код:

Result:=ExtractFilePath(Dir) // Dir - C:\Games\Maxis\Programs Result - C:\Games\Maxis\

Shift85 25-01-2015 22:13 2461281

Цитата:

Цитата nik1967
Да ладно? Последняя расширенная - Inno Setup 5.5.1.ee2 (a) (build 121216)/Inno Setup 5.5.1.ee2 (u) (build 121002) »

nik1967, Inno Setup 5.5.1.ee2 (a) (build 121002)/Inno Setup 5.5.1.ee2 (u) (build 121216)

SBalykov 25-01-2015 22:16 2461282

Gnom_aka_Lexander
Вы меня не совсем поняли.
Код:

#define Dir "{code:GetInstallDir|{pf32}\My Prog}"

function GetInstallDir(Dir:string):string;
begin
        RegQueryStringValue(HKLM,'SOFTWARE\Maxis\Programs','Install Dir',Dir);
  Result:=Dir;  // Директория может быть любой, но необходимо убрать последнюю папку этой директории.
end;                // н.п. x:\xxx\Programs


Gnom_aka_Lexander 25-01-2015 22:21 2461285

SBalykov, Именно это и делает функция ExtractFilePath. То, что в имени функции присутствует слово File, говорит лишь о том, что используется она для того, чтоб из полного пути к файлу, вернуть только путь, без имени файла. Я-же вполне успешно использую ее для того, чтоб шагнуть на папку назад. Или как Вы выразились - убрать последнюю папку из пути.

SBalykov 25-01-2015 22:23 2461286

Gnom_aka_Lexander
Спасибо.
Сейчас попробую...
P.S.
Еще раз, спасибо. Все работает.
Просто голова уже не соображает...

nik1967 25-01-2015 22:27 2461289

Shift85, вроде бы выкладывали уже build 121216

Nordek 26-01-2015 02:32 2461357

Вложений: 2
Цитата:

Цитата nik1967
вроде бы выкладывали уже »

В первом сообщении соседней темы.

Inno Setup Compiler build 121216
Поддерживаемые версии: 5.5.0 - 5.5.2
Ссылка: Загрузить (Архив "InnoCompiler121216(7zip).zip" переименовать в "InnoCompiler121216.7z".)

Inno ISCmplr Setup build 121002
Поддерживаемые версии: 5.5.1
Ссылка: Загрузить (Архив "Inno_ISCmplr_Setup121002(7zip).zip" переименовать в "Inno_ISCmplr_Setup121002.7z".)

Готовые варианты прикреплены ниже: Достаточно из папки "Inno_Setup_5" выделить все файлы и скопировать в папку с программой.

El Sanchez 26-01-2015 09:38 2461418

Цитата:

Цитата Farser21
В моем установщике используется большое количество картинок в формате bmp, из-за этого установщик подвисает, возможно ли как-то вместо bmp использовать картинки в формате png? »

Farser21, если картинок много, то стОит выставить SolidCompression=no, а смена формата мало поможет.
Цитата:

Цитата Gnom_aka_Lexander
Я-же вполне успешно использую ее для того, чтоб шагнуть на папку назад. Или как Вы выразились - убрать последнюю папку из пути. »

Gnom_aka_Lexander, успешно до тех пор пока в реестре не встретится путь с завершающим слешем. Такое указание пути к папке является правильным и однозначно дает понять системе, что перед ней путь именно к папке, а не к файлу без расширения. Поэтому нужно отсекать слеш в любом случае, даже если его там нет:
Код:

Result := ExtractFilePath(RemoveBackslash(Dir));

demon_000 26-01-2015 13:19 2461519

Ребят, не поможете вшить исдан 06 финал в этот инсталятор http://dfiles.ru/files/syle5r9i0

SBalykov 26-01-2015 17:13 2461672

demon_000
Посмотрите здесь ...

demon_000 26-01-2015 18:04 2461708

SBalykov

А что смотреть то? Тоже самое что и я скинул.

demon_000 26-01-2015 18:35 2461726

Господа программисты, помогите, а то сам буду мучиться до ишачьей пасхи, и то врядли допру!!!

ShadeUa 26-01-2015 20:45 2461799

Здраствуйте , не поможите соеденить 2 скрипта , а то у меня проблема возникла

ShadeUa 26-01-2015 21:59 2461821

я пинимаю что уже всех **** , но нужна помощь ,я реально немного шурупаю , но совсем чучуть, и вот начина дельфи изучать но ето буде оочень долго а мне скоро в колледж ити , там уже будет не то етого

Dodakaedr 26-01-2015 22:39 2461837

ShadeUa, а что вам мешает закинуть два скрипта и ждать ответа?

ShadeUa 26-01-2015 23:45 2461859

Цитата:

Цитата Dodakaedr
а что вам мешает закинуть два скрипта и ждать ответа? »

незнаю , может не захотите https://yadi.sk/d/Q8a_oO6weHxzp мне нужно к скрипну добавить ту кнопку , ис можеше показать как в ее добавили , ну закоментировать ее процедуры

ShadeUa 27-01-2015 01:07 2461882

Цитата:

Цитата Dodakaedr
а что вам мешает закинуть два скрипта и ждать ответа? »

Кстати там скрипт єсть "alan wake-копия iss" я там пытался его соеденить но не получилось , не подскажете что я не так делал?

ShadeUa 28-01-2015 14:59 2462666

ех , ну хотя бы скажите в чем может быть проблема https://yadi.sk/i/q1ABLAfmeHyBS

Dodakaedr 28-01-2015 15:58 2462717

Вложений: 1
ShadeUa, Думаю это вам будет интересно #2371

Цитата:

Цитата ShadeUa
ех , ну хотя бы скажите в чем может быть проблема »

сначала надо временные файлы извлекать, ну в общем как-то так

ShadeUa 28-01-2015 16:21 2462731

Вложений: 1
Цитата:

Цитата Dodakaedr
сначала надо временные файлы извлекать, ну в общем как-то так »

Не знаю почему но он даже не хочет открываться, ну сам та кампилируеться потом ошибка и все
http://forum.oszone.net/attachment.p...1&d=1422451222

Dodakaedr 28-01-2015 16:40 2462740

ShadeUa, Тестил на расширенном unicode. все норм.

ShadeUa 28-01-2015 17:55 2462788

Цитата:

Цитата Dodakaedr
Тестил на расширенном unicode. все норм. »

извините за такой вопрост , а где вы его скачали ? прсто у меня и обычная, и розширенная, и комплек inno setup ultra, все ровно таже ошибка

Dodakaedr 28-01-2015 21:44 2462890

Цитата:

Цитата ShadeUa
а где вы его скачали ? »

у меня тоже сборка ultra. Попробуйте еще содержимое папки Files c папки Кнопка закинуть в папку Скрипт в папку Files с заменой.

Okta_333 28-01-2015 22:11 2462906

ShadeUa

Could not call proc означает обращение к объекту до его создания.

ShadeUa 29-01-2015 16:49 2463286

Вложений: 1
Цитата:

Цитата Dodakaedr
у меня тоже сборка ultra. Попробуйте еще содержимое папки Files c папки Кнопка закинуть в папку Скрипт в папку Files с заменой. »

Спасибо , все помогло :) Но теперь другие вопросы . Превый , как упрать нижнюю картинку , которую я обвел .http://forum.oszone.net/attachment.p...1&d=1422539276
Второй , что дедать если инстал сам закрываеться , примерно через 5-10 секунд ?

Kashtan007 29-01-2015 22:40 2463472

Привет форумчане, есть проблема, если на компьютере используется увеличение шрифта (125% либо 150%), то все детали установщика начинают сдвигаться. Как прописывать координаты этим элементам, чтобы они не сдвигались?

Dodakaedr 29-01-2015 22:49 2463474

Цитата:

Цитата Kashtan007
Как прописывать координаты этим элементам, чтобы они не сдвигались? »

Через SetBounds. А как вы сейчас прописываете?

Kashtan007 29-01-2015 23:04 2463483

Dodakaedr, ну вот например
Код:

begin
  ExtractTemporaryFile('Button1.bmp');

  BtnPanel:=TPanel.Create(WizardForm);
  with BtnPanel do begin
    Left:=449
    Top:=0
    Width:=211
    Height:=65
    Cursor:=crHand
    OnClick:=@logoOnClick2
    Parent:=WizardForm;
  end;
  BtnImage:=TBitmapImage.Create(WizardForm)
  with BtnImage do begin
    AutoSize:=True;
    Enabled:=False;
    Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button1.bmp')
    Parent:=BtnPanel;
  end;
end;


Shift85 29-01-2015 23:04 2463485

Цитата:

Цитата Kashtan007
Как прописывать координаты этим элементам, чтобы они не сдвигались? »

Код:

SetBounds(ScaleX(слева), ScaleY(сверху), ScaleX(ширина), ScaleY(высота));
Цитата:

Цитата Kashtan007
ну вот например »

Kashtan007, Так:

Код:

BtnPanel:=TPanel.Create(WizardForm);
  with BtnPanel do begin
    SetBounds(ScaleX(449), ScaleY(0), ScaleX(211), ScaleY(65));
    Cursor:=crHand
    OnClick:=@logoOnClick2
    Parent:=WizardForm;
  end;


Dodakaedr 29-01-2015 23:08 2463487

Вложений: 1
Kashtan007, либо через SetBounds либо в вашем случаи можно так
Код:

BtnPanel:=TPanel.Create(WizardForm);
  with BtnPanel do begin
    Left:=ScaleX(449);
    Top:=ScaleY(0);
    Width:=ScaleX(211);
    Height:=ScaleY(65);
    Cursor:=crHand;
    OnClick:=@logoOnClick2;
    Parent:=WizardForm;
  end;


Цитата:

Цитата ShadeUa
Второй , что дедать если инстал сам закрываеться , примерно через 5-10 секунд ? »

без понятия... Это в этом же скрипте? Первое что пришло в голову это проверить функцию InitializeSetup и процедуру InitializeWizard, ну без скрипта все же думаю не разобраться...

Цитата:

Цитата ShadeUa
Превый , как упрать нижнюю картинку , которую я обвел »

переименуйте с папки Files файл 1.png в info.png

ROMKA-1977 30-01-2015 01:10 2463539

Подскажите пож. На InfoBeforeMemo и на TRichEditViewer отображается текст из файла .rtf. В файле .rtf кроме текста присутствует также картинка. Возможно ли выполнить отображение картинки из файла .rtf на InfoBeforeMemo и на TRichEditViewer.

ShadeUa 30-01-2015 11:18 2463669

Цитата:

Цитата Dodakaedr
без понятия... Это в этом же скрипте? Первое что пришло в голову это проверить функцию InitializeSetup и процедуру InitializeWizard, ну без скрипта все же думаю не разобраться... »

Все я розобрался , ето не в коде проблема , а в антивирусе, Comodo ее закрывает , даже без моего согласия , и оповищения..
Цитата:

Цитата Dodakaedr
переименуйте с папки Files файл 1.png в info.png »

Огромное спасибо , все заработало , и спасибо что откликнулись на мою помощь :)

MogilShik2007 30-01-2015 12:21 2463712

Всем прив, такой вопрос подаются хорошие готовые скрипты, но везде присутствует ISDone, FreeArc и т.д. для небольших игр они нафиг не нужны, как чистить скрипт от них или как то можно отключить? Или может кто посодействует?)))

Все разобрался)))

Shift85 30-01-2015 13:19 2463761

Цитата:

Цитата MogilShik2007
как чистить скрипт от них »

MogilShik2007, Все элементарно и просто надо мозги немного напряч и все. :)
Удаляешь те функции которые использует ISDone и FreeArc.

Или же напиши скрипт сам меньше вопросов будет как отключить? как подключить? :jester:

MogilShik2007 30-01-2015 15:59 2463886

ек, чутка туплю подскажите:

[UninstallDelete]
Type: filesandordirs; Name: "{app}"
- это понятно, но вот если перед приложение еще папка как ее удалить?
К примеру - Type: dirifempty; Name: "Sierra\{app}" - это для наглядности, вот какой константой удаляется папка Sierra, если приложение будет установлено не по умолчанию. а скажем на другой диск?

Shift85 30-01-2015 16:09 2463895

Цитата:

Цитата MogilShik2007
ек, чутка туплю подскажите:
[UninstallDelete]
Type: filesandordirs; Name: "{app}" - это понятно, но вот если перед приложение еще папка как ее удалить?
К примеру - Type: dirifempty; Name: "Sierra\{app}" - это для наглядности, вот какой константой удаляется папка Sierra, если приложение будет установлено не по умолчанию. а скажем на другой диск? »

Код:

[UninstallDelete]
Type: "FilesAndOrDirs"; Name: "{app}\Sierra";


MogilShik2007 30-01-2015 16:12 2463896

Не работает, это для удаления папки в папке приложения

Вот пример: Х:\ХХХ\Sierra\Bobrik

Bobrik - удаляется этим Type: filesandordirs; Name: "{app}"
Sierra - как? Если ставить по умолчанию там понятно Type: dirifempty; Name: "{pf}\Sierra"
А если поставить на другой диск, то там как удалять Sierra?

kotyarko@fb 30-01-2015 18:51 2463973

Цитата:

Цитата MogilShik2007
А если поставить на другой диск, то там как удалять Sierra? »

Как я понял, вам нужно удалить папку, которая, по иерархии, является ниже папки {app}?
Примерно так:
Код:

[UninstallDelete]
Type: dirifempty; Name: {code:ParentFolderName};

[*Code]
Function ParentFolderName(): String;
var
 oFS: Variant;
begin
 oFS := CreateOleObject('Scripting.FileSystemObject');
 Result := oFS.GetParentFolderName(ExpandConstant('{app}'));
end;

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

MogilShik2007 30-01-2015 19:09 2463979

Цитата kotyarko@fb:
Как я понял, вам нужно удалить папку, которая, по иерархии, является ниже папки {app}? »

Ну тут как смотреть, все файлы находятся в папке Bobrik, а сама папка Bobrik со всеми файлами находится в папке Sierra)))

Что-то ругается компилятор на строку Function ParentFolderName(): String;

kotyarko@fb 30-01-2015 19:33 2463992

Цитата:

Цитата MogilShik2007
Ну тут как смотреть, все файлы находятся в папке Bobrik, а сама папка Bobrik со всеми файлами находится в папке Sierra))) »

Какая папка подходит под константу {app} у вас, "Bobrik"? А удалить нужно "Sierra", в которой находится "Bobrik"? - Тогда я всё верно подсказываю.

Цитата:

Цитата MogilShik2007
Что-то ругается компилятор на строку Function ParentFolderName(): String; »

Пробуйте так:
Код:

[UninstallDelete]
Type: dirifempty; Name: {code:ParentFolderName};

[*Code]
Function ParentFolderName(DefaultPath: String): String;
var
 oFS: Variant;
begin
 Result := DefaultPath;
 oFS := CreateOleObject('Scripting.FileSystemObject');
 Result := oFS.GetParentFolderName(ExpandConstant('{app}'));
end;


Dodakaedr 30-01-2015 19:43 2463997

Цитата:

Цитата MogilShik2007
если приложение будет установлено не по умолчанию. а скажем на другой диск? »

Код:

[Setup]
AppName=My Programm
AppVersion=1.1
DefaultDirName={pf}\My Programm
OutputDir=.

[UninstallDelete]
Type: dirifempty; Name: "{app}\.."


MogilShik2007 30-01-2015 20:03 2464003

Цитата:

Цитата kotyarko@fb
Пробуйте так: »

Вот теперь круто, спасибо)))

И такой вопрос компилю скрипт, все устанавливается, и при нажатии на кнопку Завершить - инсталлятор закрывается и через секунду выскакивает сообщение винды об ошибке - Прекращена работа программы "Setup/Uninstall". Так то все нормально, все файлы копируются, приложение запускается и работает, но эта выскакивающая плямба напрягает, куда копать?
Винда 7х64

kotyarko@fb 30-01-2015 20:05 2464005

Цитата:

Цитата MogilShik2007
И такой вопрос компилю скрипт, все устанавливается, и при нажатии на кнопку Завершить - инсталлятор закрывается и через секунду выскакивает сообщение винды об ошибке - Прекращена работа программы "Setup/Uninstall". Так то все нормально, все файлы копируются, приложение запускается и работает, но эта выскакивающая плямба напрягает, куда копать? »

Где-то в коде висит хэндл для визарда.
Можно сделать так:
Код:

[*Code]
Procedure DeinitializeSetup();
begin
 WizardForm.Free;
end;


MogilShik2007 30-01-2015 20:17 2464009

Цитата kotyarko@fb:
Где-то в коде висит хэндл для визарда.
Можно сделать так: »

Не не помогает теперь при нажатии Закрыть вылезает Runtime Error

хэндл это какой знак?

Shift85 30-01-2015 20:20 2464010

Цитата:

Цитата MogilShik2007
Не не помогает теперь при нажатии Закрыть вылезает Runtime Error »

Код:

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm:=False;
end;


kotyarko@fb 30-01-2015 20:21 2464012

Цитата:

Цитата MogilShik2007
хэндл это какой знак? »

Это не знак, это команда.
Выглядит так:
Код:

Объект.Handle;

MogilShik2007 30-01-2015 20:25 2464016

Цитата kotyarko@fb:
Это не знак, это команда. »

Эх, придется лопатить весь код :o
И это точно из-за этой команды?

Цитата:

Цитата Shift85
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); begin Confirm:=False; end; »

У меня так:

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID=wpInstalling then begin
Confirm:=False;
Cancel:=ExitSetupMsgBox;
if Cancel then AllCancel;
end
;

А Runtime Error вылетал при использовании:

[*Code]
Procedure DeinitializeSetup();
begin
WizardForm.Free
;
end;

Ну а без нее соответственно - Прекращена работа программы "Setup/Uninstall"

MogilShik2007 30-01-2015 21:01 2464031

Цитата:

И такой вопрос компилю скрипт, все устанавливается, и при нажатии на кнопку Завершить - инсталлятор закрывается и через секунду выскакивает сообщение винды об ошибке - Прекращена работа программы "Setup/Uninstall". Так то все нормально, все файлы копируются, приложение запускается и работает, но эта выскакивающая плямба напрягает, куда копать?
Винда 7х64
Проверил на ХР, такой проблемы нет, все ставится, работает, сообщений об ошибках нет.
Вот и чего думать? Может в 7х64 IsDone подгоняет немного?

kotyarko@fb 30-01-2015 21:09 2464034

Цитата:

Цитата MogilShik2007
Проверил на ХР, такой проблемы нет, все ставится, работает, сообщений об ошибках нет.
Вот и чего думать?»

Win 7\8 более чувствительны к такому.

Цитата:

Цитата MogilShik2007
Может в 7х64 IsDone подгоняет немного? »

Не знаю, не работал с ним.
Эту ошибку может вызывать не только хендл, но пока что сталкивался только с ним.
Здесь по коду нужно ориентироваться. Можете прогнать компиляцию по F8, возможно, покажет на проблемное место.

MogilShik2007 30-01-2015 21:25 2464046

Цитата kotyarko@fb:
Здесь по коду нужно ориентироваться. Можете прогнать компиляцию по F8, возможно, покажет на проблемное место. »

Нажал F8 выделило синим -
=====================================
function InitializeSetup: Boolean;
begin
ExtractTemporaryFile('botva2.dll');
ExtractTemporaryFile('Click.wav');
ExtractTemporaryFile('isskin.dll');
ExtractTemporaryFile('skin.cjstyles');
LoadSkin(ExpandConstant('{tmp}\skin.cjstyles'), '');
Result:=True;
end;
=====================================
procedure InitializeWizard;
begin
CreateWizardImage;
ButtonsTextures;
CreatePageComponents;
OldProc:=SetWindowLong(WizardForm.Handle,-4,WrapWFProc(@WFWndProc,4));
end;
=====================================

Дальше, что-то задумался, уже минут 10

kotyarko@fb 30-01-2015 21:39 2464064

Цитата:

Цитата MogilShik2007
Нажал F8 выделило синим »

В DeinitializeSetup указана обязательная, при применении ботвы, процедура gdipShutdown?
А ещё, там же, нужно выгружать скин.

MogilShik2007 30-01-2015 21:51 2464068

Цитата:

Цитата kotyarko@fb
В DeinitializeSetup указана обязательная, при применении ботвы, процедура gdipShutdown?
А ещё, там же, нужно выгружать скин. »

Мож чего не дописал?

DeinitializeSetup
procedure DeinitializeSetup;
begin
WFButtonFont.Free;
ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')),0);
UnloadSkin;
SetArrayLength(AImg,0);
gdipShutdown;
end;

procedure AllCancel;
begin
SetWindowLong(WizardForm.ProgressGauge.Handle,-4,PBOldProc);
ImgPBDelete(NewPB);
ImgPBDelete(NewPB2);
ImgApplyChanges(WizardForm.Handle);
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID=wpInstalling then begin
Confirm:=False;
Cancel:=ExitSetupMsgBox;
if Cancel then AllCancel;
end;
end;


Кстати мож лог ошибки чего скажет:

Лог
Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: setup.tmp
Версия приложения: 51.52.0.0
Отметка времени приложения: 2a425e19
Имя модуля с ошибкой: StackHash_005c
Версия модуля с ошибкой: 0.0.0.0
Отметка времени модуля с ошибкой: 00000000
Код исключения: c000041d
Смещение исключения: 755c4d62
Версия ОС: 6.1.7601.2.1.0.256.1
Код языка: 1049
Дополнительные сведения 1: 005c
Дополнительные сведения 2: 005c7be6bedc7ce8c4d34ad9498bc404
Дополнительные сведения 3: 9e5c
Дополнительные сведения 4: 9e5c41e234cfe613841322306a807a53

Shift85 30-01-2015 22:03 2464073

Прошу протестировать сетапник. :)
Интересуют возможные ошибки, если есть, просьба отписать, если нет - попрошу отписать "все норм" :tongue:
http://rghost.ru/7NQT2DZhv

kotyarko@fb 30-01-2015 22:11 2464076

Цитата:

Цитата MogilShik2007
Мож чего не дописал? »

Так вряд ли можно что-то сказать.

Цитата:

Цитата MogilShik2007
Кстати мож лог ошибки чего скажет »

Нет.

Цитата:

Цитата Shift85
Прошу протестировать сетапник.
Интересуют возможные ошибки, если есть, просьба отписать »

Беглым взглядом ничего не заметил. Вот только на последней странице установки, у окна не работают кнопки "Свернуть", "Закрыть".
Win8, 64.

MogilShik2007 30-01-2015 22:20 2464080

Вложений: 1
Цитата:

Цитата kotyarko@fb
Так вряд ли можно что-то сказать. »

Можешь глянуть?

kotyarko@fb 30-01-2015 22:24 2464081

Цитата:

Цитата MogilShik2007
Можешь глянуть? »

Вложи в архив все файлы (изображения, библиотеки), подключённые в скрипт.

MogilShik2007 30-01-2015 22:25 2464083

Цитата:

Цитата Shift85
Прошу протестировать сетапник. »

На 7х64 пашет, удаление не полное, остается папка Shift85, ну и да, на последней странице установки, у окна не работают кнопки "Свернуть", "Закрыть".

Цитата:

Цитата kotyarko@fb
Вложи в архив все файлы (изображения, библиотеки), подключённые в скрипт. »

Вот:
http://rghost.ru/6JqFjvmh2

Shift85 30-01-2015 22:28 2464086

Цитата:

Цитата MogilShik2007
ну и да, на последней странице установки, у окна не работают кнопки "Свернуть", "Закрыть". »

Так было задумано. :)

MogilShik2007 30-01-2015 22:34 2464088

Проверил на ХР все также как и на 7, все пашет, тоже остается папка Shift85

kotyarko@fb 30-01-2015 22:39 2464089

Цитата:

Цитата MogilShik2007
Можешь глянуть? »

Никаких ошибок не увидел (в коде того вида, как ты и предоставил). При отмене на любой странице, обычном завершении программы - никаких проблем.

MogilShik2007 30-01-2015 22:41 2464090

Цитата:

Цитата kotyarko@fb
Никаких ошибок не увидел (в коде того вида, как ты и предоставил). При отмене на любой странице, обычном завершении программы - никаких проблем. »

Можешь у себя скомпилить и запустить проверить, будет ошибка или нет? (Ток там надо какойнить 1.bin кинуть)

kotyarko@fb 30-01-2015 22:42 2464091

Цитата:

Цитата MogilShik2007
Можешь у себя скомпилить и запустить проверить, будет ошибка или нет? »

Скомпилировал, запустил, проверил. - Ничего.

Цитата:

Цитата MogilShik2007
(Ток там надо какойнить 1.bin кинуть) »

В каком смысле?

MogilShik2007 30-01-2015 22:45 2464092

Цитата kotyarko@fb:
В каком смысле? »

Запустил с установкой до конца? Без 1.bin файла рядом с ехе установка отменяется и ошибку не выловить.

Что-то терзают меня смутные сомнения, как бэ винда не начала накрываться, сейчас попробую на буке проверить.

Shift85 30-01-2015 22:49 2464094

MogilShik2007, Скомпилировал, запустил, проверил.


Win 7 x86.

Решение замени здесь выгрузку ботвы:

Код:

procedure DeinitializeSetup;
begin
    WFButtonFont.Free;
    ShowWindow(StrToInt(ExpandConstant('{wizardhwnd}')),0);
    gdipShutdown;
    UnloadSkin;
          SetArrayLength(AImg,0);
          //gdipShutdown;
  end;


kotyarko@fb 30-01-2015 22:55 2464096

Цитата:

Цитата MogilShik2007
Что-то терзают меня смутные сомнения, как бэ винда не начала накрываться »

Нет, ничего не накрывается. Просто, как я уже говорил, разные ОС по-разному чувствительны к такому. Но никакой закономерности я не знаю. И почему на разных ОС результаты отличаются тоже мне не известно.
Возможно, это зависит и от настроек системы.

В общем, я проверить не могу.

Shift85 30-01-2015 22:58 2464097

Вложений: 1
MogilShik2007, Проверяй:

MogilShik2007 30-01-2015 23:00 2464099

Цитата:

Цитата Shift85
MogilShik2007, Проверяй: »

Ок, сейчас.

ЗЫ. проверил свой инстал на буке, там 7х86, никаких ошибок не выдало, фигня какая-то)))

kotyarko@fb 30-01-2015 23:03 2464100

Вложений: 1
MogilShik2007, кстати, в скрипте много неиспользуемых переменных.
Не то чтобы это было критичным, просто создают лишний мусор в коде)

MogilShik2007 30-01-2015 23:07 2464102

Цитата:

Цитата kotyarko@fb
MogilShik2007, кстати, в скрипте много неиспользуемых переменных.
Не то чтобы это было критичным, просто создают лишний мусор в коде) »

Да как бы разные заготовки, надо почистить)))

Цитата:

Цитата Shift85
MogilShik2007, Проверяй: »

Так же выдает ошибку((

Хм, может какие dll некорректно выгружает?

kotyarko@fb 31-01-2015 02:37 2464125

Цитата:

Цитата MogilShik2007
Хм, может какие dll некорректно выгружает? »

Маловероятно.
Но можешь попробовать выгружать вручную по одной библиотеке, по очереди.
Код:

UnloadDll(ExpandConstant('{tmp}\...'));

MogilShik2007 31-01-2015 13:21 2464216

Блин че за бред, скомпилил скрипт, запустил приложение - все норм, повторно компилю - запускаю приложение при установке мне кричит Не найдено ни одного файла, указанного для ISArcExtract! Файл 1.bin лежит рядом с ехе.

MogilShik2007 31-01-2015 14:40 2464235

Что за библиотека b2p.dll?

Nordek 31-01-2015 15:04 2464242

Цитата:

Цитата MogilShik2007
Что за библиотека b2p.dll? »

Мне достаточно было в Google ввести b2p inno setup, в результате первая ссылка: Дополнительные библиотеки для Inno Setup.
Далее:
Цитата:

b2p v0.3.9.2 от VoLT
b2p это плагин для Inno Setup созданный с целью обеспечить защиту графических элементов интерфейса от копирования. Данный плагин не является самостоятельным и для отрисовки графического интерфейса он использует плагин botva 2 от South
Теперь попробуйте доказать мне, что поиск не работает.

MogilShik2007 31-01-2015 15:17 2464248

Ну яндекс ниха не выдал

Nordek 31-01-2015 15:22 2464254

Цитата:

Цитата MogilShik2007
Ну яндекс ниха не выдал »

b2p inno setup - "первая «|» вторая" ссылка.

Добавлено позже:
Результат продолжения поиска: #2691 » b2p

MogilShik2007 31-01-2015 16:19 2464281

Цитата:

Цитата MogilShik2007
Блин че за бред, скомпилил скрипт, запустил приложение - все норм, повторно компилю - запускаю приложение при установке мне кричит Не найдено ни одного файла, указанного для ISArcExtract! Файл 1.bin лежит рядом с ехе. »

Так кто-нибудь подскажет в чем проблема?

Okta_333 31-01-2015 17:11 2464300

MogilShik2007

Ну вы покажите людям скрипт, может кто и поможет. Как мы можем вам сейчас сказать в чём проблема?!
На ваш вопрос, сейчас, можно ответить по разному, начиная от того что это вы не верно указали путь и заканчивая полтергейстом!

kotyarko@fb 31-01-2015 17:37 2464309

Okta_333, http://forum.oszone.net/post-2464083-2448.html

ShadeUa 31-01-2015 17:49 2464313

Вложений: 1
Здраствуйте , подскажите как исправить , а то я вроде все прописал а оно не работает
http://forum.oszone.net/attachment.p...1&d=1422715675

Dodakaedr 31-01-2015 17:51 2464315

ShadeUa, Что прописали? Что не работает?

Okta_333 31-01-2015 17:55 2464317

MogilShik2007

Работает как надо. Всё прекрасно распаковывается:
Скрытый текст




Ваш ISDone:
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.bin'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;

Положите архив, который нужно распаковать в папку с инсталятором (Output), т.к. у вас указано ('{src}\*.bin'). Распаковка пойдёт в папку с игрой (('{app}'))

ShadeUa 31-01-2015 18:08 2464323

Цитата:

Цитата Dodakaedr
Что прописали? Что не работает? »

Я добавил новую строницу( я ее назвал "язык") , а в верху ( чтоя обвел ) там должно показаться что я переключился на дргую строницу , а нечего нет , его прсто пропускает и переходит дальше в каталог
1) https://yadi.sk/i/mXaBk2VNeNGGm
2)https://yadi.sk/i/xbkfXGzHeNGJF
3)https://yadi.sk/i/gmSW0-K5eNGKJ

MogilShik2007 31-01-2015 18:46 2464351

Цитата:

Цитата Okta_333
MogilShik2007
Работает как надо. Всё прекрасно распаковывается: »

Да этот то работает, я с ним еще вчера разобрался))) Кстати при нажатии на завершить - ошибка никакая не вылетала?

Я про другой писал, плюнул на IsDone, запилил через FreeArc - меньше гимора.

Цитата:

Цитата Okta_333
Ваш ISDone:
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\*.bin'), ExpandConstant('{app}'), '', false, '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
Положите архив, который нужно распаковать в папку с инсталятором (Output), т.к. у вас указано ('{src}\*.bin'). Распаковка пойдёт в папку с игрой (('{app}')) »

Вот так кстати делал в другом скрипте, он там и вопел, что нету рядом файлов для распаковки, хотя лежали рядом.)))

Okta_333 31-01-2015 18:48 2464355

MogilShik2007

Нет, никаких ошибок не было.

ShadeUa 31-01-2015 20:10 2464398

Короче, вот силка на скрипт , кто поможен , буду оочень благодарен
https://yadi.sk/d/SvxtjU43eNPvC

Dodakaedr 31-01-2015 22:02 2464460

Вложений: 1
Цитата:

Цитата ShadeUa
Короче, вот силка на скрипт , кто поможен , буду оочень благодарен »

Вот это правильный ход :) Пробуйте:

Okta_333 31-01-2015 22:15 2464465

Помогите пожалуйста разобраться в чём проблема



Вот сам скрипт: http://sendfile.su/1080529

ShadeUa 31-01-2015 22:17 2464467

Цитата:

Цитата Okta_333
Помогите пожалуйста разобраться в чём проблема »

Индификатор не обьявил

Цитата:

Цитата Dodakaedr
Вот это правильный ход Пробуйте: »

спасибо :) сейчас попробую

Okta_333 31-01-2015 22:25 2464475

ShadeUa
А как его объявить, вы не поможете?

ShadeUa 31-01-2015 22:29 2464477

Цитата:

Цитата Dodakaedr
Вот это правильный ход Пробуйте: »

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

Цитата:

Цитата Okta_333
А как его объявить, вы не поможете? »

Извините , но нет . Я сам вот с своим закончить немогу , а с вашим нужно розбераться , да и еще ко мне самому туго доходит все это

Dodakaedr 31-01-2015 22:42 2464483

Цитата:

Цитата ShadeUa
все работает , а не подскажете что вы сделали ? »

добавил это
Код:

LanguagePage.ID:
    begin
      Language.Font.Color := $00FFFF;
      ImgSetPosition(StatusPanel,ScaleX(116),ScaleY(74),ScaleX(117),ScaleY(48));
      LanguageLabel1.Show;
    end;

то что вы запихнули в wpInfoBefore в процедуре ShowComponents

ShadeUa 31-01-2015 22:49 2464488

Цитата:

Цитата Dodakaedr
добавил это »

спасибо , кстати еще хотел спросить , кроме wpInfoBefore, и вот етих (wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished) можна добавить какую то свою ? если да то как ее обьявить

Dodakaedr 31-01-2015 22:54 2464493

Цитата:

Цитата ShadeUa
можна добавить какую то свою ? если да то как ее обьявить»

в предыдущем моем посте показано как я объявил кастомную страницу LanguagePage

ShadeUa 31-01-2015 23:00 2464495

Цитата:

Цитата Dodakaedr
в предыдущем моем посте показано как я объявил кастомную страницу LanguagePage »

все догнал , огромное спасибо :)

Okta_333 31-01-2015 23:04 2464499

Просто уже замучилась вшивать в скрипт ISDone 06, вообще ничего не получается (((
И никто помочь не желает.......

ShadeUa 31-01-2015 23:22 2464506

Цитата:

Цитата Okta_333
Просто уже замучилась вшивать в скрипт ISDone 06, вообще ничего не получается (((
И никто помочь не желает....... »

я так понимаю ето твой скрипт?
http://repacks.org.ua/inno-setup/skr...lefield-4.html

Okta_333 31-01-2015 23:29 2464508

ShadeUa

Он самый.
Не я конечно его делала, если бы это была моя работа, тогда я бы и не просила помощи тут.

ShadeUa 31-01-2015 23:32 2464509

Цитата:

Цитата Okta_333
Он самый.
Не я конечно его делала, если бы это была моя работа, тогда я бы и не просила помощи тут. »

скинь сам издан я попробую но нечего не обещаю

Okta_333 31-01-2015 23:33 2464511

Вот: http://sendfile.su/1080560

ShadeUa 31-01-2015 23:36 2464512

Цитата:

Цитата Dodakaedr
LanguagePage.ID: begin Language.Font.Color := $00FFFF; ImgSetPosition(StatusPanel,ScaleX(116),ScaleY(74),ScaleX(117),ScaleY(48)); LanguageLabel1.Show; end; »

Извините , я по поводу того же скрипта , я попробЫвал его вписатьв другой , у меня ошибка возникла , вроде все так же как в предедущем но непойму почему так , поможете еще раз?
https://yadi.sk/i/GFZI_NnVeNbJk

ShadeUa 01-02-2015 00:00 2464522

Цитата:

Цитата Okta_333

короче что то вроде выйшло , незнаю или так

Okta_333,
https://yadi.sk/d/eafg7hwpeNcWb , вот , ето не твой, я на новый пилил, и на быструю руку , если че ,обращайся к експертам что мне помогали , я так любитель и новичок

Dodakaedr 01-02-2015 00:38 2464532

Вложений: 1
Цитата:

Цитата ShadeUa
но непойму почему так , поможете еще раз? »

не понимаете потому что не знаете скрипт с которым работаете... там все разбросано по модулям и приходится искать...

Цитата:

Цитата ShadeUa
я попробЫвал его вписатьв другой , у меня ошибка возникла »

я попробовал и все норм, пробуйте вроде все измененные модули закинул:

Okta_333 01-02-2015 01:33 2464553

ShadeUa

И на этом спасибо.....

ShadeUa 01-02-2015 13:45 2464669

Цитата:

Цитата Dodakaedr
е понимаете потому что не знаете скрипт с которым работаете... там все разбросано по модулям и приходится искать... »

Та да , я хотел свой сделать , но незнал как изменить розмеры окна , по етому решил взять скрипт battlefield , как у Okta_333, и его полностью изменить . Кстати все помогло , спасибо большое :)

ShadeUa 01-02-2015 15:34 2464732

Dodakaedr, Доброго дня , можете ще помочь по одному попросу , как мне сделать что б ета форма зарывалась кнопкой batton , ну тоисть на туже кнопку которая открывала , и я так понял под кнопкой "выход" которуя я обвел , там находиться кнопка закрытия , да?
https://yadi.sk/i/5XvMBI1gePHSb

Dodakaedr 01-02-2015 20:30 2464870

Цитата:

Цитата ShadeUa
как мне сделать что б ета форма зарывалась кнопкой batton , ну тоисть на туже кнопку которая открывала »

С этим я не смогу помочь..

ShadeUa 01-02-2015 20:38 2464875

Цитата:

Цитата Dodakaedr
С этим я не смогу помочь.. »

Блин, плохо , в том срипте так хорошо все сделанно . Ладно , спасибо что хоть ответили , буду как то сам розбераться :)

deathid@vk 02-02-2015 00:15 2464949

Здравствуйте, скрипт Metro UI Install, и с не рабочим прогресс баром. Будьте любезны, помочь, заранее спасибо.

El Sanchez 02-02-2015 08:59 2465015

Тема будет закрыта и переведена в архивное состояние.
Продолжаем тут: Скрипты Inno Setup. Помощь и советы [часть 8]


Время: 11:01.

Время: 11:01.
© OSzone.net 2001-