|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 8] |
|
Скрипты Inno Setup. Помощь и советы [часть 8]
|
Ветеран Сообщения: 1270 |
Профиль | Отправить PM | Цитировать
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты Inno Setup. Помощь и советы (Archive Pack 1):
Скрипты Inno Setup. Помощь и советы [часть 6] Скрипты Inno Setup. Помощь и советы [часть 7] |
|
Отправлено: 08:52, 02-02-2015 |
Пользователь Сообщения: 148
|
Профиль | Отправить 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 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 32
|
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
|
Профиль | Отправить PM | Цитировать Здравствуйте,подскажите пожалуйста, возможно ли изменить размер окна StartupPrompt, а также появляющегося перед
удалением, в котором написано "Вы действительно хотите удалить xxxxxxx и все компоненты программы?" |
Отправлено: 02:29, 14-04-2016 | #1503 |
Пользователь Сообщения: 148
|
Профиль | Отправить PM | Цитировать doctor_allcome, а когда вставляли [
Цитата dapa: окна StartupPrompt » а что это за окно? |
Последний раз редактировалось sergey3695, 14-04-2016 в 08:30. Отправлено: 08:14, 14-04-2016 | #1504 |
Новый участник Сообщения: 32
|
sergey3695, Спасибо большое. Вот я "Валера"! Все работает отлично.
|
Отправлено: 09:40, 14-04-2016 | #1505 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Цитата sergey3695:
|
|
Отправлено: 15:05, 14-04-2016 | #1506 |
Пользователь Сообщения: 148
|
Профиль | Отправить PM | Цитировать dapa, нет нельзя. это стандартные сообщения.
|
Отправлено: 16:02, 14-04-2016 | #1507 |
Новый участник Сообщения: 32
|
Уважаемый 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
|
Профиль | Отправить PM | Цитировать Цитата sergey3695:
|
|
Отправлено: 00:34, 16-04-2016 | #1509 |
Пользователь Сообщения: 148
|
Профиль | Отправить 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 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты 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 |
|