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

insombia
08-05-2011, 21:50
У кого-то есть закос под шепарда?

EvilAlex
08-05-2011, 21:57
Лександер, выручай, вообще не доходит что там как 0_о Мне бы пример готовый, яб на нем натренировался, а так я только нашел в их справках про размер и ссылки, про установку не слова

R.i.m.s.k.y.
08-05-2011, 22:05
Подскажите, пожалуйста, как реализовать подхват настроек из reg файлов (как в репаках от elchupakabra? »
вас ист дас elchupakabra?
а вообще почитать в шапке "сборник вопросов", третий пример сверху


http://lurkmore.ru/images/d/d8/Rtfm.jpg

Gnom_aka_Lexander
08-05-2011, 22:05
EvilAlex, вот накидал тебе распаковку на базе твоего примера + Библиотечка от Экспедитора.
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
Compression=zip

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

[Files]
Source: is7z.dll; DestDir: {tmp}; Flags: dontcopy

[Icons]
Name: "{group}\Удалить"; IconFilename: "{app}\unins000.exe"; Filename: "{app}\unins000.exe"

[Code]
var
ProgressBar : TNewProgressBar;
ExtractFile:TNewStaticText;
Button1:TButton;

procedure Extract7z (hWnd, hpb, hst: THandle; fpath, extractPath, pass:pchar); external 'Extract7z@files:is7z.dll stdcall';
procedure CancelExtract; external 'CancelExtract@files:is7z.dll stdcall';

procedure download();
begin
itd_init;

//Let's download two zipfiles from my website..
itd_addfile('http://87.224.140.43/files/setup1.zip',expandconstant('{tmp}\setup1.zip'));

//Start the download after the "Ready to install" screen is shown
itd_downloadafter(wpReady);
end;

procedure InitializeWizard();
begin
download();

ProgressBar := TNewProgressBar.Create(WizardForm);
ExtractFile:=TNewStaticText.Create(WizardForm);
with WizardForm.ProgressGauge do
begin
ProgressBar.Left := Left;
ProgressBar.Top := Top + ScaleX(55);
ProgressBar.Width := Width;
ProgressBar.Height := Height;
ProgressBar.Parent := WizardForm.InstallingPage;
ProgressBar.max := 100;
ProgressBar.Position := 0;
ExtractFile.parent:=WizardForm.InstallingPage;
ExtractFile.autosize:=false;
ExtractFile.Width := Width;
ExtractFile.top:=Top + ScaleX(35);
ExtractFile.caption:='Распаковка архива 7zip';
end;
end;

procedure Button1OnClick(Sender: TObject);
begin
CancelExtract;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssPostInstall then
begin
Button1:=TButton.create(WizardForm);
Button1.parent:=WizardForm;
Button1.width:=135;
Button1.caption:='Отменить распаковку';
Button1.left:=260;
Button1.top:=WizardForm.cancelbutton.top;
Button1.OnClick:=@Button1OnClick;
try

if FileExists (expandconstant('{tmp}\setup1.zip')) then begin // проверяем наличие файла
Extract7z (wizardform.handle, progressbar.handle, ExtractFile.handle, ExpandConstant('{tmp}') + '\setup1.7z', ExpandConstant('{app}'), '');
end;
Button1.visible:=false;
except
MsgBox('Неверный пароль!', mbInformation, MB_OK);
Button1.visible:=false;
end;
end;
end; Во вложении архив с библиотечкой и этим-же скриптом.

insombia, У кого-то есть закос под шепарда? »
У Гугла. http://rghost.ru/4896048

EvilAlex
08-05-2011, 22:19
Лександер, вот что выдает, я хз http://rghost.ru/5599931

Gnom_aka_Lexander
08-05-2011, 22:23
EvilAlex, залей целиком свой скрипт замени вот в этой строчке 7z на zip - пропустил...
Extract7z (wizardform.handle, progressbar.handle, ExtractFile.handle, ExpandConstant('{tmp}') + '\setup1.zip', ExpandConstant('{app}'), '');

EvilAlex
08-05-2011, 22:27
Лександер, http://rghost.ru/5600921 это тот что ты дал, я скопировл, потом добавил is7z.dll и нажал на копиляцию, он создал сетап и я нажал установка, фаил скачиваеться и когда идет распаковка архивов 7зип то вылетает ошибка, жмеш ок и снова компиляцию, показывет в инстале окошко с надписью "Неправельный пароль", жму ок и он пшет что установка прошла успешно, а куда и что он установил хз !!! Также установлена itd0.3.5.exe

Gnom_aka_Lexander
08-05-2011, 22:36
а куда и что он установил хз !!! »
- сюда: DefaultDirName={pf}\My Program - ты сам указываеш, куда распаковывать, мне нужен полный скрипт - иначе никак не проверить.

EvilAlex
08-05-2011, 22:40
полный ? всмысле ? я тебе скинул какой есть ... ты вот пример дал, и я его скопипастил, запустил и ошибка ...

у мня только твой пример и все, есть еще 1 http://rghost.ru/5603241 тут и все! больше нет ни каких ...

Gnom_aka_Lexander
09-05-2011, 00:07
EvilAlex, Держи, тока консольное окошко на распаковке будет, тут уж звиняй, мож кто подскажет, как на прогрессбаре распаковку показать, вместо консоли.

solvador
09-05-2011, 13:55
Всех с Праздником!
Подскажите, как в бинарном файле произвести поиск значений (допустим "C7 46 04 00 00 18 00") и определить смещение, если такие значения есть.
Пример поиска строковых данных естьprocedure ReadFromFile();
var
FS: TFileStream;
str: string;
i: integer;
begin
str:= StringOfChar(' ', 10);
FS := TFileStream.Create(ExpandConstant('{src}\test.bin'), fmOpenReadWrite);
try
FS.Seek(1,soFromBeginning);
FS.ReadBuffer(str, 10);
MsgBox(str, mbInformation, MB_OK);
finally
FS.Free;
end;
end; а вот как быть с поиском шестнадцатеричных...

Даже такие варианты пробовал :lol: procedure ReadFromFile2();
var
FS: TFileStream;
strd,str: string;
shag: integer;
begin
str:= StringOfChar(' ',6);
shag:= 740349
FS := TFileStream.Create(ExpandConstant('{src}\test.bin'), fmOpenReadWrite);
try repeat
FS.Seek(shag,soFromBeginning);
FS.ReadBuffer(str, 6);
strd:= IntToStr(Ord(str[1]))+IntToStr(Ord(str[2]))+IntToStr(Ord(str[3]))+IntToStr(Ord(str[4]))+IntToStr(Ord(str[5]))+IntToStr(Ord(str[6]))
if strd = '1997040024' then MsgBox('bingo', mbInformation, MB_OK); //нашли значение и определили смещение
shag:= shag + 1
until shag = 741353
finally
FS.Free;
end;
end; Конечно же это извращение... Так кто подскажет как нормально сделать?...

R.i.m.s.k.y.
09-05-2011, 14:10
нашел в своих примерах скриптов, может поможет

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}

[*C*ode]
procedure WriteToFile();
var
FS: TFileStream;
str: string;
i: integer;
begin
str:= '';
for i:= 0 to 10 do str:= str + IntToStr(Random(10)); // сгенерили рандомную строку
FS := TFileStream.Create(ExpandConstant('{app}\MyProg.exe'), fmOpenReadWrite); // открыли файл
try
FS.Seek(1572,soFromBeginning); // установили курсор по смещению 1572 от начала файла
FS.WriteBuffer(str, Length(str)); // записали рандомную строку в позицию курсора
finally
FS.Free; // освободили файл
end;
end;

procedure ReadFromFile();
var
FS: TFileStream;
str: string;
i: integer;
begin
str:= StringOfChar(' ', 10); // подготовили буфер для чтения длиной 10 байт
FS := TFileStream.Create(ExpandConstant('{app}\MyProg.exe'), fmOpenReadWrite); // открыли файл
try
FS.Seek(1572,soFromBeginning); // установили курсор по смещению 1572 от начала файла
FS.ReadBuffer(str, Length(str)); // считали в буфер 10 байт от позиции курсора
MsgBox(str, mbInformation, MB_OK); // вывели сообщение с тем, что считали
finally
FS.Free; // освободили файл
end;
end;

procedure ReadFromFileByte();
var
FS: TFileStream;
str: string;
i: integer;
begin
str:= StringOfChar(' ',1);
FS := TFileStream.Create(ExpandConstant('{src}\struct.dat'), fmOpenReadWrite);
try
FS.Seek(21,soFromBeginning);
FS.ReadBuffer(str, 1);
i:= Ord(str[1]);
MsgBox(IntToStr(i), mbInformation, MB_OK);
finally
FS.Free;
end;
end;

procedure DeinitializeSetup();
begin
ReadFromFile(); // прочитали строку из файла
WriteToFile(); // записали строку в файл
ReadFromFile(); // опять прочитали
end;

solvador
09-05-2011, 14:16
R.i.m.s.k.y.,
В этом примере тоже ищется строка. А надо чтобы искались hex значения.
Таких примеров я не встречал.

А может есть сторонние утилиты, работающие с бинарными файлами через командную строку.

ЗЫ за пример Спасибо, но он у меня есть. И ничего толкового я из него извлечь не смог.

insombia
09-05-2011, 15:29
Проблема с фриарком когда делаю скрипт выдаёт ошибку http://i20.fastpic.ru/thumb/2011/0509/f9/9eff414583e6bef00feb10acf29773f9.jpeg (http://fastpic.ru/view/20/2011/0509/9eff414583e6bef00feb10acf29773f9.jpg.html)

murlakatamenka
09-05-2011, 18:19
insombia, ну переменная не определена, что тут непонятного ?
мб при объединении скриптов в var добавить её забыли. иногда ошибки есть из-за отсутствия ; после предыдущей операции в коде, я так понимаю, это из-за расширенного компилятора эти ошибки бывают.

insombia
09-05-2011, 20:51
murlakatamenka как сделать чтобы она определилась?

murlakatamenka
09-05-2011, 23:03
вернее было сказать, что она не объявлена
В секции [Code] после var написать FilenameLabel: TLabel;

slysoft
09-05-2011, 23:55
slysoft, Кинь файлы, ща соединю тебе »
Лександер вот файлы http://rghost.ru/5737321, раньше кинуть не получилось, заранее тебе спасибо!!!

Gnom_aka_Lexander
10-05-2011, 11:02
slysoft, забирай (http://rghost.ru/5759581), но все это можно вообще двумя строчками сделать, а кнопки и цвета поменять в скине - гораздо корректнее будет работать.

А вот (http://rghost.ru/5763131) мой вариант - тока код намного короче, и работа элементов корректнее :) Я тебе советую лучше им воспользоваться :)

slysoft
10-05-2011, 11:17
Спасибо огромное Лександер, всё работает, УРА!!!




© OSzone.net 2001-2012