![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 6] |
|
Скрипты Inno Setup. Помощь и советы [часть 6]
|
Ветеран Сообщения: 1274 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: |
|
Отправлено: 19:06, 28-03-2013 |
Старожил Сообщения: 242
|
Профиль | Отправить PM | Цитировать volga163@vk
|
Отправлено: 10:29, 19-07-2013 | #811 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 14
|
Профиль | Сайт | Отправить PM | Цитировать vint56, Спасибо большое, работает. Последний вопрос, можно ли сделать фон прозрачным? А то получается светлая рамка на картинке.
|
Отправлено: 13:43, 19-07-2013 | #812 |
Старожил Сообщения: 242
|
Профиль | Отправить PM | Цитировать |
Последний раз редактировалось vint56, 19-07-2013 в 14:13. Отправлено: 13:48, 19-07-2013 | #813 |
Новый участник Сообщения: 17
|
Профиль | Отправить PM | Цитировать а как сделать чтоб вот эта строчка "if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data-1.bin'), ExpandConstant('{app}\'), '', false, '', ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{app}\'), notPCFonFLY{PCFonFLY}) then break;" запускалась только после выбора того или иного компонента?
|
Отправлено: 14:12, 19-07-2013 | #814 |
Старожил Сообщения: 242
|
Профиль | Отправить PM | Цитировать Fakt_37 это пример из справки
|
Отправлено: 14:27, 19-07-2013 | #815 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать Цитата Johny777:
не выскакивает окно уака/пасса покромсал пример "закрытие процесса" Ну и по факту видно что права как были простые так и остались [Code] #define A = (Defined UNICODE) ? "W" : "A" const TH32CS_SNAPPROCESS = $2; INVALID_HANDLE_VALUE = -1; PROCESS_TERMINATE = $1; PROCESS_CREATE_THREAD = $2; PROCESS_VM_OPERATION = $8; PROCESS_VM_READ = $10; PROCESS_VM_WRITE = $20; PROCESS_QUERY_INFORMATION = $400; SYNCHRONIZE = $100000; MEM_COMMIT = $1000; MEM_RESERVE = $2000; PAGE_EXECUTE_READWRITE = $40; TOKEN_QUERY = $8; TOKEN_ADJUST_PRIVILEGES = $20; SE_PRIVILEGE_ENABLED = $2; MAX_PATH = 260; TA_FAILED = 0; TA_SUCCESS_CLEAN = 1; TA_SUCCESS_KILL = 2; WM_CLOSE = $10; WAIT_OBJECT_0 = $0; WAIT_TIMEOUT = $102; type TPROCESSENTRY32 = record dwSize, cntUsage, th32ProcessID: DWORD; th32DefaultHeapID: Longint; th32ModuleID, cntThreads, th32ParentProcessID: DWORD; pcPriClassBase: Longint; dwFlags: DWORD; szExeFile: array [0..259] of Char; end; LUID = record LowPart: DWORD; HighPart: Longint; end; LUID_AND_ATTRIBUTES = record Luid: LUID; Attributes: DWORD; end; TOKEN_PRIVILEGES = record PrivilegeCount: DWORD; Privileges: array [0..0] of LUID_AND_ATTRIBUTES; end; function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle; external 'CreateToolhelp32Snapshot@kernel32.dll stdcall'; #ifdef UNICODE function Process32First(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32First{#A}@kernel32.dll stdcall'; function Process32Next(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32Next{#A}@kernel32.dll stdcall'; #else function Process32First(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32First@kernel32.dll stdcall'; function Process32Next(hSnapshot: THandle; var lppe: TPROCESSENTRY32): Boolean; external 'Process32Next@kernel32.dll stdcall'; #endif function OpenProcess(dwDesiredAccess: DWORD; bInheritHandle: BOOL; dwProcessId: DWORD): THandle; external 'OpenProcess@kernel32.dll stdcall'; function OpenProcessToken(ProcessHandle: THandle; DesiredAccess: DWORD; var TokenHandle: THandle): BOOL; external 'OpenProcessToken@advapi32.dll stdcall'; function GetCurrentProcess(): THandle; external 'GetCurrentProcess@kernel32.dll stdcall'; function LookupPrivilegeValue(lpSystemName, lpName: String; var lpLuid: LUID): BOOL; external 'LookupPrivilegeValue{#A}@advapi32.dll stdcall'; function AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL; NewState: TOKEN_PRIVILEGES; BufferLength: DWORD; var PreviousState: TOKEN_PRIVILEGES; var ReturnLength: Longint): BOOL; external 'AdjustTokenPrivileges@advapi32.dll stdcall'; function CloseHandle(hObject: THandle): BOOL; external 'CloseHandle@kernel32.dll stdcall'; function GetProcessImageFileName(hProcess: THandle; var lpImageFileName: Char; nSize: DWORD): DWORD; external 'GetProcessImageFileName{#A}@psapi.dll stdcall'; function QueryDosDevice(lpDeviceName: String; var lpTargetPath: Char; ucchMax: DWORD): DWORD; external 'QueryDosDevice{#A}@kernel32.dll stdcall'; function EnumWindows(lpEnumFunc, lParam: Longint): BOOL; external 'EnumWindows@user32.dll stdcall'; function WaitForSingleObject(hHandle: THandle; dwMilliseconds: DWORD): DWORD; external 'WaitForSingleObject@kernel32.dll stdcall'; function GetProcAddress(hModule: THandle; lpProcName: String): Longint; external 'GetProcAddress@kernel32.dll stdcall'; function GetModuleHandle(lpModuleName: String): THandle; external 'GetModuleHandle{#A}@kernel32.dll stdcall'; function VirtualAllocEx(hProcess: THandle; lpAddress, dwSize: Longint; flAllocationType, flProtect: DWORD): Longint; external 'VirtualAllocEx@kernel32.dll stdcall'; function WriteProcessMemory(hProcess: THandle; lpBaseAddress, lpBuffer, nSize: Longint; var lpNumberOfBytesWritten: Longint): BOOL; external 'WriteProcessMemory@kernel32.dll stdcall'; function CreateRemoteThread(hProcess: THandle; lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags: DWORD; var lpThreadId: DWORD): THandle; external 'CreateRemoteThread@kernel32.dll stdcall'; function TerminateProcess(hProcess: THandle; uExitCode: UINT): BOOL; external 'TerminateProcess@kernel32.dll stdcall'; function GetWindowThreadProcessId(hWnd: HWND; var lpdwProcessId: DWORD): DWORD; external 'GetWindowThreadProcessId@user32.dll stdcall'; ///////////////////////////////////////////////////////// function CharArrayToString(aChar: array of Char): String; begin Result := ''; while aChar[Length(Result)] <> #0 do Insert(aChar[Length(Result)], Result, Length(Result)+1); end; function EnumWindowsProc(hwnd: HWND; lParam: Longint): BOOL; var dwID: DWORD; begin GetWindowThreadProcessId(hwnd, dwID); if dwID = lParam then PostMessage(hwnd, WM_CLOSE, 0, 0); Result := True; end; function PrivilegeReq(): DWORD; var hProcessSnap, hProc, hToken, hThread, lpProcName: THandle; pe32: TPROCESSENTRY32; aBuf: array [0..259] of Char; szFileName, szDeviceName: String; tkp: TOKEN_PRIVILEGES; SeDebugNameValue: LUID; i, lpMemory, ret: Longint; lpThreadId, dwDrives: DWORD; begin hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if hProcessSnap = INVALID_HANDLE_VALUE then Exit; try pe32.dwSize := SizeOf(pe32); if not Process32First(hProcessSnap, pe32) then Exit; while Process32Next(hProcessSnap, pe32) do begin // if CompareText(CharArrayToString(pe32.szExeFile), ExtractFileName(szProcess)) <> 0 then Continue; // try open process hProc := OpenProcess(PROCESS_TERMINATE or PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_QUERY_INFORMATION or SYNCHRONIZE, False, pe32.th32ProcessID); if hProc = TA_FAILED then begin // open process token adjust privileges if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then Exit; if not LookupPrivilegeValue('', 'SeDebugPrivilege', SeDebugNameValue) then Exit; try // fill token privileges struct tkp.PrivilegeCount := 1; tkp.Privileges[0].Luid := SeDebugNameValue; tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; // set debug privileges if not AdjustTokenPrivileges(hToken, False, tkp, SizeOf(tkp), tkp, ret) then Exit; // try open process with debug privileges hProc := OpenProcess(PROCESS_TERMINATE or PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE or PROCESS_QUERY_INFORMATION or SYNCHRONIZE, False, pe32.th32ProcessID); if hProc = TA_FAILED then Exit; finally tkp.Privileges[0].Attributes := 0; AdjustTokenPrivileges(hToken, False, tkp, SizeOf(tkp), tkp, ret); CloseHandle(hToken); end; end; // if szProcess is full path end; finally CloseHandle(hProcessSnap); end; end; procedure InitializeWizard(); begin PrivilegeReq; |
|
------- Последний раз редактировалось R.i.m.s.k.y., 19-07-2013 в 14:45. Отправлено: 14:36, 19-07-2013 | #816 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать нашел вот что http://support.microsoft.com/kb/981778
поможет ли это под простым пользователем поставить программу, требующую админа, для записи переменных в окружение простого пользователя |
------- Отправлено: 17:57, 19-07-2013 | #817 |
Ветеран Сообщения: 649
|
Профиль | Отправить PM | Цитировать R.i.m.s.k.y., если честно я нифига не понимаю Зачем тебе весь этот изврат? Программно сделать из простого пользователя админа очень сложно - точно, я почти уверен невозможно. В первую очередь на инно.Но вопрос зачем? Если что-то должно быть сделано админом, то инсталл запрашивает права (по дефолту так). Пусть пользователь введёт пароль админа, или войдет в систему под админом и тд. Не вижу в этом ничего плохого. Я б на твоём месте забил бы. Даже если есть решение, там может быть столько подводных камней, что офигеть можно.
|
Отправлено: 20:51, 19-07-2013 | #818 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать Цитата Johny777:
Цитата Johny777:
Цитата Johny777:
|
|||
------- Отправлено: 21:01, 19-07-2013 | #819 |
Пользователь Сообщения: 80
|
Профиль | Отправить PM | Цитировать Ребят, может кто помочь? У меня тут такая проблемка нарисовалась.... надо добавить в установщик еще 1 окно с выбором компонентов для установки.... точно такое же как и для выбора директории установки, только вместо директории (поля)... поле с выбором компонентов.
Вот тут есть готовый установщик: http://dfiles.ru/files/0v855lkzw Может кто помочь? Вот тут привожу код для окна с выбором директории... что там надо поменять, чтобы переделать его на окно с компонентами? Я просто еще только начинаю свой путь, еще мало знаний... буду благодарен за любую помощь: var BkgImg2 : Longint; AppLabel, AppLabel2, NeedSizeLabel, NeedSizeLabel2, SDLabel : TLabel; BackBtn, DirBrowseBtn, OKBtn : HWND; vPanel2 : TPanel; procedure HideSelectDirPage; begin if CanUseXvid then begin vPanel2.Visible:=False; mciSendString('stop sdVideo','',0,0); end; ImgSetVisibility(BkgImg2,False); AppLabel.Visible:=False; NeedSizeLabel.Visible:=False; AppLabel2.Visible:=False; NeedSizeLabel2.Visible:=False; SDLabel.Visible:=False; BtnSetVisibility(BackBtn,False); BtnSetVisibility(DirBrowseBtn,False); BtnSetVisibility(OKBtn,False); end; procedure DirBrowseBtnClick(h:HWND); begin WizardForm.DirBrowseButton.OnClick(WizardForm.DirBrowseButton); AppLabel.Caption:=WizardForm.DirEdit.Text; AppLabel2.Caption:=WizardForm.DirEdit.Text; end; procedure BackBtnClick(h:HWND); begin WizardForm.BackButton.OnClick(WizardForm.BackButton); end; procedure OKBtnClick(h:HWND); begin WizardForm.NextButton.OnClick(WizardForm.NextButton); end; procedure ShowSelectDirPage; begin PrevCurPageID:=wpSelectDir; ImgSetVisibility(BkgImg2,True); AppLabel.Visible:=True; NeedSizeLabel.Visible:=True; AppLabel2.Visible:=True; NeedSizeLabel2.Visible:=True; SDLabel.Visible:=True; BtnSetVisibility(BackBtn,True); BtnSetVisibility(DirBrowseBtn,True); BtnSetVisibility(OKBtn,True); ImgApplyChanges(WizardForm.Handle); if CanUseXvid then begin mciSendString('play sdVideo repeat','',0,0); vPanel2.Visible:=True; end; end; procedure CreateSelectDirPage; begin if CanUseXvid then begin vPanel2:=TPanel.Create(WizardForm); with vPanel2 do begin Visible:=False; Parent:=WizardForm; SetBounds(32,32,704,272); end; mciSendString('open '+ExpandConstant('{tmp}\vid_instdir.avi')+' alias sdVideo parent '+IntToStr(vPanel2.Handle)+' style child','',0,0); mciSendString('put sdVideo window at 0 0 704 272','',0,0); end; BkgImg2:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\pbbkg.png'),28,347,0,0,False,True); AppLabel2:=TLabel.Create(WizardForm); with AppLabel2 do begin Parent:=WizardForm; Transparent:=True; Caption:=WizardForm.DirEdit.Text; with Font do begin Name:=FontName; Size:=11; Color:=clBlack; end; Left:=59; Top:=364; end; AppLabel:=TLabel.Create(WizardForm); with AppLabel do begin Parent:=WizardForm; Transparent:=True; Caption:=WizardForm.DirEdit.Text; with Font do begin Name:=FontName; Size:=11; Color:=$e5e5e5; end; Left:=57; Top:=362; end; NeedSizeLabel2:=TLabel.Create(WizardForm); with NeedSizeLabel2 do begin Parent:=WizardForm; Transparent:=True; Caption:='Для установки игры требуется 12.00 ГБ'; with Font do begin Name:=FontName; Size:=11; Color:=clBlack; end; Left:=41; Top:=411; end; NeedSizeLabel:=TLabel.Create(WizardForm); with NeedSizeLabel do begin Parent:=WizardForm; Transparent:=True; Caption:='Для установки игры требуется 12.00 ГБ'; with Font do begin Name:=FontName; Size:=11; Color:=$e5e5e5; end; Left:=39; Top:=409; end; SDLabel:=TLabel.Create(WizardForm); with SDLabel do begin Parent:=WizardForm; Transparent:=True; Caption:='ПАПКА УСТАНОВКИ ИГРЫ:'; with Font do begin Name:=FontName; Size:=13; Color:=$e5e5e5; end; Left:=50; Top:=315; end; BackBtn:=BtnCreate(WizardForm.Handle,30,450,135,30,PAnsiChar(ExpandConstant('{tmp}\button4.png')),2,False); BtnSetEvent(BackBtn, BtnClickEventID,WrapBtnCallback(@BackBtnClick,1)); BtnSetFont(BackBtn,BtnFont2.Handle); BtnSetText(BackBtn,'НАЗАД'); BtnSetFontColor(BackBtn,$e5e5e5,$ffffff,$ffffff,$8a390e); BtnSetEvent(BackBtn,BtnMouseEnterEventID,WrapBtnCallback(@BtnMouseEnter,1)); DirBrowseBtn:=BtnCreate(WizardForm.Handle,603,405,135,30,PAnsiChar(ExpandConstant('{tmp}\button4.png')),2,False); BtnSetEvent(DirBrowseBtn, BtnClickEventID,WrapBtnCallback(@DirBrowseBtnClick,1)); BtnSetFont(DirBrowseBtn,BtnFont2.Handle); BtnSetText(DirBrowseBtn,'ИЗМЕНИТЬ'); BtnSetFontColor(DirBrowseBtn,$e5e5e5,$ffffff,$ffffff,$8a390e); BtnSetEvent(DirBrowseBtn,BtnMouseEnterEventID,WrapBtnCallback(@BtnMouseEnter,1)); OKBtn:=BtnCreate(WizardForm.Handle,606,450,135,30,PAnsiChar(ExpandConstant('{tmp}\button4.png')),2,False); BtnSetEvent(OKBtn, BtnClickEventID,WrapBtnCallback(@OKBtnClick,1)); BtnSetFont(OKBtn,BtnFont2.Handle); BtnSetText(OKBtn,'OK'); BtnSetFontColor(OKBtn,$e5e5e5,$ffffff,$ffffff,$8a390e); BtnSetEvent(OKBtn,BtnMouseEnterEventID,WrapBtnCallback(@BtnMouseEnter,1)); end; |
Отправлено: 21:17, 19-07-2013 | #820 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты 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 | |
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] | Serega | Автоматическая установка приложений | 2651 | 08-11-2010 18:34 | |
Скрипты Inno Setup Compiler | QAZAK | Автоматическая установка приложений | 7 | 15-01-2007 17:59 |
|