Inno Setup (создание инсталяционных пакетов). Часть 1

Статус
В этой теме нельзя размещать новые ответы.

crysis_1830

Новичок
crysis_1830, #define ArcLocation "{src}\*.arc" - будут распакованы все архивы с расширением .arc, которые лежат рядом с инсталлятором.
только с расширением арк в бин что нельзя?

вот пошло спасибо а можно поменять ли в bin ? когда идет инсталляция как доходит до архивов при расширение bin так сразу деинсталляция начинается
 
Последнее редактирование:

sergey8282

Новичок
подскажите как так сделать чтоб в ап не появлялись, undelete.exe и dat, деинстал в сетингах отключаю не помогает
[hr] Еще раз то-же самое, но на понятном языке. Gnom.
[hr]
при установке дистрибутива собраным inno,, в папке назначения создаются файлы undelet.exe и dat, вот как ты так сделать чтоб их небыло, отключение деинсталяции - не помогает
 
Последнее редактирование модератором:

LexBell

Борода
Супер модератор
Задача. (всю голову сломал уже.)
Первый код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

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

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
Name: text\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 200000000
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 500000000
Name: voice\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 600000000
Name: test; Description: тест, дубль задач;

[Tasks]
Name: VCCheck; Description: Установить Microsoft Visual C++ 2005 Redist
Name: PhysXCheck; Description: Установить Nvidia PhysX

Name: VCCheck1; Description: Установить Microsoft Visual C++ 2005 Redist дубль;Components: test
Name: PhysXCheck2; Description: Установить Nvidia PhysX дубль;Components: test

Код:
Procedure CurPageChanged(CurPageID: Integer);
Begin
    WizardForm.ReadyMemo.Hide;
    WizardForm.TasksList.BorderStyle := bsSingle;
    if (WizardForm.ComponentsList.ItemCount*ScaleY(18)< ScaleX(120)) then begin
    WizardForm.ComponentsList.Height := WizardForm.ComponentsList.ItemCount*ScaleY(18);
    end else begin WizardForm.ComponentsList.Height := ScaleY(120); end;

    if (WizardForm.TasksList.ItemCount*ScaleY(25)< ScaleX(120)) then begin
    WizardForm.TasksList.Height := WizardForm.TasksList.ItemCount*ScaleY(25);
    end else begin WizardForm.TasksList.Height := ScaleY(120); end;
end;[/SPOILER]
Второй код:

[SPOILER][Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

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

[Components]
Name: text; Description: Язык субтитров; Types: full; Flags: fixed
Name: text\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 100000000
Name: text\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 200000000
Name: voice; Description: Язык озвучки; Types: full; Flags: fixed
Name: voice\rus; Description: Русский; Flags: exclusive; ExtraDiskSpaceRequired: 500000000
Name: voice\eng; Description: Английский; Flags: exclusive; ExtraDiskSpaceRequired: 600000000
Name: test; Description: тест, дубль задач;

[Tasks]
Name: VCCheck; Description: Установить Microsoft Visual C++ 2005 Redist
Name: PhysXCheck; Description: Установить Nvidia PhysX

Name: VCCheck1; Description: Установить Microsoft Visual C++ 2005 Redist дубль;Components: test
Name: PhysXCheck2; Description: Установить Nvidia PhysX дубль;Components: test

[Code]
var
  Flag:boolean;
 Source: TPersistent;
procedure NewClick(Sender: TObject);
begin
  WizardForm.TasksList.Assign(Source);
  If not Flag then begin
    WizardForm.ComponentsList.Show;
    WizardForm.TypesCombo.Show;
    WizardForm.TasksList.Hide;
  Flag:=True;
end else begin
    WizardForm.ComponentsList.Hide;
    WizardForm.TypesCombo.Hide;
    WizardForm.TasksList.Show;
  Flag:=False;
  end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if(PageID =wpWelcome)
  or(PageID =wpLicense)
  or(PageID =wpInfoBefore)
  or(PageID =wpUserInfo)
  or(PageID =wpSelectDir)
  or(PageID =wpSelectComponents)
  or(PageID =wpSelectProgramGroup)
  or(PageID =wpSelectTasks)
  then Result:= True;
end;

procedure InitializeWizard();
begin
  WizardForm.TypesCombo.Parent := WizardForm.ReadyPage;
  WizardForm.ComponentsList.Parent := WizardForm.ReadyPage;
  WizardForm.TasksList.Parent := WizardForm.ReadyPage;
  WizardForm.TasksList.Hide;

  with TNewButton.Create(WizardForm) do begin
    Parent := WizardForm.ReadyPage;
    Left := ScaleX(0);
    Top := ScaleY(200);
    Width := ScaleX(75);
    Height := ScaleY(25);
    OnClick := @NewClick;
  end;
  Flag:=True;
end;

Procedure CurPageChanged(CurPageID: Integer);
Begin
    WizardForm.ReadyMemo.Hide;
    WizardForm.TasksList.BorderStyle := bsSingle;
    if (WizardForm.ComponentsList.ItemCount*ScaleY(18)< ScaleX(120)) then begin
    WizardForm.ComponentsList.Height := WizardForm.ComponentsList.ItemCount*ScaleY(18);
    end else begin WizardForm.ComponentsList.Height := ScaleY(120); end;

    if (WizardForm.TasksList.ItemCount*ScaleY(25)< ScaleX(120)) then begin
    WizardForm.TasksList.Height := WizardForm.TasksList.ItemCount*ScaleY(25);
    end else begin WizardForm.TasksList.Height := ScaleY(120); end;
end;[/SPOILER] Сначала компилим первый код, потом второй, чтоб понять смысл засады.
Судя по всему, содержимое таск-листа обновляется при переходе на страницу задач. Команды, которая это делает, я так и не нашел, перепробовал все команды для объекта TNewCheckListBox, потом для всех родственных, вплоть до TWinControl. В общем, я понял ,что нужно искать в другом направлении. Вопрос - можно-ли обновить содержимое WizardForm.TasksList не переходя со страницы на страницу?
 

riperoc

Мимокрокодил
вот так: (если я тебя правильно понял)
Код:
[Files]
Source: "1.exe"; DestDir: "{app}"; Flags: ignoreversion; [COLOR="RoyalBlue"]Component: one;[/COLOR]
Source: "2.exe"; DestDir: "{app}"; Flags: ignoreversion; [COLOR="RoyalBlue"]Component: one;[/COLOR]
 

THE GUILTY GOD

Мимокрокодил
Почти правельно, но где это в ISDоne прописать!???
Я решил по эксперементировать с породией на скрипт Шепарда! [hr]
Читаем в справке к ISDоne, а так-же смотрим в примере скрипта. Из скрипта, который идет с библиотекой:
// Подготавливаем переменную, содержащую всю информацию о выделенных компонентах для ISDone.dll
// максимум 96 компонентов.
Comps1:=0; Comps2:=0; Comps3:=0;
#ifdef Components
TmpValue:=1;
if IsComponentSelected('text\rus') then Comps1:=Comps1+TmpValue; //компонент 1
TmpValue:=TmpValue*2;
if IsComponentSelected('text\eng') then Comps1:=Comps1+TmpValue; //компонент 2
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\rus') then Comps1:=Comps1+TmpValue; //компонент 3
TmpValue:=TmpValue*2;
if IsComponentSelected('voice\eng') then Comps1:=Comps1+TmpValue; //компонент 4
// .....
// см. справку
Удивительно понятно написано. Gnom.

Я это смотрел, а что где править!!!
 
Последнее редактирование:

ivsatel

Мимокрокодил
Подскажите, как можно реализовать такую функцию:

Если операционная система ХР, копируется в систему файл 1.sys
Если операционная система Vista копируется в систему файл 2.sys
Если операционная система Win7 копируется в систему файл 3.sys
 

nik1967

Old Men
Проверенный
Подскажите, как можно реализовать такую функцию:
Почитать справку:
Установка различных файлов в зависимости от версии Windows
Реализуется с помощью директив MinVersion и/или OnlyBelowVersion. Для справки обратитесь к разделу Общие параметры файла справки Inno Setup.

Ниже приведен пример установки одного файла на платформу NT (Windows NT/2000/XP) и другого на не-NT платформу (Windows 95/98/Me):

[Files]
Source: "{app}\WinNT2000XP.exe"; DestDir: "{app}"; MinVersion: 0, 1
Source: "{app}\Win9598Me.exe"; DestDir: "{app}"; MinVersion: 1, 0

"0" означает никогда не устанавливать; "1" означает устанавливать на любую версию (т.е. версию 1.0 и далее).
 

ivsatel

Мимокрокодил
nik1967, Это не подходит, т.к. требуется еще и распознать разрядность системы.
А MinVersion: 0, 1 на сколько я понимаю, позволит копироваться файлу на любую систему старше или = к примеру 5
Есть функции которые мне подходят:
function InitializeSetup (): Boolean;
var Version: TWindowsVersion;

begin
GetWindowsVersionEx(Version);
if Version.NTPlatform and (Version.Major = 6) and (Version.Minor = 0) then
begin
MsgBox('You OS Windows Vista' ,mbInformation, mb_Ok);
//Exec
Result:= True;
end

begin
GetWindowsVersionEx(Version);
if Version.NTPlatform and (Version.Major = 5) and (Version.Minor = 1) then
begin
MsgBox('You OS Windows XP' ,mbInformation, mb_Ok);
//Exec
Result:= True;
end
end
end;
и

function FileCopy(const ExistingFile, NewFile: String; const FailIfExists: Boolean): Boolean;
А вот как их объединить...
 
Последнее редактирование:

nik1967

Old Men
Проверенный
ivsatel,
Ну можно ещё написать функции по определению ОС, наподобие:
Код:
[_code]
Function isWin7():boolean;
begin
  if ((GetWindowsVersion shr 24) = 6) and (((GetWindowsVersion shr 16) and $FF) = 1) then Result := true else Result := False;
end;
и использовать check:
Код:
[Files]
Source: "{app}\Win7.exe"; DestDir: "{app}"; Check: isWin7;
 

LexBell

Борода
Супер модератор
Это не подходит, т.к. требуется еще и распознать разрядность системы.
В инно есть еще и определитель разрядности. Если даже мельком глянуть в справку, то там легко можно найти булевую функцию ISwin64. Использовать ее так-же можно в секции файлов, не создавая ненужных сложностей в коде:
[Files]
Source: "{app}\WinNT2000XP.exe"; DestDir: "{app}"; MinVersion: 0, 1; Check not ISwin64 - скопируется только в х32 NT-системе
Source: "{app}\WinNT2000XP.exe"; DestDir: "{app}"; MinVersion: 0, 1; Check ISwin64 - скопируется только в х64 NT-системе
Source: "{app}\Win9598Me.exe"; DestDir: "{app}"; MinVersion: 1, 0
 

ivsatel

Мимокрокодил
Gnom, nik1967, Спасибо за помощь! Вроде получилось. Вот еще попробую на большем количестве машин и ОС, будет яснее.
Единственно по поводу MinVersion: я думал, что указав для файла MinVersion: 4,0; и он будет копироваться в любую систему старше 4. Наверно ошибался.
Еще раз спасибо за помощь!
 

Snoopak96

Старожил
Всем вечера,
подскажите как можно отцентрировать заголовок окна:



помимо пробелов?
 

Snoopak96

Старожил
DeKaN,
Не, не подходит, эта библиотека вылетает где-то в 5% случаях в переходах между окнами, не юзаю её.
 

DeKaN

Новичок
Snoopak96, тогда можешь вместо пробелов использовать символы табуляции
положение заголовка задается системной темой, которую можно сменить для отдельного окна
 

Snoopak96

Старожил
Snoopak96, тогда можешь вместо пробелов использовать символы табуляции
положение заголовка задается системной темой, которую можно сменить для отдельного окна
Да не, можно через функцию:
function SetTextAlign(DC: LongWord; Flags: TAlignment): Integer; external 'SetTextAlign@gdi32.dll stdcall';
Только эта функция для XP, мне надо на win 7.
 

ivsatel

Мимокрокодил
Возможно ли переименовать файл unins000.exe стандартными способами INNO не прибегая к секции
Код:
[/B]
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху