Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
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)
код я знаю. А что нужно добавить чтобы по нажатию на эту картину перенапрвляло на какой-нибудь сайт :)
_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;
что нужно добавить чтобы по нажатию на эту картину перенапрвляло на какой-нибудь сайт »
[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;
Упс... не успел, извиняюсь за повтор.
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)
как сделать такие переходы »
Как-то так:
[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;
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)
Русификатор для 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. Раскажите пожалуйста о том как ей воспльзоваться.
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 архивов
А наоборот как? »
Если хотите наоборот, то используйте ISTool. Ссылка есть в шапке темы.
NameVizavi
25-09-2009, 16:27
народ, обьясниет принципе связки Freearc+Precomp...
Ведь они сжимают по сходным алгоритмам или всетаки нет?
и ещо как в консоли, для прекомпа, задать не один файл, а директиву (папку) в целом, или все файлы из определенной папки?
задать не один файл, а директиву (папку) в целом, или все файлы из определенной папки? »
Я создаю бантик со списком нужных мне файлов, выглядит примерно так:
precomp -slow 1.xxx
precomp -slow 2.xxx
precomp -slow 3.xxx
NameVizavi
25-09-2009, 19:05
A1EXXX,
тоесть сначало паковать фриарком, а потом прикомпом О_о
по поводу батника, я и сам додумался...
вот только при перепаковку игр, все файлы будеш прописывать, покаместь пальцы до костей не протреш :)
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'));сам ими не пользовался, т.к. привык задавать всё через командную строку....
Как-то уже задавал подобный вопрос, но рабочего решения не нашли. Попробую ещё раз: Как, при установке, когда выполняются внешние программы сделать передвигаемым окно самого инсталлятора?
МИШАНЧИК
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.