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

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

Автор: serg_aka_lain
Дата сообщения: 23.06.2008 23:48
Nekt

Цитата:
А как, использовать, этот код, связать при определенном выборе, компонента.


Примерно так

if IsComponentSelected('имя компоненты') then , Т.Е. если компонента отмечена,
то переходит к выполнению кода.

тут [more]

procedure CurStepChanged(CurStep: TSetupStep);
var
S: String;
begin
If CurStep=ssPostInstall then
begin
if IsComponentSelected('имя компоненты') then
S := ExpandConstant('{commondocs}\STALKER-SHOC\')
StringChangeEx(S, ':\', ':\|', True);
SaveStringToFile(ExpandConstant('{app}')+'\readme.txt', 'max_belt = 24\' + #13, true);
end;
end;

[/more]



Добавлено:
boss911

Цитата:
Помогите "склеить" два кода


[more]

procedure CurStepChanged(CurStep: TSetupStep);
var
FreeMB, TotalMB: Cardinal;

begin
if (CurStep = ssInstall) and GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')) + '\', True, FreeMB, TotalMB) and
(FreeMB < 300) then
begin
MsgBox('Текст сообщения.', mbInformation, mb_Ok);
Abort;
end;

if CurStep = ssPostInstall then
begin
WizardForm.StatusLabel.Caption := 'Текст сообщения.';
DelTree(ExpandConstant('{app}') + '\PackFiles', True, True, True);
DelTree(ExpandConstant('{app}') + '\ResFiles', True, True, True);
DelTree(ExpandConstant('{app}') + '\ResHacker', True, True, True);
DelTree(ExpandConstant('{app}') + '\TempFiles\*.log', False, True, False);
end;
end;

[/more]




Добавлено:
putes

Цитата:
я свободно ручками переименовываю папку Мои документы


[more]

[_Code]

type
TSHFileOpStruct = record
Wnd: HWND;
wFunc: UINT;
pFrom: PChar;
pTo: PChar;
fFlags: Word;
fAnyOperationsAborted: BOOL;
hNameMappings: HWND;
end;

const
FO_RENAME = $0004;
FOF_FILESONLY = $0080;
FOF_ALLOWUNDO = $0040;
FOF_SILENT = $0004;
FOF_NOCONFIRMATION = $0010;

function SHFileOperation(const lpFileOp: TSHFileOpStruct):Integer;
external 'SHFileOperation@shell32.dll stdcall';

function RenameDir(const fromDir, toDir: string): Boolean;
var
fos: TSHFileOpStruct;
_fromDir, _toDir: string;
begin
_fromDir:= RemoveBackslashUnlessRoot(fromDir) + #0#0;
_toDir := RemoveBackslashUnlessRoot(toDir) + #0#0;
fos.wFunc := FO_RENAME;
fos.fFlags := FOF_FILESONLY or FOF_ALLOWUNDO or
FOF_SILENT or FOF_NOCONFIRMATION;
fos.pFrom := PChar(_fromDir);
fos.pTo := PChar(_toDir);
Result := (0 = ShFileOperation(fos));
end;


procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssInstall then
begin
RenameDir(ExpandConstant('{userdocs}'), ExpandConstant('{%userprofile}\My Documents\'));
end;
end;

[/more]
Автор: Nekt
Дата сообщения: 24.06.2008 00:48
Спасибо огромное Serg_aka_Lain, а вот про редактирование, можешь подсказать?
Автор: KurtWagner
Дата сообщения: 24.06.2008 00:49
НАРОД!!! ПОЖАЛУЙСТА РАШИТЕ МОЙ ВОПРОС!!! Как сделать так чтоб при установке вместо надписи где пишет путь распаковки сделать свою надпись типа идет расраковка видео роликов... распаковка аудио звуков и т.д. ???
+ Вопрос еще сверху как сделать так чтоб вместо белого фона в инсталлере был рисунок или свой цвет!!! ??? заранее спасибо!!!
и
как пользоваться файлом config.ini чнрнз инсталлер???
Автор: Nekt
Дата сообщения: 24.06.2008 01:14
Что ты хочешь сделать с ним, и как испольовать? т.е. твой мысли о твоих действиях по направлению config.ini.
Автор: serg_aka_lain
Дата сообщения: 24.06.2008 01:14
Nekt


Цитата:
про редактирование, можешь подсказать?


Не уверен, что средствами Inno возможно, если надо модифицировать ".txt", то скорее всего придётся перезаписывать содержимое всего файла.

А с архивами, если в него надо добавить файлы только внешними утилитами.

З.Ы. Внести ясность думаю Genri может.
Автор: KurtWagner
Дата сообщения: 24.06.2008 01:42
Как заставить инсталлер удалить папку при пачтировании файлов (файлы надо не заменить а удалить) + папку тоже
Автор: boss911
Дата сообщения: 24.06.2008 02:11
KurtWagner

Цитата:
Как заставить инсталлер удалить папку

Попробуй начать от сюда читать, возможно там будет ответ.
Автор: serg_aka_lain
Дата сообщения: 24.06.2008 02:34
KurtWagner

Цитата:
НАРОД!!! ПОЖАЛУЙСТА РАШИТЕ МОЙ ВОПРОС!!! Как сделать так чтоб при установке вместо надписи где пишет путь распаковки сделать свою надпись типа идет расраковка видео роликов... распаковка аудио звуков и т.д. ???


Примерно так [more]

[_Files]
Source: Видео.avi; DestDir: {app}; BeforeInstall: ExtractAVI(); Flags: ignoreversion;
Source: Аудио.mp3; DestDir: {app}; BeforeInstall: ExtractWAV(); Flags: ignoreversion;
Source: "Все остальные"; DestDir: "{app}"; BeforeInstall: Extract(); Flags: ignoreversion;


[_Code]

procedure ExtractAVI();
begin
WizardForm.StatusLabel.Caption := 'Распаковка видео...';
end;

procedure ExtractWAV();
begin
WizardForm.StatusLabel.Caption := 'Распаковка аудио...';
end;

procedure Extract();
begin
WizardForm.StatusLabel.Caption := 'Распаковка файлов...;
end;

[/more]


Цитата:
+ Вопрос еще сверху как сделать так чтоб вместо белого фона в инсталлере был рисунок или свой цвет!!! ???


поменять цвет так [more]

procedure InitializeWizard();
begin
WizardForm.WizardSmallBitmapImage.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.MainPanel.Color := clNavy;
end;

[/more]

картинку так (WizardSmallImageFile=картинка.bmp ~ 497 X 58) [more]

procedure InitializeWizard();
begin
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.WizardSmallBitmapImage.Left := ScaleX(0);
WizardForm.WizardSmallBitmapImage.Top := ScaleY(0);
WizardForm.WizardSmallBitmapImage.Width := WizardForm.MainPanel.Width;
WizardForm.WizardSmallBitmapImage.Height := WizardForm.MainPanel.Height;
end;

[/more]


Автор: SotM
Дата сообщения: 24.06.2008 08:09
ChVL

Цитата:
Как это же изобразить в Pascal'e (точнее, реализовать алгоритм), чтобы понял Inno? Подходящий пример не нашёл.

Указатели не реализованы в Inno. Значит так сделать нельзя.

boss911
CustomMessages просто содержат текст. И там нет каких либо параметров. (судя по Хелпу).

Цитата:
Как вставить переменную из секции CustomMessages в Code:

Блин, только недавно это было здесь (на 1-ю страницу можешь глянуть). Не читаем форум?! Зачем одно и тоже каждый раз спрашивать?
MsgBox( ExpandConstant( '{cm:CompleteInstall}' ), mbInformation, mb_Ok );
Я уже не говорю, что можно во всяких исходниках посмотреть как это реализовано. В той же Короне.

Diawer

Цитата:
спасибо за совет, но если я знал бы как это сделать наверное не спрашивал.

Всегда пожалуйста
Например, можешь глянуть в предыдущей части об Inno Setup. Там Forslay писал 22:05 11-11-2007
(прямой ссылки туда у меня нет). Так что ищи
Автор: Genri
Дата сообщения: 24.06.2008 10:50
boss911

Цитата:
препроцессор можно использовать для компиляции дистрибутивов и без его прямого назначение, то есть там, где он использоваться не будет или лучше им пользоваться для компиляции дистрибутивов там где он нужен, как в моем случае?
-- еще раз: вопрос поставлен некорректно. Не зависимо от того, что ты используешь для работы (ISTools, ISPack, Inno Script Generator или любую другую оболочку), компиляцию всегда выполняет Inno Setup. Препроцессор это только дополнение, позволяющее инно понимать дополнительные спец-команды и директивы, которые выполняются в момент компиляции. С установленным препроцессором просто появляются дополнительные возможности. На саму компиляцию это никак не влияет.

Nekt, serg_aka_lain -- [more=Замена строки в файле]
///////////////////////////////////////////////////////////////////////////////
// Find given text in given file, and replace
// complete textline with given text.
// Created: March 27, 2002 by S.T.I.Bracke
// Revised: May 22, 2002 by S.T.I.Bracke
function ReplaceLine(strFilename, strFind, strNewLine: String): Boolean;
var
strTemp : String;
iLineCounter : Integer;
a_strTextfile : TArrayOfString;

begin
{ Load textfile into string array }
LoadStringsFromFile(strFilename, a_strTextfile);

{ Search trough all textlines for given text }
// old line
// for iLineCounter := 1 to High(a_strTextfile) do
// new line corrected by Nikolaus Moll
for iLineCounter := 0 to GetArrayLength(a_strTextfile)-1 do
begin
{ Overwrite textline when text searched for is part of it }
if (Pos(strFind, a_strTextfile[iLineCounter]) > 0) then
a_strTextfile[iLineCounter] := strNewLine;
end;

{ Save string array to textfile (overwrite, no append!) }
SaveStringsToFile(strFilename, a_strTextfile, False);

Result := True;

end;[/more]
Автор: serg_aka_lain
Дата сообщения: 24.06.2008 11:21
Genri

Пример отличный (нужный), раньше бы спросить, а то мучился с перезаписью.
Но похоже Nekt интересуется не только простыми файлами, а что-то типа редактирования других расширений, это без внешних программ возможно?
з.ы. и для чего в примере нужна strTemp.
Автор: Genri
Дата сообщения: 24.06.2008 11:49
serg_aka_lain

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


Добавлено:

Цитата:
что-то типа редактирования других расширений
-- В данном алгоритме, меняется целиком строка. Так что, если файл имеет отдельные строки, то тип файла не важен - будет работать.
Автор: SotM
Дата сообщения: 24.06.2008 11:54

Цитата:
Но похоже Nekt интересуется не только простыми файлами, а что-то типа редактирования других расширений, это без внешних программ возможно?

Этот пример только для текстовых файлов, где можно спокойно менять размер текствого файла, а для бинарных такое не подойдет.
Хотя конечно можно и повозиться с бинарными...

Автор: Genri
Дата сообщения: 24.06.2008 11:57
SotM -- пример чтения и записи в бинарные файлы я приводил где-то ближе к концу предыдущей ветки.
Автор: SotM
Дата сообщения: 24.06.2008 12:17
Genri
угу, я помню как раз мне и еще кому-то другому ты и отвечал
В пред. посте я хотел сказать, что возиться с бинарными файлами придется, если, например, нам нужно в середину файла что-то вставить или же изменить. И размер вносимых изменений может не равняться размеру изменяемого куска файла. Тут уж без временного файла никак не обойтись...
Автор: ExpeditorR
Дата сообщения: 24.06.2008 17:47
Я что-то не понял, неужели у MainForm нет Canvas, хотел на ней нарисовать картинку и фигушки. Может кто знает как на Canvas рисовать.
Автор: adamov3
Дата сообщения: 24.06.2008 18:42
Corona Skin - круто!
Но меня в ней интересует только страница установки, а именно: как сделать отображение прогресса в процентах, подсчет оставшегося времени, подсчет файлов и их объема, прокрутка в отдельном поле информации об обрабатываемом файле.

Скрипт Corona Skin слишком сложен для меня, чтобы отсечь всё лишнее и оставить нужное. Помогите.
Автор: htuos
Дата сообщения: 24.06.2008 18:57
SotM


Цитата:
ChVL


Цитата: Цитата:
Как это же изобразить в Pascal'e (точнее, реализовать алгоритм), чтобы понял Inno? Подходящий пример не нашёл.


Указатели не реализованы в Inno. Значит так сделать нельзя.
Автор: boss911
Дата сообщения: 24.06.2008 19:08
Возможно ли стандартными методами Inno сделать один чекбокс (задачу) для отключения и включения между двумя режимами?

Привожу пример того, что нужно реализовать:

Код: [Tasks]
Name: KEYCheckCopy; Description: Создать лог-файл; GroupDescription: Создать отчет скопированых файлов?; Flags: unchecked

[Run]
Filename: {app}\Install.cmd; WorkingDir: {app}; Parameters: -CheckCopy; StatusMsg: Установка ...; Flags: waituntilterminated; Tasks: KEYCheckCopy
Filename: {app}\Install.cmd; WorkingDir: {app}; StatusMsg: Установка ...; Flags: waituntilterminated; Tasks: NoKEYCheckCopy
Автор: elapse
Дата сообщения: 24.06.2008 19:30
boss911, попробуйте так:

Код:
[Tasks]
Name: KEYCheckCopy; Description: Создать лог-файл; GroupDescription: Создать отчет скопированых файлов?; Flags: unchecked

[Run]
Filename: {app}\Install.cmd; WorkingDir: {app}; Parameters: -CheckCopy; StatusMsg: Установка ...; Flags: waituntilterminated; Check: IsTaskSelected('KEYCheckCopy');
Filename: {app}\Install.cmd; WorkingDir: {app}; StatusMsg: Установка ...; Flags: waituntilterminated; Check: not IsTaskSelected('KEYCheckCopy');
Автор: Genri
Дата сообщения: 24.06.2008 20:16
boss911

Цитата:
...Description: Создать лог-файл
-- задача стоит создать лог ? Использование SetupLogging не подходит ?
Автор: boss911
Дата сообщения: 24.06.2008 20:19
elapse

Цитата:
попробуйте так

Как и ожидал, ругается на:

Код: [Tasks]
Name: KEYCheckCopy; Description: Создать лог-файл; Flags: unchecked

[Run]
Filename: {app}\Install.cmd; WorkingDir: {app}; Parameters: -CheckCopy; StatusMsg: Установка ...; Flags: waituntilterminated; Check: IsTaskSelected('KEYCheckCopy')
Filename: {app}\Install.cmd; WorkingDir: {app}; StatusMsg: Установка ...; Flags: waituntilterminated; Check: not IsTaskSelected('KEYCheckCopy')
Автор: Genri
Дата сообщения: 24.06.2008 20:34
boss911

Цитата:
Как и ожидал, ругается...
-- проверь синтаксис. elapse дал работоспособный скрипт. В параметре Check допускается использование встроенных функций.
Автор: boss911
Дата сообщения: 24.06.2008 20:49
Genri

Цитата:
проверь синтаксис.

Ты как чувствовал. Заместь 'Check' влепил 'Tasks', ступид.

Мужики, спасибо.

Добавлено:
SotM

Цитата:
Зачем одно и тоже каждый раз спрашивать?

А за тем, что у меня нефига не получается!


Код: [CustomMessages]
rus.CompletInstall=Завершение установки
rus.NotDiskSpace='Недостаточно места на диске. Процесс инсталляции будет прерван.

................

MsgBox('{cm:NotDiskSpace}', mbInformation, mb_Ok);
WizardForm.StatusLabel.Caption:='{cm:CompletInstall}';
Автор: elapse
Дата сообщения: 24.06.2008 21:32
boss911
MsgBox(ExpandConstant('{cm:NotDiskSpace}'), mbInformation, mb_Ok);
WizardForm.StatusLabel.Caption:=ExpandConstant('{cm:CompletInstall}');
или
MsgBox(CustomMessage('NotDiskSpace'), mbInformation, mb_Ok);
WizardForm.StatusLabel.Caption:=CustomMessage('CompletInstall');
Автор: SotM
Дата сообщения: 24.06.2008 22:18
boss911

Цитата:
А за тем, что у меня нефига не получается!

Ну вот на твой вопрос ты еще раз получил ответ, теперь от elapse
Внимательным нужно быть!

P.S. Хоть бы имена переменным на английском давал нормальные...
Автор: boss911
Дата сообщения: 24.06.2008 23:45
SotM

Слушай, твоя критика не в ...... не в красную армию, будь попроще, имхо.

Я с Паскалем вообще не дружу, как и с программированием в целом. Для меня код в Паскале, это как высшая математика, проявляй сдержанность к другим.
Автор: Victor_Dobrov
Дата сообщения: 25.06.2008 01:18
adamov3
Цитата:
Скрипт Corona Skin слишком сложен для меня, чтобы отсечь всё лишнее и оставить нужное. Помогите.

В ReadMeRus.rtf есть пример скрипта, подключающего Corona Skin в минимальном варианте.
Автор: SotM
Дата сообщения: 25.06.2008 11:04
ExpeditorR

Цитата:
Я что-то не понял, неужели у MainForm нет Canvas, хотел на ней нарисовать картинку и фигушки. Может кто знает как на Canvas рисовать.

Ты просто хотел картинку вставить на фон? Или что-то другое? Приведи скриншот и/или свой код.
Автор: ExpeditorR
Дата сообщения: 25.06.2008 15:18
SotM
Всё, с canvas разобрался она есть у TBitmapImage.

У меня созрел другой вопрос, я собственно пишу dll на Delphi, но почему-то когда я пытаюсь экспортировать из неё функцию, то возвращается либо пустая строка, либо бред какой-то, либо вообще ошибка, хотя если вызвать эту функцию из программы написаной на том же Delphi, то всё прекрасно работает. Может у кого есть пример написания dll для Inno Setup. Я пытался это сделать стандартным способом, но не помогает. Ниже простенький пример того, что я пытался сделать, почему-то возвращается пустая строка.
[more=вот код моей dll ]
library mes;
uses
SysUtils,
Classes;

{$R *.res}
function mesag(s:pchar):pchar;stdcall;
begin
result:='Это пример';
end;
exports mesag;
begin
end.



а вызываю эту функцию так

function mesag(s:pchar):pchar; external 'mesag@files:mes.dll stdcall';

procedure InitializeWizard();
var
f:pchar;
begin
mesag(f);
MsgBox(f, mbInformation, MB_OK);
end;
[/more]

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Презентация


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