Войти

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

Gnom_aka_Lexander
27-04-2011, 16:17
R.i.m.s.k.y., SaveStringsToFile(ExpandConstant('{src}\www.txt' »
src - у тебя не на сменном носителе случайно?

R.i.m.s.k.y.
27-04-2011, 16:21
src - у тебя не на сменном носителе случайно »
нет, ошибка "Out of range" в строке присваивания S[i] переменной, я ж написал

El Sanchez
27-04-2011, 16:33
не понимаю, почему не работает »
R.i.m.s.k.y., а массив-то хоть существует? Строка SetArrayLength(S, 5) есть?

Можно-ли получить текст надписи PageNameLabel и PageDescriptionLabel со строго определенной страницы? Чтобы показать их на другой странице. »
Лександер, самое простое тексты прописать в [Messages]:

[Messages]
WizardSelectDir=blablabla
SelectDirDesc=blabla
...

или использовать SetupMessage (при необходимости StringChangeEx для обработки результата):

MsgBox(SetupMessage(msgWizardSelectDir), mbInformation, MB_OK);
MsgBox(SetupMessage(msgSelectDirDesc), mbInformation, MB_OK);

MrAWP
27-04-2011, 21:54
Как получить из реестра месторасположение Firefox (если он установлен) и выполнить действия, аналогичные этому бат-файлу:

start /d"{путь_к_firefox.exe}" firefox {tmp}/plugin.xpi

то есть нужно по сути открыть файл xpi через файрфокс чтобы начать установку плагина.

shao
27-04-2011, 23:39
R.i.m.s.k.y., спасибо!

.....вытаскивает в bin файлик »
Да, есть там такой...

разраб клайта в коде сделал проверку на доппараметры комстроки -MakeUnattended »
а innoup секцию код не вытаскивает в привычном скрипте инно »
К сожалению я в кодах не силён.....
Буду признателен, если кто такой код набросает....Если не сложно.

R.i.m.s.k.y.
28-04-2011, 08:44
[*C*ode]
var: www: integer; // переменную объявляем за пределами функций/процедур, так она будет доступна всем

Function InitializeSetup: Boolean;
var st :string; i: Integer;
begin
www := -1; // три значения: -1 - не изменялось, 0 - нет, 1 - да
for i:=2 to ParamCount do begin
st := Lowercase(ParamStr(i));
Result := True;
case st of
Lowercase('/www_on') : www := 1;
Lowercase('/www_off') : www := 0;
end;
Result := True; //а то почему-то Result "фолсится" и дистр закрывается не пикнув
end; //case
end; //InitializeSetup

Function param_www_on: Boolean;
begin
if (www = 1) then Result := True else Result := False;
end;

[Files]
Source: nircmd.exe; DestDir: {app}\Utilities\; Flags: ignoreversion noencryption; Check: param_www_on

Serega
28-04-2011, 09:34
Если не сложно. »
Накидал пример, как это делается:


; имя файла
#define NameInf "unattended.ini"

#define MyAppName "My Program"
#define MyAppVerName "My Program 1.5"
#define MyAppExeName "MyProg.exe"

[Setup]
AppName={#MyAppName}
AppVerName={#MyAppVerName}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=True
OutputDir=.
ShowLanguageDialog=auto
Compression=lzma2/ultra
InternalCompressLevel=ultra
SolidCompression=yes

[Languages]
Name: en; MessagesFile: compiler:Languages\English.isl
Name: ru; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
en.WelcomeLabel2=Click Next to continue, or Cancel to exit.
ru.WelcomeLabel2=Нажмите «Далее», чтобы продолжить, или «Отмена», чтобы выйти.
en.CreateDesktopIconAllUsers=For all users
ru.CreateDesktopIconAllUsers=Для всех пользователей
en.CreateDesktopIconUserOnly=For the current user only
ru.CreateDesktopIconUserOnly=Для текущего пользователя
en.UnattendedCaption=Unattended Install Maker for %1
ru.UnattendedCaption=Создание атоматического инсталлятора для %1
en.UnattendedCancelButton=Finish
ru.UnattendedCancelButton=Готово
en.FinishedHeadingLabel=Here something we write...
ru.FinishedHeadingLabel=Тут что-то пишем...
en.FinishedLabel=Here something we write...%n%n%nClick Finish.
ru.FinishedLabel=Тут что-то пишем...%n%n%nНажмите на кнопку "Готово".

[Components]
Name: main; Description: Main Files; Types: full compact custom; Flags: fixed
Name: help; Description: Help Files; Types: full
Name: help\english; Description: English; Types: full
Name: help\dutch; Description: Dutch; Types: full

[Tasks]
Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Components: main
Name: desktopicon\common; Description: {cm:CreateDesktopIconAllUsers}; GroupDescription: {cm:AdditionalIcons}; Components: main; Flags: exclusive
Name: desktopicon\user; Description: {cm:CreateDesktopIconUserOnly}; GroupDescription: {cm:AdditionalIcons}; Components: main; Flags: exclusive unchecked
Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Components: main; Flags: unchecked

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Components: main; Flags: ignoreversion
Source: compiler:Examples\Readme-en.txt; DestDir: {app}; Components: help\english; Flags: ignoreversion
Source: compiler:Examples\Readme-Dutch.txt; DestDir: {app}; Components: help\dutch; Flags: ignoreversion

[Icons]
Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}
Name: {commondesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}; Tasks: desktopicon\common
Name: {userdesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; WorkingDir: {app}; Tasks: desktopicon\user
Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: quicklaunchicon

[Code]
var
MakeUnattended: Boolean;

function InitializeSetup(): Boolean;
begin
Result := True;
MakeUnattended := Pos('-MAKEUNATTENDED', Uppercase(GetCmdTail)) > 0;
end;

procedure CreateBat;
begin
SaveStringToFile(
ExtractFilePath(ExpandConstant('{srcexe}')) + ChangeFileExt('{#NameInf}', '.bat'), // имя батника
'"' + ExtractFileName(ExpandConstant('{srcexe}')) + '" /verysilent /norestart /LoadInf=".\{#NameInf}"'#13#10, // сама запись
False); // указываем, перезаписывать файл, если такой уже есть
end;

procedure SaveInfo;
var
FileName, Value: string;
begin
FileName := ExtractFilePath(ExpandConstant('{srcexe}')) + '{#NameInf}';
SetIniString('Setup', 'Lang', ActiveLanguage, FileName); // язык
SetIniString('Setup', 'Dir', ExpandConstant('{app}'), FileName); // выбранный каталог
SetIniString('Setup', 'Group', ExtractFileName(ExpandConstant('{group}')), FileName); // группа
SetIniBool('Setup', 'NoIcons', WizardForm.NoIconsCheck.Checked, FileName); // создавать или нет ярлык
// указываем тип установки
case WizardForm.TypesCombo.ItemIndex of
0: SetIniString('Setup', 'SetupType', 'full', FileName);
1: SetIniString('Setup', 'SetupType', 'compact', FileName);
2: SetIniString('Setup', 'SetupType', 'custom', FileName);
end;
// проверяем какие компоненты выбраны
Value := '';
if IsComponentSelected('main') then
Value := 'main,';
if IsComponentSelected('help') then
Value := Value + 'help,';
if IsComponentSelected('help\english') then
Value := Value + 'help\english,';
if IsComponentSelected('help\dutch') then
Value := Value + 'help\dutch,';
if Value <> '' then
SetLength(Value, Length(Value)-1);
SetIniString('Setup', 'Components', Value, FileName);
// проверяем доп. задачи
Value := '';
if IsTaskSelected('desktopicon') then
Value := 'desktopicon,';
if IsTaskSelected('desktopicon\common') then
Value := Value + 'desktopicon\common,';
if IsTaskSelected('desktopicon\user') then
Value := Value + 'desktopicon\user,';
if IsTaskSelected('quicklaunchicon') then
Value := Value + 'quicklaunchicon,';
if Value <> '' then
SetLength(Value, Length(Value)-1);
SetIniString('Setup', 'Tasks', Value, FileName);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if (CurPageID = wpReady) and MakeUnattended then
begin
SaveInfo; // сохраняем выбранные данные
CreateBat; // пишем батник
// делаем имитацию финальной страницы
with WizardForm do
begin
NextButton.Hide;
BackButton.Hide;
CancelButton.Left := ScaleX(310);
CancelButton.Caption := ExpandConstant('{cm:UnattendedCancelButton}');
FinishedHeadingLabel.Caption := ExpandConstant('{cm:FinishedHeadingLabel}');
FinishedLabel.Caption := ExpandConstant('{cm:FinishedLabel}');
FinishedPage.Show;
end;
end;
end;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
if MakeUnattended then
begin // если Unattended, то закрываем инсталлятор по тихому
Cancel := True;
Confirm := False;
end;
end;

procedure InitializeWizard();
begin
if MakeUnattended then
with WizardForm do // при Unattended, указываем свои надписи
begin
Caption := ExpandConstant('{cm:UnattendedCaption,{#MyAppName}}');
WelcomeLabel1.Caption := ExpandConstant('{cm:UnattendedCaption,{#MyAppName}}');
WelcomeLabel2.Caption := ExpandConstant('{cm:WelcomeLabel2}');
end;
end;

R.i.m.s.k.y.
28-04-2011, 09:48
Накидал пример, как это делается: »
а я то подумал что ему надо просто пример как из комстроки параметры вытягивать...

как в define определить переменную path вида {src}\q1w2 ?

Serega
28-04-2011, 09:57
как из комстроки параметры вытягивать »
самое простое, это Pos('искомые данные', GetCmdTail) > 0... да писанины получается меньше ;)

Serega
28-04-2011, 10:32
как в define определить переменную path вида {src}\q1w2 ? »
Объясните подробней, может проще будет обойтись записью типа {code:GetPath}?

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {code:GetPath}; Flags: ignoreversion

[Code]
function GetPath(s: string): string;
begin
Result := ExpandConstant('{src}\q1w2');
end;

R.i.m.s.k.y.
28-04-2011, 10:45
Объясните подробней, может проще будет обойтись записью типа »
задать переменную пути чтобы менять путь для файла только в заголовке скрипта

где взять iputils.dll???

нашел только тут http://forum.ru-board.com/topic.cgi?forum=5&topic=4801&start=760#10 но способ п*ц убиться как вытащить

R.i.m.s.k.y.
28-04-2011, 11:01
а где тут был скрипт с вытаскиванием айпишника из ipconfig?
искать нет никакой возможности, с форумом сегодня какой-то ахтунг, постоянно time-out.
Желательно в личку или admin@rimsky.net
вытащить файл с выводом ipconfig не фокус, для меня фокус потом из него строчку с айпишником выдернуть.

А если нет интернета, то нет и внешнего IP »
а внутренний за айпи не считается?

Serega
28-04-2011, 12:40
где взять iputils.dll??? »
здесь (http://forum.oszone.net/post-1652569.html#post1652569)
а где тут был скрипт с вытаскиванием айпишника из ipconfig? »
здесь (http://forum.oszone.net/post-1648634.html#post1648634) и на следующей странице, я его немного поправил.
а внутренний за айпи не считается? »
не совсем понятно, что именно вы под этим имеете ввиду? есть IP внешний и IP локальный...
лучше опишите подробней, что хотите сделать.

R.i.m.s.k.y.
28-04-2011, 13:52
не совсем понятно, что именно вы под этим имеете ввиду? есть IP внешний и IP локальный...
лучше опишите подробней, что хотите сделать. »
локальный айпи нужен
хочу взять скрипт Utimate Test, присобачить к нему запись инфо о системе через запятую в расшаренную папку сервера, запустить через КД, а потом импортировать в эксель с разделителем ",", получится список кампов в сетке с имена пользователей, айпишниками, внутренностями камопв и тп.
здесь и на следующей странице, я его немного поправил. »
на страницах код по узнаванию макадреса, а мне айпишник нужен, мак адрес узнается по "-", айпишник так не узнаешь, у самого тяму не хватает.
Ведь недавно пробегал код по узнаванию айпишника через разгребание вывода ipconfig, а не через IPUtils (который непонятно почему на 1/3 машин could not call proc)

R.i.m.s.k.y.
28-04-2011, 14:43
опять нихера не понимаю

[Files]
Source: d:\New\IPUtils.dll; DestDir: {tmp}; Flags: dontcopy noencryption nocompression


procedure InitializeWizard();
begin
ExtractTemporaryFile(ExpandConstant('IPUtils.dll'));


вот такая ошибка, имя файла копировал а не набирал руками
http://forum.oszone.net/attachment.php?attachmentid=63416&stc=1&d=1303987375

Habetdin
28-04-2011, 15:08
R.i.m.s.k.y., а зачем ExpandConstant?

Gnom_aka_Lexander
28-04-2011, 15:14
R.i.m.s.k.y., обратил внимание - когда ставиш Flags: dontcopy, DestDir лучше вообще не указывать, а библиотеки лучше в InitializeSetup сетап распаковывать, так, примерно:
function InitializeSetup: Boolean;
begin
if not FileExists(ExpandConstant('{tmp}\IPUtils.dll')) then ExtractTemporaryFile('IPUtils.dll');
Result:=true;
end;

R.i.m.s.k.y.
28-04-2011, 15:21
а зачем ExpandConstant »
от безисходности ;)
так, примерно »
да, в InitializeSetup я засунуть не догадался! помогло

а с выдергиванием айпишника из выхлопа ipconfig никто не поможет?

если кслероз мне не изменяет, Лександр ссылку на руборд давал где был такой пример.

Gnom_aka_Lexander
28-04-2011, 16:20
R.i.m.s.k.y., Давал, даю еще раз :) ссылка (http://forum.ru-board.com/topic.cgi?forum=5&topic=35848&start=2172&limit=1&m=1#1)

R.i.m.s.k.y.
28-04-2011, 16:21
Давал, даю еще раз ссылка »
а мак адрес и айпишник разве одно и тоже?
в ссылке функция GetMACAddress
эту видел, и находил раньше




© OSzone.net 2001-2012