Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получение EnvironmentStrings среды.


Страницы:   1 2 3

Riply ©   (2009-03-23 09:32:00) 

Здравствуйте !

Задача такая:
при обычном старте приложения получить(создать)
такой же EnvironmentBlock, как и при запуске из под среды.
На руках имеем только путь в реестре к данной среде, например 'Software\Borland\BDS\4.0\';

Дело в том, что при обычном старте не удается "проэкспандить", например, строку такого вида:
'%BDS%\lib;%BDSUSERDIR%\Imports;%BDS%\Imports;%BDS%\Lib\Indy10;%BDSCOMMONDIR%\Dcp;%BDS%\include;%BDS%\RaveReports\Lib'
что при работе из под среды проходит на ура :)
Т.е. нам надо получить как значения данных переменных, так и их имена (например BDSUSERDIR).

Если бы нам удалось создать этот блок, то мы могли бы спокойно "экспандить"
нужные нам пути, хотя бы с помощью RtlExpandEnvironmentStrings_U, которая первым параметром
может принимать данный блок (если я все правильно понимаю)

Порбовала поступать так:
находим DCC32.EXE соответствующей среды, запускаем его в SUSPENDED режиме
и "вытаскиваем" из него его EnvironmentBlock.
Я расчитывала на то, что раз он умеет собирать проекты, то должен и уметь "экспандить".
Меня постигла неудача: его блок не содержит необходимых переменных.

Есть еще интересный с этой точки зрения файл: CodeGear\RAD Studio\6.0\bin\rsvars.bat
с таким содержанием:
@SET BDS=C:\Program Files\CodeGear\RAD Studio\6.0
@SET BDSCOMMONDIR=C:\Documents and Settings\All Users\Documents\RAD Studio\6.0
@SET FrameworkDir=C:\WINDOWS\Microsoft.NET\Framework\
@SET FrameworkVersion=v2.0.50727
@SET FrameworkSDKDir=
@SET PATH=%FrameworkDir%%FrameworkVersion%;%FrameworkSDKDir%;%PATH%


но, с сожалению он присутствует не во всех версиях (например его нет в 2006)

Подскажите, пожалуйста, как еще можно извратиться для решения данной задачи ? :)

P.S.
Riply ворчит: наш форум так часто стал бывать "недоступным",
               что уже вопрос задать - целая эпопея.  :)


Riply   (2009-03-25 13:31:00) [41]

> [8] oxffff ©   (25.03.09 11:39)

> Меня собственно интересует сам парсер, где его можно посмотреть, кто автор этого парсера

Автор всего этого безобразия - Rouse_.
По всем вопросам к нему :)


oxffff   (2009-03-25 13:08:00) [42]

Спасибо. Будем писать свое.


Игорь Шевченко   (2009-03-25 12:55:00) [43]

Rouse_ ©   (25.03.09 12:44) [10]


> Интересная поделка, но она не смогла пропарсить ни один
> из наших текущих проектов


Это о чем говорит ?


Rouse_   (2009-03-25 12:44:00) [44]


> Игорь Шевченко ©   (25.03.09 11:54) [9]
>
> www.peganza.com

Интересная поделка, но она не смогла пропарсить ни один из наших текущих проектов, только какие-то простенькие вещи кушает :)


Игорь Шевченко   (2009-03-25 11:54:00) [45]

www.peganza.com


oxffff   (2009-03-25 11:39:00) [46]


> Riply ©   (25.03.09 11:23)


Меня собственно интересует сам парсер, где его можно посмотреть, кто автор этого парсера, на какой грамматике основан LL или LR.


Riply   (2009-03-25 11:23:00) [47]

> [6] oxffff ©   (25.03.09 09:44)
> Позвольте узнать что это за парсер.

Нуу..., примерно, что-то такое:
Дается нам dpr - файл (и возможно путь к среде)
Требуется пролучить всю возможную информацию о проекте
(списик всего что он использует, взамиосвязи и т.д. и т.п.)


oxffff   (2009-03-25 09:44:00) [48]


> Жизнь заставила при попытке повозиться с "dpr-парсилкой"
> :)


Позвольте узнать что это за парсер.


Riply   (2009-03-24 16:55:00) [49]

[1] Юрий Зотов ©   (23.03.09 17:11)
> Можно так:

Спасибо.
Примерна так и поступила, только постаралась избавить себя от
"Полученный файл ручками превращаем в батник" ибо очень ленивая не люблю что-то делать руками :)

При старте под средой сохраняю EnvironmentBlock в файл.
При "простом" старте считываю соответствующий файл в память и
передаю указатель в RtlExpandEnvironmentStrings_U.
Вроде, все работает, но мне не нравиться
т.к. хоть раз да надо запустить среду для создания данного файла.

> [2] Игорь Шевченко ©   (23.03.09 23:34)

> А зачем так извращаться ?

Жизнь заставила при попытке повозиться с "dpr-парсилкой" :)


Rouse_   (2009-03-24 09:49:00) [50]

Эмм, пардон... про парсер было написано на другом форуме :)
Тут действительно этого нет :)


Rouse_   (2009-03-24 09:27:00) [51]


> А зачем так извращаться ?

Там вверху написано было, данные необходимы для парсера проектов, который без переменных окружения среды полноценно не сможет работать...


Игорь Шевченко   (2009-03-23 23:34:00) [52]


> при обычном старте не удается "проэкспандить", например,
>  строку такого вида:
> '%BDS%\lib;%BDSUSERDIR%\Imports;%BDS%\Imports;%BDS%\Lib\Indy10;
> %BDSCOMMONDIR%\Dcp;%BDS%\include;%BDS%\RaveReports\Lib'


А зачем так извращаться ?


Юрий Зотов   (2009-03-23 17:11:00) [53]

Можно так:

1. Пишем вспомогательную программу, выводящую environment-переменные в файл (аналог команды set > env_vars.txt)

2. Запускаем эту вспомогательную программу из-под IDE.

3. Полученный файл ручками превращаем в батник с набором команд set:
set имя=значение

4. В начало этого батника пишем команду @echo off, а в конец - запуск нужной программы.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо