Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 8]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 8]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1264
Благодарности: 1024


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: El Sanchez
Дата: 22-10-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:

Показать/скрыть: Ссылки на примеры скриптов:

Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;

  • RegExporter - Фриварная утилита для экспорта реестра и конвертации файлов *.reg и *.ini в инсталляционные скрипты Inno Setup и NSIS.
    Последняя версия: 1.2.0 [23.09.2014] - Скачать;



Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Скрипты Inno Setup. Помощь и советы [часть 6]
Скрипты Inno Setup. Помощь и советы [часть 7]

Отправлено: 08:52, 02-02-2015

 

Пользователь


Сообщения: 148
Благодарности: 49

Профиль | Отправить PM | Цитировать


doctor_allcome,
Код: Выделить весь код
procedure CancelButtonClickFinishedPage(Sender: TObject);
begin
// display the "Exit Setup ?" message box and if the user selects "Yes",
// then exit the process; it is currently the only way how to exit setup
// process manually
if ExitSetupMsgBox then
begin
  DelTree(ExpandConstant('{tmp}'),true,true,true);
  ExitProcess(0);
end;
end;
но правильнее так
Скрытый текст
Код: Выделить весь код
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[_code]
function NextButtonClick(CurPage: Integer): Boolean;
begin
  Result := False;
// display the "Exit Setup ?" message box and if the user selects "Yes",
// then exit the process; it is currently the only way how to exit setup
// process manually
if CurPage = wpFinished then
begin
if ExitSetupMsgBox then
  Result := True
end else
  Result := True;
end;

procedure CancelButtonClickFinishedPage(Sender: TObject);
begin
// if the fake Finish button was clicked...
  MsgBox('И вот тут Можно запустить программу!', mbInformation, MB_OK);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpFinished then
begin
  WizardForm.CancelButton.Caption := 'Run';
  WizardForm.CancelButton.Visible := True;
// bind your own OnClick event for the Cancel button; the original one
// is already disconnected at this stage
  WizardForm.CancelButton.OnClick := @CancelButtonClickFinishedPage;
end;
end;

Отправлено: 21:27, 13-04-2016 | #1501



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для doctor_allcome

Новый участник


Сообщения: 32
Благодарности: 0

Профиль | Цитировать


sergey3695, спасибо за ответ!
DelTree(ExpandConstant('{tmp}'),true,true,true); пробовал вставлять, почему-то удаляется только часть файлов из папки TEMP, а вот библиотеки (dll) и сама папка is-xxxx остаются.
Из второго примера, я так понял, вы предложили кнопки поменять местами. NextButtonClick отрабатывает корректный выход, а в CancelButtonClickFinishedPage уже можно запускать программу (через ShellExec). После компиляции в FinishPage только одна кнопка Finish, а кнопка 'RUN' не отображается, хотя должно быть WizardForm.CancelButton.Caption := 'Run';

Отправлено: 01:34, 14-04-2016 | #1502


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте,подскажите пожалуйста, возможно ли изменить размер окна StartupPrompt, а также появляющегося перед
удалением, в котором написано "Вы действительно хотите удалить xxxxxxx и все компоненты программы?"

Отправлено: 02:29, 14-04-2016 | #1503


Пользователь


Сообщения: 148
Благодарности: 49

Профиль | Отправить PM | Цитировать


doctor_allcome, а когда вставляли [_code] стерли?
Цитата dapa:
окна StartupPrompt »
а что это за окно?

Последний раз редактировалось sergey3695, 14-04-2016 в 08:30.


Отправлено: 08:14, 14-04-2016 | #1504


Аватара для doctor_allcome

Новый участник


Сообщения: 32
Благодарности: 0

Профиль | Цитировать


sergey3695, Спасибо большое. Вот я "Валера"! Все работает отлично.

Отправлено: 09:40, 14-04-2016 | #1505


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата sergey3695:
а что это за окно? »
Не корректно я наверное спросил... это то, что появляется перед запуском инсталла, когда в [Setup] DisableStartupPrompt=no

Отправлено: 15:05, 14-04-2016 | #1506


Пользователь


Сообщения: 148
Благодарности: 49

Профиль | Отправить PM | Цитировать


dapa, нет нельзя. это стандартные сообщения.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:02, 14-04-2016 | #1507


Аватара для doctor_allcome

Новый участник


Сообщения: 32
Благодарности: 0

Профиль | Цитировать


Уважаемый sergey3695, позвольте еще один вопрос? Если в процедуре CancelButtonClickFinishedPage вместо MsgBox вставить ShellExec то программа в ShellExec выполнится, но окно инстяллятора остается открытым. Как закрыть окно инсталлятора, после запуска файла?

Скрытый текст

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[_code]
function NextButtonClick(CurPage: Integer): Boolean;
begin
Result := False;
// display the "Exit Setup ?" message box and if the user selects "Yes",
// then exit the process; it is currently the only way how to exit setup
// process manually
if CurPage = wpFinished then
begin
if ExitSetupMsgBox then
Result := True
end else
Result := True;
end;

procedure CancelButtonClickFinishedPage(Sender: TObject);
begin
// if the fake Finish button was clicked...
MsgBox('И вот тут Можно запустить программу!', mbInformation, MB_OK);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpFinished then
begin
WizardForm.CancelButton.Caption := 'Run';
WizardForm.CancelButton.Visible := True;
// bind your own OnClick event for the Cancel button; the original one
// is already disconnected at this stage
WizardForm.CancelButton.OnClick := @CancelButtonClickFinishedPage;
end;
end;

Отправлено: 23:25, 15-04-2016 | #1508


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата sergey3695:
dapa, нет нельзя. это стандартные сообщения. »
Понятно, благодарю за ответ.

Отправлено: 00:34, 16-04-2016 | #1509


Пользователь


Сообщения: 148
Благодарности: 49

Профиль | Отправить PM | Цитировать


doctor_allcome,
Скрытый текст
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
OutputDir=.

[code]
/////===== Начало - ExecAndWait =====\\\\\
var
lastproc: cardinal;

const
NORMAL_PRIORITY_CLASS = $00000020;
REALTIME_PRIORITY_CLASS = $00000100;

type
_TStartupInfo = record
cb: DWORD;
lpReserved, lpDesktop: Longint;
lpTitle: PAnsiChar;
dwX, dwY, dwXSize, dwYSize, dwXCountChars, dwYCountChars, dwFillAttribute, dwFlags: DWORD;
wShowWindow, cbReserved2: Word;
lpReserved2: Byte;
hStdInput, hStdOutput, hStdError: Longint;
end;
_TProcessInformation = record
hProcess, hThread: Longint;
dwProcessId, dwThreadId: DWORD;
end;
_TMsg = record
hWnd: HWND;
msg, wParam: Word;
lParam: LongWord;
Time: TFileTime;
pt: TPoint;
end;

function OpenProcess(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; external 'OpenProcess@kernel32.dll stdcall';
function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall';
procedure GetStartupInfo(var lpStartupInfo: _TStartupInfo); external 'GetStartupInfoA@kernel32.dll stdcall';
function CreateProcess(lpApplicationName: PAnsiChar; lpCommandLine: PAnsiChar; lpProcessAttributes, lpThreadAttributes: DWORD; bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: PAnsiChar; lpCurrentDirectory: PAnsiChar; const lpStartupInfo: _TStartupInfo; var lpProcessInformation: _TProcessInformation): BOOL; external 'CreateProcessA@kernel32.dll stdcall';
function WaitForSingleObject(hHandle: Longint; dwMilliseconds: DWORD): DWORD; external 'WaitForSingleObject@kernel32.dll stdcall';
function TerminateProcess(hProcess: Longint; uExitCode: UINT): BOOL; external 'TerminateProcess@kernel32.dll stdcall';
function PeekMessage(var lpMsg: _TMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
function TranslateMessage(const lpMsg: _TMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
function DispatchMessage(const lpMsg: _TMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

procedure Application_ProcessMessages;
var
Msg: _TMsg;
begin
while PeekMessage(Msg, 0, 0, 0, 1) do begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

function ExecAndWait(filename, params: pansichar; showcmd: integer; Wait: boolean; Priority: Smallint): Boolean;
var
SI : _TStartupInfo;
PI : _TProcessInformation;
CMD: string;
prt: DWORD;
begin
Result:=false;
CMD:='"' + filename + '" ' + params;
GetStartupInfo(SI);
SI.wShowWindow := showcmd;
SI.dwFlags := 1;
if Priority = 0 then prt:= NORMAL_PRIORITY_CLASS else
prt:= REALTIME_PRIORITY_CLASS;
Result:=CreateProcess('', PansiChar(CMD), 0, 0, false, prt,'', pansichar(ExtractFilePath(filename)), SI, PI);
lastproc:=PI.dwProcessId;
if wait then
while WaitforSingleObject(PI.hProcess, 50) = $00000102 do
Application_ProcessMessages;
CloseHandle(PI.hProcess);
end;
/////===== Конец - ExecAndWait =====\\\\\

var
OldEvent_NextButtonClick: TNotifyEvent;

procedure NextButtonClick2(Sender: TObject);
begin
ExecAndWait(ExpandConstant('{sys}\calc.exe'), '', SW_SHOW, false, 0);
OldEvent_NextButtonClick(Sender);
end;

procedure CancelButtonClickFinishedPage(Sender: TObject);
begin
if ExitSetupMsgBox then
OldEvent_NextButtonClick(Sender);
end;

procedure InitializeWizard;
begin
OldEvent_NextButtonClick := WizardForm.NextButton.OnClick;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpFinished then
begin
WizardForm.CancelButton.Caption := SetupMessage(msgButtonFinish);
WizardForm.CancelButton.Visible := True;
WizardForm.CancelButton.OnClick := @CancelButtonClickFinishedPage;
//
WizardForm.NextButton.Caption := 'Run';
WizardForm.NextButton.OnClick := @NextButtonClick2;
end;
end;

Отправлено: 12:06, 16-04-2016 | #1510



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 8]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 7] El Sanchez Автоматическая установка приложений 2499 02-02-2015 08:59
Скрипты Inno Setup. Помощь и советы [часть 6] El Sanchez Автоматическая установка приложений 2494 10-03-2014 11:51
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58




 
Переход