Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]
R.i.m.s.k.y.
20-03-2012, 08:06
FX-DENIS, function InitializeSetup(): Boolean;
begin
MsgBox(BytesToReadable(GetFileSize('Test Drive Unlimited 2\bigfile_RU_1.big'), 1), mbInformation, MB_OK);
Result:=True;
end;
FX-DENIS
20-03-2012, 12:13
R.i.m.s.k.y., спасибо,но так же сначала появляется окошко 0.0000000бт,затем дальше происходит установка игры ,и под прогресс шкалой,так же размер файла 512.000000000бт :not-me:
R.i.m.s.k.y.
20-03-2012, 12:24
FX-DENIS, ну про нули я уже не подскажу...
FX-DENIS
20-03-2012, 13:06
R.i.m.s.k.y.,Serega,
Может вы посмотрите еще раз,что не так,протестируете у себя,почему такое происходит,а то мы тут 100 страниц испишем дойдя до сингулярности и вам тоже нервы мотаю.Легче понять что такое 299,792,458 m/s :durak: ,чем почему не показывается размер файлов правильно.
Дополнительная информация Inno Setup 5.4.3(u) не русифицированная,еще установлены InnoIDE 1.0.0.0078 и ISToo; 5.3.0.1. ОS WINDOWS 7 x64
Вот снял скриншот в тотал коммандере размера файлов в игре и сам скрипт еще:
;Скрипт создан в Inno Setup Script Wizard
#define Components
#define MyAppName "Test Drive Unlimited 2"
#define MyAppVersion "v097 build 5"
#define MyAppPublisher "Eden Games,Atari."
#define MyAppURL "http://www.testdriveunlimited2.com/"
#define MyAppExeName "UpLauncher.exe"
[Setup]
; ПРИМЕЧАНИЕ: Значение AppId является уникальным для каждой программы.
; Не используйте одинаковые значения для разных программ.
; (Для создания уникальных значений используйте Инструменты | Генерация GUID.)
AppId={{5252ADD1-8AEF-42F4-A257-19EE1975F925}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=D:\Games\{#MyAppName}
DefaultGroupName=Eden Games
OutputDir=F:\111111111111111_install
WizardStyle=modern
OutputBaseFilename=setup
Compression=lzma2/ultra64
InternalCompressLevel=ultra64
LZMANumBlockThreads=2
LZMAUseSeparateProcess=yes
CompressionThreads=auto
SolidCompression=no
;Разбиение на диски
DiskSpanning=true
SlicesPerDisk=2
;Размер тома в байтах (здесь 1400 мегабайт)
DiskSliceSize=1540200000
ShowLanguageDialog=no
WizardImageBackColor=clBlack
TimeStampsInUTC=no
FlatComponentsList=false
AlwaysShowDirOnReadyPage=true
AlwaysShowGroupOnReadyPage=true
LanguageDetectionMethod=locale
UninstallDisplayIcon={app}\TDU2.ico
UninstallDisplayName=Test_Drive_Unlimited_2_v097_build_5_DEN
RestartIfNeededByRun=no
PrivilegesRequired=none
EnableDirDoesntExistWarning=no
DirExistsWarning=auto
ShowTasksTreeLines=yes
SetupIconFile=C:\Users\Den\Desktop\TDU2.ico
UsePreviousAppDir=false
ShowComponentSizes=yes
UserInfoPage=false
WindowVisible=false
WindowShowCaption=false
WindowResizable=false
WizardImageFile=C:\Users\Den\Desktop\covers_376.bmp
WizardSmallImageFile=C:\Users\Den\Desktop\logo-paul.bmp
UsePreviousGroup=no
UsePreviousSetupType=no
UsePreviousTasks=no
UsePreviousUserInfo=no
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[LangOptions]
LanguageName=russian
LanguageID=$0409
LanguageCodePage=0
DialogFontName=Arial
DialogFontSize=9
WelcomeFontName=Arial
WelcomeFontSize=16
TitleFontName=Arial
TitleFontSize=29
CopyrightFontName=Arial
CopyrightFontSize=8
RightToLeft=no
[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: checkablealone
[Files]
Source: C:\Users\Den\Desktop\innocallback.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: F:\Test Drive Unlimited 2\*; DestDir: {app}; AfterInstall:Progress(); Flags: ignoreversion recursesubdirs createallsubdirs
; ВАЖНО: Не используйте "Flags: ignoreversion" для системных файлов
[Icons]
Name: {group}\Test Drive Unlimited 2\{#MyAppName}; Filename: {app}\{#MyAppExeName}; IconFilename: {app}\TDU2.ico
Name: {group}\Test Drive Unlimited 2\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon; IconFilename: {app}\TDU2.ico; WorkingDir: {app}; Languages:
[Messages]
BeveledLabel=DEN 2011г.:%nhttp://3den.milivepage.ru/
[CustomMessages]
russian.Bt=Бт
russian.Kb=Кб
russian.Mb=Мб
russian.Gb=Гб
russian.Tb=Тб
russian.Pb=Пб
russian.Eb=Эб
[Registry]
; файл создан программой Converter v.0.1.3: 19 апреля 2011 г., в 10 час. 57 мин. 46 сек.
Root: HKLM; SubKey: SOFTWARE\Atari; Flags: uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: AudioLib; ValueData: DirectSound; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: GUID; ValueData: ; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: InstallDir; ValueData: {app}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: ExePath; ValueData: {app}\TestDrive2.exe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: LauncherPat; ValueData: {app}\UpLauncher.exe; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: Language; ValueData: Eng; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: UninstallExePath; ValueData: {{uninstallexe}; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: GameProductVersion; ValueData: TDU2 v097; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: GameBuildVersion; ValueData: 5; Flags: uninsdeletevalue uninsdeletekeyifempty
Root: HKLM; SubKey: SOFTWARE\Atari\TDU2; ValueType: string; ValueName: NetworkNatType; ValueData: Strict:UdpBlocked; Flags: uninsdeletevalue uninsdeletekeyifempty
; затраченное время: 4 мсек.
[UninstallDelete]
Type: files; Name: {group}\{#MyAppName}
Type: files; Name: {group}\УДАЛИТЬ ИГРУ
Type: files; Name: {commondesktop}\{#MyAppName}; Tasks: desktopicon
[Code]
var
ProgressLabel, SizeLabel: TLabel;
function BytesToReadable(Bytes: Extended; Signs: Integer): string;
{ Перевод числа в значение Бт/Кб/Мб/Гб/Тб/Пб/Эб (Signs - количество знаков после запятой)}
var
ABytes: Extended;
i: Integer;
begin
i := 0;
ABytes := Bytes;
while Int(ABytes) >= 1024 do
begin
ABytes := ABytes/1024;
i := i + 1;
end;
case i of
0: Result := FloatToStr(Int(ABytes)) + Padl(ExpandConstant('{cm:Bt}'), 1); // Байт
1: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Kb}'), [ABytes]); // Килобайт
2: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Mb}'), [ABytes]); // Мегабайт
3: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Gb}'), [ABytes]); // Гигабайт
4: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Tb}'), [ABytes]); // Терабайт
// больше Терабайта конечно не пригодится, покрайней мере в ближайшее время, но всё же...
5: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Pb}'), [ABytes]); // Петабайт
6: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Eb}'), [ABytes]); // Эксабайт
end;
StringChange(Result, ',', '.');
end;
function Size64(Hi, Lo: Integer): Extended;
begin
Result := Lo;
if Lo < 0 then
Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi := Hi - 1 downto 0 do
Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
end;
function GetFileSize(const FileName: string): Extended;
var
FindRec: TFindRec;
begin
Result := 0;
if FindFirst(FileName, FindRec) then
try
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
Result := Size64(FindRec.SizeHigh, FindRec.SizeLow);
finally
FindClose(FindRec);
end;
end;
procedure Progress();
begin
with WizardForm.ProgressGauge do
ProgressLabel.Caption := IntToStr((Position-Min)/((Max - Min)/100)) + '%';
SizeLabel.Caption := BytesToReadable(GetFileSize(ExpandConstant(CurrentFileName)), 1);
end;
procedure InitializeWizard();
begin
ProgressLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top := Top + Height + ScaleY(8);
ProgressLabel.Left := Left + Width/2 - ScaleX(8);
ProgressLabel.AutoSize := True;
ProgressLabel.Parent := WizardForm.InstallingPage;
end;
SizeLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
SizeLabel.Top := Top + Height + ScaleY(8);
SizeLabel.Left := Left;
SizeLabel.AutoSize := True;
SizeLabel.Parent := WizardForm.InstallingPage;
end;
end;
function InitializeSetup(): Boolean;
begin
MsgBox(BytesToReadable(GetFileSize('Test Drive Unlimited 2\bigfile_RU_1.big'), 1), mbInformation, MB_OK);
Result:=True;
end;
[Setup]
UninstallIconFile=Icon.ico »
И что? Вы хоть сами проверяли?
Warning: The [Setup] section directive "UninstallIconFile" is obsolete and ignored in this version of Inno Setup.
И справку видимо тоже не читали:
[Setup]: UninstallIconFile
Description:
Obsolete in 5.0.0. As Setup and Uninstall have been merged into a single executable, setting a custom icon for Uninstall is no longer possible.
файлу Uninstall.exe задать свою иконку нельзя, разве что поменять ее самостоятельно и компилировать проект уже с этим деинсталлятором и не забыть прописать 'Uninstallable=false'. Не совсем красивый метод, но другого я не знаю. »
Так что по-прежнему продолжаю не знать.
R.i.m.s.k.y.
20-03-2012, 13:25
Легче понять что такое 299,792,458 m/s»
физик епта ;) ты еще вспони из какого уравнения она выводится как постоянная!
по коду у тебя похоже путь неправильный, вот GetFileSize и вертает 0
или почему бы не воспользоваться стандартной FileSize
...
FileSize(ExpandConstant(CurrentFileName), size);
MsgBox(BytesToReadable(IntToStr(size) + ' bytes'), mbInformation, MB_OK);
...
Gnom_aka_Lexander
20-03-2012, 13:37
boss911, Я попробовал.
Хотя... я работаю в расширенной версии, может в стандартной это и не работает...
Лександер
Я работаю исключительно в стандартной (официальной) версии. Как и сказано в справке, не работает.
R.i.m.s.k.y.
20-03-2012, 14:01
Я работаю исключительно в стандартной (официальной) версии. Как и сказано в справке, не работает. »
ну и зря
номрмальные герои ипользуют расширенную!
перевод размера файла в удобочитаемую форму можно возложить на винду, например: »
Спасибо, честно говоря не знал про эту функцию, хотел уже добавить в скрипт, но на юникоде размер больших архивов не правильно показывает, правда сильно не ковырял...
дописал »
Вы пишите MsgBox(BytesToReadable(GetFileSize('Test Drive Unlimited 2\bigfile_RU_1.big'), 1), mbInformation, MB_OK);
где тут полный путь до файла? при такой раскладке он должен лежать в одном каталоге с инсталлятором.
В любом случае извиняюсь за свою не внимательность, нашёл ошибку в формуле, исправил и добавил доп. проверку:
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
Compression=lzma2/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes
[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl
[CustomMessages]
ru.Bt=Бт
ru.Kb=Кб
ru.Mb=Мб
ru.Gb=Гб
ru.Tb=Тб
ru.Pb=Пб
ru.Eb=Эб
[Files]
Source: compiler:Examples\*; DestDir: {app}; AfterInstall: Progress; Flags: ignoreversion createallsubdirs recursesubdirs sortfilesbyextension sortfilesbyname
[Code]
var
ProgressLabel, SizeLabel: TLabel;
function BytesToReadable(const Bytes: Extended; Signs: Integer): string;
{ Перевод числа в значение Бт/Кб/Мб/Гб/Тб/Пб/Эб (Signs - количество знаков после запятой)}
var
ABytes: Extended;
n: Integer;
begin
Result := '';
if Int(Bytes) > 0 then
try
n := 0;
ABytes := Bytes;
while Int(ABytes) >= 1024 do
begin
ABytes := ABytes/1024;
n := n + 1;
end;
case n of
0: Result := Format('%d ' + ExpandConstant('{cm:Bt}'), [Round(ABytes)]); // Байт
1: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Kb}'), [ABytes]); // Килобайт
2: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Mb}'), [ABytes]); // Мегабайт
3: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Gb}'), [ABytes]); // Гигабайт
4: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Tb}'), [ABytes]); // Терабайт
// больше Терабайта конечно не пригодится, покрайней мере в ближайшее время, но всё же...
5: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Pb}'), [ABytes]); // Петабайт
6: Result := Format('%.' + IntToStr(Signs) + 'n ' + ExpandConstant('{cm:Eb}'), [ABytes]); // Эксабайт
end;
finally
if (Result <> '') and (Pos(',', Result) > 0) then
StringChange(Result, ',', '.');
end;
end;
function Size64(Hi, Lo: Integer): Extended;
begin
Result := Lo;
if Lo < 0 then
Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
for Hi := Hi - 1 downto 0 do
Result := Result + $7FFFFFFF + $7FFFFFFF + 2;
end;
function GetFileSize(const FileName: string): Extended;
var
FindRec: TFindRec;
begin
Result := 0;
if FindFirst(FileName, FindRec) then
try
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
Result := Size64(FindRec.SizeHigh, FindRec.SizeLow);
finally
FindClose(FindRec);
end;
end;
procedure Progress();
begin
with WizardForm.ProgressGauge do
// ProgressLabel.Caption := IntToStr((Position-Min)/((Max - Min)/100)) + '%'; // часто видел, но никогда не вникал в эту формулу...
ProgressLabel.Caption := IntToStr((Position*100)/Max) + '%'; // правильное отображение процентов
SizeLabel.Caption := BytesToReadable(GetFileSize(ExpandConstant(CurrentFileName)), 1);
end;
procedure InitializeWizard();
begin
ProgressLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top := Top + Height + ScaleY(8);
ProgressLabel.Left := Left + Width/2 - ScaleX(8);
ProgressLabel.AutoSize := True;
ProgressLabel.Parent := WizardForm.InstallingPage;
end;
SizeLabel := TLabel.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
SizeLabel.Top := Top + Height + ScaleY(8);
SizeLabel.Left := Left;
SizeLabel.AutoSize := True;
SizeLabel.Parent := WizardForm.InstallingPage;
end;
end;
или почему бы не воспользоваться стандартной FileSize »
Есть ограничение, укажет размер файла не более 2ГБ
Так что по-прежнему продолжаю не знать. »
Привет Серёга ;) Лександер, верно говорит. Да в справке написано, что уже не поддерживает, но пока ещё работает...
Как и сказано в справке, не работает. »
Попробовал в стандартной, работает
Добрый день! Не могли бы мне помочь с распаковкой в зависимости от выбранных компонентов.Читал справку - ничего не получается. Пожалуйста опишите как нужно делать.
El Sanchez
20-03-2012, 16:19
но на юникоде размер больших архивов не правильно показывает »
Serega, спасибо, исправил. Пришлось вычисление размера на пару строк разнести.
В shlwapi.dll, кстати, еще несколько похожих функций есть, легко описываемых и работающих в Inno, которые могут пригодиться: StrFormatKBSize - перевод байтов в удобочитаемую килобайтную форму, StrFromTimeInterval - перевод миллисекунд в ч/мин/сек.
Johny777
20-03-2012, 18:22
LinkOFF,
[Components]
Name: A; Description: первый компонент; Flags: disablenouninstallwarning checkablealone fixed
Name: B; Description: второй компонент Flags: dontinheritcheck disablenouninstallwarning
[Files]
DestName: "WizardForm.BitmapImage11.bmp"; Source: "art\ambient.bmp"; Flags: dontcopy solidbreak; Components: A B (это общие фалы для двух компонетов и распакуются, если выбран один компонент или оба и не распакуются если не выбран не один компонент)
DestName: "WizardForm.BitmapImage3.bmp"; Source: "prolog\hl2_story.bmp"; Flags: dontcopy solidbreak; Components: A (только один компонент)
DestName: "WizardForm.BitmapImage5.bmp"; Source: "art\Gunship_con2.bmp"; Flags: dontcopy solidbreak; Components: B (только один компонент)
DestName: "WizardForm.BitmapImage4.bmp"; Source: "art\Cremator_poster.bmp"; Flags: dontcopy solidbreak (компонент не присвоен и как следствие будет устанавливаться всегда)
rasim933
20-03-2012, 18:33
Ну и намудохался я с этой игрой. В конце просто плюнул на неё и тупо запихал в архив.
После некоторых махинаций, в инсталяторе появилось ещё куча ошибок.
Всем спасибо!
R.i.m.s.k.y.
20-03-2012, 20:01
Arsi000, ну в шапке же ссылка http://forum.oszone.net/post-1218002-103.html
[Components]
Name: A; Description: первый компонент; Flags: disablenouninstallwarning checkablealone fixed
Name: B; Description: второй компонент Flags: dontinheritcheck disablenouninstallwarning
[Files]
DestName: "WizardForm.BitmapImage11.bmp"; Source: "art\ambient.bmp"; Flags: dontcopy solidbreak; Components: A B (это общие фалы для двух компонетов и распакуются, если выбран один компонент или оба и не распакуются если не выбран не один компонент)
DestName: "WizardForm.BitmapImage3.bmp"; Source: "prolog\hl2_story.bmp"; Flags: dontcopy solidbreak; Components: A (только один компонент)
DestName: "WizardForm.BitmapImage5.bmp"; Source: "art\Gunship_con2.bmp"; Flags: dontcopy solidbreak; Components: B (только один компонент)
DestName: "WizardForm.BitmapImage4.bmp"; Source: "art\Cremator_poster.bmp"; Flags: dontcopy solidbreak (компонент не присвоен и как следствие будет устанавливаться всегда »
Мне через ISDone нужно
Помогите, пожалуйста, разобраться.
Не могу заставить работать в MsgBox-е ExpandConstant('{app}') . Помогите подправить код:
[Setup]
AppName=MyProg
AppVerName=MyProg
DefaultDirName={reg:HKLM\SOFTWARE\MyProg\Inform,InstallPath} ; путь до программной папки
AppVersion=1.1.0.1
UsePreviousAppDir=no
AppendDefaultDirName=no
AllowRootDirectory=yes
DirExistsWarning=no
DisableStartupPrompt=yes
DisableReadyPage=yes
; DisableFinishedPage=yes
DisableDirPage=True
DisableProgramGroupPage=yes
OutputBaseFilename=Setup
Compression=lzma
SolidCompression=no
Uninstallable=false
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
Source: {src}\add\*; DestDir: {app}\Serv\Lic\; Flags: external recursesubdirs skipifsourcedoesntexist
[_Code]
function InitializeSetup(): Boolean;
var
ResultCode: Integer;
s, ResultStr:string;
begin
Result:=True;
If not RegKeyExists(HKLM, 'SOFTWARE\MyProg\Inform')
then
begin
MsgBox('Программа не установлена или установлена неверно.' #13#13 'Дальнейшая работа Мастера невозможна.', mbError, mb_Ok);
Result:=False;
end
else
begin
MsgBox('Программа успешно обнаружена.' #13#13 'Скопируйте дополнения в папку:'+ExpandConstant('{app}')+'\Serv\Lic', mbInformrmation, mb_Ok);
end;
end;
R.i.m.s.k.y.
20-03-2012, 21:31
vitl, на шаге InitializeSetup переменная {app} еще неизвестна
помоему я тебе уже и отвечал
FX-DENIS
21-03-2012, 00:28
В любом случае извиняюсь за свою не внимательность, нашёл ошибку в формуле, исправил и добавил доп. проверку: »мда... вставил секцию код с заменой,теперь вообще нет ни отображения процентов ,ни отображения размера текущего файла
секция файлы такая
[Files]
Source: C:\Users\Den\Desktop\innocallback.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: F:\Test Drive Unlimited 2\*; DestDir: {app}; AfterInstall:Progress(); Flags: ignoreversion createallsubdirs recursesubdirs sortfilesbyextension sortfilesbyname
; ВАЖНО: Не используйте "Flags: ignoreversion" для системных файлов
Johny777
21-03-2012, 00:28
InitializeSetup »
скажи пожалуйста
c InitializeWizard константу {app} уже можно использовать?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.