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

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

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

Аватара для 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] - Скачать;


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

Отправлено: 19:06, 28-03-2013

 

Ветеран


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

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


innot20,
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.


[code]
const
    TH32CS_SNAPPROCESS = $2;
    INVALID_HANDLE_VALUE = -1;
    TIMER_ID = 01;

type
    TPROCESSENTRY32 = record
        dwSize, cntUsage, th32ProcessID: DWORD;
        th32DefaultHeapID: Longint;
        th32ModuleID, cntThreads, th32ParentProcessID: DWORD;
        pcPriClassBase: Longint;
        dwFlags: DWORD;
        szExeFile: array [0..259] of char;
    end;

    TFNTimerProc = Longint;

function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle; external 'CreateToolhelp32Snapshot@kernel32.dll stdcall';
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';
function CloseHandle(hObject: THandle): Boolean; external 'CloseHandle@kernel32.dll stdcall';
function SetTimer(hWnd: HWND; nIDEvent, uElapse: UINT; lpTimerFunc: TFNTimerProc): UINT; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: HWND; uIDEvent: UINT): BOOL; external 'KillTimer@user32.dll stdcall';


var
    msgPage: TOutputMsgWizardPage;


function IsProcessRunning(FileName: String): Boolean;
var
    hProcessSnap: THandle;
    pe32: TPROCESSENTRY32;
    szExeFile: String;
begin
    hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if hProcessSnap = INVALID_HANDLE_VALUE then Exit;
    pe32.dwSize := sizeof(pe32);
    if not Process32First(hProcessSnap, pe32) then Exit;
    while not Result and Process32Next(hProcessSnap, pe32) do
    begin
        szExeFile := '';
        while not (pe32.szExeFile[Length(szExeFile)] = #0) do szExeFile := szExeFile + pe32.szExeFile[Length(szExeFile)];
        Result := LowerCase(FileName) = LowerCase(szExeFile);
    end;
    CloseHandle(hProcessSnap);
end;


procedure TimerProc(hwnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD);
begin
    WizardForm.NextButton.Enabled := not IsProcessRunning('WorldOfTanks.exe');
end;


procedure InitializeWizard();
begin
    msgPage := CreateOutputMsgPage(wpSelectComponents, 'Заголовок', 'Подзаголовок', 'Сообщение');
end;


function ShouldSkipPage(PageID: Integer): Boolean;
begin
    case PageFromID(PageID) of
        msgPage: Result := not IsProcessRunning('WorldOfTanks.exe');
    end;
end;


procedure CurPageChanged(CurPageID: Integer);
begin
    KillTimer(WizardForm.Handle, TIMER_ID);
    
    case PageFromID(CurPageID) of
        msgPage: if IsProcessRunning('WorldOfTanks.exe') then SetTimer(WizardForm.Handle, TIMER_ID, 30, CallbackAddr('TimerProc'));
    end;
end;


procedure DeinitializeSetup();
begin
    KillTimer(WizardForm.Handle, TIMER_ID);
end;


И еще:
читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.


[code]
const
    TH32CS_SNAPPROCESS = $2;
    INVALID_HANDLE_VALUE = -1;

type
    TPROCESSENTRY32 = record
        dwSize, cntUsage, th32ProcessID: DWORD;
        th32DefaultHeapID: Longint;
        th32ModuleID, cntThreads, th32ParentProcessID: DWORD;
        pcPriClassBase: Longint;
        dwFlags: DWORD;
        szExeFile: array [0..259] of char;
    end;


function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle; external 'CreateToolhelp32Snapshot@kernel32.dll stdcall';
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';
function CloseHandle(hObject: THandle): Boolean; external 'CloseHandle@kernel32.dll stdcall';


var
    msgPage: TOutputMsgWizardPage;


function IsProcessRunning(FileName: String): Boolean;
var
    hProcessSnap: THandle;
    pe32: TPROCESSENTRY32;
    szExeFile: String;
begin
    hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if hProcessSnap = INVALID_HANDLE_VALUE then Exit;
    pe32.dwSize := sizeof(pe32);
    if not Process32First(hProcessSnap, pe32) then Exit;
    while not Result and Process32Next(hProcessSnap, pe32) do
    begin
        szExeFile := '';
        while not (pe32.szExeFile[Length(szExeFile)] = #0) do szExeFile := szExeFile + pe32.szExeFile[Length(szExeFile)];
        Result := LowerCase(FileName) = LowerCase(szExeFile);
    end;
    CloseHandle(hProcessSnap);
end;


function NextButtonClick(CurPageID: Integer): Boolean;
begin
    Result := True;

    case PageFromID(CurPageID) of
        msgPage:
        begin
            if not IsProcessRunning('WorldOfTanks.exe') then Result := True
            else begin
                MsgBox('Программа все еще запущена', mbError, MB_OK);
                Result := False;
            end;
        end;
    end;
end;


procedure InitializeWizard();
begin
    msgPage := CreateOutputMsgPage(wpSelectComponents, 'Заголовок', 'Подзаголовок', 'Сообщение');
end;


function ShouldSkipPage(PageID: Integer): Boolean;
begin
    case PageFromID(PageID) of
        msgPage: Result := not IsProcessRunning('WorldOfTanks.exe');
    end;
end;

Последний раз редактировалось saurn, 27-01-2014 в 19:19.

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

Отправлено: 18:39, 27-01-2014 | #2001



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

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


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


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

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


saurn, запустил танки, запустил установщик и установил все моды без проблем, то что включен процесс сообщений не выдало

Отправлено: 19:05, 27-01-2014 | #2002


SHVtYW4=


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

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


saurn,
Ошибочка:
Код: Выделить весь код
procedure TimerProc(hwnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD);
begin
    WizardForm.NextButton.Enabled := not IsProcessRunning('calc.exe');
end;
Код: Выделить весь код
procedure TimerProc(hwnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD);
begin
    WizardForm.NextButton.Enabled := not IsProcessRunning(''WorldOfTanks.exe');
end;
лучше тогда так:
Код: Выделить весь код
#define KillExe "WorldOfTanks.exe"

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


[code]
const
    TH32CS_SNAPPROCESS = $2;
    INVALID_HANDLE_VALUE = -1;
    TIMER_ID = 01;

type
    TPROCESSENTRY32 = record
        dwSize, cntUsage, th32ProcessID: DWORD;
        th32DefaultHeapID: Longint;
        th32ModuleID, cntThreads, th32ParentProcessID: DWORD;
        pcPriClassBase: Longint;
        dwFlags: DWORD;
        szExeFile: array [0..259] of char;
    end;

    TFNTimerProc = Longint;

function CreateToolhelp32Snapshot(dwFlags, th32ProcessID: DWORD): THandle; external 'CreateToolhelp32Snapshot@kernel32.dll stdcall';
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';
function CloseHandle(hObject: THandle): Boolean; external 'CloseHandle@kernel32.dll stdcall';
function SetTimer(hWnd: HWND; nIDEvent, uElapse: UINT; lpTimerFunc: TFNTimerProc): UINT; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: HWND; uIDEvent: UINT): BOOL; external 'KillTimer@user32.dll stdcall';


var
    msgPage: TOutputMsgWizardPage;


function IsProcessRunning(FileName: String): Boolean;
var
    hProcessSnap: THandle;
    pe32: TPROCESSENTRY32;
    szExeFile: String;
begin
    hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if hProcessSnap = INVALID_HANDLE_VALUE then Exit;
    pe32.dwSize := sizeof(pe32);
    if not Process32First(hProcessSnap, pe32) then Exit;
    while not Result and Process32Next(hProcessSnap, pe32) do
    begin
        szExeFile := '';
        while not (pe32.szExeFile[Length(szExeFile)] = #0) do szExeFile := szExeFile + pe32.szExeFile[Length(szExeFile)];
        Result := LowerCase(FileName) = LowerCase(szExeFile);
    end;
    CloseHandle(hProcessSnap);
end;


procedure TimerProc(hwnd: HWND; uMsg: UINT; idEvent: UINT_PTR; dwTime: DWORD);
begin
    WizardForm.NextButton.Enabled := not IsProcessRunning('{#KillExe}');
end;


procedure InitializeWizard();
begin
    msgPage := CreateOutputMsgPage(wpSelectComponents, 'Заголовок', 'Подзаголовок', 'Сообщение');
end;


function ShouldSkipPage(PageID: Integer): Boolean;
begin
    case PageFromID(PageID) of
        msgPage: Result := not IsProcessRunning('{#KillExe}');
    end;
end;


procedure CurPageChanged(CurPageID: Integer);
begin
    KillTimer(WizardForm.Handle, TIMER_ID);

    case PageFromID(CurPageID) of
        msgPage: if IsProcessRunning('{#KillExe}') then SetTimer(WizardForm.Handle, TIMER_ID, 30, CallbackAddr('TimerProc'));
    end;
end;


procedure DeinitializeSetup();
begin
    KillTimer(WizardForm.Handle, TIMER_ID);
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:06, 27-01-2014 | #2003


Аватара для diman_21Ru

Старожил


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

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


saurn , огромнейшее тебе спасибо

Отправлено: 19:08, 27-01-2014 | #2004


SHVtYW4=


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

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


Цитата innot20:
то что включен процесс сообщений не выдало »
Потому что на юникодной версии Inno компилил, у меня на ANSI всё нормально работает.

-------
09a468a9b4293cd82adf6d6c60a9da82 | Tm9yZGVr
В связи со сменой железа и переходом на LInux с полным отказом от Windows - посещение на форуме будет редким.


Отправлено: 19:16, 27-01-2014 | #2005


Ветеран


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

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


Цитата innot20:
запустил танки, запустил установщик и установил все моды без проблем, то что включен процесс сообщений не выдало »
Тестировал на процессе калькулятора и забыл изменить в одном месте. Поправил. А так, все работает.

Отправлено: 19:21, 27-01-2014 | #2006


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


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

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


Спасибо всем за помощь

Отправлено: 20:07, 27-01-2014 | #2007


SHVtYW4=


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

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


Цитата saurn:
А так, все работает. »
А я ещё раз повторю, что примеры на юникодной версии не будут работать.

-------
09a468a9b4293cd82adf6d6c60a9da82 | Tm9yZGVr
В связи со сменой железа и переходом на LInux с полным отказом от Windows - посещение на форуме будет редким.


Отправлено: 20:57, 27-01-2014 | #2008


Ветеран


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

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


Цитата Nordek:
на юникодной версии не будут работать »
Юникодовой никогда не пользовался. Про нее и слова не было. На ANSI все работает.

Отправлено: 21:00, 27-01-2014 | #2009


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


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

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


помогите пожалуйста ещё сделать проверку на версию игры
считать версию игры можно 3 способами
1. файл version.xml
его содержимое:
Код: Выделить весь код
<version.xml>
	<appname>	#menu:login/version	</appname>
	<version> v.0.8.11 Common Test #578</version> // цифра 578 может меняться у другого пользователя
	<showLicense>   0   </showLicense>
	<ingameHelpVersion>	1	</ingameHelpVersion>
	<meta>
		<client>368825</client>
		<overrides>368619</overrides>
		<localization>368469 RU</localization>
	</meta>
</version.xml>
2. у файла WorldOfTanks.exe в свойствах > подробно
есть версия файла
Код: Выделить весь код
0.8.11.0
3. файл paths.xml
содержимое первых 3 строчек
Код: Выделить весь код
<root>
  <Paths>
    <Path>./res_mods/0.8.11 Common Test</Path>

Отправлено: 21:23, 27-01-2014 | #2010



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты 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




 
Переход