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

Ответить
 • Просмотры: 15
Аватара пользователя
ErikPshat

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

Сообщение ErikPshat »

Цитата TROY Diamond:



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




TROY Diamond, нет, после begin.


Цитата TROY Diamond:



Соединить коды: 1-й со 2-м, сразу поле в первом коде вставить второй код?
Скрипты Inno Setup. Помощь и советы [часть 9]




TROY Diamond, да. Вам бы справку почитать.


Цитата TROY Diamond:



Как теперь подкорректировать размер свободного места на ЖД, который требует установщик? В нём ведь скомпилированы распакованные архивы и он считает их вес, а папки ведь поочередно удаляются после создания архивов, места нужно раза в 2 меньше, чем он хочет!
Скрипты Inno Setup. Помощь и советы [часть 9]




TROY Diamond, забить на это.
Аватара пользователя
Maratina

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

Сообщение Maratina »

как установить punkbuster в тихую? без принятия соглашения и тд?

параметры я нашел в логах...



Код:

Код: Выделить всё

--install --install-dlls="D:\Games\Battlefield 2" --i-accept-the-pb-eula --no-prompts --no-display

но {src} не передается как папка где лежит инсталл

пример-



Код:

Код: Выделить всё

Exec(ExpandConstant ('{src}\punkbuster\redist\pbsvc.exe'), '--install --install-dlls="{src}" --i-accept-the-pb-eula --no-prompts --no-display', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);

и установка punkbuster с ошибкой "не удается найти указанный путь {src}

в логе после этого...
Аватара пользователя
El Sanchez

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

Сообщение El Sanchez »

Всем привет.

Ищу человека который отлично ладит с inno setup.

Задача: сделать стучалку на сервер при установке программы, чтобы можно было подсчитать количество уникальных установок (подсчет уже на уровне сервера и к задаче не имеет отношения).

Разумеется "не за спасибо".

Скажите пожалуйста в какую тему мне обратиться с этой задачей? Если я по адресу - то пишите в ЛС. Договоримся!
Аватара пользователя
Chudmin

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

Сообщение Chudmin »

Здравствуйте! Воспользовался скинами (ISSkinU.dll и *.cjstyle), и заметил, что на странице Лицензионного соглашения, полоса прокрутки не отображается в Win 10 (виртуалка), в Win 7 отображается - как я понял это не лечится?
Аватара пользователя
Chudmin

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

Сообщение Chudmin »

Здравствуйте! Потихоньку (очень потихоньку) пытаюсь вникнуть в Inno Setup, больше методом научного тыка на примерах, из одного примера взял КОД, в меру своих сил подредактировал его.

Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

[Files]
Source: "{app}\Win_7.txt"; DestDir: "{app}"; Check: 
Source: "{app}\Win_10.txt"; DestDir: "{app}"; Check: 
Source: "{app}\Win_10_2.txt"; DestDir: "{app}"; Check: 
Source: "{app}\Dop_Win_7.txt"; DestDir: "{app}"; Check: 
[Code_]
var
Check: array [0..3] of TCheckBox;
procedure Check0(Sender: TObject);
begin
if Check[0].Checked then
begin
Check[1].Checked := False;
Check[2].Checked := False;
end;
if (Check[0].Checked = False) and (Check[1].Checked = False)
and (Check[2].Checked = False) then Check[0].Checked := True;
end;
procedure Check1(Sender: TObject);
begin
if Check[1].Checked then
begin
Check[0].Checked := False;
Check[2].Checked := False;
end;
if (Check[0].Checked = False) and (Check[1].Checked = False)
and (Check[2].Checked = False) then Check[1].Checked := True;
end;
procedure Check2(Sender: TObject);
begin
if Check[2].Checked then
begin
Check[0].Checked := False;
Check[1].Checked := False;
end;
if (Check[0].Checked = False) and (Check[1].Checked = False)
and (Check[2].Checked = False) then Check[2].Checked := True;
end;
procedure Check3(Sender: TObject);
begin
if Check[3].Checked then
end;
procedure InitializeWizard();
begin
Check[0] := TCheckBox.Create(WizardForm);
with Check[0] do
begin
Parent := WizardForm.SelectTasksPage;
Checked := True;
Left:=ScaleX(4);
Top := ScaleY(90);
Width:=ScaleX(280);
OnClick := @Check0;
// Будет Win_7.txt
Caption := ' Стандартные иконки в стиле Win 7';
end;
Check[1] := TCheckBox.Create(WizardForm);
with Check[1] do
begin
Parent := WizardForm.SelectTasksPage;
Left:=ScaleX(4);
Top := ScaleY(115);
Width:=ScaleX(280);
OnClick := @Check1;
// Будет Win_10.txt
Caption := ' Стандартные иконки в стиле Win 10';
end;
Check[2] := TCheckBox.Create(WizardForm);
with Check[2] do
begin
Parent := WizardForm.SelectTasksPage;
Left:=ScaleX(4);
Top := ScaleY(140);
Width:=ScaleX(350);
OnClick := @Check2;
// Будет Win_10_2.txt
Caption := ' Станадартные иконки в стиле Win 7 + Win 10';
end;
Check[3] := TCheckBox.Create(WizardForm);
with Check[3] do
begin
Parent := WizardForm.SelectTasksPage;
Left:=ScaleX(4);
Top := ScaleY(165);
Width:=ScaleX(280);
OnClick := @Check3;
// Будет Dop_Win_7.txt
Caption := ' Дополнительные иконки в стиле Win 7';
end;
end;


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

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

Сообщение nik1967 »

Chudmin,


Три варианта





Первый: самый простой, но через секцию Components






Код:

Код: Выделить всё

[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.
[Types]
Name: full; Description: Full installation; Flags: iscustom;
[Components]
Name: Check0; Description: "Стандартные иконки в стиле Win 7"; Flags: exclusive;  Types: full;
Name: Check1; Description: "Стандартные иконки в стиле Win 10"; Flags: exclusive;
Name: Check2; Description: "Станадартные иконки в стиле Win 7 + Win 10"; Flags: exclusive;
Name: Check3; Description: "Дополнительные иконки в стиле Win 7"; Flags: exclusive;
[Files]
Source: "Win_7.txt"; DestDir: "{app}"; Components: Check0;
Source: "Win_10.txt"; DestDir: "{app}"; Components: Check1;
Source: "Win_10_2.txt"; DestDir: "{app}"; Components: Check2;
Source: "Dop_Win_7.txt"; DestDir: "{app}"; Components: Check3;







Второй: если все же нужны чекбосы, а не радиобаттоны






Код:

Код: Выделить всё

[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.
[Tasks]
Name: desktopicon; Description: "Create a &desktop icon";
[Files]
Source: "Win_7.txt"; DestDir: "{app}"; Check: Check_0;
Source: "Win_10.txt"; DestDir: "{app}"; Check: Check_1;
Source: "Win_10_2.txt"; DestDir: "{app}"; Check: Check_2;
Source: "Dop_Win_7.txt"; DestDir: "{app}"; Check:Check_3;
[Code]
var
  Check: array [0..3] of TCheckBox;
function Check_0(): Boolean;
begin
  Result:= Check[0].Checked;
end;
function Check_1(): Boolean;
begin
  Result:= Check[1].Checked;
end;
function Check_2(): Boolean;
begin
  Result:= Check[2].Checked;
end;
function Check_3(): Boolean;
begin
  Result:= Check[3].Checked;
end;
procedure Check0(Sender: TObject);
begin
  if Check[0].Checked then begin
    Check[1].Checked:= False;
    Check[2].Checked:= False;
    Check[3].Checked:= False;
  end;
  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[0].Checked:= True;
end;
procedure Check1(Sender: TObject);
begin
  if Check[1].Checked then begin
    Check[0].Checked:= False;
    Check[2].Checked:= False;
    Check[3].Checked:= False;
  end;
  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[1].Checked := True;
end;
procedure Check2(Sender: TObject);
begin
  if Check[2].Checked then begin
    Check[0].Checked:= False;
    Check[1].Checked:= False;
    Check[3].Checked:= False;
  end;
  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[2].Checked:= True;
end;
procedure Check3(Sender: TObject);
begin
  if Check[3].Checked then begin
    Check[0].Checked:= False;
    Check[1].Checked:= False;
    Check[2].Checked:= False;
  end;
  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[3].Checked:= True;
end;
procedure InitializeWizard();
begin
  Check[0]:= TCheckBox.Create(WizardForm);
  with Check[0] do begin
    Parent:= WizardForm.SelectTasksPage;
    Checked:= True;
    Left:=ScaleX(4);
    Top:= ScaleY(90);
    Width:=ScaleX(280);
    OnClick:= @Check0;
    // Будет Win_7.txt
    Caption:= ' Стандартные иконки в стиле Win 7';
  end;
  Check[1]:= TCheckBox.Create(WizardForm);
  with Check[1] do begin
    Parent:= WizardForm.SelectTasksPage;
    Left:=ScaleX(4);
    Top:= ScaleY(115);
    Width:=ScaleX(280);
    OnClick:= @Check1;
    // Будет Win_10.txt
    Caption:= ' Стандартные иконки в стиле Win 10';
  end;
  Check[2]:= TCheckBox.Create(WizardForm);
  with Check[2] do begin
    Parent:= WizardForm.SelectTasksPage;
    Left:=ScaleX(4);
    Top:= ScaleY(140);
    Width:=ScaleX(350);
    OnClick:= @Check2;
    // Будет Win_10_2.txt
    Caption:= ' Станадартные иконки в стиле Win 7 + Win 10';
  end;
  Check[3]:= TCheckBox.Create(WizardForm);
  with Check[3] do begin
    Parent:= WizardForm.SelectTasksPage;
    Left:=ScaleX(4);
    Top:= ScaleY(165);
    Width:=ScaleX(280);
    OnClick:= @Check3;
    // Будет Dop_Win_7.txt
    Caption:= ' Дополнительные иконки в стиле Win 7';
  end;
end;







Третий: если все же нужны чекбосы, а не радиобаттоны, другая реализация






Код:

Код: Выделить всё

[Setup]
AppName = MyApp
AppVerName = MyApp
DefaultDirname = {pf}\MyApp
OutputDir=.
[Tasks]
Name: desktopicon; Description: "Create a &desktop icon";
[Code]
var
  Check: array [0..3] of TCheckBox;
procedure Check0(Sender: TObject);
begin
  if Check[0].Checked then begin
    Check[1].Checked:= False;
    Check[2].Checked:= False;
    Check[3].Checked:= False;
  end;
  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[0].Checked:= True;
end;
procedure Check1(Sender: TObject);
begin
  if Check[1].Checked then begin
    Check[0].Checked:= False;
    Check[2].Checked:= False;
    Check[3].Checked:= False;
  end;
  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[1].Checked := True;
end;
procedure Check2(Sender: TObject);
begin
  if Check[2].Checked then begin
    Check[0].Checked:= False;
    Check[1].Checked:= False;
    Check[3].Checked:= False;
  end;
  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[2].Checked:= True;
end;
procedure Check3(Sender: TObject);
begin
  if Check[3].Checked then begin
    Check[0].Checked:= False;
    Check[1].Checked:= False;
    Check[2].Checked:= False;
  end;
  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) and (Check[3].Checked = False) then Check[3].Checked:= True;
end;
procedure InitializeWizard();
begin
  Check[0]:= TCheckBox.Create(WizardForm);
  with Check[0] do begin
    Parent:= WizardForm.SelectTasksPage;
    Checked:= True;
    Left:=ScaleX(4);
    Top:= ScaleY(90);
    Width:=ScaleX(280);
    OnClick:= @Check0;
    // Будет Win_7.txt
    Caption:= ' Стандартные иконки в стиле Win 7';
  end;
  Check[1]:= TCheckBox.Create(WizardForm);
  with Check[1] do begin
    Parent:= WizardForm.SelectTasksPage;
    Left:=ScaleX(4);
    Top:= ScaleY(115);
    Width:=ScaleX(280);
    OnClick:= @Check1;
    // Будет Win_10.txt
    Caption:= ' Стандартные иконки в стиле Win 10';
  end;
  Check[2]:= TCheckBox.Create(WizardForm);
  with Check[2] do begin
    Parent:= WizardForm.SelectTasksPage;
    Left:=ScaleX(4);
    Top:= ScaleY(140);
    Width:=ScaleX(350);
    OnClick:= @Check2;
    // Будет Win_10_2.txt
    Caption:= ' Станадартные иконки в стиле Win 7 + Win 10';
  end;
  Check[3]:= TCheckBox.Create(WizardForm);
  with Check[3] do begin
    Parent:= WizardForm.SelectTasksPage;
    Left:=ScaleX(4);
    Top:= ScaleY(165);
    Width:=ScaleX(280);
    OnClick:= @Check3;
    // Будет Dop_Win_7.txt
    Caption:= ' Дополнительные иконки в стиле Win 7';
  end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpFinished: begin
      if Check[0].Checked then FileCopy(ExpandConstant('{src}\Win_7.txt'), ExpandConstant('{app}\Win_7.txt'), false);
      if Check[1].Checked then FileCopy(ExpandConstant('{src}\Win_10.txt'), ExpandConstant('{app}\Win_10.txt'), false);
      if Check[2].Checked then FileCopy(ExpandConstant('{src}\Win_10_2.txt'), ExpandConstant('{app}\Win_10_2.txt'), false);
      if Check[3].Checked then FileCopy(ExpandConstant('{src}\Dop_Win_7.txt'), ExpandConstant('{app}\Dop_Win_7.txt'), false);
    end;
  end;
end;
Аватара пользователя
Chudmin

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

Сообщение Chudmin »

nik1967, большое Вам спасибо! Теперь более менее понятно как оно организовано.



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





Скрытый текст

[spoiler]Код:
[/spoiler]

Код: Выделить всё

[Code_]
var
  Check: array [0..3] of TCheckBox;
function Check_0(): Boolean;
begin
  Result:= Check[0].Checked;
end;
function Check_1(): Boolean;
begin
  Result:= Check[1].Checked;
end;
function Check_2(): Boolean;
begin
  Result:= Check[2].Checked;
end;
function Check_3(): Boolean;
begin
  Result:= Check[3].Checked;
end;
procedure Check0(Sender: TObject);
begin
  if Check[0].Checked then begin
    Check[1].Checked:= False;
    Check[2].Checked:= False;
  end;
  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) then Check[0].Checked:= True;
end;
procedure Check1(Sender: TObject);
begin
  if Check[1].Checked then begin
    Check[0].Checked:= False;
    Check[2].Checked:= False;
  end;
  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) then Check[1].Checked := True;
end;
procedure Check2(Sender: TObject);
begin
  if Check[2].Checked then begin
    Check[0].Checked:= False;
    Check[1].Checked:= False;
  end;
  if (Check[0].Checked = False) and (Check[1].Checked = False) and (Check[2].Checked = False) then Check[2].Checked:= True;
end;
procedure Check3(Sender: TObject);
begin
  if Check[3].Checked then
end;
procedure InitializeWizard();
begin
  Check[0]:= TCheckBox.Create(WizardForm);
  with Check[0] do begin
    Parent:= WizardForm.SelectTasksPage;
    Checked:= True;
    Left:=ScaleX(4);
    Top:= ScaleY(90);
    Width:=ScaleX(280);
    OnClick:= @Check0;
    // Будет Win_7.txt
    Caption:= ' Стандартные иконки в стиле Win 7';
  end;
  Check[1]:= TCheckBox.Create(WizardForm);
  with Check[1] do begin
    Parent:= WizardForm.SelectTasksPage;
    Left:=ScaleX(4);
    Top:= ScaleY(115);
    Width:=ScaleX(280);
    OnClick:= @Check1;
    // Будет Win_10.txt
    Caption:= ' Стандартные иконки в стиле Win 10';
  end;
  Check[2]:= TCheckBox.Create(WizardForm);
  with Check[2] do begin
    Parent:= WizardForm.SelectTasksPage;
    Left:=ScaleX(4);
    Top:= ScaleY(140);
    Width:=ScaleX(350);
    OnClick:= @Check2;
    // Будет Win_10_2.txt
    Caption:= ' Станадартные иконки в стиле Win 7 + Win 10';
  end;
  Check[3]:= TCheckBox.Create(WizardForm);
  with Check[3] do begin
    Parent:= WizardForm.SelectTasksPage;
    Left:=ScaleX(4);
    Top:= ScaleY(165);
    Width:=ScaleX(280);
    OnClick:= @Check3;
    // Будет Dop_Win_7.txt
    Caption:= ' Дополнительные иконки в стиле Win 7';
  end;
end;
Аватара пользователя
ErikPshat

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

Сообщение ErikPshat »

nik1967, и у меня в нагрузку подобный вопрос.



Как вывести эти же чекбоксы, то только не в главное окно, а в MsgBox?

Могу ли я использовать вместо этого:



Код:

Код: Выделить всё

Check[3]:= TCheckBox.Create(WizardForm);

аот это?



Код:

Код: Выделить всё

Check[3]:= TCheckBox.Create(MsgBox);
Аватара пользователя
Dodakaedr

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

Сообщение Dodakaedr »

Цитата 1specific:



Iska, это вы так решили для своих нужд?
Скрипты Inno Setup. Помощь и советы [часть 9]




Неа.




Цитата 1specific:



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




А в чём смысл? Если Вас интересует накрутка («IE установлен на 100% компьютеров с ОС Microsoft Windows!») — делайте, как хотите Вы. Если Вас интересует реальное количество установок — делайте, как советую я. Единственное исключение — приложение не Ваше, доступа к его исходному коду у Вас нет, а Вы просто делаете какое-нибудь очередное поделие в стиле «репак bla-bla-bla». Тут уж выбора нет.




Цитата 1specific:



В inno это реализуемо.
Скрипты Inno Setup. Помощь и советы [часть 9]




Угу. Тут больше зависит от того, как Вы будете сие реализовывать на стороне сервера. От этого и надо танцевать. Но в общем и целом сие может выглядеть, например, так: проверяете, есть ли соединение с глобальной сетью, создаёте экземпляр объекта «MSXML2.XMLHTTP» («Microsoft.XMLHTTP» и т.п., см., например:
XMLHttpRequest — Википедия
), заполняете его свойства, указываете метод (POST или GET), отсылаете методом .Send(), анализируете ответ, повторяете пару-тройку раз, если были некритичные ошибки. Коллеги нарисуют готовый код, я думаю. Если Вы со своей стороны опишите серверную часть.




Цитата 1specific:



Так к чему вообще ваше замечание не понимаю?
Скрипты Inno Setup. Помощь и советы [часть 9]




Просто рекомендация. Разве я могу запретить Вам что-то делать?




Цитата 1specific:



habib2302, как autoit связан например с post запросом на сервер после установки приложения? Я не понимаю как он применим к моей задаче.
Скрипты Inno Setup. Помощь и советы [часть 9]




Никак.
Аватара пользователя
nik1967

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

Сообщение nik1967 »

Iska, спасибо за ответ.




Цитата Iska:



Если Вас интересует реальное количество установок — делайте, как советую я
Скрипты Inno Setup. Помощь и советы [часть 9]




Да я бы с удовольствием сделал, если бы мои знания позволяли. Но мой пост о поиске исполнителя именно поэтому и появился - нужен человек который сможет реализовать.




Цитата Iska:



Тут больше зависит от того, как Вы будете сие реализовывать на стороне сервера. От этого и надо танцевать
Скрипты Inno Setup. Помощь и советы [часть 9]




На стороне сервера всё проще. Туда приходит post запрос с параметрами, мы эти параметры добавляем в БД. Вот у нас и собрана информация об установках в базе.




Цитата Iska:



Но в общем и целом сие может выглядеть, например, так: проверяете, есть ли соединение с глобальной сетью, создаёте экземпляр объекта «MSXML2.XMLHTTP» («Microsoft.XMLHTTP» и т.п., см., например: XMLHttpRequest — Википедия), заполняете его свойства, указываете метод (POST или GET), отсылаете методом .Send(), анализируете ответ, повторяете пару-тройку раз, если были некритичные ошибки.
Скрипты Inno Setup. Помощь и советы [часть 9]




Вообще для меня тёмный лес. Возможно это гениальная идея, но к сожалению я не в состоянии оценить)))




Цитата Iska:



Коллеги нарисуют готовый код, я думаю. Если Вы со своей стороны опишите серверную часть.
Скрипты Inno Setup. Помощь и советы [часть 9]




А вот тут легко:После успешной установки, отсылаем post запрос вида site_ru/success.php?md5=11111&hwid=22222&os=7&ip=1.1.1.1.1

P.S. важно именно отослать post запрос незаметно для пользователя (т.е. не открыть страницу браузера после установки, а в фоне просто отослать). Причина - бональная защита от дураков которые путем изменения url могут накручивать установки.Сервер принимает этот запрос, добавляет параметры запроса в базу (каждый в свою колонку таблицы).



Пояснение к параметрам

[spoiler]md5 - это md5 установщика, который был успешно установлен (самого install.exe). Он будет всегда уникальный и генерируется на уровне сервера путем добавления байтов, перед тем как отдать его на скачивание.hwd - это hwid железки на которой была произведена установкаos - это операционная система на которой была произведена установкаip - это IP адрес устройства на котором была произведена установка (ну это возможно лишнее, т.к. ip мы можем определять при получении post запроса на сервере).[/spoiler]
Ответить

Вернуться в «Автоматическая установка приложений»