Ru-Board.club
← Вернуться в раздел «Программы»

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

Автор: Raf_SE
Дата сообщения: 04.06.2008 19:02
SotM
А сделать чтоб инсталляха определяла разрешеие монитора юзера, и использовала соответствующий набор слайдов, ты точно не мож?
Автор: Genri
Дата сообщения: 04.06.2008 19:35
antifire

Цитата:
Можно ли вывести небольшое окно с сообщением о копировании этих файлов, с процессом копирования в процентах или даже с полосой процесса копирования?
-- вопрос про прогрессбар с регулярной периодичностью поднимается с начала существования темы про инно В отличии от него, отобразить имя копируемого файла достаточно просто. Могу предложить [more=такой вариант]
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
Source: MyProg.exe; DestDir: {app}
Source: MyDll.dll; DestDir: {app}
Source: MyProg.chm; DestDir: {app}; AfterInstall: CopyDataFiles()

[_Code]
var
MaxSlice, CurrentSlice: integer;
SetupFailed: boolean;

function GetMaxSlice(): integer;
var
FS: TFileStream;
str: string;
begin
str:= StringOfChar(' ', 1);
FS := TFileStream.Create(ExpandConstant('{app}\MyProg.exe'), fmOpenRead);
try
FS.Seek(4,soFromBeginning);
FS.ReadBuffer(str, 1);
Result:=Ord(str[1]);
finally
FS.Free;
end;
end;

procedure CopyDataFiles();
var
CurrentFile: string;
begin
MaxSlice:= GetMaxSlice();
CurrentSlice:= 1;
while CurrentSlice <= MaxSlice do
begin
CurrentFile:= Format('DATA.%.3d', [CurrentSlice]);
WizardForm.FilenameLabel.Caption:= CurrentFile;
if FileCopy(ExpandConstant('{src}\' + CurrentFile),
ExpandConstant('{app}\' + CurrentFile), False) then
CurrentSlice:= CurrentSlice+1
else
if MsgBox('Вставьте диск №' + IntToStr(CurrentSlice) +
' или нажмите Отмена для прекращения установки',
mbInformation, MB_RETRYCANCEL) = IDCANCEL then
if ExitSetupMsgBox then
begin
SetupFailed:= True;
RaiseException('Файл ' + CurrentFile + ' не найден! Инсталляция прервана!');
end;
end;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = wpFinished) and SetupFailed then
Result:= True;
end; [/more]
Автор: Sampron
Дата сообщения: 04.06.2008 20:36
Кто-нибудь знает как можно зеркально повернуть рисунок?
Автор: Raf_SE
Дата сообщения: 04.06.2008 20:38
Sampron
В каком смысле? Попробуй виндовский Paint.
Автор: Sampron
Дата сообщения: 04.06.2008 20:44
Raf_SE
Нужно через код.
Автор: Raf_SE
Дата сообщения: 04.06.2008 21:31
А ктонить знает, как можно распаковать запароленую инсталляху? Ну т.е. она устанавливается без всяких паролей, а вот при попытке распаковать через Universal Extractor требует пароль, при попытке распаковать через Inno Setup Unpacker, он зависает.
Автор: htuos
Дата сообщения: 05.06.2008 00:44
Sampron

Цитата:
Кто-нибудь знает как можно зеркально повернуть рисунок?

можно попиксельно [more=попробовать]#define MyAppName "My Program"
#define MyAppVerName "My Program 1.5"
#define MyAppPublisher "My Company, Inc."
#define MyAppURL "http://www.example.com/"
#define MyAppExeName "MyProg.exe"

[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{E071B2C4-617B-4C37-9097-F74C81AEEF70}
AppName={#MyAppName}
AppVerName={#MyAppVerName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
;рисунок размером 156х157
WizardImageFile=SourceSDK2.bmp

[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked

[Files]
Source: "F:\Soft\Inno Setup 5\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion
; NOTE: Don't use "Flags: ignoreversion" on any shared system files

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon

[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall skipifsilent

[Code_]
var
Image2:TBitmapImage;

procedure InitializeWizard;
var
i,j:integer;
begin
Image2:=TBitmapImage.Create(WizardForm);
Image2.Parent:=WizardForm.WelcomePage;
WizardForm.WizardBitmapImage.Stretch:=False;
Image2.Stretch:=False;
WizardForm.WizardBitmapImage.Center:=False;
Image2.Center:=False;
WizardForm.WizardBitmapImage.Height:=WizardForm.WizardBitmapImage.Height div 2;
Image2.Height:=WizardForm.WizardBitmapImage.Height;
Image2.Width:=WizardForm.WizardBitmapImage.Width;
Image2.Top:=WizardForm.WizardBitmapImage.Top+WizardForm.WizardBitmapImage.Height;
WizardForm.WizardBitmapImage.BackColor:=clWhite;
Image2.BackColor:=clWhite;
Image2.Bitmap:=WizardForm.WizardBitmapImage.Bitmap; //без этого почему-то не рисуется Image2
for i:=0 to WizardForm.WizardBitmapImage.Width-1 do
for j:=0 to WizardForm.WizardBitmapImage.Height-1 do
Image2.Bitmap.Canvas.Pixels[i,WizardForm.WizardBitmapImage.Height-j-1]:=WizardForm.WizardBitmapImage.Bitmap.Canvas.Pixels[i,j];
end;[/more] правда такой способ работает долго
Автор: Sampron
Дата сообщения: 05.06.2008 01:35
htuos
Действительно долго рисуется, интересный вариант но увы не то, этот вариант делает зеркально половину рисунка.

Цитата:
//без этого почему-то не рисуется Image2

Ну с чего-то ему ж нужно рисоватся, хотя Image2 здесь и не нужен.
Автор: braunberg
Дата сообщения: 05.06.2008 01:37
htuos
А просто Flip Horizontally можно сделать?
Автор: AlexDJ666
Дата сообщения: 05.06.2008 05:57
Genri, просто огромное-преогромное спасибище
Предложенный Вами код, по сравнение с моим - просто шедевр Есть, куда расти

Однако, я столкнулся с проблемой. Как Вы поняли инсталлятор у меня состоит из нескольких страниц. Так вот, пока я делал одну страницу, все работало на ура, но как только перешел к следующей - начались проблемы. Обработчик событий мыши все время срабатывал на 2-ой странице, даже если событие и происходила на первой. Я пробовал добавлять переменную j: integer; и на второй странице использовать ее, но это не помогло. А если на второй странице делать счетчик чекбоксов не с 0, а с первого после 1-ой странице (i + 1), то инсталлятор вообще не запускается. В чем у меня косяк?

Вот очищенный код:

[more]
[Setup]

AppName=AlexDJ Addon Pack
AppVerName=AlexDJ Addon Pack v2.6
AppPublisher=AlexDJ
AppPublisherURL=http://wow.panterkin.ru/
AppSupportURL=http://wow.panterkin.ru/
AppUpdatesURL=http://wow.panterkin.ru/
DefaultDirName=D:\Games\WoW\
DefaultGroupName=AlexDJ's Addon Pack
DisableProgramGroupPage=yes
OutputDir=!_Ready
CreateAppDir=true

[Files]
Source: readme.rtf; DestDir: {tmp}; Flags: dontcopy
Source: screen.bmp; DestDir: {tmp}; Flags: dontcopy;

Source: isxbb.dll; DestDir: {tmp}; Flags: dontcopy

Source: ReadMe1.rtf; Flags: dontcopy
Source: ReadMe2.rtf; Flags: dontcopy
Source: ReadMe3.rtf; Flags: dontcopy

;Source: Addons\Rus\RuWOW\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(1)
Source: Addons\Rus\Talents\*; DestDir: {app}/Interface/Addons; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(2)
;Source: Addons\Rus\NPC\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(3)

Source: Addons\Main\AutoSave\*; DestDir: {app}/Interface/Addons; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(6)

Source: Addons\Classes\Druid\DruidBar\*; DestDir: {app}/Interface/Addons/DruidBar; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(8)
;Source: Addons\Classes\Druid\DruidStats\*; DestDir: {app}/Interface/Addons/DruidStats; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(9)
;Source: Addons\Classes\Druid\DruidTips\*; DestDir: {app}/Interface/Addons/DruidTips; Flags: ignoreversion recursesubdirs createallsubdirs; Check: CheckedBox(10)

[_Code]

var
Page: TWizardPage;
ListBox: TNewCheckListBox;
Memo: TRichEditViewer;
CheckLabel: TLabel;
MouseY: integer;
BitmapImage: TBitmapImage;
InfoBmp: array of TBitmap;

function CheckedBox(ItemNumber: integer): Boolean;
begin // проверка,
Result:= ListBox.Checked[ItemNumber]; // отмечен ли соответствующий чекбокс
end;

// ВНИМАНИЕ! Данная реализация процедур CheckOnClick и CheckMouseMove
// применима только в случае, если ListBox отображается без скролбара,
// т.е. все чекбоксы видны без промотки.
procedure CheckOnClick (Sender: TObject); // событие на клик
begin
if MouseY < ListBox.Items.Count then
begin // выполняется, если кликнули на чекбокс с номером MouseY
ListBox.Checked[MouseY]:= Not(ListBox.Checked[MouseY]);
// если надо при клике выполнить еще что-то,
// дописываем сюда
end;
end;

procedure CheckMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin // событие на движение мыши
MouseY:= Y/ScaleY(16);
if MouseY < ListBox.Items.Count then
begin // выполняется, если курсор пересекает чекбокс с номером MouseY
Memo.RTFText:= TStrings(ListBox.ItemObject[MouseY]).Text;
BitmapImage.Bitmap:= InfoBmp[MouseY];
// если надо при движении курсора выполнить еще что-то,
// дописываем сюда
end;
end;

Procedure InitializeWizard();
var
i: integer;
Bmp: TBitmapImage;

begin

ExtractTemporaryFile('readme.rtf');


// Создание страницы, которая будет отображена после wpWelcome
// Надо в другом месте, меняем wpWelcome на wpSelectDir или другую
//Page:=CreateCustomPage(wpWelcome, 'Интерфейс', 'Выберите компоненты, которые вы хотите установить.')
Page:=CreateCustomPage(1, 'Основные аддоны', 'Выберите компоненты, которые вы хотите установить.')


ListBox:= TNewCheckListBox.Create(Page); // создание списка чекбоксов
with ListBox do
    begin
        Left := 15
        Top := 0
        Width := 200
        Height := 149
        Parent := Page.Surface

        // Добавляем нужное кол-во чекбоксов
        AddCheckBox('Русификатор', '', 0, True, True, True, True, TStringList.Create);
        AddCheckBox('RuWOW', '', 1, True, True, False, True, TStringList.Create);
        AddCheckBox('Русификатор талантов', '', 1, True, True, False, True, TStringList.Create);
        AddCheckBox('Русификатор NPC', '', 1, True, True, False, True, TStringList.Create);
        AddCheckBox('Основные аддоны', '', 0, True, True, True, True, TStringList.Create);
        AddCheckBox('Библиотеки и т.п.', '', 1, True, True, False, True, TStringList.Create);
        AddCheckBox('Автосейв от AlexDJ', '', 1, True, True, False, True, TStringList.Create);

        // Загружаем файлы описания (каждому чекбоксу - свой файл)
        TStrings(ItemObject[0]).LoadFromFile(ExpandConstant('{tmp}\ReadMe1.rtf'));
        TStrings(ItemObject[1]).LoadFromFile(ExpandConstant('{tmp}\ReadMe2.rtf'));
        TStrings(ItemObject[2]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
        TStrings(ItemObject[3]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
        TStrings(ItemObject[4]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
        TStrings(ItemObject[5]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
        TStrings(ItemObject[6]).LoadFromFile(ExpandConstant('{tmp}\ReadMe3.rtf'));
    end;

Memo:= TRichEditViewer.Create(Page); // создаем Memo для отображения описаний
with Memo do
    begin
        Left := 231;
        Top := 1;
        Width := 308;
        Height := 303;
        Color := clBtnFace;
        Enabled := False;
        BorderStyle := bsNone;
        Parent := Page.Surface;
        ScrollBars := ssVertical;
    end;

Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (230,0,310,305)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface

CheckLabel:= TLabel.Create(Page); // создаем TLabel (для событий мыши)
with CheckLabel do
    begin
        Width :=ListBox.Width;
        Height :=ListBox.Height;
        Autosize :=False;
        Transparent :=True;
        OnMouseMove :=@CheckMouseMove;
        OnClick :=@CheckOnClick;
        Parent :=ListBox;
        Cursor := 1;
    end;

BitmapImage := TBitmapImage.Create(Page); // создаем TBitmapImage для
with BitmapImage do // отображения картинок
    begin // к описаниям
        AutoSize := True;
        Left := ListBox.Left;
        Top := ListBox.Top + ListBox.Height + 8;
        Width := ListBox.Width;
        Height := 32;
        Parent := Page.Surface;
    end;

for i:=0 to ListBox.Items.Count - 1 do // по кол-ву чекбоксов
    begin // создаем TBitmap-ы
        SetArrayLength(InfoBmp, i+1);
        InfoBmp[_i]:= TBitmap.Create;
    end;

// для каждого чекбокса грузим свою картинку к описанию
InfoBmp[0].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
InfoBmp[1].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
InfoBmp[2].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
InfoBmp[3].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
InfoBmp[4].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
InfoBmp[5].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
InfoBmp[6].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));

// Рамки для блока скриншотов //

Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (15,157,200,1)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface

Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (15,157,1,145)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface

Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (15,302,200,1)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface

Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (215,157,1,145)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface

// Рамки для блока скриншотов //


Page:=CreateCustomPage(2, 'Классовые аддоны', 'Выберите компоненты, которые вы хотите установить.')

ListBox:= TNewCheckListBox.Create(Page); // создание списка чекбоксов
with ListBox do
    begin
        Left := 15
        Top := 0
        Width := 200
        Height := 300
        Parent := Page.Surface

        // Добавляем нужное кол-во чекбоксов
        AddCheckBox('Druid (Друид)', '', 0, True, True, True, True, TStringList.Create);
        AddCheckBox('Druid Stats I', '', 1, True, True, False, True, TStringList.Create);
        //AddCheckBox('Druid Bar', '', 1, True, True, False, True, TStringList.Create);
        //AddCheckBox('Druid Tips', '', 1, True, True, False, True, TStringList.Create);

        // Загружаем файлы описания (каждому чекбоксу - свой файл)
        TStrings(ItemObject[7]).LoadFromFile(ExpandConstant('{tmp}\ReadMe1.rtf'));
        TStrings(ItemObject[8]).LoadFromFile(ExpandConstant('{tmp}\ReadMe2.rtf'));
    end;

Memo:= TRichEditViewer.Create(Page); // создаем Memo для отображения описаний
with Memo do
    begin
        Left := 231;
        Top := 1;
        Width := 308;
        Height := 303;
        Color := clBtnFace;
        Enabled := False;
        BorderStyle := bsNone;
        Parent := Page.Surface;
        ScrollBars := ssVertical;
    end;

Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (230,0,310,305)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface

CheckLabel:= TLabel.Create(Page); // создаем TLabel (для событий мыши)
with CheckLabel do
    begin
        Width :=ListBox.Width;
        Height :=ListBox.Height;
        Autosize :=False;
        Transparent :=True;
        OnMouseMove :=@CheckMouseMove;
        OnClick :=@CheckOnClick;
        Parent :=ListBox;
        Cursor := 1;
    end;

BitmapImage := TBitmapImage.Create(Page); // создаем TBitmapImage для
with BitmapImage do // отображения картинок
    begin // к описаниям
        AutoSize := True;
        Left := ListBox.Left;
        Top := ListBox.Top + ListBox.Height + 8;
        Width := ListBox.Width;
        Height := 32;
        Parent := Page.Surface;
    end;

for i:=0 to ListBox.Items.Count - 1 do // по кол-ву чекбоксов
    begin // создаем TBitmap-ы
        SetArrayLength(InfoBmp, i+1);
        InfoBmp[_i]:= TBitmap.Create;
    end;

// для каждого чекбокса грузим свою картинку к описанию
InfoBmp[7].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));
InfoBmp[8].LoadFromFile(ExpandConstant('{tmp}\screen.bmp'));


// Рамки для блока скриншотов //

Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (15,157,200,1)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface

Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (15,157,1,145)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface

Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (15,302,200,1)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface

Bmp :=TBitmapImage.Create(WizardForm)
Bmp.SetBounds (215,157,1,145)
Bmp.AutoSize :=False
Bmp.BackColor :=$cccccc
Bmp.Parent :=Page.Surface

// Рамки для блока скриншотов //

end;
[/more]

И еще, наверное, последнее, что хочется сделать в своем инсталляторе, так это добавить увеличенный скриншот. То есть при нажатии на маленький скриншот, экран должен "потемнеть" и в центре открыться большой, скажем, 800*600, при нажатии на который, экран снова "светлеет" и все возвращается в исходную. Увеличенный скриншот - это не увеличенная картинка маленького - это просто 2-я картинка, так что не нужно растягивать картинку, нужно просто, чтобы появлялась вторая.
Где-то когда-то у кого-то я такое видел, поэтому хотелось бы сделать у себя такое
Как это можно реализовать?
Автор: Diawer
Дата сообщения: 05.06.2008 08:18
htuos

Цитата:
кому нужно было сменить иконку в левом углу WizardForm

Сразу не заметил, спасибо выручил.
Автор: antifire
Дата сообщения: 05.06.2008 08:25
Genri
Да, хороший вариант. Спасибо! Покрайней мере не бесконечный цикл и какой файл копируеться видно. А как при нажатии "отмена" сделать откат установки?
Автор: Genri
Дата сообщения: 05.06.2008 09:21
AlexDJ666 -- в данный момент нет времени подробно разбирать твой скрипт. Но первое, что бросается в глаза: у тебя разные компоненты имеют одно имя (Page - это у тебя и первая страница и вторая; ListBox - это листбокс и на первой и на второй и т.д.)

Наверно, ты не обратил внимание, но я уже делал аналогичное замечание: в подавляющем большинстве случаев, надо давать разные имена Вообще, пока нет опыта, можешь принять за правило - каждому компоненту свое имя.
Автор: htuos
Дата сообщения: 05.06.2008 11:45
Sampron

Цитата:
Действительно долго рисуется, интересный вариант но увы не то, этот вариант делает зеркально половину рисунка.

почему половину? у меня весь рисунок переворачивается, в коде стоит WizardForm.WizardBitmapImage.Stretch:=False; может поэтому у тебя только половина переворачивается

Image2 не нужен согласен, это просто для наглядности
быстрее было бы ScanLine'ом, но я его что-то не нашел


Цитата:
А просто Flip Horizontally можно сделать?

и где его взять?
Автор: Genri
Дата сообщения: 05.06.2008 12:11
antifire -- [more]
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
Source: MyProg.exe; DestDir: {app}
Source: MyDll.dll; DestDir: {app}
Source: MyProg.chm; DestDir: {app}; AfterInstall: CopyDataFiles()

[_Code]
var
MaxSlice, CurrentSlice: integer;

function GetMaxSlice(): integer;
var
FS: TFileStream;
str: string;
begin
str:= StringOfChar(' ', 1);
FS := TFileStream.Create(ExpandConstant('{app}\MyProg.exe'), fmOpenRead);
try
FS.Seek(4,soFromBeginning);
FS.ReadBuffer(str, 1);
Result:=Ord(str[1]);
finally
FS.Free;
end;
end;

procedure CopyDataFiles();
var
CurrentFile: string;
begin
MaxSlice:= GetMaxSlice();
CurrentSlice:= 1;
while CurrentSlice <= MaxSlice do
begin
CurrentFile:= Format('DATA.%.3d', [CurrentSlice]);
WizardForm.FilenameLabel.Caption:= CurrentFile;
if FileCopy(ExpandConstant('{src}\' + CurrentFile),
ExpandConstant('{app}\' + CurrentFile), False) then
CurrentSlice:= CurrentSlice+1
else
if MsgBox('Вставьте диск №' + IntToStr(CurrentSlice) +
' или нажмите Отмена для прекращения установки',
mbInformation, MB_RETRYCANCEL) = IDCANCEL then
if ExitSetupMsgBox then
begin
WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
Break;
end;
end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if CurPageID = wpInstalling then
Confirm:= False;
end; [/more]

Исправил скрипт - ошибка в алгоритме (отмена отмены установки )
Автор: Sampron
Дата сообщения: 05.06.2008 12:16
htuos

Цитата:
и где его взять?

Здесь можно взять, но как его портировать в инно я незнаю, но использует эту функцию:
function StretchBlt(DestDC: LongInt; X, Y, Width, Height: Integer; SrcDC: LongInt; XSrc, YSrc, SrcWidth, SrcHeight: Integer; Rop: DWORD): Boolean;
external 'StretchBlt@gdi32.dll stdcall';
Автор: antifire
Дата сообщения: 05.06.2008 13:10
Genri

Не совсем то что надо (но это тоже хорошо), имелось ввиду откат установки полностью, с удалением созданных папок, ярлыков и файлов.
Автор: Genri
Дата сообщения: 05.06.2008 13:22
antifire -- это и есть штатный откат с отменой всех действий, выполненных штатным образом. Действия, выполненные из кода, надо откатывать вручную (тоже из кода).

ЗЫ. скрипт исправил.
Автор: antifire
Дата сообщения: 05.06.2008 13:36
Genri

Насчет того что сделано из кода согласен, нужно в коде и прописывать. Но ярлык программы на рабочем столе, папка My_programm в Пуск->Все программы, и все остальные файлы в {pf}\My_Programm (не включая файлы DATA.00x ) не удаляются после отмены установки.
Вот начало кода [more=установки]

[Setup]
AppName=Proga 2.1
AppVerName=Proga 2.1
DefaultDirName={pf}\My_Programm
DefaultGroupName=My_Programm
UninstallDisplayIcon={app}\Uninstall.exe
Compression=lzma
SolidCompression=true
WizardImageFile=Blue.bmp
WizardSmallImageFile=Blue.bmp

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

[Files]
Source: Proga.ini; DestDir: {app}
Source: {src}\Proga.exe; DestDir: {app}; Flags: external
Source: {src}\struct.dat; DestDir: {app}; Flags: external

[Icons]
Name: {group}\My_Programm; Filename: {app}\Proga.exe; WorkingDir: {app}
Name: {commondesktop}\Оболочка пользователя; Filename: {app}\Proga.exe; WorkingDir: {app}
Name: {group}\Uninstall; Filename: {app}\unins000.exe

[Run]
Filename: {app}\Proga.exe; Description: Запустить оболочку пользователя; Flags: postinstall shellexec skipifsilent

[UninstallDelete]
Name: {pf}\My_Programm; Type: filesandordirs


[/more]
Автор: Genri
Дата сообщения: 05.06.2008 13:58
antifire -- ошибаешься. Секция [Icons] выполняется после секции [Files]. А так как процесс отката инициируется в процессе выполнения секции [Files], до создания иконок дело даже не доходит. Но в любом случае (даже если инициировать откат после создания иконок), все что создано штатным образом, должно удаляться.
Вероятно, проблема в том, что иконки у тебя остались от предыдущих экспериментов.
Автор: EagleSH
Дата сообщения: 05.06.2008 13:59
господа ГУРУ инно, подскажите, есть ли возможность забиндить свою прогу непосредственно в окно инно. Поясню: Ставится прога к примеру, активное окно с прогрессбаром... я к примеру сделал совершенно в другой проге свой прогресс бар не имеющий ничего общего с инно, да это мне и НЕ НУЖНО, и хочу своим прогрессбаром накрыть инновский.

реально или нет?
Автор: htuos
Дата сообщения: 05.06.2008 14:04
Sampron
а ты этот код пробовал запускать? я вот в упор не вижу там поворота картинки, только смещение
Автор: SotM
Дата сообщения: 05.06.2008 14:04
EagleSH
нет, нельзя.
Можно либо всё сделать в инно в коде, либо же из инно запускать сторонний exe файл с твоим прогресс баром.
Автор: EagleSH
Дата сообщения: 05.06.2008 14:06
SotM
понял, спс.


Цитата:
либо же из инно запускать сторонний exe файл с твоим прогресс баром.

уточню всё же, а сторонний exe с моим баром можно прилипить к окну инно или нет?, ну типа чтоб при движении инно, двигался мой бар.
Автор: Genri
Дата сообщения: 05.06.2008 14:07
antifire -- а ты кстати, где вызываешь процедуру копирования дата-файлов? В твоем скрипте в секции [Files] нет вызова AfterInstall. Может проблема в этом. Не на всех этапах можно откатывать. Попробуй как в примере.
Автор: antifire
Дата сообщения: 05.06.2008 14:52
Genri

Удалил все что до этого было - ярлыки, папки, файлы. Отменил установку при выводе сообщения вставть диск № (убрал первый файл DATA.001)- ничего не удалилось.
По сути должно быть так - после отмены должено оставаться тоже окно - но только прогресбар уменьшаеться а надпись над ним - Откат изменений.
Но на деле происходит следующее - после нажатия отмены (после отмены "втавьте диск" ) переходит к следующему окну "Завершению мастера установки"
Если нажать отмена на основном окне установки перед началом копирования файлов DATA (то есть во время копирования из секции [Files]) все нормально - откат происходит.
Если я правильно понял, то при отмене вставки диска, и дальнейшей отмены установки на самом деле происходит прерывание копирования файлов DATA, а сама установка продолжается.

Добавлено:
Genri

Цитата:
а ты кстати, где вызываешь процедуру копирования дата-файлов? В твоем скрипте в секции [Files] нет вызова AfterInstall. Может проблема в этом. Не на всех этапах можно откатывать. Попробуй как в примере.


Я использую это:

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then CopyDataFiles();
end;


Забыл упомянуть что еще оформление установки поменял, дополнительно в секции [_Code] прописано - надеюсь это не влияет на отмену установки? Вот то что добавлено в секцию [_Code] помимо всего прочего [more]

rocedure 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:=2
Visible:=False
end
with CancelButton do begin
Left:=600
Top:=462
Width:=77
Height:=25
BringToFront
end
with NextButton do begin
Left:=375
Top:=462
Width:=77
Height:=25
BringToFront
end
with BackButton do begin
Left:=293
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:=200
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:=318
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;


[/more]
Автор: Genri
Дата сообщения: 05.06.2008 15:09
antifire -- ssPostInstall - это уже после установки. На этом этапе установка фактически выполнена и прерывание ничего не дает (там даже кнопка Cancel недоступна).
Переделай как в примере.
Автор: SotM
Дата сообщения: 05.06.2008 15:24
EagleSH
Нет, и так нельзя сделать.

1. Запуститься инно
2. Запуститься из него сторонний exe
3. Можно ждать до окончания работы стороннего exe, а можно чтоб он параллельно делал дело.

Блин, да полно игрушек/программ всяких у которых точно также сделано. Много раз уже видел.
Автор: antifire
Дата сообщения: 05.06.2008 15:33
Genri

Спасибо огромное! Действительно с AfterInstall откат установки происходит как надо.

Добавлено:
Genri

А что нужно в коде дописать, что бы при отмене удалить файлы DATA. По сути они копируются только в одно место - в {app}. Какая функция используеться для удаления папок? Для удаления папки я использовал

[UninstallDelete]
Name: {pf}\My_programm; Type: filesandordirs

Для секции [_Code] есть что нибудь похожее?
Автор: SotM
Дата сообщения: 05.06.2008 15:53
antifire

Цитата:
Для секции [_Code] есть что нибудь похожее?

Можешь рискнуть использовать DelTree. Но она является "травмоопасной", т.к. удаляет все дерево каталогов вместе с файлами. Не правильно укажешь параметр и попрощайся со всеми файлами.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Поиск в WinDjView


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.