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

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

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

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

Ветеран


Contributor


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


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

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


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


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

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

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

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

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

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

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


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]
Скрипты Inno Setup. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

Аватара для Johny777

Ветеран


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

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


Цитата Serega:
спорить не буду, взял пример от сюда: »
Цитата Johny777:
+fps_max60-console »
пардон
мой косяк
пробелы быть должны
между параметрами ком строки и значениями. Везде!
в противном случае они будут являться тарабарщиной которую двиг игры не сможет прочитать при этом жутко ругаясь
поэтому сделал вот такую вот функцию (вроде работает но как-то медленно) но почему-то в параметр - hideconsole записывается как -h ideconsole
вот код:
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application


[  code]
var
  Param_Edit: TEdit;
  
function DelSp(const st: String): String;  /// укоротить до одинарных пробелов
begin
  while pos('  ',st)>0 do delete(st,pos('  ',st),1);
  Result := st;
end;

function InsertSp(AllText:String):String; //// добавить пробелы
var
  pos_simbol: Integer;
  Param: String;
  i: Integer;
begin
  i := 1;

  repeat
    begin
      case i of
        1: Param := '-console';
        2: Param := '-hideconsole';
        3: Param := '-safe';
        4: Param := '-dev';
        5: Param := '-condebug';
        6: Param := '-autoconfig';
        7: Param := '-dxlevel';
        8: Param := '-32bit';
        9: Param := '-fullscreen';
        10: Param := '-windowed';
        11: Param := '-w';
        12: Param := '-h';
        13: Param := '-x';
        14: Param := '-y';
        15: Param := '-nocrashdialog';
        16: Param := '-novid';
        17: Param := '-noborder';
        18: Param := '-nojoy';
        19: Param := '-noforcemspd';
        20: Param := '-noforcemparms';
        21: Param := '-noforcemaccel';
        22: Param := '-refresh';
        23: Param := '-d3d';
        24: Param := '-gl';
        25: Param := '-wavonly';
        26: Param := '+cl_showfps';
        27: Param := '+map';
        28: Param := '+map_background';
        29: Param := '+sv_cheats';
        30: Param := '+exec';
        31: Param := '+fps_max';
        32: Param := '+skill';
        33: Param := '+playdemo';
        34: Param := '+mat_dxlevel';
      end;

      if pos(Param,AllText) > 0 then
      begin
        pos_simbol := Pos(Param, AllText);
        Insert(' ',AllText, pos_simbol);
        Insert(' ',AllText, pos_simbol+Length(Param)+1);
      end;

      i := i + 1;
    end;
  until i = 35;

  Result := Trim(DelSp(AllText));
end;


function DeleteAllSp(const st: String): String;  /// убрать все пробелы
begin
  while pos(' ',st)>0 do delete(st,pos(' ',st),1);
  Result := st;
end;


procedure Buttons_OnClick(Sender:TObject);
begin
  case TButton(Sender).Caption of
    'Insert': Param_Edit.Text := InsertSp(Param_Edit.Text);
    'Delete': Param_Edit.Text := DeleteAllSp(Param_Edit.Text);
  end;
end;


procedure InitializeWizard();
begin
  WizardForm.OuterNotebook.Hide;
  WizardForm.Width := 900;
  WizardForm.Position := poScreenCenter;

  Param_Edit := TNewEdit.Create(nil);
  with Param_Edit do
  begin
    Parent := WizardForm;
    SetBounds(ScaleX(40), ScaleY(100), ScaleX(700), ScaleY(21));
    Text := InsertSp('+fps_max80-dxlevel80-hideconsole-32bit-gl-novid+cl_showfps1-dev1+sv_cheats1+playdemoTheBestDemo-condebug+skill2');
  end;
  
  with TButton.Create(nil) do
  begin
    Parent := WizardForm;
    SetBounds(Param_Edit.Left + Param_Edit.Width + ScaleX(5), Param_Edit.Top, ScaleX(65), Param_Edit.Height);
    Caption := 'Insert';
    Cursor := crHand;
    OnClick := @Buttons_OnClick;
  end;
  
  with TButton.Create(nil) do
  begin
    Parent := WizardForm;
    SetBounds(Param_Edit.Left + Param_Edit.Width + ScaleX(5) + ScaleX(70), Param_Edit.Top, ScaleX(65), Param_Edit.Height);
    Caption := 'Delete';
    Cursor := crHand;
    OnClick := @Buttons_OnClick;
  end;
end;


кажись проблема в том что есть параметр -h
и есть параметр -hideconsole который в начале тоже имеет -h
подскажите пожалуйста как это поправить и можно ли как-то ускорить работу функции InserSp?

также порывшись на форумах по дельфи улучшил функцию проверки строки на целое число
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[  code]
function IsInt(const Value: string): Boolean;  
begin
  Result := StrToIntDef(Value,0) <> 0;
end;

procedure InitializeWizard();
begin
  if IsInt('10') then MsgBox('yes', mbInformation, MB_OK);
  if not IsInt('hfhfrh') then MsgBox('no', mbInformation, MB_OK);
end;


и кому надо функция получения разрешения монитора (верт., гор.) и частоты обновления (мне нужна для +fps_max и для -refresh и других параметров)
читать дальше »
Код: Выделить весь код
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application


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

    3: /// частота обновления экрана
    begin
      dc := GetDC(Descriptor);
      Result := GetDeviceCaps(dc,116);
    end;
  end;
  ReleaseDC(Descriptor,dc);
end;


procedure InitializeWizard();
begin
  MsgBox(
  'разрешение по горизонтали - ' + IntToStr(GetMonitorInfo(1,MainForm.Handle)) + #13#10 +
  'разрешение по вертикали - ' + IntToStr(GetMonitorInfo(2,MainForm.Handle)) + #13#10 +
  'частота обновления - ' + IntToStr(GetMonitorInfo(3,MainForm.Handle)),
  mbConfirmation, MB_OK);
end;


Цитата Serega:
Извиняюсь, поторопился... исправил предыдущее сообщение. »
Цитата El Sanchez:
держи еще вариант: »
Спасибо добрые люди!
предстоит много работы но теперь у меня есть всё для того чтоб завершить код

Последний раз редактировалось Johny777, 20-09-2012 в 02:15.

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

Отправлено: 01:19, 20-09-2012 | #961



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

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


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

Ветеран


Contributor


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

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


Цитата Johny777:
но почему-то в параметр - hideconsole записывается как -h ideconsole »
Johny777, в своем сообщении поправил.

Цитата Johny777:
можно ли как-то ускорить работу функции InserSp? »
Johny777, защиту от дурака делаешь? Все случаи неправильного написания не предусмотришь. У тебя в Param_Edit комстроку будут продвинутые пользователи заполнять, а они уж знают где пробелы расставлять, так что не вижу смысла в DelSp, InsertSp, DeleteAllSp. Сделай проще:
1). CheckListBox со всеми параметрами.
2). Если у параметров предусмотрены значения, напротив соответствующий Edit. При создании чекбокса последним параметром AObject функции AddCheckBox укажи этот Edit. Позже, когда будешь считывать состояния чекбоксов (читай - параметров для результирующей комстроки), наличие объекта будет говорить о том, что у параметра есть значение, которое нужно тоже считать.

Цитата Johny777:
также порывшись на форумах по дельфи улучшил функцию проверки строки на целое число »
Johny777, в самый раз.

Цитата wertulll:
подскажите пожалуйста что это за ошибка »
wertulll, в самом начале дублирование #ifdef records, а закрытие только один раз.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:33, 20-09-2012 | #962


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


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

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


Здравствуйте. Использую этот пример, чтобы докачать необходимые файлы из интернет. Всё работает нормально, но есть одно но. Если во время скачивания файла пропадает соединение с интернет, то выскакивает куча ошибок. Установщик начинает сильно ругаться на функцию DownloadProgress, так как связь оборвалась, а он продолжает пытаться считывать информацию. Подскажите как это исправить, а то после этого установщик возможно закрыть только принудительно.
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:11, 21-09-2012 | #963


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

Ветеран


Contributor


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

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


Цитата Respin:
Если во время скачивания файла пропадает соединение с интернет, то выскакивает куча ошибок. Установщик начинает сильно ругаться на функцию DownloadProgress »
Respin, в процедуре DownloadFile найдите такие строки:
Код: Выделить весь код
finally
    FStream.Free;
    ProgressPage.Hide;
end;
и допишите:
Код: Выделить весь код
finally
    Timer.Enabled := False;
    FStream.Free;
    ProgressPage.Hide;
end;
P.S. В будущем попробую реализовать асинхронную закачку в несколько потоков.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:22, 21-09-2012 | #964


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


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

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


подскажите пожалуйста как исправить этот баг на окнах

Последний раз редактировалось wertulll, 30-03-2013 в 16:43.


Отправлено: 16:22, 21-09-2012 | #965


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


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

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


Цитата wertulll:
подскажите пожалуйста как исправить этот баг на окнах »
Это не баг, а стиль такой. Codejock Skin Builder тебе в помощь.

Отправлено: 16:51, 21-09-2012 | #966


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


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

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


Цитата Johny777:
никак
виста и 7-ка так вырисовывают месседж боксы
меняй на формы »
подбрось пример пожалуйста если не трудно. А вобще можно скин убрать с этого окна ???


чтобы было так

Последний раз редактировалось wertulll, 30-03-2013 в 16:43.


Отправлено: 19:23, 21-09-2012 | #967


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


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

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


El Sanchez, Благодарю вас, на этом этапе ошибки больше нет.
Прикрутил к скрепту Cancel Button, а то получается как-то... хочешь не хочешь - качай!
На кустомной кнопки отмены прописываю: FStream.Free; WizardForm.Close;
Если во всей установки: Confirm:= False; то всё просто замечательно! Но если: Confirm:= True; ругается на эту строчку: FStream.WriteBuffer(fBuf, lpdwNumberOfBytesRead); Возможно ли как-то откатить установку без ошибок, но с живым Confirm?

Отправлено: 04:37, 22-09-2012 | #968


Аватара для SatHan

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


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

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


привет всем.
есть у меня ключ
Код: Выделить весь код
[Registry]
;Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Application_is1; ValueType: string; ValueName: QuietUninstallString; ValueData: """C:\Program Files\Application\unins000.exe"" /SILENT"; Flags: uninsdeletevalue uninsdeletekeyifempty
и есть у меня кнопачка
Код: Выделить весь код
[#Code]
var
  NewButton1: TNewButton;
procedure NewButton1Click(Sender: TObject); forward;
procedure NewButton1Click(Sender: TObject);
begin

end;

procedure InitializeWizard();
begin
  NewButton1 := TNewButton.Create(WizardForm);
  with NewButton1 do
  begin
    Name := 'NewButton1';
    Parent := WizardForm;
    Left := ScaleX(32);
    Top := ScaleY(327);
    Width := ScaleX(75);
    Height := ScaleY(25);
    OnClick := @NewButton1Click;
  end;
ответьте пожалуйста на вопрос. как мне сделать чтоб я на кнопочку нажал и ключ добавился?

Отправлено: 02:46, 23-09-2012 | #969


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


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

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


Доброго времени суток.
Недавно загорелся идеей создать репак игры, все шло хорошо до того момента когда понадобилось в ini файле игры прописать путь до нее самой, но при этом чтобы не была указана буква диска.

Нужно чтобы значение ключа принимало примерно такой вид:
Код: Выделить весь код
IDPath=\Game\Нэнси Дрю. Секреты могут убивать
Пробовал писать функцию с командой delete, но так как познания паскаля давно забыты, ничего не вышло. Писал примерно следующее:
Код: Выделить весь код
[INI]
Filename: "{app}\Game.ini"; Section: "Nancy Data"; Key: "IDPath"; String: {code:CutString|{app}};

Function CutString(CutStr: string): String;

Begin
  delete (CutStr,1,2);
end;
Прошу людей с прямыми руками (не такими как у меня ) помочь довести до ума.

Отправлено: 10:53, 23-09-2012 | #970



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход