Ru-Board.club
← Вернуться в раздел «Программы»

» Inno Setup (создание инсталяционных пакетов)

Автор: painter7
Дата сообщения: 24.07.2014 13:46

Цитата:
некоторые из них были на русском языке для русскоязычной винды и на английском для англоязычной. Можно это как-то лёгким движением руки сделать?

Можно так
[more]
Код: [no]
[Icons]
Name: "{commonstartmenu}\Programs\МояПрограмма"; Filename: "{app}\MyProgram.exe"; Check: RussianLocale;
Name: "{commonstartmenu}\Programs\MyProgram"; Filename: "{app}\MyProgram.exe"; Check: not RussianLocale;

[Code]
function RussianLocale(): Boolean;
begin
Result:=False;
if GetUILanguage = $0419 then Result:= True;
end;
[/no]
Автор: MentalWarrior
Дата сообщения: 24.07.2014 13:50
О. Большущий сэнкс. Буду пробовать.
Автор: valgo2
Дата сообщения: 24.07.2014 13:59
Здравствуйте, уважаемые форумчане.
Просьба помочь - недавно стал разбираться с Inno Setup, потому могут быть вопросы достаточно глупые. Бьюсь уже второй день с закреплением иконки софта на панели задач в Win7. Видел кучу разного кода - ни один не работает.
Например, вот этот: http://forum.ru-board.com/topic.cgi?forum=5&topic=46338&start=421&limit=1&m=1#1
Здесь функция SHGetNewLinkInfo не определена. И вообще нет вызова функции PinToTaskbar.
Просьба указать пробелы в данном скрипте, или лучше дать готовый пример закрепления ярлыка на панели задач.
Заранее премного благодарен



Добавлено:
Сейчас получилось сделать с использованием вот этого скрипта: http://forum.oszone.net/post-1444931-2009.html
НО:
1. получается зависимость от языка ОС? тогда как же быть, если у нас международное приложение и язык может быть почти любой?
2. нужно чтобы был запуск не просто софта, а с параметром. как это сделать (добавил параметр просто через пробел после названия файла, тогда скрипт ругается при исполнении)? и иконка нужна другая, а не основного софта. Ну то есть на панели задач хотелось закрепть быстрый доступ к одной из функций.
Автор: MentalWarrior
Дата сообщения: 24.07.2014 15:49
painter7
Ещё раз спасибо, есть такой вопрос. А где про это можно почитать? Хотелось бы на нормальном русском языке (ну не люблю я инглиш), да и подробно о нужном, кратко о ненужном. То бишь в виде конкретного справочника. Просто посмотрел Хэлп, никаких там Check даже близко нет.
Автор: painter7
Дата сообщения: 24.07.2014 16:12
MentalWarrior, в шапке же

Цитата:
Русская справка к версии 5.5.5, автор перевода BagIra, bugron | Chm-версия

Скрипты на Pascal -> Параметры проверок
Там и пример с описанием.
Автор: valgo2
Дата сообщения: 24.07.2014 16:58
Получилось закрепить с помошью этого кода:
http://forum.ru-board.com/topic.cgi?forum=5&topic=46338&start=421&limit=1&m=1#1
то есть вопрос с языками отпал.
НО остается вопрос с отличной иконкой и добавлением параметра запуска exe
Автор: painter7
Дата сообщения: 24.07.2014 18:06

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

Ну если я правильно понял, то вот первое, что пришло в голову:
[more]
Код: [no]
[Components]
Name: "programa"; Description: "Программа А"; Types: amin amax
Name: "programa\comp1"; Description: "Компонент 1"; Types: amin amax
Name: "programa\comp2"; Description: "Компонент 2"; Types: amin amax
Name: "programa\comp3"; Description: "Компонент 3"; Types: amax; Flags: fixed
Name: "programa\comp4"; Description: "Компонент 4"; Types: amax; Flags: fixed
Name: "programa\comp5"; Description: "Компонент 5"; Types: amin; Flags: fixed
Name: "programa\comp6"; Description: "Компонент 6"; Types: amin; Flags: fixed
Name: "pluginx"; Description: "Plugin для программы Х"; Types: xplug
Name: "pluginx\comp7"; Description: "Компонент 7"; Types: xplug
Name: "pluginx\comp8"; Description: "Компонент 8"; Types: xplug; Flags: fixed
Name: "pluginy"; Description: "Plugin для программы Y"; Types: yplug
Name: "pluginy\comp9"; Description: "Компонент 9"; Types: yplug
Name: "pluginy\comp10"; Description: "Компонент 10"; Types: yplug; Flags: fixed

[Types]
Name: "amin"; Description: "Программа А - минимальная установка"; Flags: iscustom
Name: "amax"; Description: "Программа А - максимальная установка"
Name: "xplug"; Description: "Plugin для программы Х"
Name: "yplug"; Description: "Plugin для программы Y"

[Code]
procedure OnClickCheck(Sender: TObject);
var
i,k: integer;
begin
k := WizardForm.TypesCombo.itemIndex;
with WizardForm.ComponentsList do
begin
// Программа А - минимальная установка
// Программа А - максимальная установка
if (k = 0) or (k = 1) then
for i:=7 to 12 do Checked[i] := False;
// Plugin для программы Х
if (k = 2) then
begin
for i:=0 to 6 do Checked[i] := False;
for i:=10 to 12 do Checked[i] := False;
end;
// "Plugin для программы Y
if (k = 3) then
for i:=0 to 9 do Checked[i] := False;
end;
end;

procedure InitializeWizard();
begin
WizardForm.ComponentsList.OnClickCheck:=@OnClickCheck;
end;
[/no]
Автор: MentalWarrior
Дата сообщения: 24.07.2014 18:45
Ладно гляну. Просто смотрел я этот хелп. В оригинальном всё чётко, по оглавлению. А здесь. Пока докопаешься.
Автор: painter7
Дата сообщения: 24.07.2014 21:21
MentalWarrior, как говорят: "плохому танцору ..."
Если кратко: для проверки подходит функция возвращающая true или false.


Цитата:
1. получается зависимость от языка ОС? тогда как же быть, если у нас международное приложение и язык может быть почти любой?
valgo2
Как раз в приведенном выше сценарии это предусмотрено, вот тут грузится внешней функцией нужная строка
Код: [no]LoadString(hInst, res, buf[0], 255)-1 do Insert(buf[i], strVerb, i+1);[/no]
Автор: AtotIK
Дата сообщения: 25.07.2014 01:22
VkusnayaSolanka, это проблема в dll'ке. Под Windows 8 у всех так. Inno Setup ни при чём.
Автор: demmax2004
Дата сообщения: 25.07.2014 09:25

Цитата:
Не даст выбирать другие компоненты, пока не выбрать в списке нужный тип установки, ну а все остальное так же как обычно, к нужному файлу (ярлыку или значению реестра) дописать в зависимости от компонента, например ;Components: programa\comp1


По твоему варианту для всех типов отображаются все компоненты в списке.
Можно ли добавить и удалить Компоненты в Runtime и привязать их к [Files] в runtime ???
Автор: painter7
Дата сообщения: 25.07.2014 17:41
demmax2004
Цитата:
для каждого пункта будут свои копируемые файлы и значения реестра, а так же индивидуальный выбор компонентов

Тут про скрытие и вывод компонентов ни слова)

Цитата:
Можно ли добавить и удалить Компоненты в Runtime и привязать их к [Files] в runtime ???

Ну вот так например (на скорую руку, с костылями, в виде ручного забивания компонентов по типам).
[more]
Код: [no]
[Components]
Name: "programa"; Description: "Программа А"; Types: amin amax
Name: "programa\comp1"; Description: "Компонент 1"; Types: amin amax
Name: "programa\comp2"; Description: "Компонент 2"; Types: amin amax
Name: "programa\comp3"; Description: "Компонент 3"; Types: amax; Flags: fixed
Name: "programa\comp4"; Description: "Компонент 4"; Types: amax; Flags: fixed
Name: "programa\comp5"; Description: "Компонент 5"; Types: amin; Flags: fixed
Name: "programa\comp6"; Description: "Компонент 6"; Types: amin; Flags: fixed
Name: "pluginx"; Description: "Plugin для программы Х"; Types: xplug
Name: "pluginx\comp7"; Description: "Компонент 7"; Types: xplug
Name: "pluginx\comp8"; Description: "Компонент 8"; Types: xplug; Flags: fixed

[Types]
Name: "amin"; Description: "Программа А - минимальная установка"; Flags: iscustom // 0
Name: "amax"; Description: "Программа А - максимальная установка" // 1
Name: "xplug"; Description: "Plugin для программы Х" // 2

var
tNCLB: Array of TNewCheckListBox;

procedure CLOnClickCheck(Sender: TObject);
var
i,j: integer;
begin
for i:=0 to WizardForm.ComponentsList.Items.Count-1 do
WizardForm.ComponentsList.Checked[i] := False;
for i:=0 to tNCLB[WizardForm.TypesCombo.ItemIndex].Items.Count-1 do
for j:=0 to WizardForm.ComponentsList.Items.Count-1 do
if tNCLB[WizardForm.TypesCombo.ItemIndex].ItemObject[i] = WizardForm.ComponentsList.ItemObject[j] then
WizardForm.ComponentsList.Checked[j] := tNCLB[WizardForm.TypesCombo.ItemIndex].Checked[i];
end;

procedure TCOnChange(Sender: TObject);
var
i: integer;
begin
for i:=0 to WizardForm.TypesCombo.Items.Count-1 do
tNCLB[i].Hide;
tNCLB[WizardForm.TypesCombo.ItemIndex].Show;
CLOnClickCheck(Sender);
end;

procedure CopyCheckBoxs(intNum,intStart,indEnd: integer);
var
i: integer;
begin
with WizardForm.ComponentsList do
for i:=intStart to indEnd do
tNCLB[intNum].AddCheckBox(ItemCaption[i], ItemSubItem[i], ItemLevel[i], True, ItemEnabled[i], False, True, ItemObject[i]);
end;

procedure InitializeWizard();
var
i: integer;
begin
if WizardForm.TypesCombo.Items.Count > 1 then
with WizardForm do
begin
TypesCombo.OnChange := @TCOnChange;
ComponentsList.Hide;
with ComponentsList do
begin
SetLength(tNCLB,TypesCombo.Items.Count);
for i:=0 to WizardForm.TypesCombo.Items.Count-1 do
begin
tNCLB[i] := TNewCheckListBox.Create(WizardForm);
tNCLB[i].Parent := SelectComponentsPage;
tNCLB[i].Top := Top;
tNCLB[i].Left := Left;
tNCLB[i].Width := Width;
tNCLB[i].Height := Height;
tNCLB[i].OnClickCheck := @CLOnClickCheck;
tNCLB[i].Hide;
end;
// --- Костыли ---
// Программа А - минимальная установка
CopyCheckBoxs(0,0,2); // amin | programa, comp1, comp2
CopyCheckBoxs(0,5,6); // amin | comp5, comp6
// Программа А - максимальная установка
CopyCheckBoxs(1,0,4); // amax | programa, comp1, comp2, comp3, comp4
// Plugin для программы Х
CopyCheckBoxs(2,7,9); // xplug | pluginx, comp7, comp8
end;
tNCLB[0].Show;
end;
end;
[/no]
Автор: distortion
Дата сообщения: 28.07.2014 22:56
пардон за мое невежество, возможно ли из iss --> reg? любые варианты экспорт/конвертация?

снимается, istool --> экспорт, спасибо
Автор: Habib2302
Дата сообщения: 30.07.2014 13:33
Доброе время суток. В моем репаке AIDA64 присутствуют 4 редакции т.е 4 программы и дело в том, что если использовать параметр установки

Код: [Setup]
AppendDefaultDirName=yes
Автор: painter7
Дата сообщения: 30.07.2014 15:07
Habib2302

Код: [no]
[Code]
var
DirBrowseButtonOnClick: TNotifyEvent;

procedure BrowseOnClick(Sender: TObject);
begin
DirBrowseButtonOnClick(Sender);
if IsComponentSelected('AIDA642') then
WizardForm.DirEdit.Text := AddBackslash(WizardForm.DirEdit.Text) + '{#AIDA642}';
end;

procedure InitializeWizard();
begin
with WizardForm do
begin
DirBrowseButtonOnClick := DirBrowseButton.OnClick;
DirBrowseButton.OnClick := @BrowseOnClick;
end;
end;
[/no]
Автор: Habib2302
Дата сообщения: 30.07.2014 15:33
painter7
а как быть с портативной версией? или вы скрипт не смотрели?

Код:
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;
Автор: painter7
Дата сообщения: 30.07.2014 16:43
Habib2302, не смотрел, просто написал код по куску который приведен.
Ну так точно так же будет, добавить остальное в процедуру BrowseOnClick.
Автор: canorila
Дата сообщения: 01.08.2014 17:42
Как сохранить атрибуты при компиляции и распаковке? Есть в папках некое количество файлов которые имеют артибут только для чтения, при компиляции этот атрибут пропадает, как это предотвратить?
П.С. Уже была такая тема: http://www.forum.ru-board.com:9000/topic.cgi?forum=5&topic=31936&start=2220
о ней писал 'boss911' но ему так не кто не ответил, помогите пожалуйста, уже 2 день ищу.
Автор: dodakaedr
Дата сообщения: 01.08.2014 19:29

Цитата:
Как сохранить атрибуты при компиляции и распаковке?

для этого в секции [Files] есть параметр Attribs

Код: [Files]
Source: "InstallFiles\1.txt"; DestDir: {app}; Attribs: hidden system; Flags: ignoreversion
Автор: canorila
Дата сообщения: 01.08.2014 21:01
Получается мне придётся искать каждый файл с атрибутом и вписывать его в скрипт? Это же капец как муторно.
Автор: Raz3r
Дата сообщения: 03.08.2014 09:36
Подскажите как разблокировать формы в редакторе форм в inno setup ultra?
Автор: demmax2004
Дата сообщения: 03.08.2014 12:32
painter7

Цитата:
Ну если я правильно понял, то вот первое, что пришло в голову:


Большое спасибо, сделал, работает как надо, сам бы никогда до такого не догадался бы, до сих пор не понимаю как работают эти чекбоксы и как они привязаны к компонентам.

Добавлено:

Цитата:
Это же капец как муторно.


Ну а как ты хотел, да и вообще этот атрибут уже изжил себя, я таки не понимаю на что они влияет вообще.
Автор: ogbisend
Дата сообщения: 03.08.2014 16:37
Вот кому надо новая ссыль на InnoIDE:http://innoide.net/download.php
Автор: le9ent
Дата сообщения: 04.08.2014 10:51
Доброго времени суток.

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

[more=И проблема возникла с со списком заданий]
with WizardForm.TasksList do begin
Left:=ScaleX(10);
Top:=ScaleY(65);
Width:=ScaleX(580);
Height:=ScaleY(90);
Parent:=WizardForm;
Hide;
end;

http://s014.radikal.ru/i327/1408/c2/83f2442a3caa.png

Изначально за основу брал этот готовый пример.

[/more]

Можно ли сделать прозрачным фон в листе заданий (TasksList)?
Автор: AlekseyPopovv
Дата сообщения: 05.08.2014 09:11
Подскажите как при нажатии на кнопку "нет" сделать так, что бы ни чего не удалялось. Пока не удаляется только реестр, всё остальное удаляется при любом выборе "да" "нет". Мне надо что бы либо всё удалялось при выборе "да", либо ничего при выборе "нет". Вариант прописать запрос на удаление для каждой папки не подходит, надо сделать всё в одном сообщении.

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if (CurUninstallStep = usDone) then
begin
if MsgBox('Удалить настройки {#MyAppName} {#MyAppVersion}?',mbconfirmation, mb_yesno) = IDYES then
RegDeleteKeyIncludingSubkeys(HKCU, 'Software\ChemTable Software\Reg Organizer');
DelTree(ExpandConstant('{userappdata}\ChemTable Software\Reg Organizer'), True, True, True);
DelTree(ExpandConstant('{localappdata}\ChemTable Software\InstallerTracing'), True, True, True);
DelTree(ExpandConstant('{localappdata}\ChemTable Software\Reg Organizer'), True, True, True);
DelTree(ExpandConstant('{localappdata}\ChemTable Software\Shared'), True, True, True);
Автор: painter7
Дата сообщения: 05.08.2014 12:34
AlekseyPopovv, шутите?

Код: [no]
if MsgBox('Удалить настройки {#MyAppName} {#MyAppVersion}?',mbconfirmation, mb_yesno) = IDYES then
begin
RegDeleteKeyIncludingSubkeys(HKCU, 'Software\ChemTable Software\Reg Organizer');
DelTree(ExpandConstant('{userappdata}\ChemTable Software\Reg Organizer'), True, True, True);
DelTree(ExpandConstant('{localappdata}\ChemTable Software\InstallerTracing'), True, True, True);
DelTree(ExpandConstant('{localappdata}\ChemTable Software\Reg Organizer'), True, True, True);
DelTree(ExpandConstant('{localappdata}\ChemTable Software\Shared'), True, True, True);
end;
[/no]
Автор: dragon1000
Дата сообщения: 05.08.2014 16:37

Цитата:
Создал форму, расположил на ней фоновый рисунок.


Цитата:
Можно ли сделать прозрачным фон в листе заданий (TasksList)?

Попробуйте выдрать часть кода из этого примера (там на фон для компонентов и листа заданий) накладывается фоновое изображение.
http://repacks.org.ua/inno-setup/skripty/362-mafia-ii-scriptis-psd.html
Автор: painter7
Дата сообщения: 05.08.2014 18:32
dragon1000, там под расширенную версию, грузится через LoadBGBmpFromBitmap для TNewCheckListbox.
Если версия инно не играет роли, тогда да.
Автор: dragon1000
Дата сообщения: 06.08.2014 08:14
painter7, ну да согласен. Жалко конечно что для полей Tasks и Components не свойства аналогичное для Лейблов (Transparent:=True; ).
Автор: sega1971
Дата сообщения: 06.08.2014 13:26
Что и где нужно прописать, чтобы в ярлыке запуска устанавливаемой программы стояла галочка "Выполнять эту программу от имени администратора" если установка производится под Windows 8 и выше

Сама установка идет с правами администратора:
[Setup]
PrivilegesRequired=admin

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758

Предыдущая тема: Только инсталлятор


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.