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

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

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

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

Ветеран


Contributor


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


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

Профиль | Отправить 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

 

Аватара для Johny777

Ветеран


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

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


Gnom_aka_Lexander, El Sanchez,

дельфи и инно используют для поиска WinApi функции:
function FindFirstFile(...): THandle;
function FindNextFile(...): BOOL;
function FindClose(...): BOOL;
которые лежат в kernel32.dll и работа напрямую с этими функциями дала бы некоторое повышение скорости
а то получаем торомоза из-за вызова функции внутри другой

вот накатал 2 примера рекурсивного поиска по расширению: обычная и с использованием вышеупомянутых WinApi напрямую:

читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
CreateAppDir=no
DisableWelcomePage=yes
InfoBeforeFile=compiler:Default.isl


[code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif
const
    MAX_PATH = 260;
    INVALID_HANDLE_VALUE = -1;

type
    _WIN32_FIND_DATA = record
        dwFileAttributes: DWORD;
        ftCreationTime: TFileTime;
        ftLastAccessTime: TFileTime;
        ftLastWriteTime: TFileTime;
        nFileSizeHigh: DWORD;
        nFileSizeLow: DWORD;
        dwReserved0: DWORD;
        dwReserved1: DWORD;
        cFileName: array[0..MAX_PATH - 1] of Char;
        cAlternateFileName: array[0..13] of Char;
    end;


function FindFirstFile(lpFileName: String; var lpFindFileData: _WIN32_FIND_DATA): THandle; external 'FindFirstFile{#A}@kernel32.dll stdcall';
function FindNextFile(hFindFile: THandle; var lpFindFileData: _WIN32_FIND_DATA): BOOL; external 'FindNextFile{#A}@kernel32.dll stdcall';
function Win_Api_FindClose(hFindFile: THandle): BOOL; external 'FindClose@kernel32.dll stdcall';

function GetTickCount(): DWORD; external 'GetTickCount@kernel32.dll stdcall';


function CharArrayToString(cArray: array of Char): String;
begin
    Result := '';
    while cArray[Length(Result)] <> #0 do Insert(cArray[Length(Result)], Result, Length(Result)+1);
end;



function WinApiSearchForFiles(const RootFolder, Extension: String; var ResultPathArray: array of String): Boolean;  // get all files with their path
var
    FindData: _WIN32_FIND_DATA;
    NewSearchPath: String;
    hFindFile: THandle;
    Len: Integer;
begin
    NewSearchPath := AddBackslash(RemoveBackslash(RootFolder));

    hFindFile := FindFirstFile(NewSearchPath + Extension, FindData);

    if hFindFile = INVALID_HANDLE_VALUE then
    begin
        MsgBoxEx(0, SysErrorMessage(DLLGetLastError), SetupMessage(msgErrorTitle), MB_OK, 0, 0);
        Exit;
    end;
    
    try
        repeat
        
            if FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
            begin
                Len := GetArrayLength(ResultPathArray);                                                                   
                SetArrayLength(ResultPathArray, Len+1);
                ResultPathArray[Len] := NewSearchPath + CharArrayToString(FindData.cFileName);
            end else if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY) and (String(FindData.cFileName[0]) <> '.') and (String(FindData.cFileName[0]) <> '..') then
            /// recurse
            WinApiSearchForFiles(AddBackslash(NewSearchPath + CharArrayToString(FindData.cFileName)), Extension, ResultPathArray);
            
        until not FindNextFile(hFindFile, FindData);

    finally
        Result := Win_Api_FindClose(hFindFile);
    end;
end;


////////////////////////////////////////////////////////////////



procedure SearchForFiles(const RootFolder, Extension: String; var ResultPathArray: array of String);  // get all files with their path 
var
    NewSearchPath: String;
    FindRec: TFindRec;
    Len: Integer;
begin
    NewSearchPath := AddBackslash(RemoveBackslash(RootFolder));

    if FindFirst(NewSearchPath + Extension, FindRec) then
    try

        repeat
            if (FindRec.Name <> '.') and (FindRec.Name <> '..') then
            begin
                if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
                begin
                    Len := GetArrayLength(ResultPathArray);
                    SetArrayLength(ResultPathArray, Len+1);
                    ResultPathArray[Len] := NewSearchPath + FindRec.Name;
                end else
                if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = FILE_ATTRIBUTE_DIRECTORY then SearchForFiles(NewSearchPath + FindRec.Name, Extension, ResultPathArray);
            end;
        until not FindNext(FindRec);

    finally
        FindClose(FindRec);
    end;
end;





procedure InitializeWizard; 
var
    i: Integer;
    S: String;
    UndefArray: array of String;
    
    dwStartTime: DWORD;
begin
//    dwStartTime := GetTickCount();
//    SearchForFiles('C:\Program Files\Adobe\Adobe Photoshop CS5.1 (64 Bit)', '*.*', UndefArray);
//    MsgBox('Inno Search Time:' + #32 + IntToStr(GetTickCount()-dwStartTime), mbInformation, MB_OK);
    
    dwStartTime := GetTickCount();
    WinApiSearchForFiles('C:\Program Files\Adobe\Adobe Photoshop CS5.1 (64 Bit)', '*.*', UndefArray);
    MsgBox('Win Api Search Time:' + #32 + IntToStr(GetTickCount()-dwStartTime), mbInformation, MB_OK);

    for i := 0 to GetArrayLength(UndefArray)-1 do S := S + #13#10 + UndefArray[i];
    WizardForm.InfoBeforeMemo.Text := S;
end;


но в результате обычная работает быстрее тк, для апишной приходится использовать функцию конвертации массива символов в строку, тк урезанная инно не умеет преобразовать тип String(array of Char)

=================

ускорить поиск думаю можно указанием имени файла а не расширения:
SearchForFiles('C:\Program Files\Adobe\Adobe Photoshop CS5.1 (64 Bit)', 'Bib.dll', UndefArray);

Отправлено: 22:48, 27-03-2013 | #1991



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

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


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

Ветеран


Contributor


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

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


Цитата Gnom_aka_Lexander:
Все той. Уточнял у вопрошавшего как надежно отличить полную версию от демо-версии. »
Gnom_aka_Lexander, я не про предназначение функции, я про это:
Цитата Gnom_aka_Lexander:
inc(dc); »

Отправлено: 23:16, 27-03-2013 | #1992


Аватара для i-Lex

Старожил


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

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


Большое спасибо Gnom_aka_Lexander, за помощь!

Отправлено: 06:05, 28-03-2013 | #1993


Аватара для i-Lex

Старожил


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

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


Цитата El Sanchez:
рвать поиск на первом совпадении и надеяться, что на флешке не окажется второй и более копий программы, до которых поиск так и не дойдет. »
У клиента только один экземпляр.
Флешка чисто консовская. Поэтому можно рвать поиск при первом результате

Отправлено: 06:42, 28-03-2013 | #1994


Аватара для habib2302

Ветеран


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

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


Цитата habib2302:
доброе время суток.дайте пожалуйста мне скрипт на кликабельное лого без фона »
АААУУУ!!!МНЕ КТО НИБУДЬ ОТВЕТИТ?

-------
Помог? От "Полезное сообщение" не откажусь!!!


Отправлено: 10:41, 28-03-2013 | #1995


Аватара для audiofeel

Пользователь


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

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


доброе утро всем, ну задумка (или глупость) такая = хотелось GroupEdit.Color := clBlack; ну получилось но при нажатии "NoIconsCheck" фон в GroupEdit "белеет" и текста не видно (было бы хорошо если бы "GroupEdit" был транспарент) . И как сделать фон "NoIconsCheck" черный (или транспарент) а текст белый. Спасибо!

Отправлено: 13:00, 28-03-2013 | #1996


Старожил


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

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


habib2302 http://rghost.ru/44839186
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:54, 28-03-2013 | #1997


Пользователь


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

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


Все приветы! Уважаемые форумчане, подскажите как грамотно реализовать алгоритм, который будет отображать в компоненте Label проценты из ProgressGauge (progressbar); Я имею данный скрипт:

Код: Выделить весь код
procedure ExtLog();
begin
  with WizardForm.ProgressGauge do
    ProgressLabel.Caption:=IntToStr((Position-Min)/((Max - Min)/100)) + '%';
end;
Далее я просто вставляю ссылку процедуры на файлы в раздел [Files] таким образомЖ

Код: Выделить весь код
[Files]
Source: E:\Program*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; AfterInstall: ExtLog();
Вроде как все правильно и оно работает, но проценты из ProgressLabel под конец доходят до 112% а не до 100 как должно быть..
Уважаемые, помогите пожалуйста решить данный косяк...

Отправлено: 16:01, 28-03-2013 | #1998


Ветеран


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

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


Alloc Пост #239

Отправлено: 16:45, 28-03-2013 | #1999


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

Ветеран


Contributor


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

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


2 all, тема будет закрыта и переведена в архивное состояние. Продолжаем тут: http://forum.oszone.net/thread-257328.html
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:09, 28-03-2013 | #2000



Компьютерный форум 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




 
Переход