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

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

Автор: Zloy_Gelud
Дата сообщения: 06.05.2008 11:30
omals - СПАСИБО!
Автор: red88
Дата сообщения: 06.05.2008 14:59
Просьба табуретками не кидать, не успею я прочитать всю ветку. Как написать так, что бы инсталлятор копировал во время установки все файлы из какойнить рядом с ним лежащей папки ("\Data", например), а не только устанавливал то, что в него скомпилино заранее
Автор: sls
Дата сообщения: 06.05.2008 17:18
Народ, подскажите пожалуйста есть *.exe файл который можно запускать с разными ключами. Задача в том, что чтобы сделать тихую установку но с одним лишь окошком где можно допустим выбрать опции "home" и "work". Соотвтественно каждой опции нужно чтобы *.exe запускался с нужными ключами. Кто подскажет, как подобное сотворить?
Автор: serg_aka_lain
Дата сообщения: 06.05.2008 18:24
red88
так.
Source: "{src}\Data\*"; DestDir: "{app}\Data"; Flags: external recursesubdirs createallsubdirs;


sls

Exec(ExpandConstant('{src}') + '\*.exe', '/param', '', SW_ShowNormal, ewWaitUntilTerminated, ErrorCode);
или через секцию Run

Filename: "{src}\*.exe"; Parameters: "/param";

Автор: sls
Дата сообщения: 07.05.2008 00:07
Наверное не совсем то. Или яневерно понял. В идеале хорошо, если бы инсталлятор все тихо ставил не чем не смущая юзера, но в конце установки спросил бы... "work" или "home" отметив ту или иную опцию запускался бы *.exe c нужными ключиками.

Пока пошел самым простым путем вот листинг:
Код:

[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.)
AppName=Work
AppVerName=Work 1.0
DefaultDirName={pf}\ORL
DisableStartupPrompt=yes
DisableDirPage=yes
DisableProgramGroupPage=yes
OutputDir=C:\Documents and Settings\root\My Documents\exp2
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: english; MessagesFile: compiler:Default.isl

[Files]
Source: D:\Home\exp2\WinVNC.exe; DestDir: {app}; Flags: ignoreversion
Source: D:\Home\exp2\VNCHooks.dll; DestDir: {app}; Flags: ignoreversion
Source: D:\Home\exp2\Work.cmd; DestDir: {app}; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
Автор: firefly2005
Дата сообщения: 07.05.2008 04:11
так что нет никаких идей как можно вставить в код скрипта от Kindly -iss.iss свою дополнительную страницу для инсталляции?
CreateWizardPage я корректно не смог поставить
http://forum.ru-board.com/topic.cgi?forum=5&topic=24767&start=1516
Автор: omals
Дата сообщения: 07.05.2008 09:25
2 sls
стоит попробовать шото такое

еще в [Setup] добавить
DisableDirPage=yes
DisableFinishedPage=yes
DisableProgramGroupPage=yes
DisableReadyMemo=yes
DisableStartupPrompt=yes
DisableReadyPage=yes

[Tasks]
Name: "Home"; Description: "Home app";
Name: "Work"; Description: "Work app";

[Run]
Filename: "{app}\WinVNC.exe"; Parameters: "-connect 192.168.0.152::3910"; Check: IsTaskSelected('Home');
Filename: "{app}\WinVNC.exe"; Parameters: "другой параметр"; Check: IsTaskSelected('Work');

в
[Code]
procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpWelcome then
begin
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;

if CurPageID=wpInstalling then
begin
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
end;
Автор: sls
Дата сообщения: 07.05.2008 13:11
omals Огромное спасибо. Еще хочу уточнить одну вещь.



Можно как-то убрать эту кнопку? Она все равно без действия!
Автор: Chanka
Дата сообщения: 07.05.2008 16:35
Помогите, пожалуйста, сделать такую страницу

Она появляется если игра уже установлена и если повторно запустить установку.
При нажатии Play запускается игра, при нажатии Repair игра перезаписывается, при нажатии отмена страница убирается.
Очень прошу помочь!!! Очень надо!!!
Автор: omals
Дата сообщения: 07.05.2008 16:57
sls
в CurPageChanged еще одно условие
If CurPageID=wpSelectTasks then
begin
WizardForm.BackButton.Hide;
end;
кажись так
Автор: sls
Дата сообщения: 07.05.2008 17:19
omals Точно. Благодарю. Подскажи а размеры этой формы можно как-то менять? Т.е интересует сделать следущее : сделать ее поменьше, и может какую-то картиночку туда запихнуть.



P.S. Извини, что напрягаю. Делаю для Начальника, и как известно "аппетит приходит во время еды". То ему ничего не нужно было, теперь понадобились какие-то "рюшечки".
Попытался наглядно изобразить, что же все-таки ему хочется. Т.е. появляется 3-тий вариант именуемый Manual. Где ручками можно вбить IP адрес и номер Порта, после чего нажимаем на кнопку, и инсталлятор подхватывает эти параметры и соединяется. Возможно такое?
Автор: omals
Дата сообщения: 07.05.2008 17:58
sls
сорь, тут уж не помогу
если сделаеш, то картинку обязательно с текстом,
указывающим начальнику путь на ЮХ

или скажи - низя и все тут
а если можно то месяц роботы и много таньги
Автор: sls
Дата сообщения: 07.05.2008 20:45
omalsДа без вопросов. Ты вроде в этом разбираешься, просто подскажи возможно ли это средствами только лишь этого инсталлятора? Или это в принципе невозможно этими средствами? И возвращаясь к теме о размерах формы, их реально изменить, или нет?
Автор: elapse
Дата сообщения: 07.05.2008 21:30
sls

Цитата:
И возвращаясь к теме о размерах формы, их реально изменить, или нет?

Это же почти Delphi!? Всё можно...
[no][Code]
procedure InitializeWizard();
begin
WizardForm.Height := WizardForm.Height + 50;
WizardForm.Width := WizardForm.Width + 50;
// WizardForm.Height := WizardForm.Height - 10;
// WizardForm.Width := WizardForm.Width - 10;
WizardForm.Center; // Центрируем (по желанию)
end;
[/no]
Только придётся повозиться с размером, кое-куда сдвинуть объекты формы (в зависимости от изменения размеров) и так далее.
По поводу "Manual" - сделайте на странице дополнительных задач два TEdit, а при запуске из секции [Run] просто возьмите из них значения. Или проблема в чём-то другом?
Автор: sls
Дата сообщения: 07.05.2008 21:35
elapse

Цитата:
а при запуске из секции [Run] просто возьмите из них значения


Не расскажите подробнее?
Автор: firefly2005
Дата сообщения: 07.05.2008 21:41
sls

1) Изменение размера страницы, это я предполагаю возможно.
В руководстве есть примеры изменения, там и кнопкам новые координаты присвоить можно.
И на картиночку я встречал примеры.

Изменение размера страницы (из руководства Киндли)
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling
then
begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);

Может что можно сделать с помощью Inno Setup Form Designer. Но я в нем не разобрался как размеры менять основной формы.

2) Насчёт возможности ввода параметров в процессе инсталяции я не слышал. Может пример CodeAutomation.iss из примеров Inno Setup поможет или вызов функции из какой-либо dll реализует эти возможности. надо местных гуру этой темы дождаться.

Chanka я конечно новичок в этой теме по сравнению с Вами, но мне кажется что Ваша идея по поводу Art of Murder- это всё таки создание автозапуска-авторана самой игры, или по крайней мере авторана СД/ДВД.
Автор: sls
Дата сообщения: 07.05.2008 21:52
Т.е. есть код:


Код:

[Tasks]
Name: Home; Description: Home; Flags: exclusive
Name: Work; Description: Work; Flags: exclusive

[Codе]
procedure CurPageChanged(CurPageID: Integer);
begin

If CurPageID=wpWelcome then
begin
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;

If CurPageID=wpSelectTasks then
begin
WizardForm.BackButton.Hide;
end;

if CurPageID=wpInstalling then
begin
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
end;

[Run]
Filename: {app}\WinVNC.exe; Flags: waituntilidle
Filename: {app}\WinVNCexe; Parameters: -connect 192.168.0.151::3910; Check: IsTaskSelected('Home')
Filename: {app}\WinVNC.exe; Parameters: -connect 192.168.0.152::3910; Check: IsTaskSelected('Work')
Автор: elapse
Дата сообщения: 07.05.2008 22:43
sls, попробуйте [more=такой][no]
[Setup]
AppName=Work
AppVerName=Work 1.0
DefaultDirName={pf}\ORL
DisableStartupPrompt=yes
DisableDirPage=yes
DisableProgramGroupPage=yes
OutputDir=C:\Documents and Settings\root\My Documents\exp2
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: english; MessagesFile: compiler:Default.isl

[Files]
;Source: D:\Home\exp2\WinVNC.exe; DestDir: {app}; Flags: ignoreversion
;Source: D:\Home\exp2\VNCHooks.dll; DestDir: {app}; Flags: ignoreversion
;Source: D:\Home\exp2\Work.cmd; DestDir: {app}; Flags: ignoreversion

[Tasks]
Name: "Home"; Description: "Home app"; Flags: exclusive;
Name: "Work"; Description: "Work app"; Flags: exclusive;
Name: "Manual"; Description: "Manual app"; Flags: exclusive;

[Run]
Filename: "{app}\WinVNC.exe"; Parameters: -connect 192.168.0.152::3910; Check: IsTaskSelected('Home');
Filename: "{app}\WinVNC.exe"; Parameters: -connect 127.0.0.1::8000; Check: IsTaskSelected('Work');
Filename: "{app}\WinVNC.exe"; Parameters: -connect {code:TransferParameter}; Check: IsTaskSelected('Manual');

[Code]
var
Edit1, Edit2: TEdit;

procedure TasksListOnClickCheck(Sender: TObject);
begin
if IsTaskSelected('Manual') then
begin
Edit1.Enabled := True;
Edit2.Enabled := True;
Edit1.Color := clWhite;
Edit2.Color := clWhite;
end
else
begin
Edit1.Enabled := False;
Edit2.Enabled := False;
Edit1.Color := clBtnFace;
Edit2.Color := clBtnFace;
end;
end;

procedure InitializeWizard();
begin
Edit1 := TEdit.Create(WizardForm);
Edit1.Top := 110;
Edit1.Left := 5;
Edit1.Parent := WizardForm.SelectTasksPage;
Edit1.Enabled := False;
Edit1.Color := clBtnFace;

Edit2 := TEdit.Create(WizardForm);
Edit2.Top := Edit1.Top;
Edit2.Left := Edit1.Left + Edit1.Width + 10;
Edit2.Parent := WizardForm.SelectTasksPage;
Edit2.Enabled := False;
Edit2.Color := clBtnFace;

WizardForm.TasksList.OnClickCheck := @TasksListOnClickCheck;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectTasks then WizardForm.TasksList.Checked[0] := True;
end;

function TransferParameter(Param: String): String;
begin
Result := Edit1.Text + '::' + Edit2.Text;
end;
[/no][/more] вариант. Если получится, то недостающие надписи над полями и прочие штрихи (скрытие страниц, изсенение формы, проверка правильности IP:порта) доделаете сами. Думаю, это не сложно.
Автор: Chanka
Дата сообщения: 08.05.2008 06:56
firefly2005
Авторан, но только для повторного запуска установки. Если в реестре есть необходимый ключ и если запустить установку повторно, то должна появится такая страница.
Может все-таки, кто поможет сделать а?
Автор: Sampron
Дата сообщения: 08.05.2008 14:11
Chanka
[more=Код..]
[Setup]
AppName=Game
AppVerName=Game
DefaultDirName={pf}\Game
OutputDir=.

[Files]
Source: compiler:WizModernSmallImage.bmp; DestDir: {tmp}; Flags: dontcopy
Source: compiler:Examples\MyProg.exe; DestDir: {app}

[Registry]
Root: HKLM; Subkey: Software\Game; ValueType: string; ValueName: Path; ValueData: {app}\MyProg.exe; Flags: uninsdeletekey

[Code]
var
Image: TBitmapImage;
PlayButton, RepairButton: TButton;
AppPath: string;
Res: Integer;

procedure PlayOnClick(Sender: TObject);
begin
if RegQueryStringValue(HKLM, 'SOFTWARE\Game','Path', AppPath) then
begin
Exec(AppPath,'','',SW_SHOWNORMAL,ewNoWait,Res)
end
end;

procedure RepairOnClick(Sender: TObject);
begin
RepairButton.Hide
PlayButton.Hide
Image.Hide
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('WizModernSmallImage.bmp')

if RegQueryStringValue(HKLM, 'SOFTWARE\Game','Path', AppPath) then
begin
Image:=TBitmapImage.Create(WizardForm)
Image.Left:=0
Image.Top:=0
Image.Stretch:=True
Image.Align:=Alclient
Image.Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizModernSmallImage.bmp'))
Image.Parent:=WizardForm.WelcomePage

PlayButton:=TButton.Create(WizardForm)
PlayButton.Left:=WizardForm.BackButton.Left
PlayButton.Top:=WizardForm.BackButton.Top
PlayButton.Width:=WizardForm.BackButton.Width
PlayButton.Height:=WizardForm.BackButton.Height
PlayButton.Caption:='Play'
PlayButton.OnClick:=@PlayOnClick
PlayButton.Parent:=WizardForm

RepairButton:=TButton.Create(WizardForm)
RepairButton.Left:=WizardForm.NextButton.Left
RepairButton.Top:=WizardForm.NextButton.Top
RepairButton.Width:=WizardForm.NextButton.Width
RepairButton.Height:=WizardForm.NextButton.Height
RepairButton.Caption:='Repair'
RepairButton.OnClick:=@RepairOnClick
RepairButton.Parent:=WizardForm
end
end;
[/more]
Автор: Chanka
Дата сообщения: 08.05.2008 14:28
Sampron

Спасибо большое!

Вот только на картинке белая форма и надписи. можно ли убрать?
Да и еще можно ли как-нибудь сделать, чтобы при нажатии Play инсталл закрывался? А то ни красиво как-то. Да и еще при нажатии отмена чтобы не было сообщения, а просто инсталл закрывался.
Очень прошу помочь с этим делом.
Заранее большое спасибо!
Автор: Sampron
Дата сообщения: 08.05.2008 14:44
Chanka

Цитата:
Да и еще можно ли как-нибудь сделать, чтобы при нажатии Play инсталл закрывался? А то ни красиво как-то. Да и еще при нажатии отмена чтобы не было сообщения, а просто инсталл закрывался.


В процедуре PlayOnClick после строки Exec(AppPath... добавь WizardForm.Close
и добавь это:

procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:=True;
Confirm:=False;
end;


Цитата:
Вот только на картинке белая форма и надписи. можно ли убрать?

хм... у меня нормально показывает, Image перекрывает все стандартные компоненты.

Автор: Chanka
Дата сообщения: 08.05.2008 15:06
Sampron

А у меня вот что с картинкой ((
http://img59.imageshack.us/my.php?image=picki1.jpg
Автор: Sampron
Дата сообщения: 08.05.2008 15:17
Chanka
Может это глюки висты, у меня на ХР работает нормально.
Тогда сделай так:
в процедуре InitializeWizard после:
if RegQueryStringValue(HKLM, 'SOFTWARE\Game','Path', AppPath) then
begin
...
добавь:
WizardForm.WelcomeLabel1.Hide
WizardForm.WelcomeLabel2.Hide

а в RepairOnClick добавь:
WizardForm.WelcomeLabel1.Show
WizardForm.WelcomeLabel2.Show

так должно работать.
Автор: Chanka
Дата сообщения: 08.05.2008 15:27
Sampron

Спасибо большое! Да, так работает!
Ну и последнее чтобы хотелось. Можно ли чтобы если нажимаешь Repair и запускается установка, то там, если нажать отмена чтобы было сообщение.
Автор: Sampron
Дата сообщения: 08.05.2008 15:37
Chanka
Ну ты даёшь!

procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:=True
if RepairButton.Visible = True then
Confirm:=False
else
Confirm:=True
end;
Автор: Chanka
Дата сообщения: 08.05.2008 15:46
Sampron

Спасибо!

Если тебе нужно потом могу скинуть тебе одну интересную библиотеку. Типа InnoCallBack, но только лучше и более функциональную. Но только когда сам её получу
Автор: Diawer
Дата сообщения: 08.05.2008 15:59
Есть вопрос, в программе два языка английский и русский, сделал [more=сообщение]

Русский вариант
[Code]
const
MB_ICONINFORMATION = $40;
MB_ICONEXCLAMATION = $30;
MB_ICONQUESTION = $20;
MB_ICONSTOP = $10;
MB_ICONNONE = $0;

function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer;
external 'MessageBoxA@user32.dll stdcall';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if (CurUninstallStep=usPostUninstall) and DirExists(ExpandConstant('{userappdata}\TranslateIt6.5')) then
if MessageBox(0, 'Вы хотите удалить настройки программы?',
'Удаление TranslateIt!', MB_ICONINFORMATION or mb_YesNo) = IDYES then
begin
DelTree(ExpandConstant('{userappdata}\TranslateIt6.5'), True, True, True);
end;
end;
-------------------------------------------------------

Английский вариант
const
MB_ICONINFORMATION = $40;
MB_ICONEXCLAMATION = $30;
MB_ICONQUESTION = $20;
MB_ICONSTOP = $10;
MB_ICONNONE = $0;

function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer;
external 'MessageBoxA@user32.dll stdcall';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if (CurUninstallStep=usPostUninstall) and DirExists(ExpandConstant('{userappdata}\TranslateIt6.5')) then
if MessageBox(0, 'Are you want remove program settings?',
'TranslateIt! Uninstall', MB_ICONINFORMATION or mb_YesNo) = IDYES then
begin
DelTree(ExpandConstant('{userappdata}\TranslateIt6.5'), True, True, True);
end;
end;[/more] на удаление, подскажите как сделать, что бы в зависимости от языка менялись две строчки

if MessageBox(0, 'Вы хотите удалить настройки программы?',
'Удаление TranslateIt!', MB_ICONINFORMATION or mb_YesNo) = IDYES then
Автор: Chanka
Дата сообщения: 08.05.2008 16:14
Diawer

Может так:

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

[CustomMessages]
english.Text=Are you want remove program settings?
english.Text2=TranslateIt! Uninstall
russian.Text=Вы хотите удалить настройки программы?
russian.Text2=Удаление TranslateIt!

[Code]
const
MB_ICONINFORMATION = $40;
MB_ICONEXCLAMATION = $30;
MB_ICONQUESTION = $20;
MB_ICONSTOP = $10;
MB_ICONNONE = $0;

function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer;
external 'MessageBoxA@user32.dll stdcall';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if (CurUninstallStep=usPostUninstall) and DirExists(ExpandConstant('{userappdata}\TranslateIt6.5')) then
if MessageBox(0, ExpandConstant ('{cm:Text}'),
ExpandConstant ('{cm:Text2}'), MB_ICONINFORMATION or mb_YesNo) = IDYES then
begin
DelTree(ExpandConstant('{userappdata}\TranslateIt6.5'), True, True, True);
end;
end;
Автор: Sampron
Дата сообщения: 08.05.2008 16:14
Chanka
Последний мой пост (код) выдаёт ошибку при отмене если игра не установлена, пока не используй попробую разобратся.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Поиск в WinDjView


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