Войти

Показать полную графическую версию : [архив] Скрипты 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

Cinot
15-06-2010, 12:59
Добрый день! У меня возникла небольшая проблема в понимании языка структуры Source в Inno Setup.

Дело в том, что первое окно установки у меня создано посредством скрипта (code), где имеется edit_box. Мне нужно продумать 2 варианта: если в edit_box введено правильное выражение, то в Source необходимо копировать файлы для полной версии программы; если же edit_box пустое или неверное, то устанавливать файлы демо-версии. Вопрос в том, как реализовать этот if и какова структура Source? Например,
Source: "{code:version}/*.dll"; DestDir: "{app}\Programs"

т.е. тут возможны либо "Full/*.dll", либо "Demo/*.dll" (эти папки уже созданы, и в них лежат соответствующие файлы).

BlackSelf
16-06-2010, 00:23
Cinot, ну, например, так (добавьте к своему скрипту):

[Files]
Source: "D:\file1.txt"; DestDir: "{app}\Programs"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: not Full;
Source: "D:\file2.txt"; DestDir: "{app}\Programs"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: Full;

[Code]
var
FullCheck: TCheckBox;

function Full: Boolean;
begin
Result:=FullCheck.Checked;
end;

procedure InitializeWizard;
begin
FullCheck := TCheckBox.Create(WizardForm);
with FullCheck do
begin
Parent := WizardForm;
Left := 0;
Top := 0;
Width := 0;
Height := 0;
TabOrder := 0;
Checked := False;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
var
s: string;
begin
if CurStep = ssinstall then
begin
s:=Edit.Text;
If s='12345' then FullCheck.Checked:=True
else FullCheck.Checked:=False;
end;
end;

R.i.m.s.k.y.
16-06-2010, 08:42
Вопрос в том, как реализовать этот if и какова структура Source »
Source: "{code:version}/*.dll"; DestDir: "{app}\Programs"; Check: MyCheck

[_Code]
Function MyCheck():boolean;
Begin
//проверка что-то где-то введено
End;

Примерно так.

Если MyCheck возвращает True, то строчка с Check: MyCheck выполняется, если MyCheck возвращает False, то строчка с Check: MyCheck пропускается

Cinot
16-06-2010, 11:33
Извините, а более полного примера у Вас не найдётся? У меня что-то ничего не получается сделать на основе этого =)

R.i.m.s.k.y.
16-06-2010, 11:59
более полного примера у Вас не найдётся »
Надейтся, вот из справки:


[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; Check: MyProgCheck
Source: "A\MYFILE.TXT"; DestDir: "{app}"; Check: MyDirCheck(ExpandConstant('{app}\A'))
Source: "B\MYFILE.TXT"; DestDir: "{app}"; Check: DirExists(ExpandConstant('{app}\B'))

[_Code]
var
MyProgChecked: Boolean;
MyProgCheckResult: Boolean;

function MyProgCheck(): Boolean;
begin
if not MyProgChecked then begin
MyProgCheckResult := MsgBox('Do you want to install MyProg.exe to ' + ExtractFilePath(CurrentFileName) + '?', mbConfirmation, MB_YESNO) = idYes;
MyProgChecked := True;
end;
Result := MyProgCheckResult;
end;

function MyDirCheck(DirName: String): Boolean;
begin
Result := DirExists(DirName);
end;

Вот из моего инсталлера

[Components]
Name: mpc; Description: Настройки Media Player Classic Home Cinema; Check: mpcexists
[_Code]
function mpcexists(): Boolean;
Var MPCPath: string;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Gabest\Media Player Classic','ExePath', MPCPath);
if FileExists (MPCPath) then Result := True else Result := False;
end;

Функцию Check можно лепить во все секции кроме Code и Setup

Cinot
16-06-2010, 15:17
Спасибо, очень помогло!

R.i.m.s.k.y.
16-06-2010, 16:08
Спасибо, очень помогло »
Пожалуйста, я конечно, не Serega, но чем смогу - помогу.
Офф: а есть подобный форум по Visual Basic? Чтобы с примерами и справкой с чего начать

SeDmY
16-06-2010, 18:29
Доброго времени суток! Хотелось бы спросить про доп. программное обеспечение игры:

После установки игры DirectX и всякая мелкая дребедень дополнительная копируется в папку с игрой и устанавливается, после чего так и остается там, а можно сделать так, чтобы после установки этих программ их exe-шники автоматически удалялись из папки!?

nik1967
16-06-2010, 20:08
SeDmY,
А зачем копировать DirectX и всякую мелкую дребедень в папку с игрой?
[Run]
Filename: "{src}\DirectX\DXSETUP.exe"; WorkingDir: "{src}\DirectX"; Parameters: "/silent"; Flags: waituntilterminated
То есть программа работает из директории установки: {src}, и не копируется в папку назначения {app}.

SeDmY
16-06-2010, 20:15
SeDmY,
А зачем копировать DirectX и всякую мелкую дребедень в папку с игрой?
[Run]
Filename: "{src}\DirectX\DXSETUP.exe"; WorkingDir: "{src}\DirectX"; Parameters: "/silent"; Flags: waituntilterminated
То есть программа работает из директории установки: {src}, и не копируется в папку назначения {app}. »

Спасибо за ответ, нужно было втиснуть для стабильной работы, так после установки оставались в папке с игрой! Я сделал немного подругому, в конце добавил :

Source: E:\Games\Support\DirectX\dxwebsetup.exe; DestDir: {app}; Flags: deleteafterinstall

Блин, скрипт выдает мне следующее:

http://www.imagepost.ru/thumbs/155/BpMI2CabT37G.PNG (http://www.imagepost.ru/?v=155/BpMI2CabT37G.PNG)

Что не так!?

nik1967
16-06-2010, 20:27
Что не так!?
Лишний end; :wink: .

SeDmY
16-06-2010, 21:18
Цитата SeDmY:
Что не так!?
Лишний end; . »

Вот что получается:

http://www.imagepost.ru/thumbs/155/w7Q5iKt9hB6b.PNG (http://www.imagepost.ru/?v=155/w7Q5iKt9hB6b.PNG)

paravozik2009
16-06-2010, 23:03
Извините,а можно к Inno привязать как-то распаковку cab файлов?

Cinot
17-06-2010, 10:52
R.i.m.s.k.y., у меня ещё небольшой вопрос по поводу поиска по реестру.
Я ищу установленные AutoCAD'ы на компьютере. Все они в реестре имеют вид по такому шаблону:
HKEY_LOCAL_Machine\SOFTWARE\Autodesk\AutoCAD\16.2\409:5005 (а дальше - ключи)
HKEY_LOCAL_Machine\SOFTWARE\Autodesk\AutoCAD\17.1\519:6007 (а дальше - ключи)
Нужно организовать перебор по этим папкам (внутри - перебор по соответствию ключа "ProductName" членам "рукотворного" списка). Я писал, писал, и запутался:

if RegGetSubkeyNames(HKEY_LOCAL_Machine, 'SOFTWARE\Autodesk\AutoCAD\', Names) then
begin
for i:=0 to GetArrayLength(Names)-1 do
if RegGetSubkeyNames(Names[i], Names2) then
begin
for j:=0 to GetArrayLength(Names2)-1 do
if RegGetSubkeyNames(Names2[j], Names3) then
begin
for k:=0 to GetArrayLength(Names3)-1 do
if (Names3[k] = 'ProductName') and ...

nik1967
17-06-2010, 13:22
paravozik2009, Именно .cab файлов? Или всё же файлов .arc, переименованных в файлы .cab?

SeDmY
17-06-2010, 18:38
Нужна помощь:

http://www.imagepost.ru/thumbs/155/s30mXQZgB7TE.PNG (http://www.imagepost.ru/?v=155/s30mXQZgB7TE.PNG)

как мне поступить!?

Запустил скрипт : http://forum.ru-board.com/topic.cgi?forum=5&topic=33457&start=1000#20

Даже не менял ничего!

-S.S.V.-
17-06-2010, 22:36
Подскажите пожалуйста, как в скрипте прописать:
Чтобы при установке отображался выбор установки дополнительных компонентов, к примеру:
DirectX и PhysX, чтобы можно было поставить галочку на выборе дополнительного компонента и он бы устанавливался с диска и при этом в тихом режиме.
Заранее благодарю!

R.i.m.s.k.y.
18-06-2010, 10:25
писал, и запутался »
На первый взгляд нормально, должно сработать, только что Вы хотите получить? узнать стоит ли он? Это можно узнать по ключу реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\??? (как дальше я не помню, экспортируйте весь этот ключ и поиском в нем найдите AutoCad)
Если нужны параметры, тогда да, надо читать из указанной Вами ветки реестра.
Можно и через гланды - экспортировать HKEY_LOCAL_Machine\SOFTWARE\Autodesk\AutoCAD\ во временную папку текстовым файлом (reg export) :)

PS: я на выходные.

R.i.m.s.k.y.
18-06-2010, 10:45
Чтобы при установке отображался выбор установки дополнительных компонентов »

[Components]
Name: DIRECTX; Description: Установить DIRECTX версии ...
Name: PsysX; Description: Установить PsysX версии ...

[Run]
Components: DIRECTX; Filename: {src}\DirectX\directx_mar2009_redist.exe; Parameters: " /Q "; StatusMsg: Установка DirectX. Подождите, пожалуйста; Flags: runhidden waituntilterminated
Components: PsysX; Filename: {src}\PsysX\PsysX.exe; Parameters: " ??? "; StatusMsg: Установка PsysX. Подождите, пожалуйста; Flags: runhidden waituntilterminated

Параметры тихой установки PsysX я не знаю. Запустите установщик PsysX с ключом /? (PsysX.exe /?) - он должен написать какой параметр для тихой установки, его и пропишите вместо ???
{src} - путь к файлу вашего скомпилированного установщика. Рядом с этим установщиком должны лежать папки DirectX и PsysX

tema47
18-06-2010, 10:58
Всем привет. А скажите как сделать чтобы во время установки игры ,данные об игре попали в реестр?




© OSzone.net 2001-2012