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

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

Автор: Cover_Story
Дата сообщения: 14.03.2008 13:07
Всем доброго!!! Не могу поменять цвет фона подскажите как? Цвет шрифта выбираю следующим образом:

If CurPageID = wpWelcome then
WizardForm.WelcomeLabel2.Font.Color:= clRed;
Автор: Sampron
Дата сообщения: 14.03.2008 13:55
Cover_Story
WizardForm.WelcomeLabel2.Color:=clGreen
Автор: Cover_Story
Дата сообщения: 14.03.2008 15:49
Sampron

К сожалению закрашивается не вся белая сторона, а только блок. Хотелось бы чтобы вся белая часть была закрашена.
Автор: Sampron
Дата сообщения: 14.03.2008 16:01
Cover_Story
Тогда так:

procedure InitializeWizard();
begin
with WizardForm do
with OuterNotebook do
with WelcomePage do
Color:=clGreen
end;
Автор: Diawer
Дата сообщения: 14.03.2008 18:25
noiseless

Цитата:
В секции [Setup] см. параметр SetupIconFile

В том то всё и дело, что иконка меняеться везде даже деинсталляторе, что мне не надо.
Автор: Genri
Дата сообщения: 14.03.2008 19:36
Kindly

Цитата:
Есть dll для проигрывания формата YM для ZX Spectrum
.........
Вообще реально реализовать это в Inno?

Код:
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Files]
Source: YM_Player.dll; Flags: dontcopy
Source: test.ym; Flags: dontcopy

[Code]
var
str: string;

procedure YM_Play(ptr: DWORD; Volume: Integer; MixerMode: Integer);
external 'YM_Play@files:YM_Player.dll stdcall';

procedure InitializeWizard();
begin
ExtractTemporaryFile('test.ym');

LoadStringFromFile(ExpandConstant('{tmp}\test.ym'), str);
YM_Play(CastStringToInteger(str), 250, 6);
end;
Автор: Diawer
Дата сообщения: 14.03.2008 19:39
Есть вопрос, это [more=дополнительный чекбокс ]procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usPostUninstall then
begin
if DirExists(ExpandConstant('{app}\save')) then
begin
if MsgBox('Удалить персонажи и игровые сохранения?',mbconfirmation, mb_yesno) = IDYES then
begin
DelTree(ExpandConstant('{app}\save'), True, True, True);
RemoveDir(ExpandConstant('{app}'));
end;
end;
end;
end;[/more] с вопросом на удаление.
Как изменить текст в шапке окна, то есть в самом самом верху, там написано просто
(Деинсталляция), нужно (Деисталляция приложения)

Автор: elapse
Дата сообщения: 14.03.2008 20:02
Diawer
Чекбокс? Хм... [more=Подробнее]
[no]
[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('{app}\save')) then
if MessageBox(0, 'Удалить персонажи и игровые сохранения?',
'Деинсталляция приложения', MB_ICONINFORMATION or mb_YesNo) = IDYES then
begin
DelTree(ExpandConstant('{app}\save'), True, True, True);
RemoveDir(ExpandConstant('{app}'));
end;
end;
[/no]
[/more]
Автор: Sig666
Дата сообщения: 14.03.2008 22:38
Есть такой [more=код]
var
FreeSpaceLabel: TLabel;

Procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: string;
FreeMB, TotalMB: Cardinal;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
begin
FreeSpaceLabel.Caption:='Свободно на выбранном диске: '+ floatToStr(round(FreeMB/1024*100)/100) + ' GB'
end
else FreeSpaceLabel.Caption:='Свободно на выбранном диске: '+ + IntToStr(FreeMB)+' MB';
end;

procedure InitializeWizard();
begin
WizardForm.DiskSpaceLabel.Hide
begin
FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(216);
Width := ScaleX(209);
Height := ScaleY(13);
end;
end;
end;[/more]

По идее от должен снизу страницы показывать кол-во свободного места на выбранном диске, но работать не хочет ни в какую. Подскажите, что не так
Автор: elapse
Дата сообщения: 14.03.2008 22:59
Sig666

Цитата:
работать не хочет ни в какую

И правильно делает. [more=Подробнее]
[no]
[Code]
var
FreeSpaceLabel: TLabel;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
FreeMB, TotalMB: Cardinal;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + IntToStr(FreeMB)+ ' MB';
end;

procedure InitializeWizard();
begin
WizardForm.DiskSpaceLabel.Hide;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(216);
Width := ScaleX(209);
Height := ScaleY(13);
end;

WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;
[/no]
[/more].
Автор: Sig666
Дата сообщения: 15.03.2008 01:41
elapse

спасибо! Выручил

Еще вопросец. Есть чекбокс на wpSelectDir, отвечающий за некий компонент для которого нужно дополнительно n места. Как бы сообразить, чтоб при отметке этого чекбокса к NeedSize прибавлялось заданное кол-во мб?

Вот [more=код]const
NeedSize = 3700;

var
NeedSpaceLabel,FreeSpaceLabel: TLabel;
FreeMB, TotalMB: Cardinal;
Comp1,Comp2: TCheckBox;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + IntToStr(FreeMB)+ ' MB';
begin
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=false;
end else
WizardForm.NextButton.Enabled:=true;
end;
end;

procedure InitializeWizard();
begin
WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(198);
Width := ScaleX(209);
Height := ScaleY(13);
Caption := 'Требуется для установки: xxx GB';
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(216);
Width := ScaleX(209);
Height := ScaleY(13);
end;

Comp2 := TCheckBox.Create(WizardForm);
with Comp2 do
begin
Parent := WizardForm.SelectDirPage;
Caption := '1';
Left := ScaleX(0);
Top := ScaleY(136);
Width := ScaleX(97);
Height := ScaleY(17);
TabOrder := 1;
end;

Comp1 := TCheckBox.Create(WizardForm);
with Comp1 do
begin
Parent := WizardForm.SelectDirPage;
Caption := '2';
Left := ScaleX(0);
Top := ScaleY(160);
Width := ScaleX(97);
Height := ScaleY(17);
TabOrder := 0;
end;

WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectDir then
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled:=False
end;
end;
[/more]
Автор: Cover_Story
Дата сообщения: 15.03.2008 11:58
Sampron

Спасибо большое! Разобрался! В общем моя строка выглядит так:
WizardForm.WelcomePage.Color:=clTeal;
Автор: elapse
Дата сообщения: 15.03.2008 13:13
Sig666, [more=подробнее][no]
[Code]
const
Comp1Size = 100;
Comp2Size = 200;

var
FreeMB, TotalMB: Cardinal;
NeedSize: Integer;
NeedSpaceLabel, FreeSpaceLabel: TLabel;
Comp1, Comp2: TCheckBox;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;

begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);

if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption := 'Свободно на выбранном диске: ' + IntToStr(FreeMB)+ ' MB';

if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False
else
WizardForm.NextButton.Enabled := True;
end;

procedure Comp1OnClick(Sender: TObject);
begin
if Comp1.Checked then
NeedSize := NeedSize + Comp1Size
else
NeedSize := NeedSize - Comp1Size;

NeedSpaceLabel.Caption := 'Требуется для установки: ' + IntToStr(NeedSize) + ' MB';

if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False
else
WizardForm.NextButton.Enabled := True;
end;

procedure Comp2OnClick(Sender: TObject);
begin
if Comp2.Checked then
NeedSize := NeedSize + Comp2Size
else
NeedSize := NeedSize - Comp2Size;

NeedSpaceLabel.Caption := 'Требуется для установки: ' + IntToStr(NeedSize) + ' MB';

if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False
else
WizardForm.NextButton.Enabled := True;
end;

procedure InitializeWizard();
begin
NeedSize := 0;
WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(198);
Width := ScaleX(209);
Height := ScaleY(13);
Caption := 'Требуется для установки: ' + IntToStr(NeedSize) + ' MB';
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(216);
Width := ScaleX(209);
Height := ScaleY(13);
end;

Comp1 := TCheckBox.Create(WizardForm);
with Comp1 do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Component 1';
Left := ScaleX(0);
Top := ScaleY(136);
Width := ScaleX(97);
Height := ScaleY(17);
TabOrder := WizardForm.DirBrowseButton.TabOrder + 1;
OnClick := @Comp1OnClick;
end;

Comp2 := TCheckBox.Create(WizardForm);
with Comp2 do
begin
Parent := WizardForm.SelectDirPage;
Caption := 'Component 2';
Left := ScaleX(0);
Top := ScaleY(160);
Width := ScaleX(97);
Height := ScaleY(17);
TabOrder := Comp1.TabOrder + 1;
OnClick := @Comp2OnClick;
end;

WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;
[/no][/more]
Автор: Snake193
Дата сообщения: 15.03.2008 18:02
Здравствуйте!
Давно уже пытаюсь решить два вопроса, но самому, не зная программирования, сложновато как то осилить это.

1) Требуется встроить в инсталлятор распаковку из RAR архива через библиотеку unrar.dll, с отображением путей/имен распаковываемых файлов на странице установки на компоненте FilenameLabel и показа прогрессбара, а при отмене установки удаление распакованных файлов.
2) Нужно перепаковать Command & Conquer The First Decade, чтобы во время установки запускались программы для ввода серийника (*_code.exe) также, как это сделано в InstallShield. Выкопал из экзешника одной такой программы ключ -landID:1033 (1049 и тд) для изменения языка программы.
Установка должна быть по такому сценарию:
а) окно приветствия;
б) при нажатии на кнопку "Next >" форма блокируется и запускается "*_code.exe";
в) серийник введен, нажимаем в этой программе "Next >" она закрывается и инсталлятор переключается на следующий диолог;
г) или, если в этой программе нажимаем кнопку "Cancel", сама программа закрывается, и закрывается также "коренное" окно инсталлятора.

Пока писал, возник еще вопрос - возможно ли использовать в Inno вместо WizardImage и WizardSpallImage или проигрывать в фоновом окне Flash, причем, чтобы не требовалась библиотека в "WINDOWS\sistem32".

Спасибо!
Автор: SiberianGRemlin
Дата сообщения: 15.03.2008 19:31
Здравствуйте! Есть два вопроса:
1. Можно ли просто добавить объект (кнопку и.т.п.) на стандартную форму установщика без переписывания всего кода формы? Или где взять\посмотреть код для программы установки, используемый по умолчанию?
2. Можно ли в раздел SETUP в переменную DefaultDirName передавать значение, полученное функцией из раздела CODE? Придётся переделывать форму выбора папки под себя или есть способ проще?

Добавлено:
Прошу прощения за беспокойство, решение первого вопроса нашёл на одной из страниц старой темы. Второй вопрос ещё актуален.
Автор: elapse
Дата сообщения: 15.03.2008 20:12
SiberianGRemlin, всё просто:
DefaultDirName={code:...}, где вместо многоточия функция из секции [no][Code][/no]. Подробное описание - в Helpe.
Автор: SiberianGRemlin
Дата сообщения: 15.03.2008 20:47
Говорит "Invalid Prototype". Выдержка:
Код:
[Code]
function GetTDPath: string;
var f:string;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Westwood\Command & Conquer Windows 95 Edition','InstallPath', f);
result:=ExtractFileDir(f);
end;

[Setup]
DefaultDirName={code:GetTDPath}
Автор: elapse
Дата сообщения: 15.03.2008 21:13
SiberianGRemlin, было сказано:

Цитата:
Подробное описание - в Helpe.

Программа не виновата в Вашей невнимательности:

Код: function GetTDPath(Param: String): String;
Автор: SiberianGRemlin
Дата сообщения: 15.03.2008 23:47
elapse
Мне как-то в голову не пришло, что у объявляемых функций д.б. обязательный параметр, особенно если учесть, что заявлена поддержка некого подобия Паскаля, да и системные функции IS есть с параметром и без.

Последний вопрос: на этапе выбора папки назначения, через конопочку изменения папки, папка меняется, но программа усердно добавляет в конец название крайней папки. Это как-то отключается\лечится?
Автор: htuos
Дата сообщения: 16.03.2008 00:55
SiberianGRemlin
[Setup]: AppendDefaultDirName
Valid values: yes or no
Default value: yes

Description:
By default, when a folder in the dialog displayed by the Browse... button on the Select Destination Location wizard page is clicked, Setup automatically appends the last component of DefaultDirName onto the new path. For example, if DefaultDirName is {pf}\My Program and "Z:\" is clicked, the new path will become "Z:\My Program".

Setting this directive to no disables the aforementioned behavior. In addition, it causes a Make New Folder button to appear on the dialog.
Автор: Victor_Dobrov
Дата сообщения: 16.03.2008 01:56
Corona Skin & Check System Requirements (380 Кб в архиве) - расширение инсталлятора Inno Setup.

Устранил ошибку с ErrorMessage. Но теперь для сборки нужен Inno Setup QuickStart Pack не ниже 5.2.3.
Деинсталлятор поддерживает Custom Messages, а препроцессор функцию GetMD5OfString.

P.S. старый скрипт можно скачать здесь или здесь.
Автор: Diawer
Дата сообщения: 17.03.2008 05:30
elapse, спасибо тебе за очередную помошь, ты реально помогаешь. Спасибо.


Добавлено:
Есть ещё такой вопрос, возможно сделать что бы инсталлятор после установки менял
содержимое config.txt в зависимости от выбранного языка, там есть такая строчка
Language=Eng на Language=Rus.
Очень надо.
Автор: elapse
Дата сообщения: 17.03.2008 11:02
Diawer, можешь привести пример самого файла, если не секрет? Я думаю, всё легко делается через TFileStream.
Автор: vimvim
Дата сообщения: 17.03.2008 16:10
Помогите пожалуйста разобраться с InnoSetup Upgrade, возникли следующие трудности:

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

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;
if CurPageID = UnInstallPage.ID then begin
Result:= true; RegQueryStringValue(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppName")}_is1', 'UninstallString', VolumeName)
if UnChoice[0].Checked then
if not Exec(RemoveQuotes(VolumeName), '/NORESTART', '', sw_ShowNormal, ewWaitUntilTerminated, errCode) or (errCode <> 0) then
if not WizardSilent then MessageBox(0, ExpandConstant('{cm:ErrorUninstall}'), '{#SetupSetting("AppName")}', MB_OK or $10)
if UnChoice[1].Checked then Exec('explorer', ExpandConstant('{reg:HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppName")}_is1,InstallLocation}'),'', sw_Show, ewNoWait, errCode);
end;
End;
Автор: dron0000
Дата сообщения: 17.03.2008 16:39
Мне нужно чтобы инсталятор делал следующие: при начале инсталяции после подтверждения лицензии пользователю выдавался выбор между 2-х вариантов установки(Локальная и Сетевая). После того как пользователь выберет вариант установки ему нужно будет отметить компоненты установки. (компоненты установки при выборе должны быть либо только для первого либо только для второго варианта установки). После того как пользователь выбрал компоненты необходимо если выбран определенный компонент запускать bat файл который устанавливает другую программу.
Как это реализовать?
Автор: Diawer
Дата сообщения: 17.03.2008 17:54
elapse, да конечно, файл config.txt открывается обычным Блокнотом, содержимое

[Language]
Language=Rus
[HotKey]
NEW=-1
MANAGER=-1
[Manager]
Sort=0
Page=0


Добавлено:
В программе 5 языков, меняется строчка Language=Rus соответственно на Language=Eng,
Language=Ger и т.д.
Автор: elapse
Дата сообщения: 17.03.2008 19:31
Diawer

Цитата:
Я думаю, всё легко делается через TFileStream.

Беру свои слова назад, всё делается ещё легче через [INI], благо файл имеет "удобную" структуру. [more=Подробнее]
[Setup]
AppName=My Program
AppVerName=My Program [Version]
DefaultDirName={pf}\My Program

[Languages]
Name: Eng; MessagesFile: compiler:Default.isl;
Name: Fre; MessagesFile: compiler:Languages\French.isl;
Name: Ger; MessagesFile: compiler:Languages\German.isl;
Name: Rus; MessagesFile: compiler:Languages\Russian.isl;
Name: Spa; MessagesFile: compiler:Languages\Spanish.isl;

[LangOptions]
LanguageCodePage=0

[Files]
Source: config.txt; DestDir: {app};

[INI]
Filename: {app}\config.txt; Section: Language; Key: Language; String: {language};
[/more]. Нужное значение в ключе Language ini-файла подставляется из секции [Languages].
P.S.: языки выбирал на свой вкус, извиняюсь, если не так.
Автор: SiberianGRemlin
Дата сообщения: 17.03.2008 19:49
Пожалуйста, подскажите как изменить размер картинки на завершающем этапе установки (последнее окно). Если для первого окошка всё делается просто (возможно есть отличное от моего правильное решение), то в Помощи ничего полезного для последнего окна ничего нарыть не смог.

Код: Procedure InitializeWizard();
Begin
WizardForm.WizardBitmapImage.Width:=93
WizardForm.WelcomeLabel1.Left:=WizardForm.WelcomeLabel1.Left-50;
WizardForm.WelcomeLabel1.Width:=WizardForm.WelcomeLabel1.Width+50;
WizardForm.WelcomeLabel2.Left:=WizardForm.WelcomeLabel2.Left-50;
WizardForm.WelcomeLabel2.Width:=WizardForm.WelcomeLabel2.Width+50;
Автор: elapse
Дата сообщения: 17.03.2008 19:55
SiberianGRemlin, очень просто :
WizardForm.WizardBitmapImage2.Width := 93;
Надписи - на Ваш вкус.
Автор: Victor_Dobrov
Дата сообщения: 18.03.2008 02:59
vimvim
Цитата:
InnoSetup Upgrade при установке с предварительной деинсталляцией не полностью удаляет файлы.

Это сделано из соображений безопасности. Если надо удалить всё в папке приложения, запустите деинсталлятор отдельно.
Или вот опасный [more=вариант]
Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
Begin
    if CurUninstallStep=usPostUninstall then
    DelTree(ExpandConstant('{app}'), True, True, True)
End;
[/more], удаляющий всё в папке {app} без запроса.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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