Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 3]
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);
Как получить из реестра месторасположение Firefox (если он установлен) и выполнить действия, аналогичные этому бат-файлу:
start /d"{путь_к_firefox.exe}" firefox {tmp}/plugin.xpi
то есть нужно по сути открыть файл xpi через файрфокс чтобы начать установку плагина.
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
Если не сложно. »
Накидал пример, как это делается:
; имя файла
#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 ?
как из комстроки параметры вытягивать »
самое простое, это Pos('искомые данные', GetCmdTail) > 0... да писанины получается меньше ;)
как в 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 »
а внутренний за айпи не считается?
где взять 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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.