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

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

Автор: Genri
Дата сообщения: 25.03.2008 03:22
Victor_Dobrov -- пробовал - знаний не хватило. Но в размере особо не выиграешь - bmp хорошо сжимаются.
Автор: GRom V
Дата сообщения: 25.03.2008 08:02
geranik

Цитата:
В смысле в Types оставить 1 строчку с iscustom, если я правильно понял про вкладки.
[Types]
Name: "выборочная!"; Description: "Выбрано в ручную"; Flags: iscustom

Спасибки - пойдет
Автор: JKSerGEAnt
Дата сообщения: 25.03.2008 08:59
Господа, а исходников Inno Setup Unpacker в природе не существует? Последняя версия Inno им не поддерживается...
Автор: namchik
Дата сообщения: 25.03.2008 09:04
По этому вопросу, думаю, лучше прямиком к QuickeneR'у обратиться (он кстати зарегистрирован на руборде)
Автор: GRom V
Дата сообщения: 25.03.2008 15:03
Victor_Dobrov
[more=Есть такой код]
var BackgroundForm: TForm;
function GetSystemMetrics(nIndex:Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall';
function ShowWindow(hWnd, nCmdShow: LongWord): LongWord; external 'ShowWindow@user32.dll stdcall';
procedure BackgroundOnActivate(Sender: TObject);
Begin
if WizardForm.Visible then WizardForm.Show
End;



procedure InitializeWizard();
var
BackgroundBitmapImage: TBitmapImage;
s:string;
width, height:Integer;
bitmap:TBitmap;
var errorCode: Integer;
begin
WizardForm.Position:=poScreenCenter;
MainForm.BORDERSTYLE:=bsNone;
MainForm.Left := 0;
MainForm.Top := 0;
width:=GetSystemMetrics(0); //Если скрыть также панель задач, то значение 0 (см. также ниже!)
height:=GetSystemMetrics(1); //Если скрыть также панель задач, то значение 1
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
ExtractTemporaryFile('My_Image.bmp');
s:=ExpandConstant('{tmp}')+'\My_Image.bmp ';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
MainForm.Visible:=True;

BackgroundForm:= TForm.Create(MainForm)
BackgroundForm.BorderStyle:= bsNone;
BackgroundForm.FormStyle := fsStayOnTop;

BackgroundForm.Left:= 0; //место нахождения слайдшоу (левый нижний угол)
BackgroundForm.Top:= (MainForm.Height - BackgroundForm.Height); //место нахождения слайдшоу (левый нижний угол)

BackgroundForm.OnActivate:= @BackgroundOnActivate;
ShowWindow(BackgroundForm.Handle, SW_SHOW)    // фоновое окно на полный экран если sw_ShowMaximized вместо SW_SHOW
if DirExists(ExpandConstant('{src}\..\Slides')) then // проверка наличия папки нужна только для SBSlideShow
    RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'fold', ExpandConstant('{src}\..\Slides')) else    { если папка отсутствует, показываем Мои рисунки }
    RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'fold', ExpandConstant('{reg:HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders,My Pictures}'))
        RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'Alpha', '1');    // // без этого ключа не пашет
            RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'timer', '2');    // время показа картинки в секундах
                RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'ShowName', '0');    // // 1, чтобы отображать имя рисунка
                    RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'efTRUE', '1');    // 0, чтобы отключить эффекты
ExtractTemporaryFile('SBSlideShow.scr');    // если сменить флаг ewNoWait на ewWaitUntilIdle, распаковка файлов будет происходить быстрее
    Exec(ExpandConstant('{tmp}\SBSlideShow.scr'), '/P '+ IntToStr(BackgroundForm.Handle),'', sw_Hide, ewNoWait, ErrorCode);

end;

Procedure DeinitializeSetup;
Begin
    BackgroundForm.Free    //    прекращаем работу скринсэвера
End;

[/more]
Визуально это выглядит так - сначала рисуется фоновое изображение, на нем появляется форма (светлый квадрат) и только через некоторое время появляется слайдшоу. Особенно это "некоторое" время хорошо заметно на слабых машинах. И этот светлый квадрат - честно немного раздражает.
Можно ли сделать чтоб до появления слайдшоу этого квадрата (формы) небыло видно??? Заранее Спасибо!
Автор: Victor_Dobrov
Дата сообщения: 25.03.2008 15:21
Corona Skin & Check System Requirements (380 Кб в архиве) - расширение инсталлятора Inno Setup.
Выбор вариантов деинсталляции теперь определяется корректно. Если программа уже установлена, название окна и кнопки на панели задач меняются на 'Обновление'. Для некоторых элементов поменял стандартный курсор на crHand. Доработаны поля ввода серийника и пароля. Клик по WizardForm.DiskSpaceLabel запускает утилиту 'Очистка дисков'.

GRom V, проверь, есть ли этот недостаток на Corona Skin...
Genri, понятно. Просто было много примеров, где BMP-шки лежат отдельно, вне инсталлятора.
Автор: Artem_Butenko
Дата сообщения: 25.03.2008 15:28
Здравствуйте уважаемые модераторы. При создании инсталляционного скрипта я столкнулся с двумя проблемами. Во-первых, невозможность наложение рисунка (например, Button.bmp) на кнопку «AboutButton» («О программе…»). Ни один из доступных кодов не в состоянии решить проблему. Во-вторых, возможно ли, чтобы при нажатии кнопки «OK» в окне выбора папки установки инсталлятор сразу же (без подтверждения по кнопке «Далее») переходил на следующую страницу?
Пожалуйста, помогите правильным скриптом, буду весьма признателен за Вашу помощь!
Автор: GRom V
Дата сообщения: 25.03.2008 15:37
Victor_Dobrov
Глянь личку Плизз
Автор: dron0000
Дата сообщения: 25.03.2008 17:46
Подскажите пожайлуста средствами инстталятора можно реализовать защиту приложения?
мне необходимо сделать инсталятор, при установки приложения нужно вводить серийный номер, который дается при приобретении. после ввода нужно чтобы сгенерировался определенный ключ, этот ключ привязывается к железу, который пересылается мне и я по нему уже даю другой серийник для работы.
Или как это лучше реализовать. Необходимо чтобы пользователь мог установить только на один компьютер.
Может быть есть другие решения.
Помогите пожайлуста.
Автор: Midway
Дата сообщения: 25.03.2008 19:19
Вылезла проблема с распаковкой файлов созданных последним InnoSetup...
Это только моя проблема или?....
Автор: Diawer
Дата сообщения: 25.03.2008 19:58
Genri, спасибо ты здорово помог, причём ответив не на один, а на два интересующих вопроса.
Но помогите решить второй вопрос, а именно уже на твоём [more=скрипте][Files]
Source: ISTask.dll; DestDir: {app}

[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl"
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
en.CloseApp=Program is running! Close program and continue?
ru.CloseApp=Программа запущена! Закрыть программу и продолжить?

[Code]
function KillTaskA(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
UnloadDLL(ExpandConstant('{app}\ISTask.dll'));
end;
end;

procedure InitializeUninstallProgressForm();
begin
if RunTaskA('calc.exe', false) then
if MsgBox(CustomMessage('CloseApp'), mbConfirmation, MB_YESNO) = IDYES then
KillTaskA('calc.exe')
else
Abort;
end;[/more], как поменять надпись
в шапке окна справа от иконки вверху, просто смотриться не очень красиво, я везде
поменял "Деинсталляция" на "Удаление", а в этом окне нет возможности.
Автор: Genri
Дата сообщения: 25.03.2008 21:21
Diawer -- Любопытно, а как ты менял ? Попробуй, ничего не меняя, добавить в скрипт две стрчки:

[Messages]
ru.UninstallAppTitle=Удаление
ru.UninstallAppFullTitle=Удаление — %1


Автор: Victor_Dobrov
Дата сообщения: 26.03.2008 01:17
GRom V, [more=попробуй так]
[Setup]
AppName=Test
AppVerName=Test
CreateAppDir=false

[Files]
Source: Background.bmp; DestDir: {app}; DestName: My_Image.bmp
Source: SBSlideShow.scr; DestDir: {app}

[Code]
var BackgroundForm: TForm;
function GetSystemMetrics(nIndex:Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall';
function ShowWindow(hWnd, nCmdShow: LongWord): LongWord; external 'ShowWindow@user32.dll stdcall';

procedure BackgroundOnActivate(Sender: TObject);
Begin
if WizardForm.Visible then WizardForm.Show
End;

Procedure CurPageChanged(CurPageID: Integer);
Begin
    if CurPageID > wpWelcome then ShowWindow(BackgroundForm.Handle, SW_SHOW) // фоновое окно на полный экран если sw_ShowMaximized вместо SW_SHOW
End;

procedure InitializeWizard();
var
BackgroundBitmapImage: TBitmapImage;
s:string;
width, height:Integer;
bitmap:TBitmap;
var errorCode: Integer;
begin
WizardForm.Position:=poScreenCenter;
MainForm.BORDERSTYLE:=bsNone;
MainForm.Left := 0;
MainForm.Top := 0;
width:=GetSystemMetrics(0); //Если скрыть также панель задач, то значение 0 (см. также ниже!)
height:=GetSystemMetrics(1); //Если скрыть также панель задач, то значение 1
MainForm.Width:=width;
MainForm.Height:=height;
width:=MainForm.ClientWidth;
height:=MainForm.ClientHeight;
ExtractTemporaryFile('My_Image.bmp');
s:=ExpandConstant('{tmp}')+'\My_Image.bmp';
BackgroundBitmapImage := TBitmapImage.Create(MainForm);
BackgroundBitmapImage.Bitmap.LoadFromFile(s);
BackgroundBitmapImage.Align := alClient;
BackgroundBitmapImage.Parent := MainForm;
BackgroundBitmapImage.Stretch:=True;
MainForm.Visible:=True;

BackgroundForm:= TForm.Create(MainForm)
BackgroundForm.BorderStyle:= bsNone;
BackgroundForm.FormStyle := fsStayOnTop;

BackgroundForm.Left:= 0; //место нахождения слайдшоу (левый нижний угол)
BackgroundForm.Top:= (MainForm.Height - BackgroundForm.Height); //место нахождения слайдшоу (левый нижний угол)

BackgroundForm.OnActivate:= @BackgroundOnActivate;
if DirExists(ExpandConstant('{src}\..\Slides')) then // проверка наличия папки нужна только для SBSlideShow
RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'fold', ExpandConstant('{src}\..\Slides')) else { если папка отсутствует, показываем Мои рисунки }
RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'fold', ExpandConstant('{reg:HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders,My Pictures}'))
RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'Alpha', '1'); // // без этого ключа не пашет
RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'timer', '2'); // время показа картинки в секундах
RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'ShowName', '0'); // // 1, чтобы отображать имя рисунка
RegWriteStringValue(HKCU, 'Software\Serbis\SBSlideShow', 'efTRUE', '1'); // 0, чтобы отключить эффекты
ExtractTemporaryFile('SBSlideShow.scr'); // если сменить флаг ewNoWait на ewWaitUntilIdle, распаковка файлов будет происходить быстрее
Exec(ExpandConstant('{tmp}\SBSlideShow.scr'), '/P '+ IntToStr(BackgroundForm.Handle),'', sw_Hide, ewNoWait, ErrorCode);
end;

Procedure DeinitializeSetup;
Begin
BackgroundForm.Free // прекращаем работу скринсэвера
End;
[/more], но задержка есть и при обычном выборе заставки SBSlideShow.scr.

Midway, у меня новые сборки нормально извлекают файлы как с паролем, так и без.
Автор: boss911
Дата сообщения: 26.03.2008 01:40
Ребята, кто-то, что-то знает, почему разработчик innounp не шевелится с новой вресией, кто может ему отписать или может на его форуме есть информация? Английский не знаю.

Хочется обновится до Inno 5.2.3, а приходится юзать 5.2.2, ради поддержки innounp от 27.10.07.
Автор: machetos
Дата сообщения: 26.03.2008 03:18
Всем привет!
Всегда сам разбирался со всем что мне надо в inno, но вот пришёл и мой
час. Траблы возникли со скином blue.
Если добавить для пользователя возможность не создавать папку в меню
Пуск, то check с данной функцией имеет ЧЁРНЫЫЙ ШРИФТ, тогда как везде
указан шрифт WINDOW (белый). Даже добавление строки Font.Color:=clWindow
(или любой другой цвет) непосредсвенно в секцию кода про позицию и
свойства этого Check'а (NoIconsCheck) ни к чему не приводит, шрифт
Чёрный...
Что это? Глюк или я тупее тупых? Например в инсталяторе руководства от
Kindly эта фишка NoIconsCheck отключена, уж не из-за той же проблемы
(скин то у него чёрный, надписи не видно)))
Помогите разобраться!
Автор: Sampron
Дата сообщения: 26.03.2008 03:32
machetos
http://data.cod.ru/57792101834
Автор: omals
Дата сообщения: 26.03.2008 11:03
можно ли както задать при компиляции /VERYSILENT /NORESTART?
тоесть что б было две инсталки одна нормальная а другая скомпиленая как
/VERYSILENT /NORESTART
нужно именно .exe но так типа эти два параметра уже задани
Автор: ChVL
Дата сообщения: 26.03.2008 11:05
Имеется, к примеру, такая запись:

Код: [Registry]
Root: HKCU; SubKey: Software\MyProg; ValueType: dword; ValueName: Test; ValueData: $00000001
Автор: ZABXOZ
Дата сообщения: 26.03.2008 11:57
Уважаемые, есть несколько вопросов по сабжу..
Подскажите, компилирует ли Inno Setup инсталяторы больше 2х гигабайт..?
Просто столкнулся с такой проблемой в программе Install Creator Pro, там этого сделать не возможно =(

И ещё помогите начинающему, нужен скрипт, в той же самой Install Creator Pro
можно было задать парметр запуска нескольким исполняемым файлам при завершении инсталяции.. например по окончанию инсталяции запустить без подвтерждения пользователя *.bat файл и по окончанию установки предложить запуск установленного приложения..
Спасибо!

Автор: Genri
Дата сообщения: 26.03.2008 12:06
ChVL

Цитата:
function RegWriteDWordValue (const RootKey: Integer; const SubKeyName, ValueName: String; const Value: Cardinal): Boolean;
Примера записи нигде не нашёл, а сам как только не пробовал – не компилирует…
-- и какую ошибку выдает ?

Код:
procedure InitializeWizard();
begin
RegWriteDWordValue(HKCU, 'Software\MyProg', 'Test', $00000001);
end;
Автор: Mista_Max
Дата сообщения: 26.03.2008 13:16
Необходимо экспортировать ключи в данную ветку:
HKLM\SYSTEM\CurrentControlSet\Enum\Root\
Обычным методом этого сделать не получается!Естественно они должны удаляться так же легко!.. Для ускорения "ДОГОНА" хочу спросить у Вас... КАК?? Заранее СПАСИБО всем кто откликнется!!
Автор: ChVL
Дата сообщения: 26.03.2008 13:42
Genri
Спасибо! Как это обычно бывает, ошибочку у себя я нашёл, пришёл отписаться.
Код немного другой:

Код:
[Сode]
function InitializeSetup(): Boolean;
begin
Result := True;
RegWriteDWordValue(HKCU, 'Software\MyProg', 'Test', $00000001);
end;
Автор: Genri
Дата сообщения: 26.03.2008 13:52
ChVL

Цитата:
мне же надо её в процессе инсталляции
-- вероятно имелось ввиду "в процессе запуска инсталлятора". Можно и так, только следует иметь ввиду, что если пользователь по ошибке запустит файл инсталлятора, от инсталляции он может отказаться, но запись в реестре останется. И в том примере что я приводил, тот же нюанс. Я просто привел пример синтаксиса функции RegWriteDWordValue.
Автор: GRom V
Дата сообщения: 26.03.2008 14:38
Victor_Dobrov

Цитата:
GRom V, попробуй так, но задержка есть и при обычном выборе заставки SBSlideShow.scr.

Вроде нормально....ПРОШУ просчения за глупый вопрос - все вроде просто но не могу понять - Как можно сделать тоже самое, только после нажатия кнопки "Установить" - т.е непосредственно при начале инсталляции?
Заранее спасибо!

Добавлено:

Цитата:
но задержка есть и при обычном выборе заставки SBSlideShow.scr

Я имею ввиду не задержку перед выполнением самого слайдшоу, а задержку перед.....короче говоря вот этот (белый квадратик - форма) на которую грузится SBSlideShow.scr - чтоб его не было видно пока не загрузится SBSlideShow.scr
Автор: ChVL
Дата сообщения: 26.03.2008 16:01
Genri

Цитата:
запись в реестре останется

Дык, и при стандартной деинсталляции остаётся! - Придётся удаление как-то прописывать...
Автор: GRom V
Дата сообщения: 26.03.2008 16:22
Victor_Dobrov

Цитата:
ПРОШУ просчения за глупый вопрос - все вроде просто но не могу понять - Как можно сделать тоже самое, только после нажатия кнопки "Установить" - т.е непосредственно при начале инсталляции?

Сдесь - разобрался...как я и говорил все просто.
по поводу
Цитата:
Я имею ввиду не задержку перед выполнением самого слайдшоу, а задержку перед.....короче говоря вот этот (белый квадратик - форма) на которую грузится SBSlideShow.scr - чтоб его не было видно пока не загрузится SBSlideShow.scr

Я так понимаю достаточно перенести строку ShowWindow(BackgroundForm.Handle, SW_SHOW) ниже создания формы и запуска SBSlideShow.scr и это уменьшит время показа формы - я правильно понимаю?


Автор: Diawer
Дата сообщения: 26.03.2008 17:35
Genri

Цитата:
Любопытно, а как ты менял ?

Так и менял, только UninstallAppFullTitle=Удаление — %1 в этом окне ничего не меняет,
а UninstallAppTitle=Удаление, меняет но так же и на Панели инструментов, надо не просто "Удаление", что бы было "Удаление DeskStickers", получается когда запускаешь деинсталлятор то в первом стандартном окне "Удаление DeskStickers" во втором из секции Code "Удаление", вопрос в том, что бы изменить надпись только в шапке окна [more=кода][Files]
Source: ISTask.dll; DestDir: {app}

[Languages]
Name: "en"; MessagesFile: "compiler:Default.isl"
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
en.CloseApp=Program is running! Close program and continue?
ru.CloseApp=Программа запущена! Закрыть программу и продолжить?

[Code]
function KillTaskA(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

function RunTaskA(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
UnloadDLL(ExpandConstant('{app}\ISTask.dll'));
end;
end;

procedure InitializeUninstallProgressForm();
begin
if RunTaskA('calc.exe', false) then
if MsgBox(CustomMessage('CloseApp'), mbConfirmation, MB_YESNO) = IDYES then
KillTaskA('calc.exe')
else
Abort;
end;[/more]

Автор: geranik
Дата сообщения: 26.03.2008 17:40
ChVL
Вот. Регистрирует в конце, а при удалении удаляет значение и пустой ключ.
[more]
procedure CurStepChanged(CurStep: TSetupStep);
begin //конец установки
if CurStep = ssDone then
begin
RegWriteDWordValue(HKCU, 'Software\MyProg', 'Test', $00000001);
end;
end;

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
RegDeleteValue(HKCU, 'Software\MyProg', 'Test');
RegDeleteKeyIfEmpty(HKCU, 'Software\MyProg')
end;
end;
[/more]
Автор: elapse
Дата сообщения: 26.03.2008 19:15
Diawer, вопрос в том, как изменить заголовок МессаджБокса, когда предлагают закрыть приложение?
Изпользуй WinAPI-шную MessageBox из руководства Kindly, примеры приводились.
Автор: Dimbay
Дата сообщения: 26.03.2008 19:41
Genri
Спасибо!
О проделанной работе сообщу!

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

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


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