|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
Ветеран Сообщения: 1271 |
Профиль | Отправить PM | Цитировать
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты Inno Setup. Помощь и советы [часть 6] | Скрипты Inno Setup. Помощь и советы [часть 6].7z Скрипты Inno Setup. Помощь и советы [часть 7] | Скрипты Inno Setup. Помощь и советы [часть 7].7z Скрипты Inno Setup. Помощь и советы [часть 8] | Скрипты Inno Setup. Помощь и советы [часть 8].7z |
|
Отправлено: 16:09, 04-04-2018 |
Пользователь Сообщения: 73
|
Профиль | Отправить PM | Цитировать раньше безпроблем гуглил. сейчас немогу, уже второй день немогу установть временный файл при запуске инсталятора, я точно имею пример в две строчьки на другом пк. флаг (dontcopy) не работает в момент установки программы, если нужно обратится к файлу вылетает ошыбка. если вручную положыть файл то все работает как надо. как установить файл при запуске инталятора, в какой секции это прописать RUN или Files. все эти флаги перебрал перечитал, они работают только в момент инсталяции.
как установить временный файл при запуске инсталятора? |
Отправлено: 13:42, 24-10-2024 | #1101 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 861
|
Профиль | Отправить PM | Цитировать Цитата Beavimo:
|
|
------- Отправлено: 21:22, 24-10-2024 | #1102 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Не понимаю, помогите плиз. Использую скрипт El Sanchez по прикреплению ярлыка на панели быстрого запуска. Для этого я самостоятельно создаю ярлык по главному запускающему файлу exe и прописываю его в скрипте в формате "{app}\xxxxx.lnk. Компилится, все хорошо.
Но вот после установки закрепляется ярлык, который не находит свой основной файл( Как можно решить? Я думаю надо просто сделать автоматическое создание ярлыка запускающего exe при установке программы, но не знаю как это реализовать в коде скрипта inno |
Последний раз редактировалось proffbik, 29-10-2024 в 19:57. Причина: правка Отправлено: 17:10, 29-10-2024 | #1103 |
Пользователь Сообщения: 73
|
Профиль | Отправить PM | Цитировать ПРИВЕТСТВУЮ ФОРУМЧАНЕ! есть пример от El Sanchez (перетаскивание формы) код
[Setup] AppName=Test AppVerName=Test OutputBaseFilename=Test OutputDir=userdocs:..\desktop DefaultDirName=Test Uninstallable=no [code] const VK_LBUTTON = $0001; WM_SETCURSOR = $0020; WM_LBUTTONDOWN = $0201; HTCLIENT = 1; SWP_NOSIZE = 1; SWP_NOZORDER = 4; SWP_NOOWNERZORDER = $0200; function SetWindowSubclass(hWnd: HWND; pfnSubclass: LongWord; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): BOOL; external 'SetWindowSubclass@comctl32.dll stdcall'; function RemoveWindowSubclass(hWnd: HWND; pfnSubclass: LongWord; uIdSubclass: UINT_PTR): BOOL; external 'RemoveWindowSubclass@comctl32.dll stdcall'; function DefSubclassProc(hWnd: HWND; uMsg: UINT; wParam: UINT_PTR; lParam: INT_PTR): INT_PTR; external 'DefSubclassProc@comctl32.dll stdcall'; function GetCursorPos(out lpPoint: TPoint): BOOL; external 'GetCursorPos@user32.dll stdcall'; function GetWindowRect(hWnd: HWND; out lpRect: TRect): BOOL; external 'GetWindowRect@user32.dll stdcall'; function SetWindowPos(hWnd, hWndInsertAfter: HWND; X, Y, cx, cy: Integer; uFlags: UINT): BOOL; external 'SetWindowPos@user32.dll stdcall'; function GetAsyncKeyState(vKey: Integer): SmallInt; external 'GetAsyncKeyState@user32.dll stdcall'; function OffsetRect(var lprc: TRect; dx, dy: Integer): BOOL; external 'OffsetRect@user32.dll stdcall'; var PWndProc: LongWord; function WndProc(hWnd: HWND; uMsg: UINT; wParam: UINT_PTR; lParam: INT_PTR; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): INT_PTR; var LWindowRect: TRect; LSavePt, LCurPt: TPoint; begin case uMsg of WM_SETCURSOR: begin Result := DefSubclassProc(hWnd, uMsg, wParam, lParam); if (lParam shr $10 = WM_LBUTTONDOWN) and (lParam and $FFFF = HTCLIENT) then begin GetWindowRect(hWnd, LWindowRect); GetCursorPos(LSavePt); while (GetAsyncKeyState(VK_LBUTTON) <> 0) do begin GetCursorPos(LCurPt); OffsetRect(LWindowRect, LCurPt.x - LSavePt.x, LCurPt.y - LSavePt.y); SetWindowPos(hWnd, 0, LWindowRect.Left, LWindowRect.Top, 0, 0, SWP_NOOWNERZORDER or SWP_NOSIZE or SWP_NOZORDER); LSavePt := LCurPt; end; end; end; else Result := DefSubclassProc(hWnd, uMsg, wParam, lParam); end; end; procedure SubclassWizardForm(const ARemove: Boolean); begin if PWndProc = 0 then PWndProc := CreateCallback(@WndProc); if not ARemove then SetWindowSubclass(WizardForm.Handle, PWndProc, 0, 0) else if PWndProc <> 0 then RemoveWindowSubclass(WizardForm.Handle, PWndProc, 0); end; procedure InitializeWizard; begin SubclassWizardForm(False); end; procedure DeinitializeSetup; begin SubclassWizardForm(True); end; потом есть пример с интернета, который запрещает запуск двух и более копий инсталлятора одновременно код
[Setup] AppName=Test AppVerName=Test OutputBaseFilename=Test OutputDir=userdocs:..\desktop DefaultDirName=Test Uninstallable=no AppMutex=qwerty [code] function CreateMutex(lpMutexAttributes: Longint; bInitialOwner: BOOL; lpName: AnsiString): THandle; external 'CreateMutexA@kernel32.dll stdcall'; var Mutex: THandle; procedure SMutex; begin Mutex:= CreateMutex(0, False, ExpandConstant('{#SetupSetting("AppMutex")}')); end; procedure InitializeWizard(); begin SMutex; end; function InitializeSetup(): Boolean; begin Result:= not CheckForMutexes(ExpandConstant('{#SetupSetting("AppMutex")}')); end; после склейки получаем код
[Setup] AppName=Test AppVerName=Test OutputBaseFilename=Test OutputDir=userdocs:..\desktop DefaultDirName=Test Uninstallable=no AppMutex=qwerty [code] const VK_LBUTTON = $0001; WM_SETCURSOR = $0020; WM_LBUTTONDOWN = $0201; HTCLIENT = 1; SWP_NOSIZE = 1; SWP_NOZORDER = 4; SWP_NOOWNERZORDER = $0200; function SetWindowSubclass(hWnd: HWND; pfnSubclass: LongWord; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): BOOL; external 'SetWindowSubclass@comctl32.dll stdcall'; function RemoveWindowSubclass(hWnd: HWND; pfnSubclass: LongWord; uIdSubclass: UINT_PTR): BOOL; external 'RemoveWindowSubclass@comctl32.dll stdcall'; function DefSubclassProc(hWnd: HWND; uMsg: UINT; wParam: UINT_PTR; lParam: INT_PTR): INT_PTR; external 'DefSubclassProc@comctl32.dll stdcall'; function GetCursorPos(out lpPoint: TPoint): BOOL; external 'GetCursorPos@user32.dll stdcall'; function GetWindowRect(hWnd: HWND; out lpRect: TRect): BOOL; external 'GetWindowRect@user32.dll stdcall'; function SetWindowPos(hWnd, hWndInsertAfter: HWND; X, Y, cx, cy: Integer; uFlags: UINT): BOOL; external 'SetWindowPos@user32.dll stdcall'; function GetAsyncKeyState(vKey: Integer): SmallInt; external 'GetAsyncKeyState@user32.dll stdcall'; function OffsetRect(var lprc: TRect; dx, dy: Integer): BOOL; external 'OffsetRect@user32.dll stdcall'; function CreateMutex(lpMutexAttributes: Longint; bInitialOwner: BOOL; lpName: AnsiString): THandle; external 'CreateMutexA@kernel32.dll stdcall'; var PWndProc: LongWord; Mutex: THandle; function WndProc(hWnd: HWND; uMsg: UINT; wParam: UINT_PTR; lParam: INT_PTR; uIdSubclass: UINT_PTR; dwRefData: DWORD_PTR): INT_PTR; var LWindowRect: TRect; LSavePt, LCurPt: TPoint; begin case uMsg of WM_SETCURSOR: begin Result := DefSubclassProc(hWnd, uMsg, wParam, lParam); if (lParam shr $10 = WM_LBUTTONDOWN) and (lParam and $FFFF = HTCLIENT) then begin GetWindowRect(hWnd, LWindowRect); GetCursorPos(LSavePt); while (GetAsyncKeyState(VK_LBUTTON) <> 0) do begin GetCursorPos(LCurPt); OffsetRect(LWindowRect, LCurPt.x - LSavePt.x, LCurPt.y - LSavePt.y); SetWindowPos(hWnd, 0, LWindowRect.Left, LWindowRect.Top, 0, 0, SWP_NOOWNERZORDER or SWP_NOSIZE or SWP_NOZORDER); LSavePt := LCurPt; end; end; end; else Result := DefSubclassProc(hWnd, uMsg, wParam, lParam); end; end; procedure SubclassWizardForm(const ARemove: Boolean); begin if PWndProc = 0 then PWndProc := CreateCallback(@WndProc); if not ARemove then SetWindowSubclass(WizardForm.Handle, PWndProc, 0, 0) else if PWndProc <> 0 then RemoveWindowSubclass(WizardForm.Handle, PWndProc, 0); end; procedure SMutex; begin Mutex:= CreateMutex(0, False, ExpandConstant('{#SetupSetting("AppMutex")}')); end; function InitializeSetup(): Boolean; begin Result:= not CheckForMutexes(ExpandConstant('{#SetupSetting("AppMutex")}')); end; procedure InitializeWizard; begin SMutex; SubclassWizardForm(False); end; procedure DeinitializeSetup; begin SubclassWizardForm(True); end; пример работает, но есть проблема. при запуске второй копии выскакивает ошибка может кто подскажет, как избавиться от этой ошибки? а да кстати люди ловите прикол код
[Setup] AppName=Info AppVerName=Info OutputBaseFilename=Info OutputDir=userdocs:..\desktop DefaultDirName=Info Uninstallable=no [Files] Source: "Info.bmp"; Flags: dontcopy [code] var Info: TLabel; InfoLink: TLabel; InfoText: TLabel; InfoForm: TForm; procedure InfoExit(Sender: TObject); begin InfoForm.Close; end; procedure InfoLinkClick(Sender: TObject); var ErrorCode: Integer; begin ShellExec('', 'https://soundcloud.com/sionarecords/monastetiq-oysher-feat-david-lesal-another-world-original-mix', '', '', SW_SHOW, ewNoWait, ErrorCode); end; procedure InfoClick( Sender: TObject ); begin InfoForm := TForm.Create(WizardForm); with InfoForm do try BorderStyle := bsNone; ClientWidth := ScaleX( 480 ); ClientHeight := ScaleY( 300 ); Position := poOwnerFormCenter; with TBitmapImage.Create(InfoForm) do begin Parent := InfoForm; Align := alClient; Bitmap.LoadFromFile(ExpandConstant('{tmp}\Info.bmp')); OnClick := @InfoExit; end; InfoText := TLabel.Create(CreateCustomForm); with InfoText do begin Parent := InfoForm; Left := ScaleX( 22 ); Top := ScaleY( 13 ); Caption := 'readme'; end; InfoLink := TLabel.Create(CreateCustomForm); with InfoLink do begin Parent := InfoForm; Left := ScaleX( 427 ); Top := ScaleY( 270 ); Caption := 'music'; OnClick:=@InfoLinkClick end; ShowModal(); finally Free; end; end; procedure InitializeWizard(); begin with TButton.Create( nil ) do begin Parent := WizardForm; Left := ScaleX( 15 ); Top := ScaleY( 325 ); Caption := 'Info'; OnClick := @InfoClick; end; end; function InitializeSetup(): Boolean; begin if not FileExists(ExpandConstant('{tmp}')) then ExtractTemporaryFile('Info.bmp'); Result := True; end; |
Последний раз редактировалось Beavimo, 01-11-2024 в 21:21. Отправлено: 20:49, 01-11-2024 | #1104 |
Ветеран Сообщения: 1271
|
Профиль | Отправить PM | Цитировать Цитата Beavimo:
procedure SubclassWizardForm(const ARemove: Boolean); begin if PWndProc = 0 then PWndProc := CreateCallback(@WndProc); if not ARemove then SetWindowSubclass(WizardForm.Handle, PWndProc, 0, 0) else if (PWndProc <> 0) and (ExpandConstant('{wizardhwnd}') <> '0') then RemoveWindowSubclass(WizardForm.Handle, PWndProc, 0); end; |
|
Отправлено: 15:23, 02-11-2024 | #1105 |
Пользователь Сообщения: 73
|
Профиль | Отправить PM | Цитировать El Sanchez, спасибо работает как надо.
|
Отправлено: 17:31, 02-11-2024 | #1106 |
Пользователь Сообщения: 73
|
Профиль | Отправить PM | Цитировать |
Отправлено: 19:18, 02-11-2024 | #1107 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Как отключить AppVerion, чтобы в инсталяторе про версию вообще ничего не писалось?
Пробовал AppVersion=no, но тогда он за версию берет само слово "no" |
Отправлено: 16:23, 03-11-2024 | #1108 |
Пользователь Сообщения: 73
|
Профиль | Отправить PM | Цитировать proffbik, стандартными средствами вроде никак. своего времени тоже хотел убрать этот пункт с описания, лопатил интернет, спрашивал на форумах, в эпизоде забил. может сейчас есть какой способ, но я не знаю.
|
Последний раз редактировалось Beavimo, 03-11-2024 в 20:30. Отправлено: 19:57, 03-11-2024 | #1109 |
Ветеран Сообщения: 861
|
Профиль | Отправить PM | Цитировать Цитата proffbik:
|
|
------- Отправлено: 01:19, 04-11-2024 | #1110 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты 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 |
|