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

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

Автор: Aglow51
Дата сообщения: 06.10.2008 12:42
Здравствуйте! Сразу извиняюсь, если повторяюсь! Как в Inno сделать, чтобы при возникновении ошибки во время записи в реестр, она автоматически пропускалась?
Автор: serg_aka_lain
Дата сообщения: 06.10.2008 18:09
Aglow51

Цитата:
при возникновении ошибки во время записи в реестр, она автоматически пропускалась?

- Flags: noerror;
Автор: Aglow51
Дата сообщения: 06.10.2008 23:00
serg_aka_lain, спасибо!!!
Автор: Genri
Дата сообщения: 07.10.2008 00:01
Kindly

Цитата:
чтобы в панели задач не было меню по щелчку правой кнопки мыши, а также при щелчке левой кнопки мыши инсталлятор не сворачивался?
-- [more]
Код: [no]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Code]
const
GWL_STYLE = (-16);
WS_MINIMIZEBOX = $20000;
WS_SYSMENU = $80000;

function GetWindowLong(Wnd: HWnd; Index: Integer): Longint;
external 'GetWindowLongA@user32.dll stdcall';

function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint;
external 'SetWindowLongA@user32.dll stdcall';

function FindWindowEx(hWndM, hWndC: LongWord; lpszClass, lpszWindow: PChar): LongWord;
external 'FindWindowExA@user32.dll stdcall';

Procedure InitializeWizard();
var
TAppHandle: HWND;
begin
TAppHandle:= FindWindowEx( 0, 0, 'TApplication', 'Setup' );
SetWindowLong(TAppHandle, GWL_STYLE,
GetWindowLong(TAppHandle, GWL_STYLE) and not WS_SYSMENU and not WS_MINIMIZEBOX);
end; [/no]
Автор: boss911
Дата сообщения: 07.10.2008 01:23
А что со мной, что-то подскажите?
Автор: Genri
Дата сообщения: 07.10.2008 02:00
boss911 -- а почему не в секции компонентов или тасков? Там все реализуется штатным образом, а тут думать надо.
Автор: KurtWagner
Дата сообщения: 07.10.2008 02:19
Как сделать след. прежде чем Деинсталлировать программа должна закрыться скажем myprogram.exe
Автор: nOobCrafter
Дата сообщения: 07.10.2008 11:35
KurtWagner Вроде так, тока что Genri подкидывал скриптик



Код: Source: ISTask.dll; DestDir: {app}; Flags: ignoreversion

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

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

function InitializeUninstall(): Boolean;
begin
FileCopy(ExpandConstant('{app}\ISTask.dll'), ExpandConstant('{tmp}\ISTask.dll'), False);
Result := True;
If RunTaskA('myprogram.exe', false) then
            begin
KillTaskA('myprogram.exe');
Result := True;
        end else
         Result := False;
    end;
Автор: Artem_Butenko
Дата сообщения: 07.10.2008 15:43
Товарищи

Пожалуйста, помогите мне с данными вопросами, буду Вам благодарен!
Автор: Diawer
Дата сообщения: 07.10.2008 16:22
Я делаю ассоциацию файла (файлового расширения) но она с разу не применяется только после перезагрузки компа, но во многих программах это происходит сразу после установки программы, значит это возможно, но как это сделать?
Автор: Sampron
Дата сообщения: 07.10.2008 17:52
Diawer
Попробуй так:

[Setup]
ChangesAssociations=yes

или так:

[Code]
const
SHCNF_IDLIST = $0000;
SHCNE_ASSOCCHANGED = $08000000;

procedure SHChangeNotify(wEventId, uFlags, dwItem1, dwItem2: Integer);
external 'SHChangeNotify@shell32.dll stdcall';

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0)
end;

хотя это одно и тоже
Автор: Diawer
Дата сообщения: 07.10.2008 18:29
Sampron
Работает как надо, Спасибо.
Автор: boss911
Дата сообщения: 07.10.2008 21:56
Genri

Цитата:
а почему не в секции компонентов или тасков?

А потому, что хочется видеть чекбоксы на финальной странице завершения установки (postinstall), а не перед, что будет логичней, когда задается вопрос о запуске установленного приложения. Забыл еще указать в своем вопросе дополнительные флаги, посему обновил сообщение.


Цитата:
а тут думать надо

Я думал, что способ уже существует или по-быстрому его можно реализовать.
Автор: htuos
Дата сообщения: 07.10.2008 22:26

Цитата:
Kindly

Цитата:
чтобы в панели задач не было меню по щелчку правой кнопки мыши, а также при щелчке левой кнопки мыши инсталлятор не сворачивался?
-- [more][Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Code_]
const
GWL_STYLE = (-16);
WS_MINIMIZEBOX = $20000;
WS_SYSMENU = $80000;

function GetWindowLong(Wnd: HWnd; Index: Integer): Longint;
external 'GetWindowLongA@user32.dll stdcall';

function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint;
external 'SetWindowLongA@user32.dll stdcall';

function FindWindowEx(hWndM, hWndC: LongWord; lpszClass, lpszWindow: PChar): LongWord;
external 'FindWindowExA@user32.dll stdcall';

Procedure InitializeWizard();
var
TAppHandle: HWND;
begin
TAppHandle:= FindWindowEx( 0, 0, 'TApplication', 'Setup' );
SetWindowLong(TAppHandle, GWL_STYLE,
GetWindowLong(TAppHandle, GWL_STYLE) and not WS_SYSMENU and not WS_MINIMIZEBOX);
end;[/more]

немного поправлю
думаю так будет правильней
[more]Procedure InitializeWizard;
var
TAppHandle: HWND;
begin
TAppHandle:=GetWindowLong(MainForm.Handle,-8);
if TAppHandle<>0 then
SetWindowLong(TAppHandle,GWL_STYLE,GetWindowLong(TAppHandle,GWL_STYLE) and not (WS_SYSMENU or WS_MINIMIZEBOX));
end; [/more]
Автор: Genri
Дата сообщения: 07.10.2008 23:03
htuos -- я был практически уверен, что должен быть штатный апишный способ, а не через FindWindow. Но знаний не хватило. Спасибо за экспириенс
Автор: Genri
Дата сообщения: 08.10.2008 14:07
boss911

Цитата:
хочется видеть чекбоксы на финальной странице завершения установки (postinstall), а не перед
-- согласен. [more]
Код: [no]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program

[Run]
Filename: {win}\notepad.exe; Flags: postinstall skipifsilent nowait
Filename: {win}\explorer.exe; Flags: postinstall skipifsilent nowait

[Code]
function NextButtonClick(CurPageID: Integer): Boolean;
var
ResultCode: Integer;
begin
Result:= True;
if (CurPageID = wpFinished) and not WizardSilent then
begin
if WizardForm.RunList.Checked[0] or
WizardForm.RunList.Checked[1] then
Exec(ExpandConstant('{sys}\calc.exe'), '', '', SW_SHOW,
ewWaitUntilTerminated, ResultCode);
end;
end; [/no]
Автор: boss911
Дата сообщения: 08.10.2008 16:06
Genri

Цитата:
Exec(ExpandConstant('{sys}\calc.exe'), '', '', SW_SHOW,

А как быть, если процесс должен запускаться с параметром ( -install ) командной строки?
Автор: MaxDELETE
Дата сообщения: 08.10.2008 16:22
Привет всем.
Проблема такова - нужно в параметры ярлыка внести слова с кавычками... Само собой Inno ругается, а по-другому работать не будет ярлык.

Вот часть кода

Код:
[Icons]
Name: {group}\Rise And Fall Война Цивилизаций; Filename: {app}\RiseAndFall.exe; WorkingDir: {app}; Parameters: -datapath "data\" -redistpath "redist\" -nodump
Автор: ExpeditorR
Дата сообщения: 08.10.2008 16:55
MaxDELETE

Попробуй так:

[Icons]
Name: {group}\Rise And Fall Война Цивилизаций; Filename: {app}\RiseAndFall.exe; WorkingDir: {app}; Parameters: -datapath """data\""" -redistpath """redist\""" -nodump
Автор: Genri
Дата сообщения: 08.10.2008 17:33
boss911 -- Exec(ExpandConstant('{sys}\calc.exe'), '-install', '', SW_SHOW,...

MaxDELETE

Цитата:
Есть предложения?
-- есть. Прочитать в хелпе раздел Parameters in Sections

...Parameters: "-datapath ""data\"" -redistpath ""redist\"" -nodump"
Автор: MaxDELETE
Дата сообщения: 08.10.2008 19:51
Genri, спасибо большое, просто что-то в стандартном хелпе такого не нашел изначально - не вчитывался
Автор: boss911
Дата сообщения: 08.10.2008 20:01
Genri

Огромное тебе спасибо за твою помощь.

Цитата:
Exec(ExpandConstant('{sys}\calc.exe'), '-install', '', SW_SHOW,

Мне бы еще сюда добавить, чтобы инсталлятор не дожидался остановки приложения (nowait).
Автор: Genri
Дата сообщения: 08.10.2008 21:04
boss911

Цитата:
Код:[Run]
Filename: {app}\Prog1.exe; Flags: waituntilterminated skipifsilent
Filename: {app}\Prog2.exe; Flags: postinstall skipifsilent nowait
Filename: {app}\Prog3.exe; Flags: postinstall skipifsilent nowait

Помогите сделать так, если Prog2.exe или Prog3.exe не выбраны (postinstall) для запуска, то Prog1.exe чтобы тоже не выполнялся.



Цитата:
Мне бы еще сюда добавить, чтобы инсталлятор не дожидался остановки приложения (nowait).
-- хм, а почему же ты приводил код с флагом waituntilterminated?
Ну если дожидаться окончания не надо, замени ewWaitUntilTerminated на ewNoWait
Автор: boss911
Дата сообщения: 08.10.2008 22:25
Genri

Цитата:
хм, а почему же ты приводил код с флагом waituntilterminated?

Да это просто пример, не совсем точный, просто чтобы была понятна суть, а сейчас у меня кое-что уже поменялось.

Спасибо, все работает как надо.
Автор: mikutu
Дата сообщения: 09.10.2008 07:39
У меня несколько вопросов по поводу Corona Skin
1) Не нашел можно ли в нем сделать галочку для создания ярлыка программы (сам ярлык в скрипте Inno создан нужно сделать так чтобы пользователь имел возможность его не создавать)
2) как сделать checkbox запуск программы на последней странице инсталятора
3) раскомментироровал в примере который идет с Corona Skin (версия 5.4) следующий текст
#define AviOnProgress AddBackslash(SourcePath) + "Corona\Animation.avi"
и поместил туда соответствующий avi (который скачал по ссылке из комментария), но ни чего не изменилось

Добавлено:
Последний вопрос уже решил нужно просто было закомментировать
#define MiniProgress "100,100"
Автор: tonegins
Дата сообщения: 09.10.2008 09:41
Здравствуйте. Помогите пожалуйста разобраться с идентификацией страниц. Дело в том, что у меня есть 5 собственно созданных страниц, на первой моей странице пользователь выбирает какие компоненты он хотел бы установить и взависимости от выбранных компонентов в последствие создаются оставшиеся 4 страницы. Я бы хотел всем пяти страницам задать четкий идентификатор, чтобы при переходе на след. или предыдущую страницу CurPageID был всегда у страницы один и тотже, который я поставил им при создании.
Например:

Page1 := CreateCustomPage(100, 'Страница 1', 'Выбор компонентов');
Page1 := CreateCustomPage(101, 'Страница 1', 'Компонент 1');
Page1 := CreateCustomPage(102, 'Страница 2', 'Компонент 2');
Page1 := CreateCustomPage(103, 'Страница 3', 'Компонент 3');
Page1 := CreateCustomPage(104, 'Страница 4', 'Компонент 4');

Но уже при создании первой страницы выдается ошибка. Но если сделать так
Page1 := CreateCustomPage(wpWelcome, 'Страница 1', 'Выбор компонентов');
или так
Page1 := CreateCustomPage(1, 'Страница 1', 'Выбор компонентов');
То первая страница создается нормально.
Автор: Victor_Dobrov
Дата сообщения: 09.10.2008 11:21
mikutu
Цитата:
1) Не нашел, можно ли в Corona Skin сделать галочку для создания ярлыка программы (сам ярлык в скрипте Inno создан, нужно сделать так, чтобы пользователь имел возможность его не создавать)
2) как сделать checkbox - запуск программы на последней странице инсталятора.

Эти вопросы решаются стандартно. Ярлыки можно привязать к странице задач, есть много примеров, где показывается, как создавать ярлыки на Рабочем столе, в меню Пуск и панели быстрого запуска.
После установки программа запускается с флагом postinstall (игнорируется, если инсталлятор предлагает перезагрузку)

tonegins
Сортируй страницы по идентификатору Page.ID, для каждой новой страницы он свой.
Автор: Genri
Дата сообщения: 09.10.2008 11:23
tonegins

Цитата:
Я бы хотел всем пяти страницам задать четкий идентификатор
-- так почему не задаешь? И что такое у тебя 100, 101, 102...?

Page1 := CreateCustomPage(wpWelcome, 'Страница 1', 'Выбор компонентов');
Page2 := CreateCustomPage(Page1.ID, 'Страница 1', 'Компонент 1');
Page3 := CreateCustomPage(Page2.ID, 'Страница 2', 'Компонент 2');
Page4 := CreateCustomPage(Page3.ID, 'Страница 3', 'Компонент 3');
Page5 := CreateCustomPage(Page4.ID, 'Страница 4', 'Компонент 4');

хинт! Первый параметр задает после какой страницы будет вставлена создаваемая.
Автор: SotM
Дата сообщения: 09.10.2008 11:38

Цитата:
Но если сделать так
Page1 := CreateCustomPage(wpWelcome, 'Страница 1', 'Выбор компонентов');
или так
Page1 := CreateCustomPage(1, 'Страница 1', 'Выбор компонентов');
То первая страница создается нормально.

Правильно, так и должно быть, здесь первый вариант правильный. Смотрим примеры из шапки и читаем хелп.
Автор: tonegins
Дата сообщения: 09.10.2008 11:58
Genri

Цитата:
Page1 := CreateCustomPage(wpWelcome, 'Страница 1', 'Выбор компонентов');
Page2 := CreateCustomPage(Page1.ID, 'Страница 1', 'Компонент 1');
Page3 := CreateCustomPage(Page2.ID, 'Страница 2', 'Компонент 2');
Page4 := CreateCustomPage(Page3.ID, 'Страница 3', 'Компонент 3');
Page5 := CreateCustomPage(Page4.ID, 'Страница 4', 'Компонент 4');


Сделал имеено так, теперь когда я жму на кнопку далее, в функции обработчике вывожу MsgBox(IntToStr(CurPageID), mbInformation, mb_Ok);
Первая страница с CurPageID = 1 - логично. Вторая уже с CurPageID = 100 - здесь я теряюсь, третья с CurPageID = 101, а теперь если я нажму на кнопку назад, то CurPageID = 102? В чем прикол? Ничего не разберу...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

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


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