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

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

Автор: serg_aka_lain
Дата сообщения: 29.01.2008 21:00
Chanka

С помощью внешних программ если только. , пример - (PKZIP25 under Windows)
Автор: Chanka
Дата сообщения: 29.01.2008 21:03
serg_aka_lain
А где её можно взять? Подскажи, пожалуйста
Автор: serg_aka_lain
Дата сообщения: 29.01.2008 21:32
Chanka

Через Гугл найти можно, ссылок много
вот _http://www.potolook.ru/filearchiv/func,fileinfo/id,11/
Автор: Chanka
Дата сообщения: 29.01.2008 21:42
serg_aka_lain

Спасибо. Но можешь если не трудно написать примерчик как это должно работать.
Просто я в этом не очень разбираюсь.
Автор: serg_aka_lain
Дата сообщения: 29.01.2008 22:20
Chanka

С помощью Inno копируем файлы или папку, которую надо добавить в архив рядои
с ".pak" из секции Run запускаем pkzip25.exe с нужными параметрами.

-- типа такого
Source: "base\*"; DestDir: "{app}\base"; Flags: ignoreversion recursesubdirs createallsubdirs;
Source: "pkzip25.exe"; DestDir: "{app}"; Flags: ignoreversion;

run
Filename: "{app}\pkzip25.exe"; Parameters: "-add -dir=relative -NoZipExtension -store base.pak base/*.*"; WorkingDir: "{app}";


Автор: Chanka
Дата сообщения: 29.01.2008 22:38
serg_aka_lain

Просто мега респектище
Только еще такой вопрос
Как это окно скрыть? Когда она добавляет файлы.
Автор: serg_aka_lain
Дата сообщения: 29.01.2008 23:01
Chanka

Юзать флаги: runhidden

Можно в StatusMsg добавить "Обработка архива" , и удалить более не нужные файлы (pkzip25.exe , и папку созданую инсталлятором "base".
Автор: Chanka
Дата сообщения: 29.01.2008 23:05
serg_aka_lain

Спасибо тебе большучее
Автор: GRom V
Дата сообщения: 30.01.2008 07:01
Victor_Dobrov
Глянь пожалуйсто личку ......нужна помощь.
Заранее благодарен...!
Автор: JbBaD
Дата сообщения: 30.01.2008 12:46
Подскажите как сделать деинсталяцию предыдущей версии перед установкой новой?
Как скажем в K-Lite Codec Pack.
Автор: noiseless
Дата сообщения: 30.01.2008 14:16
JbBaD
Вот посмотри (это из раннего руководства Kindly)
[more]
Этакая комбинированная проверка. При инициализации проверяется присутствие определенного ключа, если его нету - выдается соответствующее сообщение и на этом действия прекращаются, если ключ присутствует, то появится сообщение об удачном обнаружении программы, также проверяется присутствие уже установленной программы, с предложением ее удалить.

function InitializeSetup(): Boolean;
var
ResultCode: Integer;
s, ResultStr:string;
Result:=True;
begin
Result:=True;
If not RegKeyExists(HKLM, 'SOFTWARE\MY_PROGRAM')
then
begin
MsgBox('Программа MY_PROGRAM не установлена или установлена неверно.' #13#13 'Дальнейшая работа мастера невозможна.', mbError, mb_Ok);
Result:=False;
end
else
begin
MsgBox('Программа MY_PROGRAM успешно обнаружена.' #13#13 'Установка полностью автоматическая.', mbInformation, mb_Ok);
begin
If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My_Program_v1.0_is1', 'UninstallString', ResultStr)
then
begin
If ResultStr<>''
then
begin
ResultStr:=RemoveQuotes(ResultStr);
if MsgBox('Программа установки обнаружила уже установленную программу ранней версии.' #13#13 'Вы желаете предварительно удалить ее?', mbInformation, MB_YESNO) = idYes
then
if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode)
then
MsgBox('Ошибка удаления. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещен, удален или переименован.', mbError, MB_OK);
end;
end;
end;
end;
end;

Вы можете проверять также присутствие определенного файла(ов) в папке с программой, либо размер, исходя из значений реестра. Просто установите нижеописанные проверки на присутствие и размер, с указанием в качестве константы данные ResultStr.
[/more]
Автор: Victor_Dobrov
Дата сообщения: 31.01.2008 02:00
Corona Skin (473 Кб в архиве) - расширение инсталлятора Inno Setup.

Доработки в CheckSerial, исправления при выборе WizardForm.ActiveControl на страницах проверки пароля/серийника. Текстуры кнопок при нажатии TAB теперь обновляются. Небольшие доработки в CheckSystem.

JbBaD, инсталлятор с Короной тоже деинсталлирует предыдущую версию автоматически.

GRom V и Dimbay
Автор: GRom V
Дата сообщения: 31.01.2008 04:13
Victor_Dobrov
Скинул в личку весь скрипт - может где че нитак
Автор: Sergey_AV
Дата сообщения: 31.01.2008 09:15
Genri
Вот здесь: http://forum.ru-board.com/topic.cgi?forum=5&topic=24767&start=640#11
вы давали пример с вводом кода (серийника) через FindWindowEx и WM_SETTEXT.
Я пытался узнать у интересующих меня окон Class и Caption с помощью Spy++ из Microsoft VC, но Class везде один и тот же - TTntEdit.UnicodeClass. Я имею ввиду, что при перемещении с поля "Registered to" на "Registration code" меняется только хэндл (Handle) процесса. В общем, мне кажется, что тот метод поиска окна здесь не проходит...
Если есть еще какие-нибудь идеи - приму с благодарностью . Только, наверное лучше через РМ - никак не наберусь наглости написать .

Еще вопрос, по поводу иконок в Inno Setup. Нельзя ли при создании иконки указать параметры, с которыми она будет создаваться? Я имею ввиду консольное приложение (FAR), где надо выбрать размер шрифта (дефолтный слишком мелковат на ТФТ-мониторах) и "расположение" - опять же, дефолтные 80х300 никак не устраивают. Хотелось бы чтобы после запуска инсталера иконки сразу бы были нормальными.

Автор: Genri
Дата сообщения: 31.01.2008 12:56
Sergey_AV -- см. почту. Только в виде примера (нет времени вылизывать).

Для информации: В функции FindWindowEx(hWndM, hWndC: LongWord; lpszClass, lpszWindow: PChar), второй параметр (hWndC) определяет дескриптор дочернего окна/элемента в Z-последовательности, начиная с которого будет осуществляться поиск. Т.е. если hWndC = 0, будет найден первый элемент, если hWndC значение первого элемента - будет найден второй и т.д.
Автор: Sergey_AV
Дата сообщения: 31.01.2008 13:08
Genri

Спасибо огромное, ковыряюсь дальше .
А насчет иконок в Inno Setup ничего подсказать не сможешь? См. мое предыдущее сообщение в топике.
Автор: Sig666
Дата сообщения: 31.01.2008 16:10
Подскажите пожалуйста, как к скину от установщика Inno Setup Scripting прикрутить это: http://img223.imageshack.us/img223/6533/37935630eo2.png
Автор: Raf_SE
Дата сообщения: 31.01.2008 19:40
У меня 2 вопроса:
1. Как сделать чтоб инсталятор запускался в левом нижнем углу экрана?
2. Возможно ли сделать так чтобы слайды в СлайдШоу менялись не по времени, а в зависимости от % выполненной установки. Т.е. "1.jpeg" запускался бы при достижении 10% инсталляции, файл "2.jpeg" при 20% и так далее.
Автор: Kutsenko
Дата сообщения: 31.01.2008 19:56
Raf_SE
Насчёт первого вопроса смотри в руководстве от Kindly. Там показано как сделать так чтобы менюшка была именно в определённом углу экрана.
Автор: Raf_SE
Дата сообщения: 31.01.2008 20:34
Kutsenko
Посибо! Нашел ответы на все свои вопросы.
Автор: KurtWagner
Дата сообщения: 01.02.2008 06:45
Как заставить инсталлера закрыть программу пржде чем удалять??? HELP!!! + еще 1 вопросик (кто как пользуется скриптами я копирую, соединяю, химичу! СКРИПТ НЕ ОДИН НЕ ЗНАЮ НА ИЗУСТЬ) кто еще копирует? ток давайте так след. пищет "копирую(2)" и т.д.
Автор: Alex Zaguzin
Дата сообщения: 01.02.2008 06:53
KurtWagner - ты предлагаешь обсудить в этой теме, кто каким способом копирует написанный скрипт, или что? Ничего не ясно блин...
Цитата:
СКРИПТ НЕ ОДИН НЕ ЗНАЮ НА ИЗУСТЬ
- а зачем его знать наизусть?

Автор: Victor_Dobrov
Дата сообщения: 01.02.2008 17:15
Corona Skin (473 Кб в архиве) - расширение инсталлятора Inno Setup.

Новый ключ: LicenseScroll - блокировать флажок о принятиии условий, пока не будет пролистано указанное число строк.
Для отладки раскомментируйте вторую строку в MyTimerProc. Genri, спасибо вам за пример этой доработки.
Автор: Raf_SE
Дата сообщения: 01.02.2008 17:56
Меня интересует один вопрос, если слайд шоу растягивается на весь экран, слайды размера 800х600, то как это все будет выгладить на широкоэкранных мониторах? Если страшно (с искажением), тогда другой вопрос, как этот код нужно модернизировать чтобы слайды не растягивались а были по центру?

[more]
[Setup]
BackColor=$000000

[Code]
type
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);
var
BackImage, SlideImage: TBitmapImage;
TimerID: LongWord;
s:string;
Width, Height:Integer;

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 GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';

procedure InitializeWizard();
begin
WizardForm.Position:=poScreenCenter
Width:=GetSystemMetrics(0)
Height:=GetSystemMetrics(1)
MainForm.BORDERSTYLE:=bsNone
MainForm.Left:=0
MainForm.Top:=0
MainForm.Width:=Width
MainForm.Height:=Height
ExtractTemporaryFile('BackImage.bmp')
s:=ExpandConstant('{tmp}')+'\BackImage.bmp '
BackImage:=TBitmapImage.Create(MainForm)
BackImage.Bitmap.LoadFromFile(s)
BackImage.Align:=alClient
BackImage.Parent:=MainForm
BackImage.Stretch:=True
MainForm.Visible:=True

ExtractTemporaryFile('BackImage.bmp')
ExtractTemporaryFile('bilboard0.bmp')
ExtractTemporaryFile('bilboard1.bmp')
ExtractTemporaryFile('bilboard2.bmp')
ExtractTemporaryFile('bilboard3.bmp')
ExtractTemporaryFile('bilboard4.bmp')
ExtractTemporaryFile('bilboard5.bmp')
ExtractTemporaryFile('bilboard6.bmp')
ExtractTemporaryFile('bilboard7.bmp')
ExtractTemporaryFile('bilboard8.bmp')
end;


function PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do begin
Result:=(Position-Min)/((Max - Min)/100)
begin

WizardForm.CancelButton.BringToFront;
end
end
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
percent: integer;
begin
percent:=PercentProgress
with SlideImage do begin
if ((percent>0) and (percent<10) and (Tag<>1)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard0.bmp')
Tag:=1
end else
if ((percent>11) and (percent<22) and (Tag<>2)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard1.bmp')
Tag:=2
end else
if ((percent>23) and (percent<33) and (Tag<>3)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard2.bmp')
Tag:=3
end else
if ((percent>34) and (percent<44) and (Tag<>4)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard3.bmp')
Tag:=4
end else
if ((percent>45) and (percent<55) and (Tag<>5)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard4.bmp')
Tag:=5
end else
if ((percent>56) and (percent<66) and (Tag<>6)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard5.bmp')
Tag:=6
end else
if ((percent>67) and (percent<77) and (Tag<>7)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard6.bmp')
Tag:=7
end else
if ((percent>78) and (percent<88) and (Tag<>8)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard7.bmp')
Tag:=8
end else
if ((percent>89) and (percent<100) and (Tag<>9)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard8.bmp')
Tag:=9
end
end
end;


procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
Width, Height: Integer;
begin
If CurPageID=wpInstalling
then
begin
pfunc:=WrapTimerProc(@OnTimer, 4)
TimerID:=SetTimer(0, 0, 500, pfunc)
SlideImage:=TBitmapImage.Create(MainForm)
with SlideImage do begin
Stretch:=True
Align:=alClient
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\bilboard0.bmp')
Parent:=MainForm
Tag:=1
end
end


begin
if CurPageID=wpInstalling
then
begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);

WizardForm.Left:=ScaleX(0);
WizardForm.Top:=ScaleY(0);

WizardForm.Left:=ScaleX(MainForm.Left+20);
WizardForm.Top:=ScaleY(MainForm.Height-170);


WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;{Размер окна по горизонтали}
WizardForm.Height:=392;{Размер окна по вертикали}
WizardForm.Position:=poScreenCenter; {Возврат в исходное состояние}
end
end;

if CurPageID=wpFinished
then
begin
SlideImage.Hide
end
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID)
end;


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
Res: Integer;
begin
case CurUninstallStep of
usPostUninstall:
begin
If DirExists(ExpandConstant('{app}')+'')
then
case MsgBox('Папка "'+ExpandConstant('{app}')+'" не пуста.'#13#13 +
'"Да" – полное удаление всех файлов в папке, включая саму папку.' #13#13 +
'"Нет" – открыть папку в проводнике, чтобы вручную удалить файлы.'#13#13 +
'"Отмена" – ничего не делать, удалить папку позже самостоятельно.', mbInformation, MB_YESNOCANCEL)
of IDYES:
begin
if not DelTree(ExpandConstant('{app}')+'', True, True, True)
then
MsgBox('Папка не удалена.' #13#13 'Папка или один из файлов в ней задействованы другим приложением.', mbError, MB_OK);
end
IDNO:
begin
if not ShellExec('open', ExpandConstant('{app}')+'', '', '', SW_SHOWMAXIMIZED, ewNoWait, Res)
then
MsgBox('Ошибка открытия.' #13#13 'Папка не найдена.', mbError, MB_OK);
end
IDCANCEL:
begin
end;
end;
end;
end;
end;


function NextButtonClick(CurPage: Integer): Boolean;
var
s, s2:string;
begin
Result:=True;
If CurPage=wpSelectDir
then
begin
s2:=ExpandConstant('{app}')+'';
If DirExists(s2)
then
begin
s:='Установка в существующую папку в целях безопасности невозможна!';
MsgBox(s, mbError, mb_Ok);
Result:=False;
end;
end;
end;
[/more]
Автор: serg_aka_lain
Дата сообщения: 01.02.2008 20:20
Raf_SE

На MainForm в процедуре CurPageChanged на странице wpInstalling создать ещё одну Form , размером 800х600, координатами poScreenCenter, и картинки парентить на неё , ну и цвет MainForm к примеру сделать clBlack. , Получится на черном фоне картинки 800х600.
Автор: Sampron
Дата сообщения: 01.02.2008 21:45
Raf_SE
serg_aka_lain
Есть попроще вариант:

[Setup]
WindowVisible=yes
WindowShowCaption=no

[Code]
procedure InitializeWizard();
var
BackImage: TBitmapImage;
begin
BackImage:=TBitmapImage.Create(MainForm)
with BackImage do begin
Width:=640
Height:=480
Left:=(MainForm.Width/2)-(Width/2)
Top:=(MainForm.Height/2)-(Height/2)
Parent:=MainForm
end
end;
Автор: Raf_SE
Дата сообщения: 01.02.2008 23:31
serg_aka_lain
Еееее Проблема в том что я не умею писать на этом языке... Ты мог бы... написать все это в моем скрипте?


Цитата:
получится на черном фоне картинки 800х600

Именно это мне и нужно!

Sampron
Я знаю этот вариант, он мне не подходит. Хотябы потому что "WindowVisible=yes". Мне нужно сделать имено на основе того скрипта который написан в моем предыдущем посте.
Автор: serg_aka_lain
Дата сообщения: 02.02.2008 00:15
Raf_SE

Личку смотри.
Автор: Sampron
Дата сообщения: 02.02.2008 01:00
Raf_SE
А чем тебя не устраивает "WindowVisible=yes"?
Дык скопируй эти свойства в свой битмап и будет тебе по-центру:

Width:=640
Height:=480
Left:=(MainForm.Width/2)-(Width/2)
Top:=(MainForm.Height/2)-(Height/2)
Автор: KurtWagner
Дата сообщения: 02.02.2008 01:01
Alex Zaguzin... мне просто интересно кто как печатает инНнсталер по памяти (как программист) или копируя!

Добавлено:
Как заставить инсталлера закрыть программу пржде чем удалять??? HELP!!!

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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