PDA

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


Страниц : 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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188

MrAWP
01-05-2011, 12:46
Habetdin, спасибо огромное, работает)

Единственный нюанс - в Exec(Firefox, 'file:///{tmp}/plugin.xpi', '', SW_SHOW, ewWaitUntilTerminated, res); нету распознавания {tmp}, т.е. работает только если написать прямой путь, типа C:/plugin.xpi. Можно ли заставить выполнять файл из системной папки temp?

R.i.m.s.k.y.
01-05-2011, 13:28
Можно ли заставить выполнять файл из системной папки temp »
можно, заставляй выполняться! ;)
а вообще если бы ты читал хотя бы иногда форум то наверняка наткнулся на функцию ExpandConstant
Exec(Firefox, 'file:///'+ExpandConstant('{tmp}')+'/plugin.xpi', '', SW_SHOW, ewWaitUntilTerminated, res)

MrAWP
01-05-2011, 14:02
R.i.m.s.k.y., спасибо)
извиняюсь за свою некомпетентность)

LinkOFF
01-05-2011, 18:42
Может кто-нибудь дать ссылку на depack.exe(вместе с 7z.dll) зарание спасибо

дайте ссылку на depack.exe c 7z.dll

El Sanchez
02-05-2011, 16:44
а с выдергиванием айпишника из выхлопа ipconfig никто не поможет? »собрал свой вариант вычисления айпишника, айпиадреса, айпи, IP адреса, IPAdress, IP Adress, IPAdres, IP Adres (это были теги для поиска
нужен AdapterWatch »
R.i.m.s.k.y., можно и без сторонних средств, например, использовать WMI:

[Code]
type
IP_ADDR_INFO = array of record
Description: String;
IPv4: String;
IPv6: String;
end;

function GetLocalIP(var IPAddrInfo: IP_ADDR_INFO): Boolean;
var
objSWbemLocator, objSWbemServices, objSWbemObjectSet, objRegExp, objRegExpMatches: Variant;
IndexCount, i: Byte;
strBuf, ptrnIPv4, ptrnIPv6: String;
begin
try
objSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
objRegExp := CreateOleObject('VBScript.RegExp');
except
ShowExceptionMessage;
Exit;
end;
ptrnIPv4 := '(\d{1,3}[.]){3}\d{1,3}'; //IPv4 regexp
ptrnIPv6 := //IPv6 regexp
'(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,6})|(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5})|' +
'(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4})|//(([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3})|' +
'(([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2})|(([0-9a-fA-F]{1,4}:){1,6}(:[0-9a-fA-F]{1,4}){1,1})|' +
'((([0-9a-fA-F]{1,4}:){1,7}|:):)|(:(:[0-9a-fA-F]{1,4}){1,7})|(((([0-9a-fA-F]{1,4}:){6})(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
'((([0-9a-fA-F]{1,4}:){5}[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}))|' +
'(([0-9a-fA-F]{1,4}:){5}:[0-9a-fA-F]{1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
'(([0-9a-fA-F]{1,4}:){1,1}(:[0-9a-fA-F]{1,4}){1,4}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
'(([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,3}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|' +
'(([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,2}:(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})';

objSWbemServices := objSWbemLocator.ConnectServer();
objSWbemServices.Security_.ImpersonationLevel := 3;
IndexCount := objSWbemServices.ExecQuery('SELECT * FROM Win32_NetworkAdapterConfiguration').Count;
objSWbemObjectSet := objSWbemServices.ExecQuery('SELECT Description,IPAddress FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE');

for i := 1 to IndexCount do
try
SetArrayLength(IPAddrInfo, GetArrayLength(IPAddrInfo)+1);
strBuf := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).GetObjectText_;
IPAddrInfo[GetArrayLength(IPAddrInfo)-1].Description := objSWbemObjectSet.Item('Win32_NetworkAdapterConfiguration.Index=' + IntToStr(i)).Properties_.Item('Description').Value;
objRegExp.Pattern := ptrnIPv4;
if objRegExp.Test(strBuf) then
begin
objRegExpMatches := objRegExp.Execute(strBuf);
IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv4 := objRegExpMatches.Item[0].Value;
end;
objRegExp.Pattern := ptrnIPv6;
if objRegExp.Test(strBuf) then
begin
objRegExpMatches := objRegExp.Execute(strBuf);
IPAddrInfo[GetArrayLength(IPAddrInfo)-1].IPv6 := objRegExpMatches.Item[0].Value;
end;
except
GetExceptionMessage;
SetArrayLength(IPAddrInfo, GetArrayLength(IPAddrInfo)-1);
end;
Result := (GetArrayLength(IPAddrInfo) > 0);
end;

procedure InitializeWizard();
var
i: Byte;
arr: IP_ADDR_INFO;
begin
if GetLocalIP(arr) then for i := 0 to GetArrayLength(arr)-1 do
MsgBox(
'Description: ' + arr[i].Description + #13#10 +
'IPv4: ' + arr[i].IPv4 + #13#10 +
'IPv6: ' + arr[i].IPv6 + #13#10, mbInformation, MB_OK);
end;

R.i.m.s.k.y.
02-05-2011, 18:44
Спасибо!

insombia
02-05-2011, 21:55
Как сделать чтобы время во время установки ишло?

YURSHAT
03-05-2011, 15:13
Как сделать чтобы время во время установки ишло? »
Вам нужно системное время или время до завершения установки?

insombia
03-05-2011, 19:29
YURSHAT время до завершения установки

YURSHAT
03-05-2011, 20:47
insombia

[Setup]
AppName=FreeArc Example
AppVerName=FreeArc Example 3.3 Extreme
DefaultDirName={pf}\FreeArc Example

[Files]
Source: compiler:innocallback.dll; DestDir: {tmp}; Flags: dontcopy;
Source: {win}\Help\; DestDir: {app}; Flags: external;

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

[Name]
Name: rus; Name: compiler:Name\Russian.isl

[CustomMessages]
rus.hour= часов
rus.min= мин
rus.sec= сек

[code_]
type
TTimerProc = procedure(HandleW, Msg, idEvent, TimeSys: LongWord);

var
StartInstall: Integer;
TimeLabel: TLabel;
TimerID: Longword;

function GetTickCount: DWord; external 'GetTickCount@kernel32';
function WrapTimerProc(callback: TTimerProc; Paramcount: Integer): longword; external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): longword; external 'SetTimer@user32';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32 stdcall delayload';

Function cm(Message: String): String; Begin Result:= ExpandConstant('{cm:'+ Message +'}') End;

Function TicksToTime(Ticks: DWord; h,m,s: String; detail: Boolean): String;
Begin
if detail then {hh: mm:ss format}
Result:= PADZ(IntToStr(Ticks/3600000), 2) +':'+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +':'+ PADZ(IntToStr(Ticks/1000 - Ticks/1000/60*60), 2)
else if Ticks/3600 >= 1000 then {more than hour}
Result:= IntToStr(Ticks/3600000) +h+' '+ PADZ(IntToStr((Ticks/1000 - Ticks/1000/3600*3600)/60), 2) +m
else if Ticks/60 >= 1000 then {1..60 minutes}
Result:= IntToStr(Ticks/60000) +m+' '+ IntToStr(Ticks/1000 - Ticks/1000/60*60) +s
else Result:= Format('%.1n', [Abs(Ticks/1000)]) +s {less than one minute}
End;

procedure GetTime(HandleW, Msg, idEvent, TimeSys: LongWord);
var Remaining: Integer;
begin
with WizardForm.ProgressGauge do begin
if position > 0 then Remaining:= trunc((GetTickCount - StartInstall) * Abs((max - position)/position))
TimeLabel.Caption:= 'Inoaeinu ' + TicksToTime(Remaining, cm('hour'), cm('min'), cm('sec'), false)
if (Remaining = 0) then TimeLabel.Caption:= 'Завершение...'
end;
end;

procedure InitializeWizard();
begin
TimeLabel:= TLabel.Create(WizardForm)
TimeLabel.SetBounds(ScaleX(0), ScaleY(80), ScaleX(457), ScaleY(20));
TimeLabel.AutoSize:= False
TimeLabel.Transparent:= True;
TimeLabel.Parent:= WizardForm.InstallingPage;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep = ssInstall then
begin
StartInstall:= GetTickCount
TimerID:= SetTimer(0,0, 500, WrapTimerProc(@GetTime, 4))
end;
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID)
end;

insombia
03-05-2011, 21:31
YURSHAT У тебя случайно нету кода для изменения шрифта обычного на georgia или ещё на какой то?

vint56
03-05-2011, 21:49
insombia,
#define Font "Zombie.ttf"
#define FontName "DS Zombie Cyr"

[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
OutputDir=.

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

[Files]
Source: {#Font}; Flags: dontcopy;

[Code]
var
IsCustomFontInstalled: boolean;
FontName: string;

function AddFontResource(FileName: PAnsiChar): Integer; external 'AddFontResourceA@gdi32.dll stdcall';
function RemoveFontResource(FileName: PAnsiChar): BOOL; external 'RemoveFontResourceA@gdi32.dll stdcall';

Procedure InitializeWizard();
begin
ExtractTemporaryFile('{#Font}');
IsCustomFontInstalled:=AddFontResource(ExpandConstant('{tmp}')+'\{#Font}')>0;
if IsCustomFontInstalled then SendMessage(HWND_BROADCAST,$1D,0,0);
if FontExists('{#FontName}') then FontName:='{#FontName}' else FontName:='Arial';
WizardForm.Font.Name:= FontName;
end;

procedure DeInitializeSetup();
begin
WizardForm.Free
if IsCustomFontInstalled then
if RemoveFontResource(ExpandConstant('{tmp}')+'\{#Font}') then SendMessage(HWND_BROADCAST,$1D,0,0);
end;

insombia
03-05-2011, 22:33
vint56 та это как-то сложно запущено помню когда то я по другому использовал шрифты типа langoption но ошибку выдаёт

El Sanchez
04-05-2011, 08:39
insombia,
может так?

[Setup]
DefaultDialogFontName=Georgia

murlakatamenka
04-05-2011, 13:05
insombia,
может так?
Код:
[Setup]
DefaultDialogFontName=Georgia
можно и так, но если у пользователя шрифта не будет ? в таком случае надо скрипт от винта, там шрифт устанавливается в систему пользователя.

vint56
04-05-2011, 14:40
insombia,
http://rghost.ru/5463661

N00bak
04-05-2011, 15:42
как сделать в скрипте чтоб он просил вставить второй диск и как ему указать какие файлы где должны лежать помогите оч нужно

insombia
04-05-2011, 16:00
N00bak
DiskSpanning=true
DiskSliceSize=1145766400
SlicesPerDisk=2

это пример а насчет файлов не знаю

как сделать чтобы писалось типа как тут http://img34.imageshack.us/img34/4061/20110504101831.png
размер жд доступно и т д?

El Sanchez
04-05-2011, 16:12
но если у пользователя шрифта не будет ? »
murlakatamenka, будет использован

8-point Microsoft Sans Serif or MS Sans Serif

в таком случае надо скрипт от винта, там шрифт устанавливается в систему пользователя »
Ну, можно и средствами Inno:

[Files]
Source: "OZHANDIN.TTF"; DestDir: "{fonts}"; FontInstall: "Oz Handicraft BT"; Flags: onlyifdoesntexist uninsneveruninstall

как сделать в скрипте чтоб он просил вставить второй диск и как ему указать какие файлы где должны лежать помогите оч нужно »
N00bak, ищите в справке о параметрах DiskSpanning, DiskSliceSize, SlicesPerDisk секции [Setup]:

[Setup]
DiskSpanning=true
...
To optimally fill 4.7 GB recordable DVDs, use:
SlicesPerDisk=3
DiskSliceSize=1566000000

N00bak
04-05-2011, 16:14
спс)

в первые с такой проблемой столкнулся)




© OSzone.net 2001-2012