Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]
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
Пожалуйста, помогите решить следующую задачу.
Нужно силами 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;
код идейно верный но могут быть ...
Спасибо, R.i.m.s.k.y., буду пробовать!
[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\;
или жеско пропиши путь местонахождения обновления
первый слэш убери
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;
на каком этапе ошибка, компиляции или уже выполнения инсталлера?
на каком этапе ошибка, компиляции или уже выполнения инсталлера? »
На этапе компиляции.
R.i.m.s.k.y.
08-02-2012, 13:02
значит требуемой процедуры нет
полный код
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.