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

Показать сообщение отдельно

Аватара для Johny777

Ветеран


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

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


Nightwishh,
Цитата Nightwishh:
т.к. я на них хочу повесить OneClick (звук wav). »
а в чём проблема? так не пойдёт?
читать дальше »
Код: Выделить весь код
procedure ComponentsListOnClickCheck(Sender: TObject);
begin
    // проигрывание звука
end;


procedure InitializeWizard();
begin
    WizardForm.ComponentsList.OnClickCheck := @ComponentsListOnClickCheck;
end;


=================================================================================
icq99999999,
Цитата icq99999999:
распаковать всё »
а всё это сколько?
нет такой возможности извлечь папку из инсталла не во время установки. Только если извлекать по одному файлу, как в последнем примере.
Не знаю сколько файлов лежит в папке spacep, поэтому сделал так: пакуешь папку в 7z архив и кладёшь рядом с экзешником инсталла
читать дальше »
Код: Выделить весь код
[Files]
Source: "7-zip32.dll"; Flags: dontcopy nocompression


[code    ]
#define A = (Defined UNICODE) ? "W" : "A"
#define Use_Debug

const
    SPACE_CHAR = #32;
    SZ_OK = 0;
    RUN_PARAM = '-run';
    ARCHIVE_NAME = 'spacep.7z';
    INI_NAME = 'comp.ini';
    

function SevenZip(const _hwnd: HWND; _szCmdLine: PAnsiChar; _szOutput: PAnsiChar; const _dwSize: DWORD): Integer; external 'SevenZip@files:7-zip32.dll stdcall';
function CopyFile(lpExistingFileName, lpNewFileName: String; bFailIfExists: BOOL): BOOL; external 'CopyFile{#A}@kernel32.dll stdcall';


function SimpleExtractSevenZip(const ArchivePath, DestPath: AnsiString): Boolean;
var
    SevenZipCmd: AnsiString;
begin
    SevenZipCmd := Format( 'x "%s" "%s" -y -hide', [ ArchivePath, AddBackslash(RemoveBackslash(DestPath)) ] );
    CharToOemBuff(SevenZipCmd);
    Result := SevenZip(0, SevenZipCmd, '', 0) = SZ_OK;
end;


function InitializeSetup(): Boolean;
var
    ResultCode: Integer;
    TempPath, OuterPath: String;
begin
    Result := False;

    OuterPath := AddBackslash( ExpandConstant('{src}') );
    TempPath := AddBackslash( ExpandConstant('{tmp}') );

    if Pos(RUN_PARAM, GetCmdTail) <> 0 then // c запуска ключом:
    begin
        #ifdef Use_Debug
            MsgBox('распаковать всё в %temp%\spacep', mbInformation, MB_OK);
        #endif
        if not SimpleExtractSevenZip(OuterPath + ARCHIVE_NAME, TempPath) then MsgBox(SysErrorMessage(DLLGetLastError), mbError, MB_OK);
        
        #ifdef Use_Debug
            MsgBox('скопировать из папки где находится программа файл comp.ini в папку %temp%\spacep\', mbInformation, MB_OK);
        #endif
        CopyFile(OuterPath + INI_NAME, TempPath + 'spacep\' + INI_NAME, False);

        #ifdef Use_Debug
            MsgBox('запустить файл с параметром %temp%\spacep\1\hidcon.exe -setup.cmd', mbInformation, MB_OK);
        #endif
        Exec(TempPath + 'spacep\1\' + 'hidcon.exe', '-setup.cmd', TempPath + 'spacep\1\', SW_SHOW, ewWaitUntilTerminated, ResultCode);
        
        #ifdef Use_Debug
            MsgBox('запустить файл с параметром %temp%\spacep\1\hidcon.exe -1бат.bat', mbInformation, MB_OK);
        #endif
        Exec(TempPath + 'spacep\1\' + 'hidcon.exe', '-1бат.bat', TempPath + 'spacep\1\', SW_SHOW, ewWaitUntilTerminated, ResultCode);
        
        #ifdef Use_Debug
            MsgBox('...папка в темпе удалится сама', mbInformation, MB_OK);
        #endif
    end else // при обычном запуске:
    begin
        #ifdef Use_Debug
            MsgBox('распаковать всё в %temp%\spacep', mbInformation, MB_OK);
        #endif
        if not SimpleExtractSevenZip(OuterPath + ARCHIVE_NAME, TempPath) then MsgBox(SysErrorMessage(DLLGetLastError), mbError, MB_OK);
        
        #ifdef Use_Debug
            MsgBox('скопировать из папки где находится программа файл comp.ini в папку %temp%\spacep\', mbInformation, MB_OK);
        #endif
        CopyFile(OuterPath + INI_NAME, TempPath + 'spacep\' + INI_NAME, False);
        
        #ifdef Use_Debug
            MsgBox('запустить файл с параметром %temp%\spacep\1\hidcon.exe -1бат.bat', mbInformation, MB_OK);
        #endif
        Exec(TempPath + 'spacep\1\' + 'hidcon.exe', '-1бат.bat', TempPath + 'spacep\1\', SW_SHOW, ewWaitUntilTerminated, ResultCode);
        
        #ifdef Use_Debug
            MsgBox('после завершения hidcon.exe удалить папку %temp%\spacep\1', mbInformation, MB_OK);
        #endif
        DelTree(TempPath + 'spacep\1\', True, True, True);
        
        #ifdef Use_Debug
            MsgBox('запустить %temp%\spacep\set.exe', mbInformation, MB_OK);
        #endif
        Exec(TempPath + 'spacep\' + 'set.exe', '-1бат.bat', TempPath + 'spacep\', SW_SHOW, ewWaitUntilTerminated, ResultCode);
        
        #ifdef Use_Debug
            MsgBox('после завершения процесса set.exe скопировать %temp%\spacep\comp.ini и положить рядом с программой', mbInformation, MB_OK);
            MsgBox('а что, если инсталл на диске?', mbError, MB_OK);
        #endif
        CopyFile(TempPath + 'spacep\' + INI_NAME, OuterPath + INI_NAME, False);
        
        #ifdef Use_Debug
            MsgBox('...папка в темпе удалится сама', mbInformation, MB_OK);
        #endif
    end;
end;


Исходник с файлами:

Последний раз редактировалось Johny777, 14-02-2014 в 18:39.

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

Отправлено: 03:19, 13-08-2013 | #1005