Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]


Страниц : 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

LinkOFF
26-05-2012, 03:22
Здравствуйте. Как сделать чтоб файл распаковывался в C:\Users\имя пользователя\AppData\Local\ ?. Я ставлю {userappdata}, но он распаковывает в C:\Users\имя пользователя\AppData\Roaming\ . Пробовал еще {userprofile}, но с ним вообще ошибку выдает.

YURSHAT
26-05-2012, 06:19
А сайт http://krinkels.org/ чему посвящён? »
Создавлся как сайт посвященный Inno Setup, это и является основным направлением :)

Gnom_aka_Lexander
26-05-2012, 15:39
Johny777, честно - лень искать, а вообще - помоему ближе к концу 3-й части или начале 4-й части видел подобные примеры того, как создать собственные параметры для инсталлятора.
и другой вопрос вопрос »
очень важный. и правильно тебе инсталл говорит - ты не просто укорачиваешь, ты изменяешь путь - текст DirEdit и есть путь установки, и спользован он будет именно так, как там написано, никак иначе.

El Sanchez
26-05-2012, 21:54
А можно ли в инсталл добавить свои параметры запуска?
как /LANG=English например, но другие. »
Johny777, используй константу {param}. Подробности в справке.

Creator000
26-05-2012, 22:48
тогда такой вопрос. в установщике 3 компонента. 1 это программа. остальные 2 скины и темы. как последние 2 компонентов просто скопировать из установщика в папку назначения?

Ivan_009
26-05-2012, 23:10
При использовании ISVideo как сделать так чтобы видео отображалось только на странице установки а на финишной закрывалось...Зараннее спасибо... :search:

Johny777
26-05-2012, 23:58
Ваня,
насчёт ISVideo не знаю (ты бы скрипт с минимумом файлов дал)
вот тебе пример на основе xvid.dll
http://rghost.ru/private/38303460/fa42cfc4c01fdb3f1c06bff122ee5155
делается легко во встроенной процедуре


procedure CurPageChanged(CurPageID: Integer);
begin

if CurPageID=wpInstalling then /// если страница установки
begin
запускаем видео
end;

if CurPageID=wpFinished then /// на странице завершения
begin
выключаем видео
end;

end;


______________________________________________________

El Sanchez,
спасибо!
очень привлекательный вариант
но если честно не пойму как правильно использовать :(
мне нужно для чекбоксов
сделал так:


[Setup]
AppName=Name
AppVerName=Name
DefaultDirName={pf}\Name
compression=none

[ Code]

procedure InitializeWizard;
var
CheckBox: TNewCheckBox;

begin

CheckBox := TNewCheckBox.Create(WizardForm);
with CheckBox do
begin
Caption := 'Test';
if ExpandConstant('{param:Check|1}') then Checked := true else Checked := false;
Parent := WizardForm;
SetBounds(ScaleX(64), ScaleY(328), ScaleX(97), ScaleY(17));
end;

end;



даже не компилится
ошибка


---------------------------
Ошибка компиляции
---------------------------
Строка 18:

Column 42:

Type mismatch.
---------------------------
ОК
---------------------------


можно мне пожалуйста живой пример?

El Sanchez
27-05-2012, 11:09
if ExpandConstant('{param:Check|1}') then Checked := true else Checked := false; »
Johny777, ну и с чем ты сравниваешь результат ExpandConstant? Это ж строка. Нужно так:

case ExpandConstant('{param:Check|}') of
'1': Checked := True;
'0': Checked := False;
end;

Serkap
27-05-2012, 15:10
Serkap Forever & Курский Город Друзей - скрипт писался для чата Bimoid

Для чего его писал я, у меня есть большая локальная сеть которая состоит из несколько подсетей, у каждой подсети есть свой шлюз, а у меня 7 под сетей (7 шлюзов) и также есть доступ через интернет.
Один сервер обрабатывает эти 7 шлюзов и 1 подключение через интернет! На этом сервере стоит сервер чата.

Пользователь запускает этот инсталлятар, инсталлятар определяет автоматически шлюз, пользователь тока указывает свой логин, после этого запись этих данных происходит в 2 INI файла автоматически.
После завершения установки, чат автоматически логинится и запускается с предустановленным профилем. Это хорошо помагает для сис админов в особенности у кого поднят Домен.
не надо бегать, настраивать для каждого пользователя профиль и т.д.!!!! достаточно запустить и указать тока логин зарегистрированого пользователя!!!
awatch.exe - для определение IP адреса или Шлюза!



#define MyAppName "Чат КГД"
#define MyAppVersion "05.2012"
#define MyAppPublisher "Курский Город Друзей"
#define MyAppURL "http://www.kursk-gd.ru/"
#define MyAppExeName "Bimoid.exe"

[Setup]
; Serkap Forever & Курский Город Друзей - скрипт писался для чата Bimoid
; Для чего его писал я, у меня есть большая локальная сеть которая состоит из несколько подсетей, у каждой подсети есть свой шлюз, а у меня 7 под сетей (7 шлюзов) и также есть доступ через интернет.
; Один сервер обрабатывает эти 7 шлюзов и 1 подключение через интернет! На этом сервере стоит сервер чата.
; Пользователь запускает этот инсталлятар, инсталлятар определяет автоматически шлюз, пользователь тока указывает свой логин, после этого запись этих данных происходит в 2 INI файла автоматически.
; После завершения установки, чат автоматически логинится и запускается с предустановленным профилем. Это хорошо помагает для сис админов в особенности у кого поднят Домен.
; не надо бегать, настраивать для каждого пользователя профиль и т.д.!!!! достаточно запустить и указать тока логин зарегистрированого пользователя!!!
; awatch.exe - для определение IP адреса или Шлюза!


AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DisableDirPage=yes
DefaultGroupName={#MyAppName}
DisableProgramGroupPage=yes
OutputBaseFilename=chat katk
Compression=lzma
SolidCompression=yes

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

[Files]
Source: "awatch.exe"; Flags: dontcopy noencryption nocompression
Source: "C:\111\чат\Bimoid.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "C:\111\чат\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs

[INI]
Filename: "{app}\Bimoid.ini"; Section: "Main"; Flags: uninsdeletesection
Filename: "{app}\Bimoid.ini"; Section: "Main"; Key: "CurLang"; String: "Russian.oln";
Filename: "{app}\Bimoid.ini"; Section: "Main"; Key: "CurSkin"; String: "SnowySky.osk";
Filename: "{app}\Bimoid.ini"; Section: "Main"; Key: "CurUser"; String: "{code:GetUser|Names}";
Filename: "{app}\Bimoid.ini"; Section: "Main"; Key: "CurServer"; String: "{code:MyConst}";
Filename: "{app}\Bimoid.ini"; Section: "Main"; Key: "DefaultServer"; String: "{code:MyConst}";
Filename: "{app}\Bimoid.ini"; Section: "Main"; Key: "Port"; String: "7023";
Filename: "{app}\Bimoid.ini"; Section: "Main"; Key: "TranspResVer"; String: "0";
Filename: "{app}\Users\User0001\ObimpUser.ini"; Section: "User"; Flags: uninsdeletesection;
Filename: "{app}\Users\User0001\ObimpUser.ini"; Section: "User"; Key: "Username"; String: "{code:GetUser|Names}";
Filename: "{app}\Users\User0001\ObimpUser.ini"; Section: "User"; Key: "Server"; String: "{code:MyConst}";

[C*o*de]
var
Page: TInputOptionWizardPage;
UserPage: TInputQueryWizardPage;
ip : string;

Procedure GetIPAdress();
var S: TArrayOfString; i,res : Integer; st : string;
begin
ExtractTemporaryFile('awatch.exe');
Exec(ExpandConstant('{tmp}\awatch.exe'), ' /stab tab1.txt 1 ',ExpandConstant('{tmp}'),SW_HIDE,ewWaitUntilTerminated,res);
LoadStringsFromFile(ExpandConstant('{tmp}\tab1.txt'), S);
for i:= 0 to GetArrayLength(S)-1 do begin
if (Pos(AnsiUpperCase('Default Gateway'), AnsiUpperCase(S[i])) > 0) then begin
st:=S[i];
break;
end;
end;
StringChangeEx(st, 'Default Gateway', '', True);
st:=TrimLeft(st);
st:=copy(st,0,Length(st)-pos('(',st)-1);
StringChangeEx(st, '(', '', True);
st:=TrimRight(st);
ip:=st;
end;


function Checked: Boolean;
begin
Result := Page.Values[0];
end;

function Checked2: Boolean;
begin
Result := Page.Values[1];
end;


function Checked3: Boolean;
begin
if (Page.Values[1]) then
// компонент 'helpfiles' выбран
MsgBox('ok', mbInformation, MB_OK);
end;

function MyConst(Param: String): String;
begin

if Checked then
GetIPAdress;
Result := ip;

if (Checked2) then ;
end;

procedure InitializeWizard();
begin

UserPage := CreateInputQueryPage(wpWelcome,
'Информация для входа!', 'Ваш логин:',
'Укажите логин, который Вам выдал админисратор.');
UserPage.Add('Name:', False);

UserPage.Values[0] := GetPreviousData('Name', GetPreviousData('Name', ExpandConstant('{sysuserinfoname}')));
ip := 'icq.kursk-gd.ru'; // тут указываете свой сервер подключения через интернет

Page := CreateInputOptionPage(wpSelectTasks,'New Page', 'New Page Description.', 'Please check the box below, then click Next.', True, False);
Page.Add('Локальная Сеть КАТК');
Page.Values[0] := True;
Page.Add('Если устанавливаете дома');
Page.Values[1] := False;
end;

function GetUser(Param: String): String;
begin
if Param = 'Names' then Result := UserPage.Values[0];
end;

[Icons]
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}";
Name: "{userstartup}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"

[Run]
Filename: "{app}\Bimoid.exe"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Parameters: "/id={code:GetUser|Names} /srv={code:MyConst} /port=7023 /pwd=123456789 /savepwd /login"; Flags: nowait

Serega
27-05-2012, 19:23
Это ж строка. Нужно так: »
Можно проще ;) :

Checked := ExpandConstant('{param:Check|}') = '1';

El Sanchez
27-05-2012, 20:00
Можно проще »
Serega, не пойдет. Свойство Checked будет False при любых значениях параметра Check, кроме 1. Зависимость состояния чекбокса от значения параметра Check должна быть однозначной.

Serega
27-05-2012, 20:21
Свойство Checked будет False при любых значениях параметра Check, кроме 1 »
El Sanchez, а в приведённом тобой коде будет что-то другое ;) ?
Просто свойство Checked, по умолчанию := False...

Ivan_009
27-05-2012, 20:29
Как в ISVideo сделать кнопки Пауза,Старт,Стоп на if CurPageID=wpInstalling then :unsure: вот скрипт

alert30
27-05-2012, 21:42
У кого остался скрипт, чтобы маскировать установщик в NSIS? Благодарю заранее.

Creator000
28-05-2012, 00:12
как проследить что и куда копирует установщик?

PS
что дает команда •ArchitecturesInstallIn64BitMode*? а то ваша справка глючит.

bear!
28-05-2012, 14:12
Как сделать так, чтобы путь к установки брался из файла .reg?
Прописываю
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft,InstallLocation|{pf}\Pariah}
и
[Registry]
Root: HKLM; SubKey: SOFTWARE\Microsoft\RADAR\HeapLeakDetection\DiagnosedApplications\CivilizationV.exe; ValueType: string; ValueName: LastDetectionTime; ValueData: {app}; Flags: uninsdeletekey

Но в итоге установку предлагает в C:\Program Files\Pariah
Да и кстати, как найти правильный файл реестра? Просто нужно русификатор сделать, но какую именно директорию экспортировать? Верней как она должна выглядеть.

Gnom_aka_Lexander
28-05-2012, 14:20
bear!, ты все правильно делаешь, в принцыпе.
Идеальный вариант - ищешь в разделе реестра Uninstall путь к папке с программой, которую хочешь русифицировать. Наиболее вероятно, что в пути будет подпапка с большим количеством букво-цифер, заключенная в фигурные скобки - это будет AppID программы - все официальные пачи на нем и базируются обычно. далее указываешь именно этот ключ и параметр, в котором находится путь к программе - все должно получиться.

FrozenProtector
28-05-2012, 17:11
Добрый день!

Подскажите пожалуйста, список компонентов для установки выводится обычно в виде чекбоксов или радиокнопок.
Но мне необходимо, чтобы компоненты первого уровня были просто текстом.
т.е. как то так:

+Уровень1 (обычный текст)
- Уровень 2 (чекбокс)
- Уровень 2 (чекбокс)
- Уровень 2 (чекбокс)
+Уровень1 (обычный текст)
- Уровень 2 (чекбокс)
- Уровень 2 (чекбокс)
- Уровень 2 (чекбокс)

Пробовал так через свойство ItemObject, не получилось (паскаль уже плохо помню)


var
label : TLabel;
begin
label := TLabel.Create(nil);
WizardForm.ComponentsList.ItemObject[0] := label;
end;

Gnom_aka_Lexander
28-05-2012, 21:41
С помощью задач можно это решить. Посмотрите в справке GroupDescription

FrozenProtector
29-05-2012, 09:40
С помощью задач можно это решить. Посмотрите в справке GroupDescription »
Уточню, что использую расширенную версию Inno Setup, где компоненты отображаются в виде сворачивающегося дерева (ComponentsListTVStyle = true).
Предложенный вами вариант позволяет группировать задачи на странице задач. Мне же таким образом нужно группировать компоненты на странице компонентов.

Попробовал просто очистить список компонентов, добавить туда из кода группу, а чуть ниже чекбокс.

WizardForm.ComponentsList.Clear;
WizardForm.ComponentsList.AddGroup('УРОВЕНЬ1','',0,nil);
WizardForm.ComponentsList.AddCheckBox('УРОВЕНЬ2','',1,false,true,false,false,nil);

Получилось так

+Уровень1 (текст)
-Уровень2(чекбокс)

Но при попытке поставить галочку в чекбокс возникает ошибка "Access violation at address 0048BF49. Read of address 00000000"




© OSzone.net 2001-2012