Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [39] 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105

sergey3695
07-02-2012, 17:53
wdmitriy, IsPicture в помощь...

Deadmau5
07-02-2012, 19:14
ребят,подскажите пожалуйста с чем связана проблема с неправильным показом времени установки?к примеру показывает часа полтора,а устанавливается за минут 20

wdmitriy
07-02-2012, 20:12
sergey3695, это для изображения а я просил для видео

Gnom_aka_Lexander
07-02-2012, 20:44
Кто тебе сказал, что IsPicture для изображений? Она с картинками вообще не умеет работать. я ее как раз для того и писал, чтоб видео на фоне инсталла можно было показывать.
тоесть, позади надписей, контролов, и так далее.

wdmitriy
07-02-2012, 20:59
Как добавить видео я знаю мне нужно чтобы видео воспроизводилось именно на заднем плане надписей, прогресбара и тд в окне инстолятора

Лександер, я добовляю видео в пример IsPicture а у меня при запуске установка не отвечает

Gnom_aka_Lexander
07-02-2012, 21:10
Из 250-ти скачавших, ни у кого проблем не было. К библиотеке идет 100% рабочий пример. Наверняка просто успел накосячить в коде, либо подключил что-то, что не работает. например код для использования своих шрифтов в инсталле.
Без твоего скрипта, наверняка сказать не могу.

wdmitriy
07-02-2012, 21:25
[Setup]
WizardImageFile=Fon.avi
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[Files]
Source: IsPicture.dll; Flags: dontcopy
Source: Fon.avi; DestDir: {tmp}; Flags: dontcopy;
[Code]
//-----------------------------------------
procedure Initialize(AhWnd,BhWnd: hWnd;Color:Tcolor;bAlpha:Integer;Flag:Boolean);external 'Initialize@files:IsPicture.dll stdcall delayload';
//-----------------------------------------
// AhWnd - форма, которая будет сверху
// BhWnd - форма, которая будет снизу
// Color - цвет,который будет вырезан из формы, которая сверху
// bAlpha - степень прозрачности - от 0 до 255 для формы,которая сверху
// Flag - значения - True-будет применена прозрачность false- вырезание цвета
//-----------------------------------------
// Примеры:
// Initialize(WizardForm.Handle,MainForm.Handle,$0f0f0f,130,false);
// будет вырезан цвет $0f0f0f из WizardForm (флаг false)
//-----------------------------------------
// Initialize(WizardForm.Handle,MainForm.Handle,$0f0f0f,130,True);
// Будет применена прозрачность 130 к WizardForm (флаг True)
//-----------------------------------------


procedure Deinitialize;external 'Deinitialize@files:IsPicture.dll stdcall delayload';

const
// цвета придется тщательно подбирать.
// Если Сглаживание шрифтов в системе отключено,
// то нужно его включить на время настройкт инсталлятора.
TfonColor = $0f0f0f; // Цвет фона $0f0f0f
TfontColor = $E5E5E5; // Цвет текста $E5E5E5


procedure InitializeWizard();
var s:String;
begin
//-----------------------------------------
// нижеприведенный код очень желателен для наличия.
WizardForm.Color:=TfonColor;
WizardForm.WelcomePage.Color:=WizardForm.Color;
WizardForm.FinishedPage.Color:=WizardForm.Color;
WizardForm.InnerPage.Color:=WizardForm.Color;
WizardForm.DirEdit.Color:=WizardForm.Color;
WizardForm.ReadyMemo.Color:=WizardForm.Color;
WizardForm.MainPanel.Color:=WizardForm.Color;
//-----------------------------------------
//-----------------------------------------
WizardForm.Font.Color:=TfontColor;
WizardForm.Font.Size:=9;
WizardForm.Font.Name:='Georgia';
WizardForm.Font.Style := [fsBold, fsItalic];
//-----------------------------------------
//-----------------------------------------
WizardForm.PageNameLabel.Font := WizardForm.Font;
WizardForm.WelcomeLabel1.Font := WizardForm.Font;
WizardForm.WelcomeLabel1.Font.Size:=14;
WizardForm.FinishedHeadingLabel.Font := WizardForm.Font;
WizardForm.FinishedHeadingLabel.Font.Size:=14;
//-----------------------------------------
//-----------------------------------------
WizardForm.WizardBitmapImage.Parent := MainForm;
WizardForm.WizardBitmapImage.Align := alClient;;
WizardForm.WizardBitmapImage2.Hide;
//-----------------------------------------

//-----------------------------------------
// указываем формы, в данном случае WizardForm и MainForm
// выбираем режим работы с помощью флага:
//True-будет применена прозрачность к WizardForm false- вырезание цвета.
//соединены формы будут в длл-ке
Initialize(WizardForm.Handle,MainForm.Handle,TfonColor,130,false);
//-----------------------------------------
// не забываем показать MainForm
MainForm.Show;
//-----------------------------------------
end;

procedure DeinitializeSetup();
begin
//-----------------------------------------
// не забываем правильно завершить функцию,
// во избежание ошибок при закрытии
Deinitialize;
//-----------------------------------------
end;

Ну и вчем ошибка я ничего не добовлял кроме того что заменил Fon.bmp на Fon.avi

vitl
07-02-2012, 21:33
Пожалуйста, помогите решить следующую задачу.
Нужно силами Inno Setup создать программу-обновлялку, которая обновляла бы программу на флешке.

Нужно сделать так, чтобы Программу-Апдейтер можно было запускать из любой папки на компьютере. Для этого необходимо по маркерным файлу и папке определить на какую букву села флешка, после чего должно произойти обновление на флешке в папках:
%буква_флешки%\Settings\Client\ и %буква_флешки%\utils\.

Желательно обновляемые файлы предварительно скопировать в backup.

Надеюсь на помощь.

P.S. Всё застопорилось на определении буквы диска с флешкой.

Gnom_aka_Lexander
07-02-2012, 21:33
wdmitriy, Ооо... вопревых есть теги, чтоб портянки не вывешивать. А во вторых - где ты нашел такую древнюю версию?
Ссылка (http://rghost.ru/private/20901171/f24aeaa115df9016763a7c2702b4f666) - тут последняя версия.

wdmitriy
07-02-2012, 21:56
На этом сайте спасибо за последнюю версию

R.i.m.s.k.y.
07-02-2012, 21:57
vitl,
как-то так

[Setup]
DefaultDirName={code:Path}
DisableDirPage=True
Uninstallable=false

[Files]
Source: filenull; DestDir: {tmp}; BeforeInstall: BackUp; Flags: ignoreversion
Source: \Settings\Client\; DestDir: {app}\Settings\Client\; BeforeInstall: ChangeCaption('\Settings\Client\'); Flags: ignoreversion recursesubdirs createallsubdirs
Source: \utils\; DestDir: {app}\utils\; BeforeInstall: ChangeCaption('\utils\'); Flags: ignoreversion recursesubdirs createallsubdirs

[*Code]

var DriveLetter : char;

procedure ChangeCaption(str: string);
begin
WizardForm.StatusLabel.Caption:= str;
end;

Function InitializeSetup: Boolean;
var i : Integer;
begin
DriveLetter := ''; i:= Ord('a');
while ( (Length(DriveLetter)=0) or (i<=Ord('z')) )
do begin
if FileExists(Chr(i)+':\markerfile') then DriveLetter := Chr(i);
i := i +1;
end;
if (Length(DriveLetter) > 0 then Result := True
else begin
MsgBox('флэшка не найдена', mbError, mb_Ok);
Result := False;
end;
end;

function Path(): String;
begin
if (Length(DriveLetter) > 0) then Result := DriveLetter +':\' else Result := ExpandConstant('{tmp}');
end;

procedure copyfiles(fromfile, tofile:string);
var res : integer;
begin
Exec('cmd.exe', ' /c copy /Y ' + AddQuotes(fromfile) + ' ' + AddQuotes(tofile),ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
end;

Procedure backUp();
begin
ChangeCaption('BackUp')
If DirExists (DriveLetter +':\'+'Settings\Client\') then copyfiles(DriveLetter +':\'+'Settings\Client\', DriveLetter +':\'+'Backup\'+GetDateTimeString('YYYYMMDD_hh:nn:ss', '-', '-')+'\Settings\Client\');
if DirExists (DriveLetter +':\'+'utils\') then copyfiles(DriveLetter +':\'+'utils\', DriveLetter +':\'+'Backup\'+GetDateTimeString('YYYYMMDD_hh:nn:ss', '-', '-')+'\utils\');
end;


код идейно верный но могут быть синтаксические ошибки: end'а не хватает, ошибка в названии и тп

Johny777
08-02-2012, 02:02
помогите пожалуйста
вылетает с ошибкой когда добавляю AddToMemo
[Files]
Source: half-life 2\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension onlyifdoesntexist; Components: g0\c1; AfterInstall: ExtLog(); BeforeInstall: AddToMemo, ChangeCaption('установка компонентов Half-Life 2');

как в BeforeInstall записать 2 параметра?
в справке говорится, что через запятую, но у меня это не работает
с этой проблемой столкнулся, когда объединял эти 2 кода
1\[Files]
Source: "{src}\*.exe"; DestDir: {app}; BeforeInstall: ChangeCaption('Откиньтесь на спинку кресла и наслаждайтесь!')
Source: "{src}\*.dll"; DestDir: {app}; BeforeInstall: ChangeCaption('Не забудьте зарегистрироваться')

[_Code]
procedure ChangeCaption(str: string);
begin
WizardForm.StatusLabel.Caption:= str;
end;
2[Setup]
AppName=MyApp
AppVerName=MyApp
DefaultDirName={pf}\MyApp

[Files]
Source: E:\Program\Inno Setup 5.3.8 Ext\*; DestDir: {app}; BeforeInstall: AddToMemo; Flags: nocompression recursesubdirs createallsubdirs

[_code]
var
FilesMemo: TMemo;

procedure AddToMemo();
var AFile: String;
begin
AFile:= ExpandConstant(CurrentFilename);
if ExtractFileExt(AFile)='' then
FilesMemo.Lines.Add('CreateFolder: '+RemoveBackslash(AFile)) else
FilesMemo.Lines.Add('Extract: '+AFile);
end;

procedure InitializeWizard();
begin
FilesMemo:= TMemo.Create(WizardForm);
FilesMemo.SetBounds(0, 80, 418, 120);
FilesMemo.WordWrap:= False;
FilesMemo.Parent:= WizardForm.InstallingPage;
FilesMemo.ScrollBars:= ssVertical;
FilesMemo.ReadOnly:= True;
FilesMemo.Clear;
end;

vitl
08-02-2012, 09:11
код идейно верный но могут быть ...
Спасибо, R.i.m.s.k.y., буду пробовать!

vitl
08-02-2012, 09:59
[Files]
Source: filenull; DestDir: {tmp}; BeforeInstall: BackUp; Flags: ignoreversion
Source: \Settings\Client\; DestDir: {app}\Settings\Client\; BeforeInstall: ChangeCaption('\Settings\Client\'); Flags: ignoreversion recursesubdirs createallsubdirs
Source: \utils\; DestDir: {app}\utils\; BeforeInstall: ChangeCaption('\utils\'); Flags: ignoreversion recursesubdirs createallsubdirs »

Выдает ошибку "Sourse file \Settings\Client\ does not exist". Что нужно поправить?
На флешке Settings\Client\ присутствует, рядом с файлом-скриптом тоже.

R.i.m.s.k.y.
08-02-2012, 10:07
vitl, Source - местонахождение файлов обновления
первый слэш убери
Source: Settings\Client\;
Source: utils\;
или жеско пропиши путь местонахождения обновления

vitl
08-02-2012, 11:23
первый слэш убери
Source: Settings\Client\; »

Сделал так:
Source: Settings\Client\*; DestDir: {app}\Settings\Client\; BeforeInstall: ChangeCaption('\Settings\Client\'); Flags: ignoreversion recursesubdirs createallsubdirs

Теперь другая ошибка:
"Required function or procedure 'Path' not found"

R.i.m.s.k.y.
08-02-2012, 12:02
Теперь другая ошибка:
"Required function or procedure 'Path' not found" »

да она же в примере вверху! function Path(): String;
begin
if (Length(DriveLetter) > 0) then Result := DriveLetter +':\' else Result := ExpandConstant('{tmp}');
end;

на каком этапе ошибка, компиляции или уже выполнения инсталлера?

vitl
08-02-2012, 12:55
на каком этапе ошибка, компиляции или уже выполнения инсталлера? »

На этапе компиляции.

R.i.m.s.k.y.
08-02-2012, 13:02
значит требуемой процедуры нет
полный код

vitl
08-02-2012, 13:35
R.i.m.s.k.y.


[Setup]
AppName=Обновление Флеш-версии
AppVerName=Обновление
DefaultDirName={code:Path}
DisableStartupPrompt=yes
DisableReadyPage=yes
; DisableFinishedPage=yes
DisableDirPage=True
DisableProgramGroupPage=yes
OutputBaseFilename=Updater_Fl
Compression=lzma
SolidCompression=yes
Uninstallable=false
WizardImageFile=SFXLogo3.bmp

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

[Files]
; Source: "{src}\utils\*"; DestDir: "{app}\"; Flags: external recursesubdirs skipifsourcedoesntexist

Source: filenull; DestDir: {tmp}; BeforeInstall: BackUp; Flags: ignoreversion
Source: Settings\Client\*; DestDir: {app}\Settings\Client\; BeforeInstall: ChangeCaption('\Settings\Client\'); Flags: ignoreversion recursesubdirs createallsubdirs
Source: utils\; DestDir: {app}\utils\; BeforeInstall: ChangeCaption('\utils\'); Flags: ignoreversion recursesubdirs createallsubdirs



[*Code]

var DriveLetter : char;

procedure ChangeCaption(str: string);
begin
WizardForm.StatusLabel.Caption:= str;
end;

Function InitializeSetup: Boolean;
var i : Integer;
begin
DriveLetter := ''; i:= Ord('a');
while ( (Length(DriveLetter)=0) or (i<=Ord('z')) )
do begin
if FileExists(Chr(i)+':\markerfile') then DriveLetter := Chr(i);
i := i +1;
end;
if (Length(DriveLetter) > 0 then Result := True
else begin
MsgBox('флэшка не найдена', mbError, mb_Ok);
Result := False;
end;
end;

function Path(): String;
begin
if (Length(DriveLetter) > 0) then Result := DriveLetter +':\' else Result := ExpandConstant('{tmp}');
end;

procedure copyfiles(fromfile, tofile:string);
var res : integer;
begin
Exec('cmd.exe', ' /c copy /Y ' + AddQuotes(fromfile) + ' ' + AddQuotes(tofile),ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res);
end;

Procedure backUp();
begin
ChangeCaption('BackUp')
If DirExists (DriveLetter +':\'+'Settings\Client\') then copyfiles(DriveLetter +':\'+'Settings\Client\', DriveLetter +':\'+'Backup\'+GetDateTimeString('YYYYMMDD_hh:nn:ss', '-', '-')+'\Settings\Client\');
if DirExists (DriveLetter +':\'+'utils\') then copyfiles(DriveLetter +':\'+'utils\', DriveLetter +':\'+'Backup\'+GetDateTimeString('YYYYMMDD_hh:nn:ss', '-', '-')+'\utils\');
end;




© OSzone.net 2001-2012