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

0.07
22-03-2011, 15:08
спасибо, что подсказали, а то я мучался бы потом с ним. а вообще я хочу сжать Warhammer Dawn of War 2 Retrebution. пробовал как я обычно сжимаю 7z+precomp+srep+arc, но че-то почти не сжимается. вот я и решил попробовать Paq9

Arsi000
22-03-2011, 15:47
помогите додумать нужно чтобы пользовательские страницы показывались или скрывались взависимости от выбранных компонентов вот сделал так function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = Page.ID) and Not(IsComponentSelected('Component 32')) then
Result := True
else if (PageID = Page2.ID) and Not(IsComponentSelected('Component 64')) then
Result := True
else
Result := False;
end; вроде вот так работает но на 32 битной системе ошибка выходит, установщик у меня гибридный и надо чтобы в обоих работал. может как по другому можно сделать?

0.07
22-03-2011, 16:02
попробуй
function ShouldSkipPage(PageID: Integer): Boolean;
begin
if (PageID = Page.ID) and Not(IsComponentSelected('Component 32')) then
Result := True
else if (PageID = Page2.ID) and Not(IsComponentSelected('Component 32')) then
Result := True
else
Result := False;
end;

Arsi000
22-03-2011, 17:23
0.07, спасибо но это тут бы никак не помогло, сам разобрался проблема в скрипте была

Serega
22-03-2011, 17:33
сам разобрался проблема в скрипте была »
Раз разобрались, это очень хорошо, но всегда нужно описывать ошибку и немного упорядочил вашу функцию:

function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageID of
Page.ID : Result := not IsComponentSelected('Component 32');
Page2.ID: Result := not IsComponentSelected('Component 64');
else
Result := False;
end;
end;

Gnom_aka_Lexander
22-03-2011, 20:28
Рабочая ссылка на Inno Script Generator (http://www.freedownloadsplace.com/Inno-Script-Generator-Download-31392.htm),
Зеркало (http://rghost.ru/4881192) на РГ-Хосте.
Зеркало (http://ifolder.ru/21111525) на русифицированную программу.

0.07
22-03-2011, 20:49
у кого нибудь есть скрипт, в котором можно поставить картинку на фон инсталлятора?Если есть дайте ссылку плз.

Gnom_aka_Lexander
22-03-2011, 20:59
0.07, Вариант от Serega из шапки (http://www.forum.oszone.ru/post-1242285-250.html) И для кого она нужна...?
Еще (http://forum.ru-board.com/topic.cgi?forum=5&topic=30413&start=2228&limit=1&m=2#1) вариант от Shegorat.

0.07
22-03-2011, 21:09
И для кого она нужна...?
Ну, постоянно забываю туда посмотреть, да и про поиск тож
За скрипт спс.

shidow
23-03-2011, 07:24
Делаю чтоб после установки устанавливалось доп. по пишу в run
[Run]
Filename: "{app}\Redistributable\eadm-installer.exe"; WorkingDir: "{app}\Redistributable"; Flags: skipifdoesntexist; Check: Task2;
Filename: "{app}\Redistributable\DirectX\DXSETUP.exe"; Parameters:/silent; WorkingDir: "{app}\Redistributable"; Flags: skipifdoesntexist; Check: Task3;
Но когда закончилась установка доп. по не устанавливается в чем причина?

Gnom_aka_Lexander
23-03-2011, 08:31
shidow, нужно смотреть твой скрипт.

Krinkels
23-03-2011, 08:55
shidow
А ты не пробовал в Flags добавить postinstall?

Gnom_aka_Lexander
23-03-2011, 11:33
Интересная задача: есть функция:
function SaveStringsToUTF8File(const FileName: String; const S: TArrayOfString; const Append: Boolean): Boolean;
Но она доступна только на Юникод-версии компилятора. Вопрос: как-бы ее приделать к АНСИ-компилятору?

Krinkels
23-03-2011, 12:36
Лександер
Ну она у меня и в анси версии компилятора присутствует. Стоит версия от китайцев

Gnom_aka_Lexander
23-03-2011, 12:45
Krinkels, У меня тоже, но вызывает ошибку :)
А на Юникод - срабатывает, но мне главный скрипт под юникод не переделать - там километр кода уже :)
Возможное решение моей проблемы: Ссылка (http://www.programmers.kz/forum/topic_122)
Поможет кто-нибудь приделать это к этому (http://forum.ru-board.com/topic.cgi?forum=5&topic=35848&start=1822&limit=1&m=1#1) скрипту?

shidow
23-03-2011, 16:10
Krinkels
Flags postinstall добавил но теперь такая ошибка
http://i18.fastpic.ru/big/2011/0323/46/d849eb82de48f1737d3a8994710fa346.png
И еще один вопрос как сделать чтоб после установки игра не запускалась?

Gnom_aka_Lexander
23-03-2011, 17:08
shidow, эта ошибка говорит о том, что по указанному пути нет файла, который нужно выполнить.как сделать чтоб после установки игра не запускалась? »
Убрать запуск игры из секции ран.

insombia
23-03-2011, 17:26
как вставить на первую страничку инсталятора картинку как здесь?

http://screendepo.com/image/109254

если что мой скрипт

OutputDir=Setup
AppName=Crysis 2
AppVerName=Crysis 2
AppVersion=Crysis 2
AppPublisher=Torrent 4M
AppCopyright=Torrent 4M
DefaultDirName={pf}\Crysis 2
DefaultGroupName=Crysis 2
AllowNoIcons=yes
OutputBaseFilename=setup
WizardImageFile=C:\Documents and Settings\Admin\Рабочий стол\341de00ccb0b6b53d1a2c81e5e0b8e55.bmp
WindowVisible=false
WindowShowCaption=false
WindowResizable=false
Compression=lzma/ultra
SolidCompression=true
DiskSpanning=yes
DiskSliceSize=1048576000
SlicesPerDisk=1
WizardSmallImageFile=C:\Documents and Settings\Admin\Рабочий стол\crysis\Crysis_2.bmp

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

[Messages]
DiskSpaceMBLabel=Требуется как минимум 6,20 Гб свободного дискового пространства.

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}

[Files]
Source: C:\Documents and Settings\Admin\Рабочий стол\button.bmp; DestDir: {tmp}; Flags: dontcopy
Source: C:\Documents and Settings\Admin\Рабочий стол\LOGO.bmp; Flags: dontcopy solidbreak
Source: ISSkin.dll; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: steam.cjstyles; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression solidbreak
Source: C:\Documents and Settings\Admin\Рабочий стол\dc.reg; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: C:\Documents and Settings\Admin\Рабочий стол\logo.bmp; DestDir: {tmp}; Flags: dontcopy
Source: D:\Crysis 2\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension

[Icons]
Name: {group}\Crysis 2; Filename: {app}\bin32\Crysis2Launcher.exe; WorkingDir: {app}\bin32
Name: {userdesktop}\Crysis 2; Filename: {app}\bin32\Crysis2Launcher.exe; WorkingDir: {app}\bin32; Tasks: desktopicon
Name: {group}\{cm:UninstallProgram,Crysis 2}; Filename: {uninstallexe}

[Run]
Description: {cm:LaunchProgram, Crysis 2}; Filename: {app}\bin32\Crysis2Launcher.exe; WorkingDir: {app}\bin32; Flags: nowait postinstall skipifsilent unchecked
Filename: {win}\regedit.exe; Parameters: /s {tmp}\dc.reg; StatusMsg: Вносим изменения в реестр ...; Flags: waituntilterminated runasoriginaluser

[UninstallDelete]
Type: filesandordirs; Name: {app}

[Code]
var
BitmapImage1: TBitmapImage;

procedure InitializeWizard();
begin
{ BitmapImage1 }
BitmapImage1 := TBitmapImage.Create(WizardForm);
with BitmapImage1 do
begin
Name := 'BitmapImage1';
Parent := WizardForm;
Left := ScaleX(0);
Top := ScaleY(314);
Width := ScaleX(241);
Height := ScaleY(100);
ExtractTemporaryFile('LOGO.bmp');
Bitmap.LoadFromFile(ExpandConstant('{tmp}\LOGO.bmp'));
end;
end;

var
lbl1, lbl2: TLabel;
txt1, txt2: string;
i: Integer;
tmr1: TTimer;

procedure tmr1Timer(Sender: TObject);
begin
tmr1.Enabled:= False;

txt1:= WizardForm.WelcomeLabel1.Caption;
txt2:= WizardForm.WelcomeLabel2.Caption;

lbl1.Caption:= '';
for i:= 1 to Length(txt1) do begin
if Application.Terminated then Break; // контроль закрытия приложения и выход из цикла
lbl1.Caption:= lbl1.Caption + txt1[i];
Application.ProcessMessages;
Sleep(100); // время задержки между показом букв
end;

lbl2.Caption:= '';
for i:= 1 to Length(txt2) do begin
if Application.Terminated then Break; // контроль закрытия приложения и выход из цикла
lbl2.Caption:= lbl2.Caption + txt2[i];
Application.ProcessMessages;
Sleep(60); // время задержки между показом букв
end;
end;

procedure CreateComponents;
begin
// скрываем стандартные Label'ы
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;

// задаём свои Label'ы
lbl1:= TLabel.Create(WizardForm);
with lbl1 do begin
Left:= WizardForm.WelcomeLabel1.Left;
Top:= WizardForm.WelcomeLabel1.Top;
Width:= WizardForm.WelcomeLabel1.Width;
Height:= WizardForm.WelcomeLabel1.Height;
AutoSize:= WizardForm.WelcomeLabel1.AutoSize;
WordWrap:= WizardForm.WelcomeLabel1.WordWrap;
Font.Style:= WizardForm.WelcomeLabel1.Font.Style;
Font.Size:= WizardForm.WelcomeLabel1.Font.Size;
Font.Color:= WizardForm.WelcomeLabel1.Font.Color;
Transparent:= True;
Caption:= '';
Parent:= WizardForm.WelcomePage;
end;

lbl2:=TLabel.Create(WizardForm);
with lbl2 do begin
Left:= WizardForm.WelcomeLabel2.Left;
Top:= WizardForm.WelcomeLabel2.Top;
Width:= WizardForm.WelcomeLabel2.Width;
Height:= WizardForm.WelcomeLabel2.Height;
AutoSize:= WizardForm.WelcomeLabel2.AutoSize;
WordWrap:= WizardForm.WelcomeLabel2.WordWrap;
Font.Style:= WizardForm.WelcomeLabel2.Font.Style;
Font.Size:= WizardForm.WelcomeLabel2.Font.Size;
Font.Color:= WizardForm.WelcomeLabel2.Font.Color;
Transparent:= True;
Caption:= '';
Parent:= WizardForm.WelcomePage;
end;

tmr1:= TTimer.Create(WizardForm);
with tmr1 do begin
Interval:= 500; // время задержки перед началом показа текста
OnTimer:= @tmr1Timer;
end;
end;

procedure LoadSkin(lpszPath: String; lpszIniFileName: String); external 'LoadSkin@files:isskin.dll stdcall';
procedure UnloadSkin(); external 'UnloadSkin@files:isskin.dll stdcall';
function ShowWindow(hWnd: Integer; uType: Integer): Integer; external 'ShowWindow@user32.dll stdcall';

function InitializeSetup:boolean;
begin
ExtractTemporaryFile('dc.reg');
ExtractTemporaryFile('steam.cjstyles');
LoadSkin(ExpandConstant('{tmp}')+'\steam.cjstyles', '');
Result:=True;
end;

procedure DeinitializeSetup;
begin
ShowWindow(WizardForm.Handle,0);
UnloadSkin();
end;

function GetLogicalDrives: DWORD; external 'GetLogicalDrives@kernel32.dll stdcall';
function GetDriveType(lpRootPathName: PChar): Cardinal; external 'GetDriveTypeA@kernel32.dll stdcall';

const
DRIVE_FIXED = 3;

function NoSD(s: string): string;
var
x, bit, i: Integer;
tp: Cardinal;
sd: string;
begin
sd:= ExpandConstant('{sd}');
Result:= sd;
// Вызываем функцию WinAPI
// Функция возвращает битовую маску установленных логических дисков.
// Бит 0 определяет наличие диска А:, бит 1 - диска B и т.д.
x:= GetLogicalDrives;
if x <> 0 then
// цикл по полученным битам переменной X
for i:= 1 to 64 do
begin
// Накладываем битовую маску для выделения бита с поряковым номером 0
bit:= x and 1;
// нашли логический диск...
if bit = 1 then
begin
// определяем тип логического диска
tp:= GetDriveType(PChar(Chr(64 + i) + ':'));
if tp = DRIVE_FIXED then
// если диск не является системным
if Chr(64 + i) <> Copy(sd, 1, 1) then
begin
Result:= Chr(64 + i) + ':';
Break;
end;
end;
// побитовый сдвиг вправо
x:= x shr 1;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.Font.Name:= 'Georgia';
if CurPageID = wpInfoBefore then WizardForm.Font.Name:= 'Georgia';
if CurPageID = wpLicense then WizardForm.Font.Name:= 'Georgia';
WizardForm.Font.Style:=[fsBold, fsItalic]
end;

и ещё искал но не нашел как сделать чтобы при нажатии на лого открывался сайт?

shidow
23-03-2011, 17:29
Лександер, так в том то и проблема что все правильно написано

а за что вот это отвечвет
WorkingDir: "{app}\Redistributable";

Gnom_aka_Lexander
23-03-2011, 17:52
shidow, WorkingDir - рабочая папка. А ты файлы положил туда, откуда их запускаеш?
insombia, поройся здесь (http://innoultra.ru/?page_id=18/) , вроде были оба нужных тебе примера.




© OSzone.net 2001-2012