Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> InnoSetup, Тихая установка 
:(
    Опции темы
semiono
Дата 31.12.2007, 02:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Помогите с IS установкой!
Мне нужно считать путь в реестре
HKLM\Software\VST\VSTPluginsPath="путь"
и установить в него сабж в тихом режиме.
Ниодной подходящей функции не нашёл - GetEnv, GetIniBool, GetSystemDir...
 smile 

PM MAIL ICQ Jabber   Вверх
kemiisto
Дата 31.12.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



А что секция [Registry] разве не обрабатывается во время Silent Install?


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Insert
Дата 31.12.2007, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 13.4.2006

Репутация: нет
Всего: 1



RegQueryStringValue - считывает нужное тебе значение в переменную, а потом в секции [Files] пишешь:
DestDir: {code:getpath|''} где getpath функция возвращающая это значение
--------------------
пьяный русский кодер практически непобедим
PM MAIL   Вверх
semiono
Дата 31.12.2007, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Insert, а можно всю процедуру подробно написать тут? Ато не разберусь, хотя и буду пытаться :(

Мне ещё вот что подсказали, возможно и подойдёт для мну тоже:
Код

[Files]
Source: "file.exe"; DestDir: "{reg:HKLM\Software\VST,VSTPluginsPath|DefaultValue}"

Но конечно чем больше информации тем лучше smile

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

Это сообщение отредактировал(а) semiono - 31.12.2007, 19:29
PM MAIL ICQ Jabber   Вверх
kemiisto
Дата 1.1.2008, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



semiono, тебе подсказали очень не плохой вариант!

В секции [Files] в строке типа

Source: "MYPROG.EXE"; DestDir: "{app}"

можно использовать различные константы (здесь, например, использована {app} - папка, в которую пользователь захотел установить прогу). 

Есть среди них (оказывается  smile ) и {reg:HKxx\SubkeyName,ValueName|DefaultValue}. Синтаксис, кажется понятен, понятен, да и в справке описан подробно. (Constants, ближе к концу).

Добавлено через 13 минут и 28 секунд
Ну а ежели б такой константы не было, пришлось бы создать свою (scripted constant).

В отличие от обычных констант они обозначаются с использованием слова code. Синтаксис объявления такой константы следующий: 

{code:FunctionName|Param} 

где: 
FunctionName – имя вызываемой функции; 
Param – строковый параметр, который передается вызываемой функции. Если он будет опущен, вызываемой функции будет передана пустая строка;

Итак, в секции [Files] пишешь:

Source: "file.exe"; DestDir: "{code:MyConst}" 

А в секции [Code] опишем функцию MyConst: 

function MyConst: String;
begin
  RegQueryStringValue(HKLM, 'Software\VST\', 'VSTPluginsPath', Result);
end; 

Видимо, Insert имел ввиду нечто подобное. 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
semiono
Дата 6.1.2008, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Видимо я добрался до самого страшного :\
Нужно указать путь во внешнем файле после установки. Боюсь, что IS этого вообще не может.
Скажем после инсталла имеем C:\zzz\Preference.xml
************************************
<?xml version="1.0" standalone="yes" ?>
<ArtsAcousticReverbPreference Version="1">
<UserPath>???</UserPath>
<PresetPath>???</PresetPath>
</ArtsAcousticReverbPreference>
*************************************
В котором нужно вписать UserPath и PresetPath

И ещё хотелось бы управлять бездиалоговым инсталлером файлом извне, напр.
C:\MyProg.exe - при установке изменяет путь {app}
на тот который указан в
C:\FILE.txt
или INI какойнибуть...
0_o
PM MAIL ICQ Jabber   Вверх
kemiisto
Дата 6.1.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



Цитата
Боюсь, что IS этого вообще не может.
 Ключевое слово - боюсь! Все он может!
Вот так например можно отредактировать твой xml. В конце концов - это обычный набор строк!

Код

procedure DeinitializeSetup();
var
  S: TArrayOfString;
  F: String;
begin
  F := 'C:\zzz\Preference.xml';

  if not FileExists(F) then
    Exit;
    
  LoadStringsFromFile(F, S);
  S[2] := '<UserPath>' + 'something' + '</UserPath>';
  S[3] := '<PresetPath>' + 'something' + '</PresetPath>';
  SaveStringsToFile(F, S, False);
end;


Добавлено через 1 минуту и 48 секунд
А вот дальше я чего-то не понял!
Цитата

И ещё хотелось бы управлять бездиалоговым инсталлером файлом извне, напр.
C:\MyProg.exe - при установке изменяет путь {app}
на тот который указан в
C:\FILE.txt
или INI какойнибуть...


Чуть поподробнее опиши, будь добр! 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
semiono
Дата 6.1.2008, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Невероятно! 0_o
Работает!  smile 
Но почему я когда хелп читаю нифига там не нахожу. Впринцыпе моя проблемма, это ж сначала гуру надо быть в паскале!

kemiisto
с вторым вопросом всё просто, это тоже что и с реестром было

[Files]
Source: "file.exe"; DestDir: "{reg:HKLM\Software\VST,VSTPluginsPath|DefaultValue}"

только в этом случае нужно реестр заменить на файл какогонибудь типа (txt/ini/xml/bat)
лучше конечно ini или просто безформатный текст-файл без расширения

Смысл таков. Я не хочу включать диалоги в инсталлер вообще никакие. Но иногда
может оказаться что нужно изменить путь установки. Поэтому для аварийного
случая инсталлер должен иметь строку "аварийной-запасной установки" которую
он сможет считать из руководящего внешнего файлика.

Типа написал текст-инструкцию, положил рядом с инсталлером и он последовал
этой Unattended-установки.

PM MAIL ICQ Jabber   Вверх
kemiisto
Дата 6.1.2008, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



Инструкцию я бы оформил в виде ini-файла. А потом при инициализации инсталляции считывал бы нужные значения.

Вот пример: 

 

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  semiono.rar 3,96 Kb


--------------------
PM MAIL WWW GTalk Jabber   Вверх
semiono
Дата 7.1.2008, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Я только скачал, а вот здесь
Source: "MyDll.dll"; DestDir: {code:ReadPath}
можно наверное DestDir: {code:ReadPath|Default} как и ранее использовать?...

По ходу дела там ещё возникло, когда XML правил... а нельзя пробел вписывать?
Ибо в XML красивее так было smile

<ArtsAcousticReverbPreference Version="1">
пробел<UserPath>???</UserPath>
пробел<PresetPath>???</PresetPath>

вернее здесь даже Tab-отступы

offtop:
Собсно мы тут подошли к вопросу о том, как букву в "дампе" текста изменить )))
мало пригодно, но всёж интересно теоретически?
[S:n] - это стринги я так понял, а как тогда Rows указать?

kemiisto, спасибо тебе!
Насчёт INI это верно, я вообще любитель INF/INI, XML - это более модно...

Надо мне будет поиграться потом с функциями чтоб закрепить материал...
Я чё-то такой влюблённый стал в InnoSetup, ранее всё мечтал освоить какойнить "язык",
оказалось что IS самый любимый IDE стал для мну! С одной стороны практически полезный,
с другой, действительно возможности при таком маленьком пакете просто поражают!
smile

Это сообщение отредактировал(а) semiono - 7.1.2008, 02:53
PM MAIL ICQ Jabber   Вверх
kemiisto
Дата 7.1.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



По поводу отступов в XML. Теоретически я бы так вот написал:

Код

S[2] := ' <UserPath>' + 'something' + '</UserPath>';
S[3] := ' <PresetPath>' + 'something' + '</PresetPath>'; 


Но почему то не работает  smile Вроде #9 - символ табуляции! Но  в итоге пришлось тупо вставить пробел вместо 

Код

S[2] := ' <UserPath>' + 'something' + '</UserPath>';
S[3] := ' <PresetPath>' + 'something' + '</PresetPath>'; 


Вот так вот! 

P.S. Я в XML не очень то разбираюсь, возможно ошибся!

Добавлено через 2 минуты и 2 секунды
В первом образце кода вместо пробела стоит   но html переформатировал!

Ща еще ращок попробую
  S[2] := ' <UserPath>' + 'something' + '</UserPath>';
  S[3] := ' <PresetPath>' + 'something' + '</PresetPath>';

Добавлено через 3 минуты и 25 секунд
Вот блин, незадача!
Тогда вот так:


Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  setup.iss 1,35 Kb


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Poseidon
Дата 7.1.2008, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(kemiisto @  6.1.2008,  12:51 Найти цитируемый пост)
Ключевое слово - боюсь! Все он может!
Кстати да. Хоче только сделать небольшое дополнение: что не может Inno своими штатными средствами (такого мало, но все же есть) он может с помощью библиотек. Т.е. пишем библиотеку (dll) на любом языке (Delphi, C++ и т.п.), потом в [code] подключаем библиотеку и используем в ней нужную функцию.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
semiono
Дата 4.2.2008, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Нужно создать "новый" файл
{sys}\nuendo.cmd
и вписать в него
Код

@if "%1"=="-h" start nuendo.chm & goto nop
@if "%1"=="-help" start nuendo.chm & goto nop
@start {app}\nuendo.exe %2
:nop

где {app} переменная в InnoSetup!

~
Что то опыт со стрингами, что раньше было мне не помог.
Вопервых, не знаю как пустой файл создать...
Хотя если положить файлик и наполнить строками, то   LoadStringsFromFile(F, S); итд. можно.
Но ведь хочется упростить, чтоб было разумно.

И моя старая фитча тут тоже не прокатила видимо из-за каких-то спец.-слов/символов

[Run]
Filename: "{tmp}\system.cmd"; Parameters: "{app}"
Батник:
Код

echo @if "%%1"=="-h" start nuendo.chm & goto nop> %SystemRoot%\system32\nuendo.cmd
echo @if "%%1"=="-help" start nuendo.chm & goto nop>> %SystemRoot%\system32\nuendo.cmd
echo @start %1\Nuendo.exe %%2>> %SystemRoot%\system32\nuendo.cmd
echo :nop>> %SystemRoot%\system32\nuendo.cmd

smile
?

Вообще-то проблемма только в том как создать файл. Я полазил по хелпу и походу там нету
CreateFile MakeFile или ещё чего. Хотя в Паскале наверняка есть.

Это сообщение отредактировал(а) semiono - 4.2.2008, 00:16
PM MAIL ICQ Jabber   Вверх
kemiisto
Дата 4.2.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



Ну вот так, например:

Код

procedure DeinitializeSetup();
var
  S: TArrayOfString;
  F: String;
begin
  F := {sys}'nuendo.cmd';
  SetArrayLength(S, 4);
  S[0] := '@if "%1"=="-h" start nuendo.chm & goto nop';
  S[1] := '@if "%1"=="-help" start nuendo.chm & goto nop';
  S[2] := '@start ' + ExpandConstant('{app}') + '\nuendo.exe %2';
  S[3] := ':nop';
  SaveStringsToFile(F, S, False);
end;



--------------------
PM MAIL WWW GTalk Jabber   Вверх
semiono
Дата 6.2.2008, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Возвращаясь к пройденному smile
Цитата(kemiisto @ 6.1.2008,  20:26)
Инструкцию я бы оформил в виде ini-файла. А потом при инициализации инсталляции считывал бы нужные значения.


Но нельзяль иметь дело c не INI файлом, а  вот так

{src}\file  (8.1 - без расширения) в ктором юзер может сам написать по желанию:

путь сразу без всяких секций сразу с первой строки? ( Просто как S[0] := )
--------------- [file]
E:\Progra~1\zzz...\aaa
---------------EOF

То-есть файл неопределённого типа, и без оформления...
Типа считать нулевую строку из файла и всё!

Дело в том что для этой цели ini-файл мне кажется избыточным, так как сама задача более
примитивная. Хотя всё итак работает замечательно, просто хотелось бы решить
проблемму более "красиво" ;)

kemiisto, большое спасибо!

PS. наверное из стандартных функций более удобно общатся с INI форматом,
а то что я спросил видимо нужно уже кодить как-то более мудрённо...
Но результат всёж лучше должен оказаться если считывать стрингс вместо секций...
Хотя у меня не получилось самому собрать такую процедуру )

Напомню навсякий случай, что нужно из внешнего файла если он существует считать альтернативный путь установки.

Это сообщение отредактировал(а) semiono - 6.2.2008, 00:55
PM MAIL ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0587 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.