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

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

Автор: SotM
Дата сообщения: 05.08.2008 10:58

Цитата:
нужно что бы, папка бэкапилась в отдельную директорию (C:\BackUp) и к ее имени добалялась бы дата\время, как в функции RenameDir?

??? что-то вопрос не совсем ясен. Ты так шоли хочешь то?


Код: BackupDir(ExpandConstant('{app}'), 'C:\BackUp\' + GetDateTimeString('dd/mm/yyyy hh:nn:ss ', '-', '-'), False);

RenameDir(ExpandConstant('{app}'), ExpandConstant('{app}' + ' -' + GetDateTimeString('dd/mm/yyyy hh:nn:ss ', '-', '-') + '\'));
Автор: nOobCrafter
Дата сообщения: 05.08.2008 11:14
SotM Твой вариант неверен. Тут просто в папке "C:\BackUp" создается куча папок типа "05-08-2008 11-09-37" каждую секунду во время инсталяции, причем все пусты. А надо что бы создавалась 1 папка с названием типа "05-08-2008 11-09-37" (времени начала инстала) и в ней лежал бэкап. Или опять непонятно выразился? Я нашел еще 1 похожий скрипт, но он немного мне неподходит, но эффект там тот что я хочу добиться. Выше отписал...
Автор: maxdddca123
Дата сообщения: 05.08.2008 12:01
Подскажите пожалуста код для определения серийного номера процессора.
Автор: GRom V
Дата сообщения: 05.08.2008 13:17
SotM

Цитата:
А что, разве нельзя использовать функцию Exec?
В хелпе ведь написано:

Код:var
ResultCode: Integer;
begin
// Launch Notepad and wait for it to terminate
if Exec(ExpandConstant('{win}\notepad.exe'), '', '', SW_SHOW,
ewWaitUntilTerminated, ResultCode) then
begin
// handle success if necessary; ResultCode contains the exit code
end
else begin
// handle failure if necessary; ResultCode contains the error code
end;
end;


Это ведь запуск exe...... не мог бы ты показать на примере как остановить службу например net stop test...?
Автор: Genri
Дата сообщения: 05.08.2008 13:52
GRom V -- я наверно плохо объяснил.
По поводу сида - я советовал использовать ветку HKLM\SOFTWARE\ Microsoft\Windows NT\CurrentVersion\ProfileList для получения списка всех сидов, которые подставлять в функцию для поиска нужного тебе ключа. Не уверен что это реализуемо (нет времени проверять), но думаю это легче чем использование апишной GetUserObjectInformation или что-то в этом роде.
Сид не генерится инсталлятором. Инсталлятор прописывает сид текущего пользователя. ИМХО.

По поводу net start stop - я советовал поискать по старым веткам. Например http://forum.ru-board.com/topic.cgi?forum=5&topic=23235&start=500#3 и ниже.
Автор: GRom V
Дата сообщения: 05.08.2008 14:16
Genri
Спасибо - со службами понял...
Автор: Artem_Butenko
Дата сообщения: 05.08.2008 14:21
Victor_Dobrov спасибо Вам за ссылку на скин Samprona. И у меня к Вам небольшой вопрос: в "Corona Skin" есть кнопка "Справка", я создаю аналогичную кнопку "About..." ("О программе...") используя процедуру AboutButton исходя из стандартного скрипта (который есть в дистрибутиве Inno Setup). Так вот, пожалуйста помогите "наложить" текстуру на эту кнопку. Если мой вариант не самый продуктивный, приму без обид любую Вашу критику!
Автор: Diawer
Дата сообщения: 05.08.2008 16:47
ExpeditorR и Chanka предложили очень не плохой [more=код] [Files]
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: isjpgtobmp.dll; DestDir: {tmp}; Flags: dontcopy
Source: BackImage.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 1.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 2.jpg; DestDir: {tmp}; Flags: dontcopy
Source: 3.jpg; DestDir: {tmp}; Flags: dontcopy

[Code_]
type
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);
var
BackImage: TBitmapImage;
TimerID: LongWord;
CurrentPicture,res:integer;
PicList: TStringlist;
path,Pics: string;

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 GetSystemMetrics(nIndex:Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall';
procedure convertjpgtobmp(p: String); external 'convertjpgtobmp@files:isjpgtobmp.dll stdcall';


procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
thePicture: integer;
d:double;
begin
d:=WizardForm.ProgressGauge.Max / ( piclist.Count );
thePicture := round( WizardForm.ProgressGauge.Position / d);
if( thePicture <> CurrentPicture ) then
begin
CurrentPicture := thePicture;
try
BackImage.Bitmap.LoadFromFile(piclist.strings[CurrentPicture - 1])
except
end;
end;
end;

procedure InitializeWizard();
var
pfunc: LongWord;
begin
pfunc:=WrapTimerProc(@OnTimer, 4)
TimerID:=SetTimer(0, 0, 200, pfunc)
PicList:=tstringlist.Create;
WizardForm.Position:=poScreenCenter
WizardForm.CancelButton.BringToFront;
MainForm.BORDERSTYLE:=bsNone
MainForm.Left:=0
MainForm.Top:=0
MainForm.Width:=GetSystemMetrics(0)
MainForm.Height:=GetSystemMetrics(1)
ExtractTemporaryFile('BackImage.jpg')
pics:=ExpandConstant('{tmp}')+'\BackImage.jpg ';
convertjpgtobmp(pics);
BackImage:=TBitmapImage.Create(MainForm)
BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\BackImage.bmp ')
BackImage.Align:=alClient
BackImage.Parent:=MainForm
BackImage.Stretch:=True
MainForm.Visible:=True
path:=ExpandConstant('{tmp}');
ExtractTemporaryFile('1.jpg')
ExtractTemporaryFile('2.jpg')
ExtractTemporaryFile('3.jpg')
piclist.add(path + '\1.bmp');
piclist.add(path + '\2.bmp');
piclist.add(path + '\3.bmp');
pics:=path+'\1.jpg';
convertjpgtobmp(pics);
pics:=path+'\2.jpg';
convertjpgtobmp(pics);
pics:=path+'\3.jpg';
convertjpgtobmp(pics);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpInstalling then
begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(MainForm.Width-WizardForm.Width-25);
WizardForm.Top:=ScaleY(MainForm.Height-WizardForm.Height-25);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end

if CurPageID=wpFinished then
begin
WizardForm.Visible:=False;
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Left:=(MainForm.Width-WizardForm.Width) div 2;
WizardForm.Top:=(MainForm.Height-WizardForm.Height) div 2;
WizardForm.Visible:=True;
BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\BackImage.bmp')
end
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID)
end;[/more] слайд-шоу по процентам установки с jpeg картинками, но не могли бы вы как вариант подправить именно его для bmp картинок, соответственно без конвертации из других форматов.
Автор: Artem_Butenko
Дата сообщения: 05.08.2008 17:32
Diawer. Интересующий Вас пример слайд-шоу по % прогресс-бара из .bmp файлов, есть в "Сборнике вопросов" (см. шапку форума) от fly. Для его реализации требуется библиотека "InnoCallBack.dll".

Добавлено:
Уважаемый товарищ Sampron прошу извинить меня, вероятно Вы немного иначе поняли мой вопрос. В ранних версия InstallShield рисунок на WizardForm выглядел как бы "вдавленным" по краям в форму окна. Можно ли реализовать подобный эффект в Inno Setup?
Автор: Sampron
Дата сообщения: 05.08.2008 19:19
Artem_Butenko

Цитата:
В ранних версия InstallShield рисунок на WizardForm выглядел как бы "вдавленным" по краям в форму окна.
Потому-что присутствовал системный BorderStyle, в VistaLightSkin он отсутствует.
Автор: Gans123
Дата сообщения: 05.08.2008 19:30

Цитата:
[/q]


Gans123, Спасибо. А нельзя скомпилировать все в 1 файл, неразбивая его на части?

Добавлено:
[q]


Gans123, Спасибо. А можно скомпилировать в 1 файл всю игру. Неразбивая на части по 2гб. ???
Автор: Artem_Butenko
Дата сообщения: 05.08.2008 19:47
Sampron. Опять мы друг друга не поняли, я имел в виду инсталляционную систему InstallShield ранних версий; или, например, PatchWise Free. Здесь, рисунок в левом углу окна мастера имеет эффект "бордюр". Я просто хотел узнать, как можно реализовать подобное в Inno Setup, с аналогичным битмапом в левом углу окна мастера установки (как я понимаю битмап 164x314 придеться уменьшить, т.к. в стандартном варианте он занимает предельно большое поле в WizardForm, и данный эффект не будет красив в верхней и нижней частях рисунка).
Автор: Gans123
Дата сообщения: 05.08.2008 19:50
Artem_Butenko, спасибо. А можно какнибудь скомпилировать в 1 файл всю игру. Сделать, чтоб он позволял компилировать в файл более 2,1 гб.
Автор: Artem_Butenko
Дата сообщения: 05.08.2008 20:07
Gans123. В Вашем варианте создание "монолитного" инсталлятора не подойдет, т.к. размер архива игры будет превышать стандартные нормы Inno Setup (в чем Вы уже убедились). А в "разбиении" инсталлятора на диски есть свои плюсы, например, корректное отображение иконки исполнительного файла в Windows Explorer, или, возможность хранения (и запуска) дистрибутива на HDD с файловой системой FAT 32. Кстати, исходно, на диске с какой файловой системой Вы запускали сборку инсталлятора в первый раз?
Автор: Chanka
Дата сообщения: 05.08.2008 20:21
Diawer,

[more=Читать дальше..][Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program



[Files]
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: BackImage.bmp; DestDir: {tmp}; Flags: dontcopy
Source: 1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: 2.bmp; DestDir: {tmp}; Flags: dontcopy
Source: 3.bmp; DestDir: {tmp}; Flags: dontcopy

[Code]
type
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);
var
BackImage: TBitmapImage;
TimerID: LongWord;
Picture,res:integer;
PicList: TStringlist;
path,Pics: string;

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 GetSystemMetrics(nIndex:Integer):Integer; external 'GetSystemMetrics@user32.dll stdcall';


procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
Pic: integer;
d:double;
begin
d:=WizardForm.ProgressGauge.Max / ( piclist.Count );
Pic:= round( WizardForm.ProgressGauge.Position / d);
if( Pic <> Picture ) then
begin
Picture := Pic;
try
BackImage.Bitmap.LoadFromFile(piclist.strings[Picture - 1])
except
end;
end;
end;

procedure InitializeWizard();
var
pfunc: LongWord;
begin
ExtractTemporaryFile('BackImage.bmp')
ExtractTemporaryFile('1.bmp')
ExtractTemporaryFile('2.bmp')
ExtractTemporaryFile('3.bmp')
WizardForm.Position:=poScreenCenter
MainForm.BORDERSTYLE:=bsNone
WizardForm.CancelButton.BringToFront;
MainForm.Left:=0
MainForm.Top:=0
MainForm.Width:=GetSystemMetrics(0)
MainForm.Height:=GetSystemMetrics(1)
BackImage:=TBitmapImage.Create(MainForm)
BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\BackImage.bmp ')
BackImage.Align:=alClient
BackImage.Stretch:=True
BackImage.Parent:=MainForm
MainForm.Visible:=True
path:=ExpandConstant('{tmp}');
PicList:=tstringlist.Create;
piclist.add(path + '\1.bmp');
piclist.add(path + '\2.bmp');
piclist.add(path + '\3.bmp');
pfunc:=WrapTimerProc(@OnTimer, 4)
TimerID:=SetTimer(0, 0, 200, pfunc)
end;

procedure CurPageChanged(CurPageID: Integer);
begin
If CurPageID=wpInstalling then
begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(MainForm.Width-WizardForm.Width-25);
WizardForm.Top:=ScaleY(MainForm.Height-WizardForm.Height-25);
WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end

if CurPageID=wpFinished then
begin
WizardForm.Visible:=False;
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Left:=(MainForm.Width-WizardForm.Width) div 2;
WizardForm.Top:=(MainForm.Height-WizardForm.Height) div 2;
WizardForm.Visible:=True;
BackImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\BackImage.bmp')
end
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID)
end;[/more]
Автор: Sampron
Дата сообщения: 05.08.2008 22:10
Artem_Butenko
Мы так друг друга никогда не поймём, приведите хотябы скриншот.
Автор: ComradG
Дата сообщения: 05.08.2008 22:32
Кто-нибудь дорабатывал этот скрипт? А то я в прошлых топиках ничего не нашел.
[more]

[Setup]
AppName=NSIS
AppVerName=NSIS
DefaultDirName={pf}\NSIS
DefaultGroupName=NSIS
VersionInfoVersion=2.3.0.1
AllowNoIcons=yes

[Types]
Name: full; Description: Full installation
Name: compact; Description: Compact installation
Name: custom; Description: Custom installation; Flags: iscustom

[Components]
Name: program; Description: Program Files; Types: full compact custom; Flags: fixed
Name: help; Description: Help Contents; Types: full compact
Name: readme; Description: Read Me; Types: custom
Name: readme\en; Description: English; Flags: exclusive
Name: readme\ru; Description: Russian; Flags: exclusive

[Icons]
Name: {group}\NSIS; Filename: MakeNSIS.exe

[Messages]
SetupAppTitle=NSIS Setup
SetupWindowTitle=NSIS Setup
BeveledLabel= Nullsoft Install System
DiskSpaceMBLabel=Space requred: [mb] MB
ComponentsDiskSpaceMBLabel=Space required: [mb] MB

[LangOptions]
DialogFontName=Tahoma

[_Code]
var
Bevel: TBevel;
FreeSpaceLabel: TLabel;
Panel: TPanel;
StartMenuTreeView: TStartMenuFolderTreeView;
Text1, Text2, Text3, Text4, Text5, Text6, Text7: TNewStaticText;

procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: string;
FreeMB, TotalMB: cardinal;
begin
Path:=ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, true, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption:='Space available:' + FloatToStr(round(FreeMB/1024*100)/100) + ' GB'
else
FreeSpaceLabel.Caption:='Space available:' + IntToStr(FreeMB) + ' MB'
end;

procedure StartMenuTreeViewOnClick(Sender: TObject);
begin
WizardForm.GroupEdit.Text:=addBackslash(StartMenuTreeView.Directory) + 'NSIS'
end;

procedure InitializeWizard();
begin
//страница выбора папки назначения
Text1:=TNewStaticText.Create(WizardForm);
Text1.Left:=ScaleX(0);
Text1.Top:=ScaleY(1);
Text1.Width:=ScaleX(417);
Text1.Height:=ScaleY(31);
Text1.AutoSize:=false;
Text1.WordWrap:=true;
Text1.Caption:='Setup will install NSIS in the following folder. To install a diffrent folder, click Browse and select another folder. Click Next to continue.';
Text1.Parent:=WizardForm.SelectDirPage;

Text2:=TNewStaticText.Create(WizardForm);
Text2.Left:=ScaleX(12);
Text2.Top:=ScaleY(114);
Text2.Font.Color:=clBlue;
Text2.Caption:='Destination folder';
Text2.Parent:=WizardForm.SelectDirPage;

Bevel:=TBevel.Create(WizardForm);
Bevel.Left:=ScaleX(0);
Bevel.Top:=ScaleY(120);
Bevel.Width:=ScaleX(417);
Bevel.Height:=ScaleY(50);
Bevel.Shape:=bsFrame;
Bevel.Parent:=WizardForm.SelectDirPage;

FreeSpaceLabel:=TLabel.Create(WizardForm);
FreeSpaceLabel.Left:=ScaleX(0);
FreeSpaceLabel.Top:=ScaleY(203);
FreeSpaceLabel.Width:=ScaleX(209);
FreeSpaceLabel.Height:=ScaleY(13);
FreeSpaceLabel.Enabled:=true;
FreeSpaceLabel.Parent:=WizardForm.SelectDirPage;

//страница выбора компонентов
Text3:=TNewStaticText.Create(WizardForm);
Text3.Left:=ScaleX(0);
Text3.Top:=ScaleY(1);
Text3.Width:=ScaleX(417);
Text3.Height:=ScaleY(31);
Text3.AutoSize:=false;
Text3.WordWrap:=true;
Text3.Caption:='Check the components you want to install and unckeck you do not want to install. Click Next to continue.';
Text3.Parent:=WizardForm.SelectComponentsPage;

Text4:=TNewStaticText.Create(WizardForm);
Text4.Left:=ScaleX(0);
Text4.Top:=ScaleY(39);
Text4.Width:=ScaleX(115);
Text4.Height:=ScaleY(19);
Text4.Caption:='Select type of install:';
Text4.Parent:=WizardForm.SelectComponentsPage;

Text5:=TNewStaticText.Create(WizardForm);
Text5.Left:=ScaleX(0);
Text5.Top:=ScaleY(61);
Text5.Width:=ScaleX(115);
Text5.Height:=ScaleY(87);
Text5.AutoSize:=false;
Text5.WordWrap:=true;
Text5.Caption:='Or select the optional components you wish to install:';
Text5.Parent:=WizardForm.SelectComponentsPage;

Panel:=TPanel.Create(WizardForm);
Panel.Left:=ScaleX(144);
Panel.Top:=ScaleY(173);
Panel.Width:=ScaleX(273);
Panel.Height:=ScaleY(53);
Panel.BevelInner:=bvLowered;
Panel.Parent:=WizardForm.SelectComponentsPage;

Text6:=TNewStaticText.Create(WizardForm);
Text6.Left:=ScaleX(151);
Text6.Top:=ScaleY(168);
Text6.Font.Color:=clBlue;
Text6.Caption:='Description';
Text6.Parent:=WizardForm.SelectComponentsPage;

//страница выбора папки меню пуск
Text7:=TNewStaticText.Create(WizardForm);
Text7.Left:=ScaleX(0);
Text7.Top:=ScaleY(1);
Text7.Width:=ScaleX(417);
Text7.Height:=ScaleY(31);
Text7.AutoSize:=false;
Text7.WordWrap:=true;
Text7.Caption:='Select the Start Menu folder in which you would like to create the program shortcuts. You can also enter a name to create a new folder.';
Text7.Parent:=WizardForm.SelectProgramGroupPage;

StartMenuTreeView:=TStartMenuFolderTreeView.Create(WizardForm);
StartMenuTreeView.Left:=ScaleX(0);
StartMenuTreeView.Top:=ScaleY(67);
StartMenuTreeView.Width:=ScaleX(417);
StartMenuTreeView.Height:=ScaleY(147);
StartMenuTreeView.OnChange:=@StartMenuTreeViewOnClick;
StartMenuTreeView.Parent:=WizardForm.SelectProgramGroupPage;
StartMenuTreeView.SetPaths(ExpandConstant('{userprograms}'), ExpandConstant('{commonprograms}'), ExpandConstant('{userstartup}'), ExpandConstant('{commonstartup}'));

//изменение местоположения элементов страниц мастера
//для страницы выбора папки назначения
WizardForm.SelectDirBrowseLabel.Hide;
WizardForm.SelectDirLabel.Hide;
WizardForm.DirEdit.Left:=ScaleX(9);
WizardForm.DirEdit.Top:=ScaleY(133);
WizardForm.DirEdit.Width:=ScaleX(305);
WizardForm.DirEdit.Height:=ScaleY(23);
WizardForm.DirEdit.OnChange:=@GetFreeSpaceCaption;
WizardForm.DirEdit.Text:=WizardForm.DirEdit.Text + #0;
WizardForm.DirBrowseButton.Left:=ScaleX(330);
WizardForm.DirBrowseButton.Top:=ScaleY(133);
WizardForm.DiskSpaceLabel.Top:=ScaleY(187);

//для страницы выбора компонентов
WizardForm.SelectComponentsLabel.Hide;
WizardForm.TypesCombo.Left:=ScaleX(144);
WizardForm.TypesCombo.Width:=ScaleX(273);
WizardForm.ComponentsList.Left:=ScaleX(144);
WizardForm.ComponentsList.Top:=ScaleY(61);
WizardForm.ComponentsList.Width:=ScaleX(273);
WizardForm.ComponentsList.Height:=ScaleY(107);
WizardForm.ComponentsDiskSpaceLabel.Top:=ScaleY(173);

//для страницы выбора папки меню пуск
WizardForm.SelectStartMenuFolderBrowseLabel.Hide;
WizardForm.SelectStartMenuFolderLabel.Hide;
WizardForm.GroupEdit.Top:=ScaleY(43);
WizardForm.GroupEdit.Width:=ScaleX(417);
WizardForm.GroupBrowseButton.Enabled:=false;
WizardForm.GroupBrowseButton.Visible:=false;
end;

[/more]

Как вы, наверное, уже поняли, страницы мастера похожи на страницы инсталлятора NSIS. Повидимому автор не доработал страницу выбора компонентов. В идеале должно быть так, что в Panel при наведении курсора мыши на элемент должно появляться к нему пояснение. Кажется если не переписывать страницу мастера заново это решается с помощью IsComponentSelectes? А может и ошибаюсь.

Добавлено:
P.S.Кстати по поводу того, что я плохо разбираюсь в Inno - Genri прав. Я до этого три года юзал NSIS.
Автор: Artem_Butenko
Дата сообщения: 06.08.2008 01:31
ComradG. Ранее, на мой вопрос о скинировании инсталлятора, Вы писали о использовании неких "потаенных" ресурсов ОС (?!), структуре xml скрипта (?!) и программировании на C++ (?!). Согласен, о C++ я знаю мало, но причем здесь этот язык программирования, если Inno Setup основан на Паскале? Я очень рад, что Вы обладаете такими знаниями, но пожалуйста отвечайте на вопросы по существу. Если Вы имели ввиду написание темы для Inno Setup на C++, поделитесь своим опытом. Я и многие другие почитатели Inno Setup будем этому только рады!

Добавлено:
Sampron. Приведу еще один ближайший ориентир, стиль "Border" можно придать кнопке инсталлятора, а вот можно ли рисунку на форме окна инсталлятора? Такой эффект есть в старых версиях InstallShield (v.10...11), которыми упакованы отечественные локализации "Турок" и "Mass Effect". Хотелось бы Inno Setup научить делать подобное. Если Вам немного неясно, пишите куда закрепить скриншоты.
Автор: Shift7
Дата сообщения: 06.08.2008 02:32
Во временную папку кодом можно скопировать так: ExtractTemporaryFile('file.ini')
Подскажите пожалуйсто - как кодом можно скопировать файлы например в папку Windows...если можно с примером.
Автор: SotM
Дата сообщения: 06.08.2008 07:39
Shift7
Не совсем понятно, надо приводить точные детали и желательно с кодом. И вообще, надо прежде чем спрашивать читать сам хелп, и может быть твои вопросы отпадут.
Есть такие константы: {win}, {pf} и другие. В хелпе более детально можно найти. Да и самих примеров полно.
Автор: Shift7
Дата сообщения: 06.08.2008 08:18
SotM
например в {win}
мне нужно кодом скопировать в {win} file.ini

И еще вопросик - мне в конце установки нужно запустить файл.
Как изменить надпись, на которой - распаковка файлов в каталог?
Автор: noiseless
Дата сообщения: 06.08.2008 08:30
Shift7
Ну, если используя Инно, вот так, например:

[Files]
Source: "C:\file.ini"; DestDir: "{win}"
Автор: Shift7
Дата сообщения: 06.08.2008 09:07
noiseless
Это не то - мне надо это сделать в function InitializeSetup(): Boolean;
именно кодом
Автор: Victor_Dobrov
Дата сообщения: 06.08.2008 09:40
Тем, кто использует китайский innounp enhanced 0.23 build 2008-06-25 - заменил почти весь китайский текст на английский.
Автор: Genri
Дата сообщения: 06.08.2008 09:44
Artem_Butenko

Цитата:
о использовании неких "потаенных" ресурсов ОС (?!), структуре xml скрипта
-- я же говорил - забудь. Речь идет всего-навсего о файле манифест. Который в данном случае совсем не нужен.
Автор: nOobCrafter
Дата сообщения: 06.08.2008 09:52
Может кто нибудь помоч с таким вопросом? Вот есть 2 функции

Цитата:
BackupDir(ExpandConstant('{app}'), 'C:\BackUp', False);

RenameDir(ExpandConstant('{app}'), ExpandConstant('{app}' + ' -' + GetDateTimeString('dd/mm/yyyy hh:nn:ss ', '-', '-') + '\'));

, нужно что бы, папка бэкапилась в отдельную директорию (C:\BackUp) и к ее имени добалялась бы дата\время, как в функции RenameDir. Надо как то совместить эти 2 функции что бы получилась одна, или снизу есть скрип с тем еффектом что надо, но там свои траблы..

И вопрос по поводу "InnoSetupFAQ_ru-board.chm"
[more=вот][Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
Compression=lzma
SolidCompression=yes
Uninstallable=no

[Tasks]
Name: arc; Description: "Create backup"

[Files]
Source: Files\*.*; DestDir: {app}; BeforeInstall: CreateBackup

[Code]
var
Page: TInputDirWizardPage;
ArcDir: String;

procedure CreateBackup();
var
SrcFile, DestFile: string;
begin
if IsTaskSelected('arc') then
begin
// if Not DirExists(ArcDir) then CreateDir(ArcDir);
ForceDirectories(ArcDir); // исправлено
SrcFile:= AddBackslash(ExpandConstant('{app}')) + ExtractFileName(CurrentFileName);
DestFile:= AddBackslash(ArcDir) + ExtractFileName(CurrentFileName);
FileCopy(SrcFile, DestFile, False);
end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
If (CurPageID = Page.ID) then
ArcDir := Page.Values[0];
Result:= True;
end;

function ShouldSkipPage(PageID: Integer): Boolean;
begin
If (PageID = Page.ID) and
(Not IsTaskSelected('arc')) then
Result:= True
else Result:= False;
end;

procedure InitializeWizard();
begin
Page:= CreateInputDirPage(wpSelectTasks, 'Select Backup Location',
'Where should backup files be stored?',
'To continue, click Next.' + #10#13#10#13 +
'If you would like to select a different folder, click Browse.',
False, 'Backup');
Page.Add('');
//Page.Values[0] := ExpandConstant('{sd}\Backup');
Page.Values[0] := AddBackslash(ExpandConstant('{sd}\Backup')) +
GetDateTimeString('yyyy/mm/dd hh:nn', '_', '.' ); // исправлено
end; [/more] код оттуда, почему с его помошью нельзя забэкапить "любую" папку, а только ходящую в состав инсталяшки? Я допустим хочу сделать бэкап рабочего стола при инстале проги (для примера говорю, хоть C:\123), а этого неполучается, в {sd}\Backup создается папка со временем инстала, но она пуста( Как можно это реализовать?
Автор: Shift7
Дата сообщения: 06.08.2008 11:16
У меня получился такой код....вот его часть:

procedure CurStepChanged(CurStep: TSetupStep);
var
sLocation: String;
iShowCmd: Integer;
iErrorCode: Integer;
s, ResultStr:string;
begin
if CurStep=ssPostinstall
then
begin
ShellExec('', ExpandConstant('{src}\setup.exe'),'', '', SW_SHOW, ewWaitUntilTerminated, iErrorCode);

Могу ли я в момент запуска файла изменить текст (где распаковка файлов)???
Заранее спасибо
Автор: Sampron
Дата сообщения: 06.08.2008 11:32
Artem_Butenko

Цитата:
Если Вам немного неясно, пишите куда закрепить скриншоты.

На любой "скриншотообменник", к примеру http://www.imagehost.org/
Автор: Gans123
Дата сообщения: 06.08.2008 15:54
Artem_Butenko, да. Файлова система NTFS. Плохо что Inno Setup Compiler неможет в 1 файл сделать. Но зато он удобный и простой в использовании.
Автор: Artem_Butenko
Дата сообщения: 06.08.2008 17:40
Gans123. Если Вы хотите собрать "монолитный" архив-инсталлятор, используйте SFX-модуль WinRAR или 7-Zip. Данные в реестр можно добавить запустив в конце распаковки reg-файлик. А, если хотите, можно выполнить распаковку полученного SFX-архива через Inno Setup, подобные примеры Вы найдете в руководстве по расширенным возможностям Inno Setup за авторством товарища Kindly. Однако, в таком случае у Вас будет два файла: большой "монолитный" SFX-архив и, сравнительно небольшой, исполнительный файл скомпилированного инсталлятора. Что для Вас удобнее, решайте сами!

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970

Предыдущая тема: Презентация


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