Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]
Здравствуйте. Как сделать чтоб файл распаковывался в C:\Users\имя пользователя\AppData\Local\ ?. Я ставлю {userappdata}, но он распаковывает в C:\Users\имя пользователя\AppData\Roaming\ . Пробовал еще {userprofile}, но с ним вообще ошибку выдает.
А сайт 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 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
Это ж строка. Нужно так: »
Можно проще ;) :
Checked := ExpandConstant('{param:Check|}') = '1';
El Sanchez
27-05-2012, 20:00
Можно проще »
Serega, не пойдет. Свойство Checked будет False при любых значениях параметра Check, кроме 1. Зависимость состояния чекбокса от значения параметра Check должна быть однозначной.
Свойство Checked будет False при любых значениях параметра Check, кроме 1 »
El Sanchez, а в приведённом тобой коде будет что-то другое ;) ?
Просто свойство Checked, по умолчанию := False...
Ivan_009
27-05-2012, 20:29
Как в ISVideo сделать кнопки Пауза,Старт,Стоп на if CurPageID=wpInstalling then :unsure: вот скрипт
У кого остался скрипт, чтобы маскировать установщик в NSIS? Благодарю заранее.
Creator000
28-05-2012, 00:12
как проследить что и куда копирует установщик?
PS
что дает команда •ArchitecturesInstallIn64BitMode*? а то ваша справка глючит.
Как сделать так, чтобы путь к установки брался из файла .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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.