Ветеран
Сообщения: 649
Благодарности: 444
|
Профиль
|
Отправить PM
| Цитировать
Nightwishh,
Цитата Nightwishh:
т.к. я на них хочу повесить OneClick (звук wav). »
|
а в чём проблема? так не пойдёт?
читать дальше »
Код: 
procedure ComponentsListOnClickCheck(Sender: TObject);
begin
// проигрывание звука
end;
procedure InitializeWizard();
begin
WizardForm.ComponentsList.OnClickCheck := @ComponentsListOnClickCheck;
end;
=================================================================================
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;
Исходник с файлами:
|