![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получение EnvironmentStrings среды.
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, а в конец - запуск нужной программы.