Войти

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


Страниц : 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

NameVizavi
21-09-2009, 21:06
Есть пару вопросов , по поводу создания инстала, не с папки, а с архифа Freearc...
Знаю, что можно, но вот принцип для меня потемки (нашол в поиске, по теме пару ссылок на скрипты, для разпаковки фриарк архивов, но они по несколько страниц, и мне их не осилить :( )
А вот что мне интересно,
1-е кончено же каким образом (каким скриптом) извлеч из архива все данные во временную, папку, а уже с нее делать инсталяцию (возможно какимто другим образом, если так, пожалуйста обьясните)
2-е как создать ярлыки... когда компилируеш установщик, с папки все понтно... просто выбрал с какого файла ярлык, делать и куда помещать.
P/s
Кто знает, помогите разобратся в этом, пожалуйста, оч интересно, но я в этом покаместь совсем чайник.
PP/s
если будете кидать скрипты, пожалуйста кидайте по проще, я только учусь.

_Monster_
22-09-2009, 20:00
Смотрите, прилепил я допусти в левый нижний угол внешнюю картинку
http://s45.radikal.ru/i107/0909/83/9fdac3911aa4t.jpg (http://radikal.ru/F/s45.radikal.ru/i107/0909/83/9fdac3911aa4.png.html)
код я знаю. А что нужно добавить чтобы по нажатию на эту картину перенапрвляло на какой-нибудь сайт :)

A1EXXX
22-09-2009, 21:25
_Monster_, попробуй этот код...
[Files]
Source: C:\logo.bmp; DestDir: {tmp}; Flags: dontcopy

[code]
var
LogoImage:TBitmapImage;
LogoLabel: TLabel;
LogoPanel: TPanel;

procedure LogoOnClick(Sender: TObject);
var ReturnCode: Integer;
begin
ShellExec('open', 'http://сайт.ру', '', '', SW_SHOWNORMAL, ewNoWait, ReturnCode)
end;

procedure InitializeWizard();
begin
ExtractTemporaryFile('logo.bmp');
LogoPanel := TPanel.Create(WizardForm);
with LogoPanel do
begin
Parent := WizardForm;
Left := ScaleX(5);
Top := ScaleY(320);
Width := ScaleX(165);
Height := ScaleY(35);
BevelOuter := bvNone;
end;

LogoImage := TBitmapImage.Create(WizardForm);
with LogoImage do
begin
Parent := LogoPanel;
Left := ScaleX(0);
Top := ScaleY(0);
AutoSize:=true;
ReplaceColor:=clFuchsia;
ReplaceWithColor:=clBtnFace;
Bitmap.LoadFromFile(ExpandConstant('{tmp}\logo.bmp'));
end;

LogoLabel := TLabel.Create(WizardForm);
with LogoLabel do
begin
Parent := LogoPanel;
Width := LogoPanel.Width;
Height := LogoPanel.Height;
Transparent:=True;
Cursor := crHand;
OnClick:=@LogoOnClick;
end;
end;

Serega
22-09-2009, 21:34
что нужно добавить чтобы по нажатию на эту картину перенапрвляло на какой-нибудь сайт »

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
procedure imgClick(Sender: TObject);
var
res: Integer;
begin
ShellExec('open', 'http://forum.oszone.net', '', '', SW_SHOWNORMAL, ewNoWait, res);
end;

procedure initializeWizard();
begin
// рисунок в левом нижнем углу
with TBitmapImage.Create(WizardForm) do
begin
Bitmap:= WizardForm.WizardSmallBitmapImage.Bitmap;
SetBounds(0, 315, 200, 48);
Parent:= WizardForm;
Stretch:= True;
end;
// создаём Label, на который вешаем ссылку
with TLabel.Create(WizardForm) do
begin
AutoSize:= False;
SetBounds(0, 315, 200, 48);
OnClick:= @imgClick;
Cursor:= crHand;
Transparent:= True;
Parent:= WizardForm;
end;
end;


Упс... не успел, извиняюсь за повтор.

A1EXXX
22-09-2009, 23:18
Serega, случайно не знаешь, как сделать такие переходы: http://s47.radikal.ru/i117/0909/5c/e927ee79a5c0t.jpg (http://radikal.ru/F/s47.radikal.ru/i117/0909/5c/e927ee79a5c0.jpg.html) http://i082.radikal.ru/0909/d1/6910e02aa16at.jpg (http://radikal.ru/F/i082.radikal.ru/0909/d1/6910e02aa16a.jpg.html)

Serega
23-09-2009, 00:04
как сделать такие переходы »
Как-то так:

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
var
lbl1, lbl2, lbl3, lbl4, lbl5: TLabel;

procedure initializeWizard();
begin
WizardForm.PageDescriptionLabel.Hide;
// создаём Label'ы, на который вешаем ссылку
lbl1:= TLabel.Create(WizardForm);
with lbl1 do
begin
AutoSize:= False;
SetBounds(20, 40, 50, 13);
Caption:= '|';
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
lbl2:= TLabel.Create(WizardForm);
with lbl2 do
begin
AutoSize:= False;
SetBounds(50, 40, 50, 13);
Caption:= 'lbl2';
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
lbl3:= TLabel.Create(WizardForm);
with lbl3 do
begin
AutoSize:= False;
SetBounds(100, 40, 50, 13);
Caption:= '|';
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
lbl4:= TLabel.Create(WizardForm);
with lbl4 do
begin
AutoSize:= False;
SetBounds(130, 40, 50, 13);
Caption:= 'lbl4';
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
lbl5:= TLabel.Create(WizardForm);
with lbl5 do
begin
AutoSize:= False;
SetBounds(180, 40, 50, 13);
Caption:= '|';
Transparent:= True;
Parent:= WizardForm.MainPanel;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectDir then
begin
lbl1.Font.Color:= clBlack;
lbl1.Font.Style:= [fsBold];
lbl2.Font.Color:= clBlack;
lbl2.Font.Style:= [fsBold];
lbl3.Font.Color:= clBlack;
lbl3.Font.Style:= [fsBold];
lbl4.Font.Color:= clGray;
lbl4.Font.Style:= [];
lbl5.Font.Color:= clGray;
lbl5.Font.Style:= [];
end;
if CurPageID = wpReady then
begin
lbl1.Font.Color:= clGray;
lbl1.Font.Style:= [];
lbl2.Font.Color:= clGray;
lbl2.Font.Style:= [];
lbl3.Font.Color:= clBlack;
lbl3.Font.Style:= [fsBold];
lbl4.Font.Color:= clBlack;
lbl4.Font.Style:= [fsBold];
lbl5.Font.Color:= clBlack;
lbl5.Font.Style:= [fsBold];
end;
end;

A1EXXX
23-09-2009, 01:21
Serega, спасибо! :)

A1EXXX
23-09-2009, 17:49
ISPack v5.3.5 (http://www.jrsoftware.org/download.php/ispack.exe) & ISPack v5.3.5 Unicode (http://www.jrsoftware.org/download.php/ispack-unicode.exe)

A1EXXX
24-09-2009, 14:56
Русификатор для Inno Setup 5.3.5 (http://vadimsva.ucoz.org/Inno_Setup_5_rus.7z)
Содержит версии: cтандарт, ISPP (для 2х версий один файл), стандарт unicode, ISPP unicode (для 2х версий один файл, лежит в папке unicode).

_Monster_
24-09-2009, 19:51
Господа, как читал на другом форуме, что для более лучшего сжатия можно использовать программу FreeArc. Раскажите пожалуйста о том как ей воспльзоваться.

EN130
24-09-2009, 22:52
Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
Последняя версия: 0.1.3 [11.09.2009] - Скачать; » А наоборот как?

Habetdin
24-09-2009, 22:57
_Monster_, поиск использовать надо (http://forum.oszone.net/post-1162355-1096.html) ;)
Cкрипт для распаковки arc архивов

Serega
24-09-2009, 23:27
А наоборот как? »
Если хотите наоборот, то используйте ISTool. Ссылка есть в шапке темы.

NameVizavi
25-09-2009, 16:27
народ, обьясниет принципе связки Freearc+Precomp...
Ведь они сжимают по сходным алгоритмам или всетаки нет?
и ещо как в консоли, для прекомпа, задать не один файл, а директиву (папку) в целом, или все файлы из определенной папки?

A1EXXX
25-09-2009, 17:02
задать не один файл, а директиву (папку) в целом, или все файлы из определенной папки? »
Я создаю бантик со списком нужных мне файлов, выглядит примерно так:

precomp -slow 1.xxx
precomp -slow 2.xxx
precomp -slow 3.xxx

NameVizavi
25-09-2009, 19:05
A1EXXX,
тоесть сначало паковать фриарком, а потом прикомпом О_о
по поводу батника, я и сам додумался...
вот только при перепаковку игр, все файлы будеш прописывать, покаместь пальцы до костей не протреш :)

A1EXXX
25-09-2009, 19:42
NameVizavi, я сначала прекомпом, а потом фриарком. Да и обычно файлов для обработки прекомпом не так уж и много (в среднем до 10 больших файлов...)
Есть вот такие коды для рекомпрессии:
Для примера приведенного ниже, необходимо названия "прекомпрессированных" файлов привести к виду "имя_файла.расширение.pcf"

[Files]
Source: "precomp\*"; DestDir: "{tmp}"; Flags: ignoreversion overwritereadonly
Source: "Data\*"; DestDir: "{app}"; Flags: overwritereadonly recursesubdirs ignoreversion createallsubdirs sortfilesbyextension; AfterInstall: RecompressPCF

[Code]
procedure RecompressPCF;
var
Tmp, Text,
InputFile, OutputFile: string;
n, ResultCode: Integer;
begin
if ExtractFileExt(CurrentFileName)='.pcf' then
begin
InputFile:=ExpandConstant(CurrentFileName);
n:=Length(InputFile);
while InputFile[n]<>'.' do
n:=n-1;
OutputFile:=Copy(InputFile, 1, n-1);
Text:=WizardForm.StatusLabel.Caption;
WizardForm.StatusLabel.Caption:='Рекомпрессия извлеченного файла...';
WizardForm.FileNameLabel.Caption:=OutputFile;
Tmp:=ExpandConstant('{tmp}\');
Exec(Tmp+'precomp.exe', '-d -o"'+OutputFile+'" "'+InputFile+'"', Tmp, SW_HIDE, ewWaitUntilTerminated, ResultCode);
DeleteFile(InputFile);
WizardForm.StatusLabel.Caption:=Text;
end;



2-ой вариант


[code]
procedure CurStepChanged(CurStep: TSetupStep);
begin
If CurStep=ssInstall
then
begin
Exec(ExpandConstant('{app}\precomp.exe'), ' -r data.pcf ', '', SW_HIDE, ewWaitUntilTerminated, res);
DeleteFile(ExpandConstant('{app}\data.pcf'));сам ими не пользовался, т.к. привык задавать всё через командную строку....

Qarmaa
25-09-2009, 19:51
Как-то уже задавал подобный вопрос, но рабочего решения не нашли. Попробую ещё раз: Как, при установке, когда выполняются внешние программы сделать передвигаемым окно самого инсталлятора?

МИШАНЧИК
26-09-2009, 13:26
Подскажите пожалуйста! Пытаюсь при деинсталяции завершить 2 процесса. Так вот один убивается, а второй ни в какую.
Завершать посредством батника не хочется. Как бы сделать?

[Files]
Source: compiler:ISTask.dll; DestDir: {app}; Flags: ignoreversion
[_Code]
function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@{app}\ISTask.dll stdcall delayload uninstallonly';

function KillTask(ExeFileName: string): Integer;
external 'KillTask@{app}\ISTask.dll stdcall delayload uninstallonly';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usUninstall then
begin
if RunTask('USBSafelyRemove.exe', false) then
KillTask('USBSafelyRemove.exe');
if RunTask('USBSRService.exe', false) then - это не убивается
KillTask('USBSRService.exe');
UnloadDll(ExpandConstant('{app}\ISTask.dll'));
end;
end;

Habetdin
26-09-2009, 13:35
if RunTask('USBSRService.exe', false) then - это не убивается »
Видимо, дело в том что этот процесс запущен службой и считается "системным" :)
Можно убить запуском команды taskkill /f /im USBSRService.exe
Правда на Windows XP Home Edition не прокатит - там нет taskkill




© OSzone.net 2001-2012