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

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

Автор: omals
Дата сообщения: 12.12.2008 13:47
GRom V
ну тогда создай себе BAT файл с одной строкой
start /w pkgmgr /iu:"TelnetClient"
и запусти его
Автор: ExpeditorR
Дата сообщения: 12.12.2008 13:49
htuos

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

Если ты имеешь ввиду чтобы в gif вырезался цвет фона и было видно рабочий стол, то это нереально (для меня), а если просто фон, то как ни странно перепробовал кучу gif и везде фон прозрачный.

Цитата:
1. а чем плохо использование GDI+? если только отсутствие этой dll в Win2K и более ранних

Совершенно верно.

Ну, подумаешь у меня большой размер dll вышел, зато с уверенностью могу сказать,что работает на всех Виндах выше win95, и это я думаю плюс.
Цитата:
2.я так понимаю, что с таймером возиться что на апи, что с вцл, если только ты сторонние компоненты не используешь, в которых это уже реализовано
На VCL гораздо проще. Из сторонних компонент только gif и png
Цитата:
в шапке есть ссылка на GameScript Generator, в нем что-то подобное реализовано
Тамашняя dll работает только с bmp.

Но это всё ерунда, я сегодня закончил писать новую is7z.dll - с помощью неё можно распаковывать 7zip архивы с отображением прогресс бара в окне Inno Setup, этого многие хотели увидеть. Вот ещё чуток потестирую и выложу.

З.Ы.
Может кто знает как получить Handle самого inno, а то wizardform.handle и mainform.handle меня не устраивает, нужно типа Application.handle.
Автор: Aion13
Дата сообщения: 12.12.2008 14:01
noiseless
Вот смотри какие должны быть действия:
1) создай папку base. В ней создай ещё одну папку и ещё одну. (*\base\<папка 1>\<папка 2>)
2) положи в <папку 2> какой-нить файл
3) создай инсталл с бекапом этой папки, т.е. вот так:
[Files]
Source: base\*; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension overwritereadonly;

Установи и посмотри, что в папке Backup будут лежать папки: *\<папка 1>\<папка 2> и они пустые. Но то что они пустые это всё верно, так и должно быть, потомоу что тот файл который ты пихал в <папку 2> не имеется в той директории и по тому пути, куда ты его ставил. Важно то что в бекап создаётся путь до этого файла. А мне нужно сделать, чтобы если этого файла нет, то и в папке не создавался до него этот путь.

Надеюсь сейчас попонятнее будет
Автор: GRom V
Дата сообщения: 12.12.2008 14:03
omals

Цитата:
GRom V
ну тогда создай себе BAT файл с одной строкой
start /w pkgmgr /iu:"TelnetClient"


На это ума много не надо - нужно именно кодом!!!
Автор: htuos
Дата сообщения: 12.12.2008 14:13
ExpeditorR

Цитата:
Тамашняя dll работает только с bmp.

уже нет, просил на апи - получи

Цитата:
Ну, подумаешь у меня большой размер dll вышел, зато с уверенностью могу сказать,что работает на всех Виндах выше win95, и это я думаю плюс.

согласен это плюс

Цитата:
Если ты имеешь ввиду чтобы в gif вырезался цвет фона и было видно рабочий стол, то это нереально (для меня)

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


Aion13

Цитата:
1) Помогите пожалуйста решить такую проблемку: на странице выбора дополнительных компонентов (создание ярлыков и прочее), мне нужно под выбранным компонентом написать свой текст, что-то вроде описания, со своим стилем шрифтом и так далее. Как это осуществить?

ну тут-то вроде совсем просто
[more]
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program

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

[Components]
Name: C; Description: aaaaaa
Name: C\c1; Description: aaaa1; Flags: exclusive; Types: full compact
Name: C\c2; Description: aaaa2; Flags: exclusive
Name: C\c3; Description: aaaa3; Types: full compact

[Code_]
var
MyLabel:TLabel;

procedure InitializeWizard;
begin
WizardForm.ComponentsList.Height:=90;
MyLabel:=TLabel.Create(WizardForm)
with MyLabel do begin
Parent:=WizardForm.SelectComponentsPage; //как пример, в качестве родителя можно поставить любую страницу
Left:=0;
Top:=WizardForm.ComponentsList.Height+WizardForm.ComponentsList.Top+10;
Caption:='asdasdasdasdasdasd'+#10#13+'sdfsadfsdfsadf'
with Font do begin
Size:=12;
Color:=clBlue;
Name:='Verdana';
end;
end;
end;[/more]
Автор: Aion13
Дата сообщения: 12.12.2008 14:24
htuos
Так это же вроде будет на странице, которая идёт до выбора директории установки? Просто WizardForm.SelectComponentsPage это компоненты, которые выбираются до пути. А мне нужна страница, идущая следом за указанием пути установки, где указываются ярлыки и прочее, т.е. дополнительные возможности (заранее извинюсь если неправильно ранее написал страницу возможностей). Как тогда будет выглядеть код?
И мне просто нужно чтобы текст был прямо под компонентом, типо описания или предостережения (где галочку, допустим ставишь и прям под ним)
Автор: htuos
Дата сообщения: 12.12.2008 14:47
Aion13

Цитата:
htuos
Так это же вроде будет на странице, которая идёт до выбора директории установки? Просто WizardForm.SelectComponentsPage это компоненты, которые выбираются до пути. А мне нужна страница, идущая следом за указанием пути установки, где указываются ярлыки и прочее, т.е. дополнительные возможности (заранее извинюсь если неправильно ранее написал страницу возможностей). Как тогда будет выглядеть код?
И мне просто нужно чтобы текст был прямо под компонентом, типо описания или предостережения (где галочку, допустим ставишь и прям под ним)

ну написал же в коментах можно подставить любую страницу
[more]procedure InitializeWizard;
begin
WizardForm.TasksList.Height:=150;
with TLabel.Create(WizardForm) do begin
Parent:=WizardForm.SelectTasksPage;
Left:=0;
Top:=200;
Caption:='asdasdasdasdasdasd'+#10#13+'sdfsadfsdfsadf'
with Font do begin
Size:=12;
Color:=clBlue;
Name:='Verdana';
end;
end;
end;[/more]
Автор: Aion13
Дата сообщения: 12.12.2008 14:53
htuos
Спасибо! А по 4 и 6 пунктам отсюда ничего не знаешь? А то очень нужно.

p.S. Если б не был тапком в этом деле делал бы всё сам
Автор: ExpeditorR
Дата сообщения: 12.12.2008 14:53
htuos
Ёперный театр, так ты South автор GameScript Generator

Цитата:
уже нет, просил на апи - получи

Спасибо
Цитата:
именно это и имел в виду. на самом деле есть подозрение, что это реально, вот только повозиться с этим надо будет. как вариант рассчитать регион для каждого кадра заранее, потом применять его во время отрисовки. правда не знаю как на скорость это повлияет, пробовать надо

Об этом я тоже думал, но для этого надо знать устройство gif файла, у меня этим заниматься нет времени, так что вся надежда на тебя!

Вопрос по твоей isgsg.dll, если ею воспользоваться в win98 и она понятное дело не найдёт gdi+, то как она себя поведёт, ну в смысле есть проверка на это дело и обход исключительной ситуации? если да, то супер, если нет, то сделай.

Автор: Dermuin
Дата сообщения: 12.12.2008 15:01
skeptik_vdm
Как сделать расспаковку ARC или других архивов с одображением в прогрессбаре с разделением прогрессбара на две части как на моих сринах на предыдущих сраницах.
Автор: htuos
Дата сообщения: 12.12.2008 15:17
ExpeditorR

Цитата:
Ёперный театр, так ты South автор GameScript Generator

а что не похож?

Цитата:
Вопрос по твоей isgsg.dll, если ею воспользоваться в win98 и она понятное дело не найдёт gdi+, то как она себя поведёт, ну в смысле есть проверка на это дело и обход исключительной ситуации? если да, то супер, если нет, то сделай.

если винда младше WinXP, то просто будет Exit, т.е. инстал начнется без сплэша. это в первом посте написано. можно еще влепить тупую проверку на наличие gdiplus.dll рядом с isgsg.dll (типа распаковали обе в Temp), если нету, то Exit, если есть, то забиваем на версию винды и показываем сплэш. вот только я не знаю работает ли gdi+ в Win9x, проверить не на чем.

Цитата:
Об этом я тоже думал, но для этого надо знать устройство gif файла, у меня этим заниматься нет времени, так что вся надежда на тебя!

вот я структуру gif'а я как раз и не знаю
но чтобы что-то посоветовать надо видеть твой код, может и без знаний структуры файла можно обойтись
а разбираться в полной структуре гифа у меня тоже времени особо нету, да и желания если честно
Aion13

Цитата:
Спасибо! А по 4 и 6 пунктам отсюда ничего не знаешь? А то очень нужно.

по п.6

Цитата:
[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.

по п.4 я не очень понял в чем проблема
недавно выкладывал пример копирования файлов Ссылка. посмотри может поможет
Автор: Aion13
Дата сообщения: 12.12.2008 16:01
htuos
Так по пункту 4.
Попробуй создать инсталл вот с таким кодом: [more][Code]
function MoveFile(const srcFile, destFile: PChar): Integer;
external 'MoveFileA@kernel32.dll stdcall';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
MoveDir(ExpandConstant('{app}\Install_DM\Backup\'),ExpandConstant('{app}'));
RemoveDir(ExpandConstant('{app}\Install_DM\Backup\'));
RemoveDir(ExpandConstant('{app}\Install_DM'))
end;
end;

procedure CreateBackup;
var
srcFile, destFile: string;
basePath, shortPath: string;
begin
basePath:= ExpandConstant('{app}');
srcFile:= ExpandConstant(CurrentFileName);
shortPath:= srcFile;
StringChangeEx(shortPath, basePath, '', True);
destFile:= ExpandConstant('{app}\Install_DM\Backup') + shortPath;
ForceDirectories(ExtractFilePath(destFile));
MoveFile(PChar(srcFile), PChar(destFile));
end; [/more]

Вот по такому принципу: [more]Вот смотри какие должны быть действия:
1) создай папку base. В ней создай ещё одну папку и ещё одну. (*\base\<папка 1>\<папка 2>)
2) положи в <папку 2> какой-нить файл
3) создай инсталл с бекапом этой папки, т.е. вот так:
[Files]
Source: base\*; DestDir: "{app}"; BeforeInstall: CreateBackup; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension overwritereadonly;

Установи и посмотри, что в папке Backup будут лежать папки: *\<папка 1>\<папка 2> и они пустые. Но то что они пустые это всё верно, так и должно быть, потомоу что тот файл который ты пихал в <папку 2> не имеется в той директории и по тому пути, куда ты его ставил. Важно то что в бекап создаётся путь до этого файла. А мне нужно сделать, чтобы если этого файла нет, то и в папке не создавался до него этот путь.

Надеюсь сейчас попонятнее будет[/more]

И скажи как это дело исправить пожалуйста...

А теперь возвращаясь к странице доп. задач и составления описания к пунктам.
Вот такой глюк у меня получается: http://s59.radikal.ru/i166/0812/64/85b7534d4033.jpg
Cловно изображение чего-то наезжает на текст и он обрубается.
Как его исправить?

И ещё: как убрать сообщение, выскакивающее при выборе пути установки: "Папка <название> уже существует. Всё равно продолжить установку?"

p.S Прости что так завалил тебя вопросами. Очень неудобно тревожить знающих людей и признавать своё бессилие и безграмотность.
Автор: ExpeditorR
Дата сообщения: 12.12.2008 16:02
Dermuin
и другие.
Встречайте Is7z.dll
is7z.dll v1.0
Библиотека для распаковки 7zip архивов с отображением прогресс бара в окне Inno Setup. Описание и примеры использования находятся в архиве. Скачать

p.s.
is7z.dll я написал только сегодня, поэтому о глюках почти ничего не знаю, если что пишите.
Огромная просьба к тем у кого Vista, напишите как ведёт себя моя dll.
Автор: Aion13
Дата сообщения: 12.12.2008 16:04
ExpeditorR
А можно смысл и принцип действия поподробнее описать?
Автор: crank666
Дата сообщения: 12.12.2008 16:05
Почти со всем разобрался, осталось изменить иконку в правом верхнем углу у деинсталлятора! - походу тут никто ненает как.
И подскажите как создать иконку в "Панели быстрого запуска" ?
Автор: Aion13
Дата сообщения: 12.12.2008 16:09
crank666

1) Иконка в правом верхнем углу:

[Setup]
WizardSmallImageFile=icon.bmp

2) Значок в панели быстрого запуска:

[Tasks]
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked

[Icons]
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\"; Filename: "{app}\My prog.exe"; WorkingDir: {app}; IconFilename: {app}\quicklaunch.ico; Tasks: quicklaunchicon;
Автор: noiseless
Дата сообщения: 12.12.2008 16:14
ExpeditorR
Пасибки! Пригодится, само собой
Если бы еще другие архиваторы добавить...
Автор: Dermuin
Дата сообщения: 12.12.2008 16:27
ExpeditorR
А распаковку ARC не как нельзя прикрутить?
Автор: htuos
Дата сообщения: 12.12.2008 16:31
ExpeditorR

Цитата:
Может кто знает как получить Handle самого inno, а то wizardform.handle и mainform.handle меня не устраивает, нужно типа Application.handle.

ищем примеры в шапке
например,

Код: Procedure SetAppTitle(Value: String);
var n: HWND;
begin
n:=GetWindowLong(MainForm.Handle, -8);
if n <> 0 then SetWindowText(n, PChar(Value));
end;
Автор: crank666
Дата сообщения: 12.12.2008 16:53
Aion13
2) Спасиба

1) У меня эта иконка показывается в инсталляторе
[Setup]
WizardSmallImageFile=icon.bmp

а мне нада в деинсталляторе, я на 91стр. выложил картинку.
Автор: Sig666
Дата сообщения: 12.12.2008 16:56
Еще бы для rar такую dllку ^^
Автор: Zloy_Gelud
Дата сообщения: 12.12.2008 17:00
ExpeditorR
Отличная либа.
А можно добавить, чтоб в качестве параметра можно было бы и пароль к архиву указывать?

Добавлено:
Sig666
OFF. А зачем для RAR'a еще? Чем .7z не устраивает?
Автор: Aion13
Дата сообщения: 12.12.2008 17:08
htuos
Ну что, поможешь на счёт этого
Автор: ExpeditorR
Дата сообщения: 12.12.2008 17:20
Насчёт других архивов это конечно можно, и rar, zip, cab, но тут я согласен со Zloy_Gelud, 7zip жмёт лучше какой смысл в остальном, в конце концов можно и inno запаковать допустим вместо rar.

Zloy_Gelud

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

Хорошая идея, что-то я сразу не сообразил, сделаем.

htuos

Цитата:
вот это действительно полезная dll будет. если конечно она автономная будет.

dll сама по себе, и ни от кого не зависит.


Цитата:
если винда младше WinXP, то просто будет Exit, т.е. инстал начнется без сплэша. это в первом посте написано. можно еще влепить тупую проверку на наличие gdiplus.dll рядом с isgsg.dll (типа распаковали обе в Temp), если нету, то Exit, если есть, то забиваем на версию винды и показываем сплэш. вот только я не знаю работает ли gdi+ в Win9x, проверить не на чем.
Проверки винды думаю достаточно. Посмотрел твою обновлённую isgsg.dll, отличная работа!

Автор: omals
Дата сообщения: 12.12.2008 17:22
GRom V

Цитата:
На это ума много не надо - нужно именно кодом!!!

ну так передавай cmd команду
смотрим cmd /?

strTmp:='/K start /w pkgmgr /iu:' + '"' + 'TelnetClient' + '"';
//или strTmp:='/C start ...
// закрывать окно cmd после выполнения /С, не закрывать /K
Exec('cmd.exe', strTmp, '', SW_SHOW, ewWaitUntilTerminated, res);

ум тот же
Автор: ExpeditorR
Дата сообщения: 12.12.2008 17:25
Aion13

Цитата:
А можно смысл и принцип действия поподробнее описать?


Скачай архив, там есть примеры.Скачать
Автор: htuos
Дата сообщения: 12.12.2008 17:36
Aion13

Цитата:
А теперь возвращаясь к странице доп. задач и составления описания к пунктам.
Вот такой глюк у меня получается: http://s59.radikal.ru/i166/0812/64/85b7534d4033.jpg
Cловно изображение чего-то наезжает на текст и он обрубается.
Как его исправить?

у тебя TasksList закрывает твой Label
либо уменьшай высоту TasksList - WizardForm.TasksList.Height:= . . .
либо опускай ниже свой Label. в примере Top:= . . .


Цитата:
И ещё: как убрать сообщение, выскакивающее при выборе пути установки: "Папка <название> уже существует. Всё равно продолжить установку?"

вот это не знаю, надо хэлп ковырять, может там что-то написано
Автор: Diawer
Дата сообщения: 12.12.2008 17:58
У меня на странице выбора дополнительных задач (wpSelectTasks) вставлено небольшое изображение, вот вопрос в том, как можно сделать прозрачным указанный цвет (у меня это #E2E2E2 – фон изображения) или дайте наводочку, где посмотреть.
Автор: clemenco
Дата сообщения: 12.12.2008 18:05
ExpeditorR
is7z.dll v1.0
В Vista работает отлично. А можно пример, как встраивать его в инсталятор Kindly или в Vista Lite Skin.
Я для своего инсталятора испльзовал часть скрипта от инсталятора Kindly. Теперь не знаю как использовать в ней ваш код.

Скрипт работает, но не видно прогресс бара.
Автор: htuos
Дата сообщения: 12.12.2008 18:05
ExpeditorR
пожалуй еще раз покритикую, теперь is7z.dll без обид
1. как уже сказали, пароль в параметры нужно обязательно
2. вот от этого

Цитата:
function WrapTimerProc(callback:TProc; paramcount:integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';
function progress:integer; external 'progress@files:is7z.dll stdcall';
function progressmax:integer; external 'progressmax@files:is7z.dll stdcall';

можно запросто избавиться. я бы даже сказал нужно

в качестве предложения:
передавать в процедуру распаковки хэндлы TNewStaticText и TNewProgressBar и в самой процедуре выводить в StaticText распаковываемый файл, и в процедуре менять позицию ProgressBar.
вот тогда будет просто отлично

вообще, если ты полностью контролируешь процесс распаковки, то из свой dll можешь много инфы выводить на форму - % распаковки, текущий распаковываемый файл, еще один прогресс бар для отображения распаковки текущего файла и т .д., правда это может уже лишнее, вобщем здесь подумать надо

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

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


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