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

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

только с расширением арк в бин что нельзя?

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

Еще раз то-же самое, но на понятном языке. Gnom.


при установке дистрибутива собраным inno,, в папке назначения создаются файлы undelet.exe и dat, вот как ты так сделать чтоб их небыло, отключение деинсталяции - не помогает
 
Последнее редактирование модератором:
Задача. (всю голову сломал уже.)
Первый код:
[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 не переходя со страницы на страницу?
 
вот так: (если я тебя правильно понял)
Код:
[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]
 
Почти правельно, но где это в ISDоne прописать!???
Я решил по эксперементировать с породией на скрипт Шепарда!

Читаем в справке к 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.

Я это смотрел, а что где править!!!
 
Последнее редактирование:
Подскажите, как можно реализовать такую функцию:

Если операционная система ХР, копируется в систему файл 1.sys
Если операционная система Vista копируется в систему файл 2.sys
Если операционная система Win7 копируется в систему файл 3.sys
 
Подскажите, как можно реализовать такую функцию:
Почитать справку:
Установка различных файлов в зависимости от версии 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 и далее).
 
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;

А вот как их объединить...
 
Последнее редактирование:
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;
 
Это не подходит, т.к. требуется еще и распознать разрядность системы.
В инно есть еще и определитель разрядности. Если даже мельком глянуть в справку, то там легко можно найти булевую функцию 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
 
Gnom, nik1967, Спасибо за помощь! Вроде получилось. Вот еще попробую на большем количестве машин и ОС, будет яснее.
Единственно по поводу MinVersion: я думал, что указав для файла MinVersion: 4,0; и он будет копироваться в любую систему старше 4. Наверно ошибался.
Еще раз спасибо за помощь!
 
Всем вечера,
подскажите как можно отцентрировать заголовок окна:

image.png


помимо пробелов?
 
DeKaN,
Не, не подходит, эта библиотека вылетает где-то в 5% случаях в переходах между окнами, не юзаю её.
 
Snoopak96, тогда можешь вместо пробелов использовать символы табуляции
положение заголовка задается системной темой, которую можно сменить для отдельного окна
 
Snoopak96, тогда можешь вместо пробелов использовать символы табуляции
положение заголовка задается системной темой, которую можно сменить для отдельного окна
Да не, можно через функцию:
function SetTextAlign(DC: LongWord; Flags: TAlignment): Integer; external 'SetTextAlign@gdi32.dll stdcall';
Только эта функция для XP, мне надо на win 7.
 
Возможно ли переименовать файл unins000.exe стандартными способами INNO не прибегая к секции
Код:
[/B]
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху