Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
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, Кинь файлы, ща соединю тебе »
Лександер вот файлы http://rghost.ru/5737321, раньше кинуть не получилось, заранее тебе спасибо!!!
Gnom_aka_Lexander
10-05-2011, 11:02
slysoft, забирай (http://rghost.ru/5759581), но все это можно вообще двумя строчками сделать, а кнопки и цвета поменять в скине - гораздо корректнее будет работать.
А вот (http://rghost.ru/5763131) мой вариант - тока код намного короче, и работа элементов корректнее :) Я тебе советую лучше им воспользоваться :)
Спасибо огромное Лександер, всё работает, УРА!!!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC