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

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

Закрытая тема
Настройки темы
[архив] Inno Setup .:[все вопросы]:.

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


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

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


Изменения
Автор: volk1234
Дата: 27-08-2009
Описание: перевел в архив
Лимит страниц.
Тема закрыта.
продолжаем тут:

Inno Setup. Обсуждение установщика

Скрипты Inno Setup. Помощь и советы



Полезные ресурсы:
Официальный сайт| Inno Setup 5.2.3 RU
Русская справка |Зеракало 1| Зеракало 2
ISTool 5.30 |Русификатор
Русификатор ISTool |Зеркало 1|Зеркало 2
Inno Setup Script Generator |Зеркало 1
Unpaker 2.1 от 21.04.2009 - распаковывает инсталляторы, созданные с помощью Inno Setup, начиная с версии 2.0.18 по 5.2.4.
InnoUnpaker 2.6b3 [от valeron87]- можнет просмотривать содержание CompiledCode.bin
Unpaker 0.23 - расширенная китайская версия 2008-08-08 ( модификация)
Unpacker 0.24 | Зеркало 1 | Зеркало 2 - Inno Setup Unpacker (innounp plus) - расширенная версия распаковщика инсталляторов Inno Setup начиная с версии 2.0.8 по 5.3.0 Beta. Поддерживаются версии Unicode. Русифицирована. Последний релиз: 0.24 [23.05.2009]
Набор Restools
Restools - расширенная версия Inno Setup от китайских разработчиков, добавляет вашему инсталлятору новые возможности по оформлению, а также более удобный редактор скриптов (требуется наличие установленного Preprocessor'а).
Последние версии разработок от Restools:
InnoCompiler090319_English - в него входят файлы: Compil32.exe и Templates.dat;
Inno_ISCmplr_Setup090302 - в него входят файлы, лучше из папки InnoSetup_FullVCL: setup.e32, ISCmplr.dls, ISCmplr.dll и SetupLdr.e32.
InnoCompiler090319_Russian - Русский перевод (80%) от tem000 - NEW !

QuickStart Pack - Inno Setup + Preprocessor (последняя версия ispack-5.2.4-dev)
"Всё в одном" от unikum111
читать дальше »

Цитата unikum111:
В сборку входят следующие компоненты:
Inno Setup compiler 5.2.2 русская версия;
ISTool 5.2.1 русская версия;
Inno Script Generator английская версия;
Inno Setup Unpacker Explorer 1.0 аглийская версия;
Примечание: в Inno Setup Unpacker Explorer 1.0 заменён innounp.exe на тестовую версию 2.0, так что распаковывает инсталляторы вплоть до версии 5.2.2.
Есть возможность выбора компонентов.
Скачать: ifolder, RapidShare, iBox (Размер: 5.34 Mb).»



Полезные мелочи для Inno Setup:

- Converter v.0.1.2 - конвертор REG- файлов в формат скриптов Inno от Serega_ -новая версия
- Как убрать страницу приветствия (wpWelcome) в мастере установки приложения:
- Примеры скриптов на паскале
- Inno Setup Addon 0.07 For Total Commander
- Параметры командной строки инсталляторов InnoSetup:

Код: Выделить весь код
/SP-
Отключает страницу "Эта программа установит... Вы хотите продолжить?" инсталятора. 
Выполнится только если DisableStartupPrompt секции [Setup] равна yes. 

/SILENT, /VERYSILENT  
Установка в ускоренном или очень ускоренном режиме. При установке в ускоренном режиме 
окно мастера и фоновое окно мастера не отображаются, отображается только окно прогресса. 
При очень ускоренной установке окно прогресса тоже не отображается. Остальная установка 
проходит как обычно - отображаются сообщения об ошибках в ходе установки, страница 
приветствия (если ее отображение не отменено директивой DisableStartupPrompt или 
параметром '/SP-' командной строки).

Если после установки необходима перезагрузка, команды '/NORESTART' не дано и установка 
проходит в ускоренном режиме, появится сообщение "Перезагрузить компьютер?". Если режим 
установки очень ускоренный, система перезагрузится не спрашивая.

/LOG 
Указывает инсталятору создать log-файл в папке TEMP для подробного отчета о действиях 
и событиях в секции [Run], предпринятых в ходе установки. Применяется при отслеживании 
ошибок. Например, если вы подозреваете, что файл не был удален, хотя должен был, 
log-файл сообщит, что файл былдействительно пропущен и почему. 

log-файлу присваивается уникальное имя на базе текущей даты. (Существующие файлы не 
перезаписываются и не дополняются). 
Информация, содержащаяся в log-файле, техническая и поэтому не может быть понята 
пользователем. 

/LOG="filename" 
Параметр похож на /LOG, но в отличие от него позволяет указать фиксированный
путь/имя файла для log-файла. Если файл с указанным именем уже существует, он будет 
заменен. Если файл не может быть создан, установка прервется и выдаст сообщение 
об ошибке.

/NOCANCEL  
Не дает пользователю прервать установку, отключая кнопку Отменить и игнорируя клики на 
кнопке Закрыть. Используется в комбинации с '/SILENT' или '/VERYSILENT'. 

/NORESTART 
Указывает инсталятору не перезагружать компьютер даже если это необходимо. 

/RESTARTEXITCODE=exit code  
Задает инсталятору код, который он должен возвратить, если необходима перезагрузка. 
Используется с '/NORESTART'.
См. также Коды выхода инсталятора. (кому интерестно, могу выложить или же доступно в хелпе)

/LOADINF="filename" 
Указывает инсталятору загрузить параметры установки из указанного файла после проверки 
командной строки. Этот файл может быть подготовлен с помощью '/SAVEINF='command.
Не забудьте ставить кавычки при использовании имен, содержащих пробелы. 

/SAVEINF="filename" 
Указывает инсталятору сохранять параметры установки в указанный файл.
Не забудьте ставить кавычки при использовании имен, содержащих пробелы. 

/LANG=language 
Задает используемый язык. language задает имя языка, заданного в параметре секции 
[Languages]. При использовании параметра /LANG появляется диалог Выбор языка установки.

/DIR="x:\dirname" 
Меняет имя папки, заданное по умолчанию, на странице Выбор папки назначения. 
Должен быть задан полный путь. 

/GROUP="folder name" 
Меняет имя папки на странице Выбор папки меню Пуск. Если директива 
DisableProgramGroupPage секции [Setup] равна yes, этот параметр командной строки 
игнорируется. 

/NOICONS 
Указывает инсталятору проверять, выбрана ли команда Не создавать значков на странице 
Выбор папки меню Пуск. 

/COMPONENTS="comma separated list of component names" 
Меняет выбраные по умолчанию компоненты. В этом случае параметр командной строки 
указывает инсталятору менять тип установки на Выборочный. 

/PASSWORD=password  Задает пароль. Если не указана директива Password секции [Setup], 
этот параметр игнорируется. Если введен неправильный пароль, параметр 
также игнорируется.

Отправлено: 21:42, 17-03-2005

 

Аватара для Raf-9600

Старожил


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

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


Цитата Serega:
объясните поподробней, как понять работать в невидимом режиме?»
Нужно чтобы окно программы не отображалось. Т.е. чтоб юзер вобще не подозревал что она сечас работает.

Цитата Serega:
т.е. вы её запускаете и что вы собрались с ней сделать? »
Это:
Код: Выделить весь код
Filename: "{app}\WinMPQ-SU.exe"; Flags: runhidden; Parameters: s Sound.txt; StatusMsg: "Встраивание озвучки юнитов..."; Components: inMPQ; Flags: skipifdoesntexist
Т.е. как минимум, она будет находиться в {app}
И под конец инсталляции, будет несколько раз вызываться, для редактирования MPQ архивов. К примеру, с параметром "s Sound.txt" она должна вызываться только после того как отработает:
Код: Выделить весь код
Filename: "{app}\del Ogg [SoundUnit].bat"; Flags: runhidden; StatusMsg: "Удаление лишних файлов..."; Components: SoundUnit;
и т.д.

Цитата Serega:
Пример »
Нужно чтобы WinMPQ запускался не вместе с инсталлятором, а так, какбудто его запуск прописан в [Run]. Просто, как минимум, инсталлятор должен сначала установить, и зарегать библиотеки VB4, чтоб WinMPQ мог запуститься.
И кстати, на данный момент, окно WinMPQ таки отображается.

Последний раз редактировалось Raf-9600, 07-07-2009 в 09:18.


Отправлено: 09:07, 07-07-2009 | #1091



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

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


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


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

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


Подскажите пожалуйста 1 как поменять здесь фон
,
(просто у меня в предыдущем стоит и сюда такоеже надо)
И 2 как переименовать эту кнопку?

Отправлено: 16:21, 07-07-2009 | #1092


Ветеран


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

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


Raf-9600, ещё вопрос, программа запускается с ключами и после завершения работы закрывается сама? или её надо принудительно закрывать?

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 23:22, 07-07-2009 | #1093


Аватара для Raf-9600

Старожил


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

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


Serega, закрывается сама.

upd
Ещё одна просьба: ктонить может объединить эти коды:

Слайд-шоу в окне инсталляции
читать дальше »
Код: Выделить весь код
#define TIME_FOR_VIEW 10

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
SolidCompression=yes

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: InnoCallback.dll; Flags: dontcopy noencryption nocompression solidbreak;
Source: *.bmp; Flags: dontcopy noencryption nocompression solidbreak;

Source: D:\Games\StarCraft enGB\StarDat.mpq; DestDir: {app}

[_code]
const
n=21; //количество слайдов
type
TProc = procedure(HandleW, msg, idEvent, TimeSys: LongWord);
TRandNumbers = array[1..N] of byte;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:InnoCallback.dll stdcall';

function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';

function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';

function get_unique_random_number(X:byte):TRandNumbers;
var
A,b,c: string;
i,j,k:byte;
begin
 For i:=1 to X do A:=A+chr(i);
 B:='';
 For i:=1 to X do begin
  j:=Random(Length(A)-1)+1;
  C:='';
  B:=B + A[j];
  for k:=1 to Length(A) do
  if k<>j then C:=C+A[k];
  A:=C;
 end;
 for i:=1 to X do Result[i]:=ord(B[i]);
end;

var
TimerID: LongWord;
currTime: Integer;
SplashImage: TBitmapImage;
StatusMessages: TNewStaticText;
bmp: TRandNumbers;
z:byte;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
begin
currTime := currTime + 1;
if (currTime mod {#TIME_FOR_VIEW} = 0)
 then begin
  SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[currTime/{#TIME_FOR_VIEW}])+'.bmp'));
  if (currTime/{#TIME_FOR_VIEW} = N) then currTime:=0;
 end;
end;


procedure InitializeWizard;
begin
bmp:=get_unique_random_number(N);
ExtractTemporaryFile('Image_'+inttostr(bmp[1])+'.bmp');

currTime := 0;

WizardForm.ProgressGauge.Parent := WizardForm;
WizardForm.ProgressGauge.Top := WizardForm.CancelButton.Top + ScaleY(12);
WizardForm.ProgressGauge.Left := ScaleX(10);
WizardForm.ProgressGauge.Width := WizardForm.MainPanel.Width - ScaleX(20);
WizardForm.ProgressGauge.Height := 16;
WizardForm.ProgressGauge.Hide;

WizardForm.StatusLabel.Parent := WizardForm;
WizardForm.StatusLabel.Top := WizardForm.ProgressGauge.Top - ScaleY(18);
WizardForm.StatusLabel.Left := ScaleX(10);
WizardForm.StatusLabel.Width := ScaleX(397);
WizardForm.StatusLabel.Hide;

SplashImage := TBitmapImage.Create(WizardForm);
SplashImage.Top := 0;
SplashImage.Left := 0;
SplashImage.Width := WizardForm.MainPanel.Width;
SplashImage.Height := WizardForm.Bevel.Top;
SplashImage.Parent := WizardForm.InnerPage;
SplashImage.Stretch := True;
SplashImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Image_'+inttostr(bmp[1])+'.bmp'));
SplashImage.Hide;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssInstall then
begin
WizardForm.StatusLabel.Caption := 'Распаковка слайдов ...';
for z:=2 to N do ExtractTemporaryFile('Image_'+inttostr(bmp[z])+'.bmp');
end;
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
begin
if (CurPageID = wpInstalling) then
begin
pfunc := WrapTimerProc(@OnTimer, 5);
TimerID := SetTimer(0, 0, 1000, pfunc);
WizardForm.PageNameLabel.Visible := False;
WizardForm.PageDescriptionLabel.Visible := False;
WizardForm.InnerNotebook.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.ProgressGauge.Show;
WizardForm.StatusLabel.Show;
SplashImage.Show;
WizardForm.CancelButton.Enabled := True;
WizardForm.CancelButton.Top := WizardForm.Bevel.Top + ScaleY(100);
end else
begin
WizardForm.ProgressGauge.Hide;
SplashImage.Hide;
WizardForm.FileNameLabel.Hide;
WizardForm.StatusLabel.Hide;
if (CurPageID > wpInstalling) and (CurPageID < wpFinished) then
begin
WizardForm.InnerNotebook.Show;
WizardForm.Bevel1.Show;
WizardForm.MainPanel.Show;
WizardForm.PageNameLabel.Show;
WizardForm.PageDescriptionLabel.Show;
end;
If CurPageID = wpFinished then
end;
end;

procedure DeInitializeSetup();
begin
KillTimer(0, TimerID);
end;

Скрипт для вывода данных о винтах
читать дальше »
Код: Выделить весь код
var
  NeedSize:Integer;
  FreeMB, TotalMB: Cardinal;
  NeedSpaceLabel: TLabel;
  n: Integer;
  VolumeName, FileSystemName: String;
  VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
  ListBox: TListBox;
  StartMenuTreeView: TStartMenuFolderTreeView;

procedure GetFreeSpaceCaption(Sender: TObject);
var
  Path: String;
begin
  Path := ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled := False else
  WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
  if NeedSize > 1024 then
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard();
begin
  NeedSize := 6100;                  //Здесь указывается место для приложения
  WizardForm.DiskSpaceLabel.Hide;
  NeedSpaceLabel := TLabel.Create(WizardForm);
  with NeedSpaceLabel do
  begin
  Parent := WizardForm.SelectDirPage;
  Left := ScaleX(0);
  Top := ScaleY(220);
  Width := ScaleX(209);
  Height := ScaleY(13);
  end;
  ListBox:= TListBox.Create(WizardForm)
  ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
  ListBox.Font.Size:= 9
  ListBox.Font.Style:= []
  ListBox.Font.Name:= 'Courier New';
  ListBox.OnClick:= @ObjectOnClick;
  ListBox.Parent:= WizardForm.SelectDirPage;
  WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
  WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
  end;

procedure CurPageChanged(CurPageID: Integer);
  begin
  if CurPageID=wpSelectDir then
  begin
  GetNeedSpaceCaption;
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled:=False
  ListBoxRefresh
  end;
  end;

Описания компонентов
читать дальше »
Код: Выделить весь код
function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';

var
  Info: TNewStaticText;
  InfoCaption: TNewStaticText;
  InfoPanel: TPanel;

procedure DeinitializeSetup();
begin
  disabledesc();
end;

procedure InitializeWizard();
begin
  WizardForm.TYPESCOMBO.Visible:= false;
  WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
  WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
  WizardForm.ComponentsList.Width := ScaleX(200);
  InfoPanel := TPanel.Create(WizardForm);
  InfoPanel.Parent := WizardForm.SelectComponentsPage;
  InfoPanel.Caption := '';
  InfoPanel.Top := WizardForm.ComponentsList.Top;
  InfoPanel.Left := ScaleX(216);
  InfoPanel.Width := ScaleX(200);
  InfoPanel.Height := WizardForm.ComponentsList.Height;
  InfoPanel.BevelInner := bvRaised;
  InfoPanel.BevelOuter := bvLowered;
  InfoCaption := TNewStaticText.Create(WizardForm);
  InfoCaption.Parent := WizardForm.SelectComponentsPage;
  InfoCaption.Caption := 'ГиКц';
  InfoCaption.Left := ScaleX(224);
  InfoCaption.Top := InfoPanel.Top - ScaleY(5);
  InfoCaption.Font.Color := clActiveCaption;
  Info := TNewStaticText.Create(WizardForm);
  Info.Parent := InfoPanel;
  Info.AutoSize := False;
  Info.Left := ScaleX(6);
  Info.Width := ScaleX(188);
  Info.Top := ScaleY(12);
  Info.Height := WizardForm.ComponentsList.Height - ScaleY(18);
  Info.Caption := 'Переместите ваш указатель мыши на компоненты чтобы увидеть их описание.';
  Info.WordWrap := true;
  enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
       'Английская озвучка;'+ // SoundUnit\eng
       'Французская озвучка;'+ // SoundUnit\fra
       'Немецкая озвучка;'+ // SoundUnit\deu
       'Итальянская озвучка;'+ // SoundUnit\ita
       'Испанская озвучка;' // SoundUnit\spa
       );
end;

Запрет установки в папку Windows
читать дальше »
Код: Выделить весь код
Function NextButtonClick(CurPageID: Integer): Boolean; Begin
    Result:= True
    if (CurPageID = wpSelectDir) and (Pos(Uppercase(ExpandConstant('{win}')), Uppercase(ExpandConstant('{app}'))) > 0) then Result:= MessageBox(StrToInt(ExpandConstant('{wizardhwnd}')), ExpandConstant('{cm:SysDirSelect}'), 'Установка в системную папку', MB_YESNO or $30) = idYes;
End;

Поиск нужных файлов
читать дальше »
Код: Выделить весь код
function NextButtonClick(CurPageID: Integer): Boolean;
begin
  Result := True;

  if CurPageID = wpReady then
  begin
    if IsComponentSelected('Game\Lokal') then
      if (FileSearch('Install.exe', ExpandConstant('{app}')) = '') then
        if (FileSearch('StarCraft.mpq', ExpandConstant('{app}')) = '') then
      begin
        SuppressibleMsgBox('Файл Install.exe не найден в папке назначения, скопируйте его с' #13 'лицензионного диска StarCraft, в папку, для начала инсталляции.', mbCriticalError, MB_OK, MB_OK);
        Result := False;
      end else
        Result := True;
  end;
end;


upd
И ещё, можно ли заставить Inno, в начале инсталляции, если выбран компонент "Game\Lokal\Backup", заставить запустить виндовское окно копирования файлов, которое бы скопировало некоторые файлы в {app}\Backup?

Последний раз редактировалось Raf-9600, 08-07-2009 в 17:04.


Отправлено: 07:57, 08-07-2009 | #1094


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


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

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


Вот мой скрипт:
читать дальше »
Код: Выделить весь код
[Setup] 
AppName=Fallout 3 
AppVerName=Fallout 3 
DefaultDirName={pf}\My Program 
OutputDir=C:\ 
WizardImageFile=E:\WizardImageFile.bmp 
WizardSmallImageFile=E:\WizardSmallImageFile.bmp 
 
 
[Languages] 
Name: "ENG"; MessagesFile: "compiler:Default.isl" 
Name: "RUS"; MessagesFile: "compiler:Languages\Russian.isl" 
 
 
[Files] 
Source: icon.ico; DestDir: {tmp}; Flags: dontcopy 
 
[_code] 
Procedure InitializeWizard(); 
begin 
with WizardForm do begin 
  Position:=poScreenCenter 
  ClientWidth:=690 
  ClientHeight:=496 
  Font.Color:=clWindow 
  Font.Name:='MS Sans Serif' 
  Font.Style:=[] 
  with Bevel do begin 
    Left:=0 
    Top:=313 
    Width:=497 
    Height:=3 
    Visible:=False 
  end 
  with CancelButton do begin 
    Left:=600 
    Top:=462 
    Width:=77 
    Height:=25 
    BringToFront 
  end 
  with NextButton do begin 
    Left:=500 
    Top:=462 
    Width:=77 
    Height:=25 
    BringToFront 
  end 
  with BackButton do begin 
    Left:=206 
    Top:=462 
    Width:=77 
    Height:=25 
    BringToFront 
  end 
  with OuterNotebook do begin 
    Left:=0 
    Top:=0 
    Width:=690 
    Height:=496 
    with WelcomePage do begin 
      Color:=11232829 
      with WizardBitmapImage do begin 
        Left:=0 
        Top:=0 
        Width:=690 
        Height:=496 
      end 
      with WelcomeLabel2 do begin 
        Left:=205 
        Top:=230 
        Width:=465 
        Height:=100        //ïåðâîå îêíî 
      end 
      with WelcomeLabel1 do begin 
        Left:=205 
        Top:=190 
        Width:=465 
        Height:=28 
        Font.Color:=clWindow 
        Font.Size:=8 
      end 
    end 
    with InnerPage do begin 
      with Bevel1 do begin 
        Left:=0 
        Top:=58 
        Width:=499 
        Height:=3 
        Visible:=False 
      end 
      with InnerNotebook do begin 
        Left:=205 
        Top:=79 
        Width:=465 
        Height:=354 
        BringToFront 
        Color:=11232829                       // âòîðîå îêíî(ïóòü óñòàíîâêè) 
        with LicensePage do begin 
          with LicenseNotAcceptedRadio do begin 
            Left:=0 
            Top:=338 
            Width:=465 
            Height:=17 
            Checked:=True 
          end 
          with LicenseAcceptedRadio do begin 
            Left:=0 
            Top:=130 
            Width:=465 
            Height:=17 
          end 
          with LicenseMemo do begin 
            Left:=0 
            Top:=38 
            Width:=465 
            Height:=266 
            ReadOnly:=True 
            ScrollBars:=ssVertical 
          end 
          with LicenseLabel1 do begin 
            Left:=0 
            Top:=0 
            Width:=465 
            Height:=28 
          end 
        end 
        with PasswordPage do begin 
          with PasswordEdit do begin 
            Left:=0 
            Top:=50 
            Width:=465 
            Height:=21 
            Font.Color:=clWindowText 
          end 
          with PasswordEditLabel do begin 
            Left:=0 
            Top:=34 
            Width:=465 
            Height:=14 
          end 
          with PasswordLabel do begin 
            Left:=0 
            Top:=0 
            Width:=465 
            Height:=28 
          end 
        end 
        with InfoBeforePage do begin 
          with InfoBeforeMemo do begin 
            Left:=0 
            Top:=24 
            Width:=465 
            Height:=327 
            ScrollBars:=ssVertical 
          end 
          with InfoBeforeClickLabel do begin 
            Left:=0 
            Top:=0 
            Width:=465 
            Height:=14 
          end 
        end 
        with UserInfoPage do begin 
          with UserInfoSerialEdit do begin 
            Left:=0 
            Top:=120 
            Width:=465 
            Height:=21 
            Font.Color:=clWindowText 
          end 
          with UserInfoSerialLabel do begin 
            Left:=0 
            Top:=104 
            Width:=465 
            Height:=14 
          end 
          with UserInfoOrgEdit do begin 
            Left:=0 
            Top:=68 
            Width:=465 
            Height:=21 
            Font.Color:=clWindowText 
          end 
          with UserInfoOrgLabel do begin 
            Left:=0 
            Top:=52 
            Width:=465 
            Height:=14 
          end 
          with UserInfoNameEdit do begin 
            Left:=0 
            Top:=16 
            Width:=465 
            Height:=21 
            Font.Color:=clWindowText 
          end 
          with UserInfoNameLabel do begin 
            Left:=0 
            Top:=0 
            Width:=465 
            Height:=14 
          end 
        end 
        with SelectDirPage do begin 
          with SelectDirBitmapImage do begin 
            Left:=0 
            Top:=0 
            Width:=32 
            Height:=32 
            Visible:=False 
          end 
          with DiskSpaceLabel do begin 
            Left:=0 
            Top:=340 
            Width:=465 
            Height:=14 
          end 
          with DirBrowseButton do begin 
            Left:=388 
            Top:=288 
            Width:=77 
            Height:=25 
          end 
          with DirEdit do begin 
            Left:=0 
            Top:=290 
            Width:=378 
            Height:=21 
            Font.Color:=clWindowText 
          end 
          with SelectDirBrowseLabel do begin 
            Left:=0 
            Top:=24 
            Width:=465 
            Height:=28 
          end 
          with SelectDirLabel do begin 
            Left:=0 
            Top:=0 
            Width:=465 
            Height:=14 
          end 
        end 
        with SelectComponentsPage do begin 
          with ComponentsDiskSpaceLabel do begin 
            Left:=0 
            Top:=340 
            Width:=417 
            Height:=14 
          end 
          with ComponentsList do begin 
            Left:=0 
            Top:=48 
            Width:=465 
            Height:=275 
            Font.Color:=clWindow 
            Color:=11232829 
          end 
          with TypesCombo do begin 
            Left:=0 
            Top:=24 
            Width:=465 
            Height:=21 
            Font.Color:=clWindow 
            Color:=11232829 
           end 
          with SelectComponentsLabel do begin 
            Left:=0 
            Top:=0 
            Width:=465 
            Height:=14 
          end 
        end 
        with SelectProgramGroupPage do begin 
          with SelectGroupBitmapImage do begin 
            Left:=0 
            Top:=0 
            Width:=32 
            Height:=32 
            Visible:=False 
          end 
          with NoIconsCheck do begin 
            Left:=0 
            Top:=337 
            Width:=465 
            Height:=17 
          end 
          with GroupBrowseButton do begin 
            Left:=388 
            Top:=288 
            Width:=77 
            Height:=25 
          end 
          with GroupEdit do begin 
            Left:=0 
            Top:=290 
            Width:=378 
            Height:=21 
            Font.Color:=clWindowText 
          end 
          with SelectStartMenuFolderBrowseLabel do begin 
            Left:=0 
            Top:=24 
            Width:=465 
            Height:=28 
          end 
          with SelectStartMenuFolderLabel do begin 
            Left:=0 
            Top:=0 
            Width:=465 
            Height:=14 
          end 
        end 
        with SelectTasksPage do begin 
          with TasksList do begin 
            Left:=0 
            Top:=34 
            Width:=465 
            Height:=317 
            Color:=11232829 
          end 
          with SelectTasksLabel do begin 
            Left:=0 
            Top:=0 
            Width:=465 
            Height:=28 
          end 
        end 
        with ReadyPage do begin 
          with ReadyMemo do begin 
            Left:=0 
            Top:=34 
            Width:=465 
            Height:=317 
            Color:=11232829 
          end 
          with ReadyLabel do begin 
            Left:=0 
            Top:=0 
            Width:=465 
            Height:=28 
          end 
        end 
        with PreparingPage do begin 
          with PreparingErrorBitmapImage do begin 
            Left:=0 
            Top:=0 
            Width:=16 
            Height:=16 
            Visible:=False 
          end 
          with PreparingLabel do begin 
            Left:=24 
            Top:=0 
            Width:=393 
            Height:=14 
            Visible:=False 
          end 
        end 
        with InstallingPage do begin 
          with FilenameLabel do begin 
            Left:=0 
            Top:=16 
            Width:=465 
            Height:=16 
          end 
          with StatusLabel do begin 
            Left:=0 
            Top:=0 
            Width:=465 
            Height:=16 
          end 
          with ProgressGauge do begin 
            Left:=0 
            Top:=42 
            Width:=465 
            Height:=21 
            Min:=0 
            Max:=100 
          end 
        end 
        with InfoAfterPage do begin 
          with InfoAfterMemo do begin 
            Left:=0 
            Top:=24 
            Width:=465 
            Height:=327 
            ScrollBars:=ssVertical 
          end 
          with InfoAfterClickLabel do begin 
            Left:=0 
            Top:=0 
            Width:=465 
            Height:=14 
          end 
        end 
      end 
      with MainPanel do begin 
        Left:=0 
        Top:=0 
        Width:=690 
        Height:=496 
        Color:=clWindow 
        with WizardSmallBitmapImage do begin 
          Left:=0 
          Top:=0 
          Width:=690 
          Height:=496 
          BackColor:=clWindow 
        end 
        with PageDescriptionLabel do begin 
          Left:=25 
          Top:=25 
          Width:=500 
          Height:=14 
          Color:=6697728 
          Font.Color:=clWindow 
        end 
        with PageNameLabel do begin 
          Left:=15 
          Top:=7 
          Width:=500 
          Height:=14 
          Color:=6697728 
          Font.Color:=clWindow 
        end 
      end 
    end 
    with FinishedPage do begin 
      Color:=11232829 
      with WizardBitmapImage2 do begin 
        Left:=0 
        Top:=0 
        Width:=690 
        Height:=496 
      end 
      with NoRadio do begin 
        Left:=205 
        Top:=227 
        Width:=465 
        Height:=17 
      end 
      with YesRadio do begin 
        Left:=205 
        Top:=199 
        Width:=465 
        Height:=17 
      end 
      with RunList do begin 
        Left:=205 
        Top:=199 
        Width:=465 
        Height:=149 
        BorderStyle:=bsNone 
      end 
      with FinishedLabel do begin 
        Left:=205 
        Top:=119 
        Width:=465 
        Height:=53 
      end 
      with FinishedHeadingLabel do begin 
        Left:=205 
        Top:=79 
        Width:=465 
        Height:=24 
        Font.Color:=clWindow 
        Font.Size:=8 
      end 
    end 
  end 
  with BeveledLabel do begin 
    Left:=10 
    Top:=468 
    Width:=150 
    Height:=14 
    Enabled:=False 
    Color:=14405068 
  end 
end 
end;


Помогите мне его обьединить со след скриптами:

Запуск фоновой картинки во время инстяляции
читать дальше »
Код: Выделить весь код
[Setup] 
AppName=Background Image 
AppVerName=Background Image 
CreateAppDir=false 
 
[Files] 
Source: BackgroundImage.bmp; DestDir: embedded; Flags: dontcopy noencryption 
 
[_code] 
function ShowWindow(hWnd, nCmdShow: LongWord): LongWord; external 'ShowWindow@user32.dll stdcall'; 
 
Procedure BackgroundOnActivate(Sender: TObject); Begin if WizardForm.Visible then WizardForm.Show End; 
 
Procedure InitializeWizard; 
var BackgroundForm: TForm; BackgroundImage: TBitmapImage; 
    Begin 
BackgroundForm:= TForm.Create(nil) 
    BackgroundForm.BorderStyle:= bsNone 
    BackgroundForm.OnActivate:= @BackgroundOnActivate; 
    ShowWindow(BackgroundForm.Handle, sw_ShowMaximized)    // ôîíîâîå îêíî íà ïîëíûé ýêðàí 
BackgroundImage:= TBitmapImage.Create(BackgroundForm) 
    BackgroundImage.Align:= alClient 
    BackgroundImage.Stretch:= True 
ExtractTemporaryFile('BackgroundImage.bmp') 
    BackgroundImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\BackgroundImage.bmp')) 
    BackgroundImage.Parent:= BackgroundForm 
end;


Позволяет выбрать иконку инсталятора
читать дальше »
Код: Выделить весь код
[Setup] 
AppName=CheckFile 
AppVerName=CheckFile 
DefaultDirName={pf}\CheckFile 
OutputDir=. 
DirExistsWarning=no 
 
[Files] 
Source: icon.ico; DestDir: {tmp}; Flags: dontcopy 
 
[_code] 
function LoadImage(hInst: THandle; ImageName: PChar; ImageType: UINT; X, Y: Integer; Flags: UINT): THandle; external 'LoadImageA@user32.dll stdcall delayload'; 
 
Procedure InitializeWizard; 
Begin 
  ExtractTemporaryFile('icon.ico'); 
  SendMessage(WizardForm.Handle, $80, 0, LoadImage(0,ExpandConstant('{tmp}')+'\icon.ico',1,16,16,$1010)); 
End;

Отправлено: 20:08, 08-07-2009 | #1095


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


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

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


Cкрипт для распаковки arc архивов
читать дальше »
Код: Выделить весь код
;[English]  
;Example of using unarc.dll for decompression of FreeArc archives with displaying of progress indicator in Inno Setup window  
;  
;[Russian]  
;Пример распаковки FreeArc архива при помощи unarc.dll, с отображением прогресс бара в окне Inno Setup.  
;Один архив можно слить с инсталятором, если их общий размер не более 2Гб, через "copy /b setup.exe+xxx.arc newsetup.exe" и указать в коде Archives = '{srcexe}'  
;  
; Изменения от Victor_Dobrov, 02-07-2009  
;   - Кнопка инсталлятора в панели задач отображает время до завершения обработки всех архивов и общий процент распаковки.  
;   - в Unicode-версиях инсталлятора правильно отображаются имена файлов.  
;  
; Изменения от CTACKo & SotM'а. 01-07-2009  
;   - Правильно создаются папки, если в пути установки встречаются русские буквы  
;   - При компиляции определяется использование PAnsiChar/PChar. Можно использовать как обычную так и UNICODE версию с установленным препроцессором.  
;  
; Изменения от SotM'а. 23-06-2009  
;   - Нижний прогресс бар сместил чуть-чуть вниз, чтобы было видно имя распаковываемого файла.  
;   - Русские имена файлов теперь правильно отображаются.  
;   - При нажатии "отмены" при распаковке теперь появляется запрос на подтверждение отмены.  
;   - Переименовал некоторые переменные, чтобы их имена несли больше информации.  
;   - Немного переформатировал сам исходный код для более удобного и понятного чтения.  
;   - Исправил пару сообщений на английском языке.  
  
; Изменения от Victor_Dobrov, 15-06-2009  
;   - оптимизация и локализация скрипта, более подробная строка статуса, общий прогресс-бар, при неудачной распаковке выполняется откат (деинсталляция) и показывается текст ошибки.  
  
; Bulat Ziganshin, 13-06-2009  
;   - создание библиотеки unarc.dll и скрипта распаковки freearc_example.iss.  
  
[Setup]  
AppName=FreeArc Example  
AppVerName=FreeArc Example 1.2  
DefaultDirName={pf}\FreeArc Example  
UsePreviousAppDir=false  
DirExistsWarning=no  
ShowLanguageDialog=auto  
OutputBaseFilename=FreeArcExample  
OutputDir=.  
VersionInfoCopyright=Bulat Ziganshin, Victor Dobrov, SotM, CTACKo  
  
[Languages]  
Name: eng; MessagesFile: compiler:Default.isl  
Name: rus; MessagesFile: compiler:Languages\Russian.isl  
  
[CustomMessages]  
eng.ArcCancel=Cancel installation  
eng.ArcBreak=Installation cancelled!  
eng.ArcInfo=Extracted %1 Mb of %2 Mb (%3%%). Archive: %4 of %5.  
eng.ArcTitle=Extracting FreeArc archive  
eng.ArcError=Decompression failed with error code %1  
eng.ArcFail=Decompression failed!  
eng.AllProgress=Overall extraction progress: %1%%  
eng.ArcBroken=Archive %1 is damaged%nor not enough free space.  
eng.Extracting=Extracting: %1  
eng.remains=%1%%, %2 elapsed  
eng.LongTime=at no time  
eng.ending=ending  
  
rus.ArcCancel=Отменить распаковку  
rus.ArcBreak=Установка прервана!  
rus.ArcInfo=Распаковано %1 Мб из %2 Мб (%3%%). Архив: %4 из %5.  
rus.ArcTitle=Распаковка архивов FreeArc  
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1  
rus.ArcFail=Распаковка не завершена!  
rus.AllProgress=Общий прогресс распаковки: %1%%  
rus.ArcBroken=Возможно, архив %1 повреждён%nили недостаточно места на диске назначения.  
rus.Extracting=Распаковывается: %1  
rus.remains=%1%%, жди %2  
rus.LongTime=вечно  
rus.ending=завершение  
  
[Files]  
;Source: *.arc; DestDir: {app}; Flags: nocompression  
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy deleteafterinstall  
Source: compiler:InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy  
  
[UninstallDelete]  
Type: filesandordirs; Name: {app}  
  
[_code]  
const  
    Archives = '{src}\*.arc';    // укажите расположение архивов FreeArc; для внешних файлов строку в [Files] добавлять необязательно  
  
    PM_REMOVE = 1;  
    CP_ACP = 0; CP_UTF8 = 65001;  
  
type  
#ifdef UNICODE  ; если у вас ошибка на этой строке, то установите препроцессор или исправьте скрипт для вашей версии Inno Setup  
    #define A "W"  
#else  
    #define A "A"  ; точка входа в SetWindowText, {#A} меняется на A или W в зависимости от версии  
    PAnsiChar = PChar;  // Required for Inno Setup 5.3.0 and higher. (требуется для Inno Setup версии 5.3.0 и ниже)  
#endif  
#if Ver < 84018176  
    AnsiString = String; // There is no need for this line in Inno Setup 5.2.4 and below (для Inno Setup версий 5.2.4 и выше эта строка не нужна)  
#endif  
  
    TMyMsg = record  
        hwnd: HWND;  
        message: UINT;  
        wParam: Longint;  
        lParam: Longint;  
        time: DWORD;  
        pt: TPoint;  
    end;  
  
    TFreeArcCallback = function (what: PAnsiChar; int1, int2: Integer; str: PAnsiChar): Integer;  
    TArc = record Path: string; Size: Extended; end;  
  
var  
    ProgressBar: TNewProgressBar;  
    ExtractFile: TNewStaticText;  
    lblExtractFileName: TLabel;  
    btnCancelUnpacking:    TButton;  
    CancelCode, n, UnPackError, StartInstall: Integer;  
    Arcs: array of TArc;  
    msgError: string;  
    m: Extended;  
  
Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall';  
Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall';  
  
function PeekMessage(var lpMsg: TMyMsg; hWnd: HWND; wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';  
function TranslateMessage(const lpMsg: TMyMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';  
function DispatchMessage(const lpMsg: TMyMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';  
  
Function OemToChar(lpszSrc, lpszDst: AnsiString): longint; external 'OemToCharA@user32.dll stdcall';  
function GetWindowLong(hWnd, nIndex: Integer): Longint; external 'GetWindowLongA@user32 stdcall delayload';  
function SetWindowText(hWnd: Longint; lpString: String): Longint; external 'SetWindowText{#A}@user32 stdcall delayload';  
  
function GetTickCount: DWord; external 'GetTickCount@kernel32';  
function WrapFreeArcCallback (callback: TFreeArcCallback; paramcount: integer):longword; external 'wrapcallback@files:innocallback.dll stdcall';  
function FreeArcExtract (callback: longword; cmd1,cmd2,cmd3,cmd4,cmd5,cmd6,cmd7,cmd8,cmd9,cmd10: PAnsiChar): integer; external 'FreeArcExtract@files:unarc.dll cdecl';  
  
procedure AppProcessMessage;  
var  
    Msg: TMyMsg;  
begin  
    while PeekMessage(Msg, WizardForm.Handle, 0, 0, PM_REMOVE) do begin  
        TranslateMessage(Msg);  
        DispatchMessage(Msg);  
    end;  
end;  
  
Function NumToStr(Float: Extended): String; {Перевод числа в строку с точностью 3 знака (%.3n) с округлением дробной части, если она есть}  
Begin  
    Result:= Format('%.3n', [Float]); StringChange(Result, ',', '.'); while ((Result[Length(Result)] = '0') or (Result[Length(Result)] = '.')) and (Length(Result) > 1) do SetLength(Result, Length(Result)-1);  
End;  
  
function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;  
  
Function Size64(Hi, Lo: Integer): Extended;  
Begin  
    Result:= Lo; if Lo< 0 then Result:= Result + $7FFFFFFF + $7FFFFFFF + 2; for Hi:= Hi-1 Downto 0 do Result:= Result + $7FFFFFFF + $7FFFFFFF + 2;  
End;  
  
// OnClick event function for btnCancel  
procedure btnCancelUnpackingOnClick(Sender: TObject);  
begin  
    if MsgBox( SetupMessage( msgExitSetupMessage ), mbInformation, MB_YESNO ) = IDYES then  
        CancelCode:= -127;  
end;  
  
// Scans the specified folders for archives and add them to list  
function FindArcs(dir: string): Extended;  
var  
    FSR: TFindRec;  
Begin  
    if FindFirst(ExpandConstant(dir), FSR) then  
    try  
        repeat  
            // Skip everything but the folders  
            if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY > 0 then CONTINUE;  
            n:= GetArrayLength(Arcs);  
            // Expand the folder list  
            SetArrayLength(Arcs, n +1);  
            Arcs[n].Path:= ExtractFilePath(ExpandConstant(Archives)) + FSR.Name;  
            Arcs[n].Size:= Size64(FSR.SizeHigh, FSR.SizeLow);  
            Result:= Result + Arcs[n].Size;  
        until not FindNext(FSR);  
    finally  
        FindClose(FSR);  
    end;  
End;  
  
// Converts OEM encoded string into ANSI  
// Преобразует OEM строку в ANSI кодировку  
function OemToAnsiStr( strSource: AnsiString): AnsiString;  
var  
    nRet : longint;  
begin  
    SetLength( Result, Length( strSource ) );  
    nRet:= OemToChar( strSource, Result );  
end;  
  
// Converts ANSI encoded string into UTF-8  
// Преобразует строку из ANSI в UTF-8 кодировку  
function AnsiToUtf8( strSource: string ): string;  
var  
    nRet : integer;  
    WideCharBuf: string;  
    MultiByteBuf: string;  
begin  
    strSource:= strSource + chr(0);  
    SetLength( WideCharBuf, Length( strSource ) * 2 );  
    SetLength( MultiByteBuf, Length( strSource ) * 2 );  
  
    nRet:= MultiByteToWideChar( CP_ACP, 0, strSource, -1, WideCharBuf, Length(WideCharBuf) );  
    nRet:= WideCharToMultiByte( CP_UTF8, 0, WideCharBuf, -1, MultiByteBuf, Length(MultiByteBuf), 0, 0);  
  
    Result:= MultiByteBuf;  
end;  
  
// Sets the TaskBar title  
Procedure SetTaskBarTitle(Title: String); var h: Integer;  
Begin  
    h:= GetWindowLong(MainForm.Handle, -8); if h <> 0 then SetWindowText(h, Title);  
End;  
  
// Converts milliseconds to standart time  
Function TicksToTime(Ticks: DWord; detail: Boolean): String; Begin {милисекунды в стандартное время}  
    if detail or (Ticks/3600 >= 1000) {hour} then if Ticks/3600000 > 23 then Result:= cm('LongTime') else Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)  else if Ticks/60 < 1000 {min} then Result:= IntToStr(Ticks/1000) +'.'+ NumToStr(trunc((Ticks/1000 - trunc(Ticks/1000))*10)) +'s' else Result:= IntToStr(Ticks/60000) +'m '+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2) +'s';  
End;  
  
// The main callback function for unpacking FreeArc archives  
function FreeArcCallback (what: PAnsiChar; Mb, sizeArc: Integer; str: PAnsiChar): Integer;  
var  
    percents, Elapsed: Integer;  
begin  
    if string(what)='filename' then  
        // Update FileName label  
        lblExtractFileName.Caption:= FmtMessage( cm( 'Extracting' ), [OemToAnsiStr( str )] )  
    else  
        if (string(what)='progress') and (sizeArc>0) then  
            // Update progress bar with additional info  
            with WizardForm.ProgressGauge do  
            begin  
                // Calculate current percents  
                percents:= (Mb*1000) div sizeArc;  
                ProgressBar.Position:= percents;  
                ExtractFile.Caption:= FmtMessage(cm('ArcInfo'), [IntToStr(Mb), IntToStr(sizeArc), Format('%.1n', [Abs(percents/10)]), IntToStr(n+1), IntToStr(GetArrayLength(Arcs)) ]);  
                Position:= Tag + round(ProgressBar.Position * m)  
                  
                percents:= (Position-Min)/((Max - Min)/1000)  
                WizardForm.FileNameLabel.Caption:= FmtMessage(cm('AllProgress'), [Format('%.1n', [Abs(percents/10)])]);  
                if position > 0 then Elapsed:= trunc((GetTickCount - StartInstall) * Abs((max - position)/position)) else Elapsed:= 0;  
                // Update the taskbar title  
                if Elapsed = 0 then SetTaskBarTitle(cm('ending')) else SetTaskBarTitle(FmtMessage(cm('remains'), [IntToStr(percents/10), TicksToTime(Elapsed, false)]));  
            end;  
    AppProcessMessage;  
    Result:= CancelCode;  
end;  
  
// Extracts all found archives  
function UnPack(Archives: string): Integer;  
var  
    allSize: Extended;  
    callback: longword;  
    FreeMB, TotalMB: Cardinal;  
begin  
    // Show the 'Cancel unpacking' button and set it as default button  
    btnCancelUnpacking.Show;  
    WizardForm.ActiveControl:= btnCancelUnpacking;  
    WizardForm.ProgressGauge.Position:= 0;  
    WizardForm.ProgressGauge.Max:= 1000;  
    // Get the size of all archives  
    allSize:= FindArcs(Archives);  
  
    for n:= 0 to GetArrayLength(Arcs) -1 do  
    begin  
        m:= Arcs[n].Size/allSize;    // Size of the current archive (объём текущего архива)  
        WizardForm.ProgressGauge.Tag:= WizardForm.ProgressGauge.Position;  
        CancelCode:= 0;  
        AppProcessMessage;  
        callback:= WrapFreeArcCallback(@FreeArcCallback,4);   //FreeArcCallback has 4 arguments  
        try  
            // Pass the specified arguments to 'unarc.dll'  
            Result:= FreeArcExtract (callback, 'x', '-o+', '-dp' + AnsiToUtf8( ExpandConstant('{app}') ), '--', Arcs[n].Path, '', '', '', '', '');  
            if Result = 0 then Result:= CancelCode;  
        except  
            Result:= -63;  //    ArcFail  
        end;  
  
        // Error occured  
        if Result <> 0 then  
        begin  
            msgError:= FmtMessage(cm('ArcError'), [IntToStr(Result)]);  
            GetSpaceOnDisk(ExtractFileDrive(ExpandConstant('{app}')), True, FreeMB, TotalMB);  
            case Result of  
                -1: if FreeMB < 32 {Мб на диске} then msgError:= SetupMessage(msgDiskSpaceWarningTitle)  
                    else msgError:= msgError + #13#10 + FmtMessage(cm('ArcBroken'), [ExtractFileName(Arcs[n].Path)]);  
                -127:   msgError:= cm('ArcBreak');    //Cancel button  
                -63:    msgError:= cm('ArcFail');  
            end;  
//          MsgBox(msgError, mbInformation, MB_OK);    //сообщение показывается на странице завершения  
            Log(msgError);  
            Break;    //прервать цикл распаковки  
        end;  
    end;  
    // Hide the button  
    btnCancelUnpacking.visible:= false;  
end;  
  
procedure CurStepChanged(CurStep: TSetupStep);  
begin  
    if CurStep = ssInstall then StartInstall:= GetTickCount;    {время начала распаковки}  
    if CurStep = ssPostInstall then  
    begin  
        UnPackError:= UnPack(Archives)  
        if UnPackError = 0 then  
            SetTaskBarTitle(SetupMessage(msgSetupAppTitle))  
        else  
        begin  
            // Error occured, uninstall it then  
            Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n);    //откат установки из-за ошибки unarc.dll  
            SetTaskBarTitle(SetupMessage(msgErrorTitle))  
            WizardForm.Caption:= SetupMessage(msgErrorTitle) +' — '+ cm('ArcBreak')  
        end;  
    end;  
end;  
  
//    стандартный способ отката (не нужна CurPageChanged), но архивы распаковываются до извлечения файлов инсталлятора  
//    if CurStep = ssInstall then  
//      if UnPack(Archives) <> 0 then Abort;  
  
Procedure CurPageChanged(CurPageID: Integer);  
Begin  
    if (CurPageID = wpFinished) and (UnPackError <> 0) then  
    begin // распаковщик вернул ошибку  
        WizardForm.FinishedLabel.Font.Color:= $0000C0;    //красный  
        WizardForm.FinishedLabel.Height:= WizardForm.FinishedLabel.Height * 2;  
        WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) + #13#10#13#10 + msgError;  
    end;  
End;  
  
procedure InitializeWizard();  
begin  
    ProgressBar:= TNewProgressBar.Create(WizardForm);  
    ExtractFile:=TNewStaticText.Create(WizardForm);  
    lblExtractFileName:= TLabel.Create( WizardForm );  
    with WizardForm.ProgressGauge do  
    begin  
        // Create a label to show current FileName being extracted  
        lblExtractFileName.parent:=WizardForm.InstallingPage;  
        lblExtractFileName.autosize:=false;  
        lblExtractFileName.Width:= Width;  
        lblExtractFileName.top:=Top + ScaleY(35);  
        lblExtractFileName.Caption:= '';  
  
        // Create a label to show percentage  
        ExtractFile.parent:=WizardForm.InstallingPage;  
        ExtractFile.autosize:=false;  
        ExtractFile.Width:= Width;  
        ExtractFile.top:=lblExtractFileName.Top + ScaleY(16);  
        ExtractFile.caption:=cm('ArcTitle');  
  
        // Create a separate progress bar  
        ProgressBar.SetBounds(Left, ExtractFile.Top + ScaleY(16), Width, Height);  
        ProgressBar.Parent:= WizardForm.InstallingPage;  
        ProgressBar.max:= 1000;  
        ProgressBar.Position:= 0;  
    end;  
  
    // Create a 'Cancel unpacking' button and hide it for now.  
    btnCancelUnpacking:=TButton.create(WizardForm);  
    btnCancelUnpacking.Parent:= WizardForm;  
    btnCancelUnpacking.SetBounds(260, WizardForm.cancelbutton.top, 135, WizardForm.cancelbutton.Height);  
    btnCancelUnpacking.OnClick:= @btnCancelUnpackingOnClick;  
    btnCancelUnpacking.Caption:= cm('ArcCancel');  
    btnCancelUnpacking.Hide;  
end;


Скрипт для вывода данных о винтах
читать дальше »
Код: Выделить весь код
var
  NeedSize:Integer;
  FreeMB, TotalMB: Cardinal;
  NeedSpaceLabel: TLabel;
  n: Integer;
  VolumeName, FileSystemName: String;
  VolumeSerialNo, MaxComponentLength, FileSystemFlags: Longint;
  ListBox: TListBox;
  StartMenuTreeView: TStartMenuFolderTreeView;

procedure GetFreeSpaceCaption(Sender: TObject);
var
  Path: String;
begin
  Path := ExtractFileDrive(WizardForm.DirEdit.Text);
  GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled := False else
  WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
  if NeedSize > 1024 then
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб свободного дискового пространства.' else
  NeedSpaceLabel.Caption := 'Требуется как минимум '+ IntToStr(NeedSize)+ ' Мб свободного дискового пространства.';end;

const oneMB= 1024*1024;
function GetLogicalDrives: DWord; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(nDrive: String): Longint; external 'GetDriveTypeA@kernel32.dll stdcall';
function GetVolumeInformation(PathName,VolumeName: PChar; VolumeNameSize,VolumeSerialNumber,MaxComponentLength,FileSystemFlags: Longint; FileSystemName: PChar; FileSystemNameSize: Longint): Longint; external 'GetVolumeInformationA@kernel32.dll stdcall';
function MessageBox(hWnd: Integer; lpText, lpCaption: String; uType: Cardinal): Integer; external 'MessageBoxA@user32.dll stdcall';

Function ByteOrTB(Bytes: Extended; noMB: Boolean): String; { Перевод числа в значение бт/Кб/Мб/Гб/Тб (до 3х знаков после запятой)}
Begin
if not noMB then Result:= FloatToStr(Int(Bytes)) +' Мб' else
if Bytes < 1024 then Result:= FloatToStr(Int(Bytes)) +' Бт' else
if Bytes/1024 < 1024 then Result:= FloatToStr(round((Bytes/1024)*10)/10) +' Кб' else
If Bytes/oneMB < 1024 then Result:= FloatToStr(round(Bytes/oneMB*100)/100) +' Мб' else
If Bytes/oneMB/1000 < 1024 then Result:= FloatToStr(round(Bytes/oneMB/1024*1000)/1000) +' Гб' else
Result:= FloatToStr(round(Bytes/oneMB/oneMB*1000)/1000) +' Тб'
StringChange(Result, ',', '.')
End;

Function DelSP(String: String): String; { Удаление начальных, конечных и повторных пробелов }
Begin while (Pos(' ', String) > 0) do Delete(String, Pos(' ', String), 1); Result:= Trim(String); End;

Function CutString(String: String; MaxLength: Longint): String; { Обрезать строку до заданного кол-ва символов}
Begin
if Length(String) > MaxLength then Result:= Copy(String, 1, 6) +'...'+ Copy(String, Length(String) - MaxLength +9, MaxLength)
else Result:= String;
End;

Procedure GetDiskInfo(Disk: String);
Begin
FileSystemName:= StringOfChar(' ', 32); VolumeName:= StringOfChar(' ', 256);
GetVolumeInformation(Disk, VolumeName, 255, VolumeSerialNo, MaxComponentLength, FileSystemFlags, FileSystemName, 31);
FileSystemName:= DelSp(FileSystemName); VolumeName:= DelSp(VolumeName); if VolumeName='' then VolumeName:='без метки';
End;

Procedure ListBoxRefresh; var FreeB, TotalB: Cardinal; Path, String: string; Begin
ListBox.Items.Clear
for n:= 1 to 31 do // диск 'А' пропустить
if (GetLogicalDrives and (1 shl n)) > 0 then
if (GetDriveType(Chr(ord('A') + n) +':\') = 2) or (GetDriveType(Chr(ord('A') + n) +':\') = 3) then
if GetSpaceOnDisk(Chr(ord('A') + n) +':\', True, FreeMB, TotalMB) then ListBox.Items.Add(Chr(ord('A') + n) +':');
for n:= 0 to ListBox.Items.Count -1 do begin
Path:= Copy(ListBox.Items[n],1,2) +'\' { если в накопителе нет диска, пропустить обновление }
if GetSpaceOnDisk(Path, False, FreeB, TotalB) and GetSpaceOnDisk(Path, True, FreeMB, TotalMB) then begin GetDiskInfo(Path);
if FreeB >= $7FFFFFFF then String:= PadL(ByteOrTB(FreeMB*oneMB, true),10) else String:= PadL(ByteOrTB(FreeB, true),10);
if TotalB >= $7FFFFFFF then begin TotalB:= TotalMB; FreeB:= FreeMB; String:= PadL(ByteOrTB(TotalMB*oneMB, true),11) +' всего -'+ String end else String:= PadL(ByteOrTB(TotalB, true),11) +' всего| '+ String;
ListBox.Items[n]:= Copy(Path,1,2) + String + PadL(FloatToStr(round(FreeB/TotalB*100)),3)+ '% своб|'+ PadL(FileSystemName,5)+ '| '+ CutString(VolumeName,9); end; end;
End;

Procedure ObjectOnClick(Sender: TObject); Begin
Case TObject(Sender) of
ListBox: for n:= 0 to ListBox.Items.Count-1 do if ListBox.Selected[n] then WizardForm.DirEdit.Text:= Copy(ListBox.Items[n],1,1) +Copy(WizardForm.DirEdit.Text, 2, Length(WizardForm.DirEdit.Text))
StartMenuTreeView: if StartMenuTreeView.Directory <> '' then WizardForm.GroupEdit.Text:= StartMenuTreeView.Directory else WizardForm.GroupEdit.Text:= '{#SetupSetting("DefaultGroupName")}'
WizardForm.NoIconsCheck: begin WizardForm.GroupEdit.Enabled:= not(WizardForm.GroupEdit.Enabled); StartMenuTreeView.Enabled:= WizardForm.GroupEdit.Enabled; WizardForm.GroupBrowseButton.Enabled:= WizardForm.GroupEdit.Enabled end;
end; End;

procedure InitializeWizard();
begin
  NeedSize := 6100;                  //Здесь указывается место для приложения
  WizardForm.DiskSpaceLabel.Hide;
  NeedSpaceLabel := TLabel.Create(WizardForm);
  with NeedSpaceLabel do
  begin
  Parent := WizardForm.SelectDirPage;
  Left := ScaleX(0);
  Top := ScaleY(220);
  Width := ScaleX(209);
  Height := ScaleY(13);
  end;
  ListBox:= TListBox.Create(WizardForm)
  ListBox.SetBounds(WizardForm.DirEdit.Left, WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 8, WizardForm.DirBrowseButton.Left + WizardForm.DirBrowseButton.Width - WizardForm.DirEdit.Left, WizardForm.DiskSpaceLabel.Top - (WizardForm.DirEdit.Top + WizardForm.DirEdit.Height + 12))
  ListBox.Font.Size:= 9
  ListBox.Font.Style:= []
  ListBox.Font.Name:= 'Courier New';
  ListBox.OnClick:= @ObjectOnClick;
  ListBox.Parent:= WizardForm.SelectDirPage;
  WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
  WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
  end;

procedure CurPageChanged(CurPageID: Integer);
  begin
  if CurPageID=wpSelectDir then
  begin
  GetNeedSpaceCaption;
  if FreeMB < NeedSize then
  WizardForm.NextButton.Enabled:=False
  ListBoxRefresh
  end;
  end;


Этот скрипт нужен для того чтобы можно было ставить чекбоксы(создания ярлыка на раб столе, установка DX и.т.д)
читать дальше »
Код: Выделить весь код
[_code] 
// Эти знчения привязываются к файлам и иконкам 
function InstallDirectX: Boolean; 
begin 
  Result:= DirectX.Checked; 
end; 
 
function InstallRedist: Boolean; 
begin 
  Result:=Redist.Checked; 
end; 
 
function CreateIcons: Boolean; 
begin 
  Result:=Icons.Checked; 
end; 
 
function GroupIcons: Boolean; 
begin 
  Result:=Group.Checked; 
end; 
// задал процедуру, чтоб отмечался чебокс еси кликнуть по надписи lblCheckBox 
procedure lblRedistOnClick(Sender: TObject); 
begin 
  if Redist.Checked = False then 
    Redist.Checked:= True else 
  Redist.Checked:= False; 
end; 
 
procedure lblDirectXOnClick(Sender: TObject); 
begin 
  if DirectX.Checked = False then 
    DirectX.Checked:= True else 
  DirectX.Checked:= False; 
end; 
 
procedure IconsOnClick(Sender: TObject); 
begin 
  if Icons.Checked = False then 
    Icons.Checked:= True else 
  Icons.Checked:= False; 
end; 
 
procedure GroupOnClick(Sender: TObject); 
begin 
  if Group.Checked = False then 
    Group.Checked:= True else 
  Group.Checked:= False; 
end; 
// Сами чекбоксы и лейблы к ним 
procedure InitializeWizard(); 
  DirectX:= TCheckBox.Create(WizardForm); 
  with DirectX do 
  begin 
    Parent:= WizardForm.SelectDirPage; 
    Left:= WizardForm.DirEdit.Left + 200; 
    Top:= WizardForm.DirEdit.Top + 35; 
    Width:= ScaleX(14); 
    Height:= ScaleY(14); 
    TabOrder:= 0; 
    Checked:= False; 
  end; 
 
  // создаём надпись для CheckBox'а 
  lblDirectX:= TLabel.Create(WizardForm); 
  with lblDirectX do 
  begin 
    Caption:= ExpandConstant('{cm:DRT}'); 
    Left:= WizardForm.DirEdit.Left + 220; 
    Top:= WizardForm.DirEdit.Top + 35; 
    Width:= ScaleX(150); 
    Height:= ScaleY(13); 
    Transparent := True; 
    Parent:= WizardForm.SelectDirPage; 
    OnClick:= @lblDirectXOnClick; 
  end; 
 
Redist:= TCheckBox.Create(WizardForm); 
  with Redist do 
  begin 
    Parent:= WizardForm.SelectDirPage; 
    Left:= WizardForm.DirEdit.Left + 200; 
    Top:= WizardForm.DirEdit.Top + 70; 
    Width:= ScaleX(14); 
    Height:= ScaleY(14); 
    TabOrder:= 1; 
    Checked:= False; 
  end; 
 
lblRedist:= TLabel.Create(WizardForm); 
  with lblRedist do 
  begin 
    Caption:='Установить MS Visual C++ 2005'; 
    Left:= WizardForm.DirEdit.Left + 220; 
    Top:= WizardForm.DirEdit.Top + 70; 
    Width:= ScaleX(150); 
    Height:= ScaleY(13); 
    Transparent := True; 
    Parent:= WizardForm.SelectDirPage; 
    OnClick:= @lblRedistOnClick; 
  end; 
 
Icons:= TCheckBox.Create(WizardForm); 
  with Icons do 
  begin 
    Parent:= WizardForm.SelectDirPage; 
    Left:= WizardForm.DirEdit.Left; 
    Top:= WizardForm.DirEdit.Top + 35; 
    Width:= ScaleX(14); 
    Height:= ScaleY(14); 
    TabOrder:= 2; 
    Checked:= False; 
  end; 
 
lblIcons:= TLabel.Create(WizardForm); 
  with lblIcons do 
  begin 
    Caption:='Создать ярлык на рабочем столе'; 
    Left:= WizardForm.DirEdit.Left + 20; 
    Top:= WizardForm.DirEdit.Top + 35; 
    Width:= ScaleX(150); 
    Height:= ScaleY(13); 
    Transparent := True; 
    Parent:= WizardForm.SelectDirPage; 
    OnClick:= @IconsOnClick; 
  end; 
 
Group:= TCheckBox.Create(WizardForm); 
  with Group do 
  begin 
    Parent:= WizardForm.SelectDirPage; 
    Left:= WizardForm.DirEdit.Left; 
    Top:= WizardForm.DirEdit.Top + 70; 
    Width:= ScaleX(14); 
    Height:= ScaleY(14); 
    TabOrder:= 3; 
    Checked:= False; 
  end; 
 
lblGroup:= TLabel.Create(WizardForm); 
  with lblGroup do 
  begin 
    Caption:='Создать ярлыки в меню "Пуск"'; 
    Left:= WizardForm.DirEdit.Left + 20; 
    Top:= WizardForm.DirEdit.Top + 70; 
    Width:= ScaleX(150); 
    Height:= ScaleY(13); 
    Transparent := True; 
    Parent:= WizardForm.SelectDirPage; 
    OnClick:= @GroupOnClick; 
  end;


Как сделать чтоб под текстом был не синий фон а прозрачный
http://imageshost.ru/links/64f37ed02...61ef008858a88a

И как нибудь прикруть проверку системы(что за проц, ОС, ОЗУ)
http://victor-dobrov.narod.ru/InnoSe..._SystemTest.7z

Помогите пожалуйста!!!

Сори за два поста подряд, просто в один пост все скрипты не помещаются.

Отправлено: 20:16, 08-07-2009 | #1096


Ветеран


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

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


Raf-9600,
Попробуйте
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: SoundUnit; Description: Описание SoundUnit; Types: full custom
Name: inMPQ; Description: Описание inMPQ; Types: full

[Run]
Filename: {app}\del Ogg [SoundUnit].bat; StatusMsg: Удаление лишних файлов...; Components: SoundUnit; Afterinstall: Ext; Flags: runhidden

[code]
////////////////////////////////////////////
//  Данный скрипт прячет чужую программу    
////////////////////////////////////////////

type
  _TMsg = record
    hwnd: HWND;
    message: LongWord;
    wParam: Longint;
    lParam: Longint;
    time: LongWord;
    pt: TPoint;
  end;

const
  WM_CLOSE            = $0010;
  WM_QUIT             = $0012;
  PM_REMOVE           = 1;

// отобpажает или пpячет окно обpазом, указанным паpаметpом CmdShow
function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL; external 'ShowWindow@user32.dll stdcall';
// запускает указанный файл, с параметрами указанными в CmdShow
function WinExec(lpCmdLine: PChar; uCmdShow: Cardinal): Cardinal;
  external 'WinExec@kernel32.dll stdcall';

// пpовеpяет очеpедь пpикладной задачи на сообщение и копиpует его в Msg,
// если в очеpеди нет сообщений, функция выполняет немедленный возвpат и пеpедает упpавление Windows.
function PeekMessage(var lpMsg: _TMsg; hWnd: HWND;
  wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
// пеpеводит комбинации  wm_KeyDown/Up в wm_Char или wm_DeadChar и комбинации wm_SysKeyDown/Up в wm_SysChar или
// wm_SysDeadChar и напpавляет символьное сообщение в очеpедь пpикладной задачи.
function TranslateMessage(const lpMsg: _TMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
// пеpедает в Msg сообщение оконной функции окна
function DispatchMessage(const lpMsg: _TMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

var
  cap_win: string;
  _res: Boolean;
// сообщаем, что уже можно запускать RunProg
procedure Ext;
begin
  _res:= True;
end;

procedure Application_ProcessMessages;
var
  Msg: _TMsg;
begin
  while PeekMessage(Msg, WizardForm.Handle, 0, 0, PM_REMOVE) do
    begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    end;
end;

procedure RunProg(file, param, capt, mes: string; wait: Boolean);
var
  Wnd: THandle;
  i, ID: Integer;
begin
  cap_win:= capt;
  if FileExists(file) = True then // проверям наличие файла рядом с инсталлятором
    begin
      // показываем своё сообщение
      if mes <> '' then WizardForm.StatusLabel.Caption:= mes;
      // запускаем файл
      ID:= WinExec(AddQuotes(file + param), SW_HIDE);
      if ID > 32 then
        repeat
          if FindWindowByWindowName(capt) > 0 then
            begin
              Wnd:= FindWindowByWindowName(capt);
              ShowWindow(Wnd, SW_HIDE); // прячем программу... :)
              Break;
            end
          else Sleep(10);
          i:= i+1;
        until (Wnd > 0) or (i = 500) // выходим из цикла, если нашли окно или после пяти секунд
      else
        begin
          MsgBox('Ошибка при запуске файла: ' + ExtractFileName(file), mbInformation, MB_OK);
          Exit;
        end;
      // если надо подождать, то ждём пока программа не закроется...   
      if wait = True then
        while FindWindowByWindowName(capt) > 0 do
          Application_ProcessMessages;
      WizardForm.StatusLabel.Caption:= WizardForm.StatusLabel.Caption;
    end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
  n: Integer;
begin
  if (CurStep = ssPostInstall) and (IsComponentSelected('inMPQ')) then
    begin
      n:= 0;
      while _res = False do
        begin
          n:= n + 1;
          Application_ProcessMessages;
          if n = 60000 then Break;
        end;
        RunProg(ExpandConstant('{src}\winmpq\WinMPQ.exe'), // расположение программы
                ' s Sound.txt',                            // параметр запуска
                'WinMPQ',                                  // заголовок окна программы
                'Встраивание озвучки юнитов...',           // сообщение в окне мастера
                True);                                     // True - ждать завершения программы
    end;
end;

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 22:52, 08-07-2009 | #1097


Аватара для Raf-9600

Старожил


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

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


Serega, Хм.. Возможно конечно я где-то опечатался, но сечас, когда WinMPQ должен запуститься, светиться "Ошибка при запуске файла: WinMPQ.exe".

читать дальше »
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=zip
SolidCompression=yes

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom

[Components]
Name: SoundUnit; Description: Описание SoundUnit; Types: full custom
Name: inMPQ; Description: Описание inMPQ; Types: full


[Files]
Source: D:\Русификатор AiO\-Технические-\Ogg - Wav\libvorbis.dll; DestDir: {app}
Source: D:\Русификатор AiO\-Технические-\Ogg - Wav\libvorbisfile.dll; DestDir: {app}
Source: D:\Русификатор AiO\-Технические-\Ogg - Wav\oggdec.exe; DestDir: {app}
Source: D:\Русификатор AiO\-Технические-\Ogg - Wav\libFLAC_dynamic.dll; DestDir: {app}
Source: D:\Русификатор AiO\-Технические-\Ogg - Wav\libogg.dll; DestDir: {app}
Source: D:\Русификатор AiO\-Технические-\inMPQ\SFmpq.dll; DestDir: {app}
Source: D:\Русификатор AiO\-Технические-\inMPQ\WinMPQ.exe; DestDir: {app}

Source: D:\Русификатор AiO\SC1\Юниты\del Wav [SoundUnit].bat; DestDir: {app}
Source: D:\Русификатор AiO\SC1\Юниты\inWAV [SoundUnit].bat; DestDir: {app}
Source: D:\Русификатор AiO\SC1\Юниты\del Ogg [SoundUnit].bat; DestDir: {app}
Source: D:\Русификатор AiO\SC1\Юниты\DE\Sound.txt; DestDir: {app}
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\advisor\paderr00.ogg; DestDir: {app}\sound\protoss\advisor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\advisor\paderr01.ogg; DestDir: {app}\sound\protoss\advisor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\advisor\paderr02.ogg; DestDir: {app}\sound\protoss\advisor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\advisor\paderr06.ogg; DestDir: {app}\sound\protoss\advisor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\advisor\padupd00.ogg; DestDir: {app}\sound\protoss\advisor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\advisor\padupd01.ogg; DestDir: {app}\sound\protoss\advisor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\advisor\padupd02.ogg; DestDir: {app}\sound\protoss\advisor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\advisor\padupd04.ogg; DestDir: {app}\sound\protoss\advisor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\advisor\padupd06.ogg; DestDir: {app}\sound\protoss\advisor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabcag00.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabdth00.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabfol00.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabfol01.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabfol02.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabfol03.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabpss00.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabpss01.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabpss02.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabpss03.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabpss04.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabrdy00.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabwht00.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabwht01.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabwht02.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabwht03.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabyes00.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabyes01.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabyes02.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\arbiter\pabyes03.ogg; DestDir: {app}\sound\protoss\arbiter
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\archon\pardth00.ogg; DestDir: {app}\sound\protoss\archon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\archon\parmin00.ogg; DestDir: {app}\sound\protoss\archon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\archon\parpss00.ogg; DestDir: {app}\sound\protoss\archon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\archon\parpss01.ogg; DestDir: {app}\sound\protoss\archon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\archon\parpss02.ogg; DestDir: {app}\sound\protoss\archon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\archon\parpss03.ogg; DestDir: {app}\sound\protoss\archon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\archon\parrdy00.ogg; DestDir: {app}\sound\protoss\archon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\archon\parwht00.ogg; DestDir: {app}\sound\protoss\archon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\archon\parwht01.ogg; DestDir: {app}\sound\protoss\archon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\archon\parwht02.ogg; DestDir: {app}\sound\protoss\archon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\archon\parwht03.ogg; DestDir: {app}\sound\protoss\archon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\archon\paryes00.ogg; DestDir: {app}\sound\protoss\archon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\archon\paryes01.ogg; DestDir: {app}\sound\protoss\archon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\archon\paryes02.ogg; DestDir: {app}\sound\protoss\archon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\archon\paryes03.ogg; DestDir: {app}\sound\protoss\archon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\pacwht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\paswht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\pbaact00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\pbawht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\pbewht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\pciwht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\pfowht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\pgawht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\pgcwht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\pnawht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\pnewht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\ppbwht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\ppywht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\prowht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\pstwht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\ptrwht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\bldg\pwawht00.ogg; DestDir: {app}\sound\protoss\bldg
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\carrier\pcadth00.ogg; DestDir: {app}\sound\protoss\carrier
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\carrier\pcadth01.ogg; DestDir: {app}\sound\protoss\carrier
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\carrier\pcapss00.ogg; DestDir: {app}\sound\protoss\carrier
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\carrier\pcapss01.ogg; DestDir: {app}\sound\protoss\carrier
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\carrier\pcapss02.ogg; DestDir: {app}\sound\protoss\carrier
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\carrier\pcapss03.ogg; DestDir: {app}\sound\protoss\carrier
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\carrier\pcardy00.ogg; DestDir: {app}\sound\protoss\carrier
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\carrier\pcawht00.ogg; DestDir: {app}\sound\protoss\carrier
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\carrier\pcawht01.ogg; DestDir: {app}\sound\protoss\carrier
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\carrier\pcawht02.ogg; DestDir: {app}\sound\protoss\carrier
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\carrier\pcawht03.ogg; DestDir: {app}\sound\protoss\carrier
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\carrier\pcayes00.ogg; DestDir: {app}\sound\protoss\carrier
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\carrier\pcayes01.ogg; DestDir: {app}\sound\protoss\carrier
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\carrier\pcayes02.ogg; DestDir: {app}\sound\protoss\carrier
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\carrier\pcayes03.ogg; DestDir: {app}\sound\protoss\carrier
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\darktemplar\pdtdth00.ogg; DestDir: {app}\sound\protoss\darktemplar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\darktemplar\pdtpss00.ogg; DestDir: {app}\sound\protoss\darktemplar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\darktemplar\pdtpss01.ogg; DestDir: {app}\sound\protoss\darktemplar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\darktemplar\pdtpss02.ogg; DestDir: {app}\sound\protoss\darktemplar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\darktemplar\pdtpss03.ogg; DestDir: {app}\sound\protoss\darktemplar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\darktemplar\pdtwht00.ogg; DestDir: {app}\sound\protoss\darktemplar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\darktemplar\pdtwht01.ogg; DestDir: {app}\sound\protoss\darktemplar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\darktemplar\pdtwht02.ogg; DestDir: {app}\sound\protoss\darktemplar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\darktemplar\pdtwht03.ogg; DestDir: {app}\sound\protoss\darktemplar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\darktemplar\pdtyes00.ogg; DestDir: {app}\sound\protoss\darktemplar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\darktemplar\pdtyes01.ogg; DestDir: {app}\sound\protoss\darktemplar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\darktemplar\pdtyes02.ogg; DestDir: {app}\sound\protoss\darktemplar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\darktemplar\pdtyes03.ogg; DestDir: {app}\sound\protoss\darktemplar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdrdth00.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdrpss00.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdrpss01.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdrpss02.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdrpss03.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdrrdy00.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdrwht00.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdrwht01.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdrwht02.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdrwht03.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdrwht04.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdrwht05.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdrwht06.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdrwht07.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdryes00.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdryes01.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdryes02.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdryes03.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdryes04.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdryes05.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\dragoon\pdryes06.ogg; DestDir: {app}\sound\protoss\dragoon
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixd\ufdpss00.ogg; DestDir: {app}\sound\protoss\fenixd
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixd\ufdpss01.ogg; DestDir: {app}\sound\protoss\fenixd
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixd\ufdpss02.ogg; DestDir: {app}\sound\protoss\fenixd
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixd\ufdpss03.ogg; DestDir: {app}\sound\protoss\fenixd
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixd\ufdwht00.ogg; DestDir: {app}\sound\protoss\fenixd
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixd\ufdwht01.ogg; DestDir: {app}\sound\protoss\fenixd
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixd\ufdwht02.ogg; DestDir: {app}\sound\protoss\fenixd
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixd\ufdwht03.ogg; DestDir: {app}\sound\protoss\fenixd
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixd\ufdyes00.ogg; DestDir: {app}\sound\protoss\fenixd
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixd\ufdyes01.ogg; DestDir: {app}\sound\protoss\fenixd
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixd\ufdyes02.ogg; DestDir: {app}\sound\protoss\fenixd
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixd\ufdyes03.ogg; DestDir: {app}\sound\protoss\fenixd
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixz\ufedth00.ogg; DestDir: {app}\sound\protoss\fenixz
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixz\ufepss00.ogg; DestDir: {app}\sound\protoss\fenixz
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixz\ufepss01.ogg; DestDir: {app}\sound\protoss\fenixz
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixz\ufepss02.ogg; DestDir: {app}\sound\protoss\fenixz
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixz\ufepss03.ogg; DestDir: {app}\sound\protoss\fenixz
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixz\ufewht00.ogg; DestDir: {app}\sound\protoss\fenixz
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixz\ufewht01.ogg; DestDir: {app}\sound\protoss\fenixz
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixz\ufewht02.ogg; DestDir: {app}\sound\protoss\fenixz
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixz\ufewht03.ogg; DestDir: {app}\sound\protoss\fenixz
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixz\ufeyes00.ogg; DestDir: {app}\sound\protoss\fenixz
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixz\ufeyes01.ogg; DestDir: {app}\sound\protoss\fenixz
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixz\ufeyes02.ogg; DestDir: {app}\sound\protoss\fenixz
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\fenixz\ufeyes03.ogg; DestDir: {app}\sound\protoss\fenixz
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\gantrithor\utcpss00.ogg; DestDir: {app}\sound\protoss\gantrithor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\gantrithor\utcpss01.ogg; DestDir: {app}\sound\protoss\gantrithor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\gantrithor\utcpss02.ogg; DestDir: {app}\sound\protoss\gantrithor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\gantrithor\utcpss03.ogg; DestDir: {app}\sound\protoss\gantrithor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\gantrithor\utcwht00.ogg; DestDir: {app}\sound\protoss\gantrithor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\gantrithor\utcwht01.ogg; DestDir: {app}\sound\protoss\gantrithor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\gantrithor\utcwht02.ogg; DestDir: {app}\sound\protoss\gantrithor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\gantrithor\utcwht03.ogg; DestDir: {app}\sound\protoss\gantrithor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\gantrithor\utcyes00.ogg; DestDir: {app}\sound\protoss\gantrithor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\gantrithor\utcyes01.ogg; DestDir: {app}\sound\protoss\gantrithor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\gantrithor\utcyes02.ogg; DestDir: {app}\sound\protoss\gantrithor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\gantrithor\utcyes03.ogg; DestDir: {app}\sound\protoss\gantrithor
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\intercep\pinlau00.ogg; DestDir: {app}\sound\protoss\intercep
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\ppratt00.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\ppratt01.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\pprdth00.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\pprerr00.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\pprerr01.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\pprmin00.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\pprpss00.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\pprpss01.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\pprpss02.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\pprpss03.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\pprrdy00.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\pprwht00.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\pprwht01.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\pprwht02.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\pprwht03.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\ppryes00.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\ppryes01.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\ppryes02.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\probe\ppryes03.ogg; DestDir: {app}\sound\protoss\probe
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\scout\pscdth00.ogg; DestDir: {app}\sound\protoss\scout
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\scout\pscpss00.ogg; DestDir: {app}\sound\protoss\scout
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\scout\pscpss01.ogg; DestDir: {app}\sound\protoss\scout
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\scout\pscpss02.ogg; DestDir: {app}\sound\protoss\scout
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\scout\pscpss03.ogg; DestDir: {app}\sound\protoss\scout
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\scout\pscpss04.ogg; DestDir: {app}\sound\protoss\scout
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\scout\pscrdy00.ogg; DestDir: {app}\sound\protoss\scout
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\scout\pscwht00.ogg; DestDir: {app}\sound\protoss\scout
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\scout\pscwht01.ogg; DestDir: {app}\sound\protoss\scout
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\scout\pscwht02.ogg; DestDir: {app}\sound\protoss\scout
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\scout\pscwht03.ogg; DestDir: {app}\sound\protoss\scout
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\scout\pscyes00.ogg; DestDir: {app}\sound\protoss\scout
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\scout\pscyes01.ogg; DestDir: {app}\sound\protoss\scout
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\scout\pscyes02.ogg; DestDir: {app}\sound\protoss\scout
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\scout\pscyes03.ogg; DestDir: {app}\sound\protoss\scout
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshbld00.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshbld01.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshbld02.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshbld03.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshbld04.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshdth00.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshpss00.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshpss01.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshpss02.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshpss03.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshpss04.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshrdy00.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshwht00.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshwht01.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshwht02.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshwht03.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshyes00.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshyes01.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshyes02.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\shuttle\pshyes03.ogg; DestDir: {app}\sound\protoss\shuttle
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\tassadar\utadth00.ogg; DestDir: {app}\sound\protoss\tassadar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\tassadar\utapss00.ogg; DestDir: {app}\sound\protoss\tassadar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\tassadar\utapss01.ogg; DestDir: {app}\sound\protoss\tassadar
Source: D:\Русификатор AiO\SC1\Юниты\DE\sound\protoss\tassadar\utapss02.ogg; DestDir: {app}\sound\protoss\tassadar



[Run]
Filename: {app}\inWAV [SoundUnit].bat; StatusMsg: inWAV [SoundUnit]...; Components: SoundUnit; Flags: runhidden
Filename: {app}\del Ogg [SoundUnit].bat; StatusMsg: Удаление лишних файлов...; Components: SoundUnit; Afterinstall: Ext; Flags: runhidden
Filename: {app}\del Wav [SoundUnit].bat; StatusMsg: del Wav [SoundUnit]...; Components: SoundUnit; Flags: runhidden



[code]
////////////////////////////////////////////
// Данный скрипт прячет чужую программу
////////////////////////////////////////////

type
_TMsg = record
hwnd: HWND;
message: LongWord;
wParam: Longint;
lParam: Longint;
time: LongWord;
pt: TPoint;
end;

const
WM_CLOSE = $0010;
WM_QUIT = $0012;
PM_REMOVE = 1;

// отобpажает или пpячет окно обpазом, указанным паpаметpом CmdShow
function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL; external 'ShowWindow@user32.dll stdcall';
// запускает указанный файл, с параметрами указанными в CmdShow
function WinExec(lpCmdLine: PChar; uCmdShow: Cardinal): Cardinal;
external 'WinExec@kernel32.dll stdcall';

// пpовеpяет очеpедь пpикладной задачи на сообщение и копиpует его в Msg,
// если в очеpеди нет сообщений, функция выполняет немедленный возвpат и пеpедает упpавление Windows.
function PeekMessage(var lpMsg: _TMsg; hWnd: HWND;
wMsgFilterMin, wMsgFilterMax, wRemoveMsg: UINT): BOOL; external 'PeekMessageA@user32.dll stdcall';
// пеpеводит комбинации wm_KeyDown/Up в wm_Char или wm_DeadChar и комбинации wm_SysKeyDown/Up в wm_SysChar или
// wm_SysDeadChar и напpавляет символьное сообщение в очеpедь пpикладной задачи.
function TranslateMessage(const lpMsg: _TMsg): BOOL; external 'TranslateMessage@user32.dll stdcall';
// пеpедает в Msg сообщение оконной функции окна
function DispatchMessage(const lpMsg: _TMsg): Longint; external 'DispatchMessageA@user32.dll stdcall';

var
cap_win: string;
_res: Boolean;
// сообщаем, что уже можно запускать RunProg
procedure Ext;
begin
_res:= True;
end;

procedure Application_ProcessMessages;
var
Msg: _TMsg;
begin
while PeekMessage(Msg, WizardForm.Handle, 0, 0, PM_REMOVE) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end;

procedure RunProg(file, param, capt, mes: string; wait: Boolean);
var
Wnd: THandle;
i, ID: Integer;
begin
cap_win:= capt;
if FileExists(file) = True then // проверям наличие файла рядом с инсталлятором
begin
// показываем своё сообщение
if mes <> '' then WizardForm.StatusLabel.Caption:= mes;
// запускаем файл
ID:= WinExec(AddQuotes(file + param), SW_HIDE);
if ID > 32 then
repeat
if FindWindowByWindowName(capt) > 0 then
begin
Wnd:= FindWindowByWindowName(capt);
ShowWindow(Wnd, SW_HIDE); // прячем программу...
Break;
end
else Sleep(10);
i:= i+1;
until (Wnd > 0) or (i = 500) // выходим из цикла, если нашли окно или после пяти секунд
else
begin
MsgBox('Ошибка при запуске файла: ' + ExtractFileName(file), mbInformation, MB_OK);
Exit;
end;
// если надо подождать, то ждём пока программа не закроется...
if wait = True then
while FindWindowByWindowName(capt) > 0 do
Application_ProcessMessages;
WizardForm.StatusLabel.Caption:= WizardForm.StatusLabel.Caption;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
n: Integer;
begin
if (CurStep = ssPostInstall) and (IsComponentSelected('inMPQ')) then
begin
n:= 0;
while _res = False do
begin
n:= n + 1;
Application_ProcessMessages;
if n = 60000 then Break;
end;
RunProg(ExpandConstant('{app}\WinMPQ.exe'), // расположение программы
' s Sound.txt', // параметр запуска
'WinMPQ', // заголовок окна программы
'Встраивание озвучки юнитов...', // сообщение в окне мастера
True); // True - ждать завершения программы
end;
end;

Отправлено: 23:28, 08-07-2009 | #1098


Ветеран


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

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


Цитата Raf-9600:
Возможно конечно я где-то опечатался, но сечас, когда WinMPQ должен запуститься »
Проверьте параметры запуска WinMPQ, в процедуре CurStepChanged.
Параметр запуска - 's Sound.txt', а файл Sound.txt я не увидел в вашем скрипте.

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 00:02, 09-07-2009 | #1099


Аватара для Raf-9600

Старожил


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

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


Цитата Serega:
файл Sound.txt я не увидел в вашем скрипте »
Вот он
Код: Выделить весь код
Source: D:\Русификатор AiO\SC1\Юниты\DE\Sound.txt; DestDir: {app}
Колдовал как мог, с моей стороны ошибки вроде нет. И кстати, заметил одну странность, если параметр запуска оставить пустым, то WinMPQ после запуска, выдает ошибку "No files are selected.", хотя если его просто запустить, он ничего подобного "говорить" не должен. Его окно, кстати, полностью скрыто (кроме окна ошибки). Но заметил один нюанс, в то время как процесс WinMPQ ещё не закрыт, процесс Setup.tmp отбирает почти 30% процессорного времени, хотя он видь никаких действий в этот момент выполнять не может.

Отправлено: 14:00, 09-07-2009 | #1100



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Inno Setup. Прочие вопросы El Sanchez Автоматическая установка приложений 653 09-01-2023 20:13
Утилиты - [addon] Inno Setup CrOsP Наборы обновлений для Windows XP/2003/Windows 7 33 11-05-2011 16:03
Inno Setup 5.3.6 OSZone Software Новости программного обеспечения 0 15-11-2009 17:30
[Архив] Твики реестра .: [все вопросы] :. Vadikan Автоматическая установка Windows 2000/XP/2003 1431 26-01-2008 08:51
Inno Setup tradeukraine Вебмастеру 3 13-06-2006 20:39




 
Переход