Имя пользователя:
Пароль:
 | Правила  

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

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

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

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 16-02-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] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]
Скрипты Inno Setup. Помощь и советы [часть 4]

Отправлено: 03:49, 21-05-2012

 

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

Ветеран


Contributor


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

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


Цитата Johny777:
El Sanchez, Ты можешь пожалуйста научить свою функцию так чтоб она ещё и путь к файлу сравнивала как у меня, ну короче чтоб при необходимости только определённые процессы завершать. »
ОК, принцип работы такой:
1. Если указан полный путь, будет завершаться процесс по указанному пути. Если имя файла, то все с таким же именем.
2. При получении дескриптора завершаемого процесса при необходимости права вызывающего процесса (инсталлятора) повышаются до уровня отладчика.
3. Последовательность завершения: 1) Посылаем окну программы сообщение WM_CLOSE; 2) Если окна нет и посылать некому (службы), то в виртуальном адресном пространстве процесса вызываем функцию ExitProcess; 3) Если сопротивляется, то TerminateProcess.
читать дальше »

Код: Выделить весь код
#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 TerminateApp(const szProcess: String; dwTimeout: DWORD): 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
            if CompareText(szProcess, ExtractFileName(szProcess)) <> 0 then
            begin
                GetProcessImageFileName(hProc, aBuf[0], SizeOf(aBuf));
                szFileName := CharArrayToString(aBuf);
                dwDrives := GetLogicalDrives();
                for i := 2 to 25 do if dwDrives and (1 shl i) <> 0 then
                begin
                    QueryDosDevice(Format('%s:', [Chr(Ord('A') + i)]), aBuf[0], SizeOf(aBuf));
                    szDeviceName := CharArrayToString(aBuf);
                    if Pos(szDeviceName, szFileName) = 0 then Continue;
                    StringChangeEx(szFileName, szDeviceName, Format('%s:', [Chr(Ord('A') + i)]), True);
                    if CompareText(szProcess, szFileName) = 0 then Break;
                end;
                if CompareText(szProcess, szFileName) <> 0 then
                begin
                    CloseHandle(hProc);
                    Continue;
                end;
            end;
            // try stop process
            try
                EnumWindows(CallbackAddr('EnumWindowsProc'), pe32.th32ProcessID);
                case WaitForSingleObject(hProc, dwTimeout) of
                    WAIT_OBJECT_0: Result := TA_SUCCESS_CLEAN;
                    WAIT_TIMEOUT: try
                        lpProcName := GetProcAddress(GetModuleHandle('kernel32.dll'), 'ExitProcess');
                        if lpProcName = 0 then Exit;
                        //
                        lpMemory := VirtualAllocEx(hProc, 0, SizeOf(lpProcName), MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
                        if not WriteProcessMemory(hProc, lpMemory, lpProcName, SizeOf(lpProcName), ret) then Exit;
                        //
                        hThread := CreateRemoteThread(hProc, 0, 0, lpMemory, 0, 0, lpThreadId);
                        if hThread > 0 then
                        case WaitForSingleObject(hThread, dwTimeout) of
                            WAIT_OBJECT_0: Result := TA_SUCCESS_CLEAN;
                            WAIT_TIMEOUT: if TerminateProcess(hProc, 0) then Result := TA_SUCCESS_KILL;
                        end;
                    finally
                        CloseHandle(hThread);
                    end;
                end;
            finally
                CloseHandle(hProc);
                if CompareText(szProcess, ExtractFileName(szProcess)) <> 0 then Exit;
            end;
        end;
    finally
        CloseHandle(hProcessSnap);
    end;
end;

/////////////////////////////
procedure InitializeWizard();
begin
    TerminateApp('jqs.exe', 5000);
end;

Последний раз редактировалось El Sanchez, 14-03-2013 в 17:47. Причина: update

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:11, 06-12-2012 | #1361



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

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


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


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

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


Подскажите я сделал репак программки сохранил все пути и данные но программа после запуска начинает проверять свой ключ на оф сайте тобиш подлинность если заблокировать доступ в инет срабатывает кряк и программа дальше запускается и работает ...

возможно есть функция или скрипт inno setup что сама по себе блокирует все соединения из вне ..в инет .. или подскажите где посмотреть или как сделать если есть ...

мне нужно не вручную а автоматом и не через антивирус ...как делает это skidrow в своих крЯках.... зарание спасибо...

Отправлено: 15:08, 07-12-2012 | #1362


Забанен


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

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


DEZMONDS, На этом форуме обсуждение взлома не приветствуется.
А так, если какая программа лезет в интернет, то смотрите в сторону C:\WINDOWS\system32\drivers\etc\ на файл hosts.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:35, 07-12-2012 | #1363


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


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

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


SoftLine, да но мне взлом не нужен мне надо что бы в скрипте inno setup прописать как ты говоришь в файле hosts запрет програмы или копирнуть этот хост и как на различные системы винды указать путь? антивирус наверно сразу орать будет что типа репак лезет в запрещенные файлы... и воозможно это сделать автоматом? или подскажите в правельном направлении думаю? через inno setup это делать или кряк дописивать?

Отправлено: 16:45, 07-12-2012 | #1364


Аватара для YURSHAT

Старожил


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

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


DEZMONDS, вам нужно знать веб адреса на которые лезет программулина и соответственно сделать их локальными.
Прописать в хост примерно такие строки
Код: Выделить весь код
127.0.0.1     forum.oszone.net

-------
Если я знаю, что знаю мало, я добьюсь того, чтобы знать больше... В.И. Ленин
Krinkels.org - сжатие данных и создание инсталляторов


Последний раз редактировалось YURSHAT, 07-12-2012 в 17:05.

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:52, 07-12-2012 | #1365


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


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

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


YURSHAT, да я понял ... но все же только вручную? или можно как то через скрипт инно?

Отправлено: 17:35, 07-12-2012 | #1366


Аватара для Gnom_aka_Lexander

Ветеран


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

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


тут то, что тебе нужно. грузим файл в стринг-лист, дописываем туда-же нужные строчки, снова сохраняем в файл. для хоста потребуется запросить права админа - парой страниц назад найдешь, полный пример именно для хост-файла - тоже есть на форуме, хотя в примере по ссылке все что нужно - указать нужный файл для полноценного примера. в который раз убеждаюсь - все форумы по сабжу можно закрывать - решены уже совершенно все вопросы, многие не по одному разу, единственное, что поддерживает жизнь форумов в этой тематике - лентяи, которым нужно, чтоб все сделали за них. Даже нажали кнопку в поиске.

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:18, 07-12-2012 | #1367


Забанен


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

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


DEZMONDS, Прогнав поиск, вот что выдало по файлу hosts: #200, #477, #532.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:41, 07-12-2012 | #1368


Аватара для Gnom_aka_Lexander

Ветеран


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

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


к #532 дополню - более корректно перевод строки будет +chr(13)+chr(10)+
chr(13) - возврат каретки в начало
chr(10) - собственно, новая строка

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.

Это сообщение посчитали полезным следующие участники:

Отправлено: 20:55, 07-12-2012 | #1369


Аватара для R.i.m.s.k.y.

Ветеран


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

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


inno умеет только bmp в формы вставлять? как быть с прозрачностью фона, ведь у каждого своя тема оформления венды и установщика?

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 19:21, 08-12-2012 | #1370



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход