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-04-03 06:25:00) [1]

> [52] Leonid Troyanovsky ©   (26.03.09 20:36)
> Ну, это, ясное дело, речь про BDS :)

Я тож такой магический кристал хочу :)
$(DELPHI) осталось неизменной во всех версиях (Delphi7, Turbo, 2006, 2007, 2009),
даже в тех, где она(переменная) не используется :)
Соответственно, может служить индикатором.

Если кому интересно:
Задачка решилась следующим образом:
Запускаем среду в суспендед режиме.
Добавляем APC процедурку, в котрой подгружаем библиотекку, перехватывающую RtlSetEnvironmentVariable.
Резьюмим процесс.
Ждем добавления в блок окружения $(DELPHI) и активизируем Event окончания работы.
Во всех версиях, в этот момент блок переменных уже полностью сформирован.
Вытаскиваем его и наслаждаемся жизнью :)


Leonid Troyanovsky   (2009-03-26 20:36:00) [2]


> Riply ©   (23.03.09 09:32)  

> Т.е. нам надо получить как значения данных переменных, так
> и их имена (например BDSUSERDIR).

Одну из загадок разгадать можно: byDelphi help: Search|Find in Files:
To search for files in the product root directory, use $(DELPHI) to specify the
directory. For example, to search all the include files, use $(DELPHI)\include;
to search the examples directories, use $(DELPHI)\demos\*.pas.

Ну, это, ясное дело, речь про BDS :)

--
Regards, LVT.


Eraser   (2009-03-25 18:59:00) [3]

небольшой оффтоп, раз уже про png заговорили.
кто знает, как с помощью стандартного TPngImage сохранить картинку в формате png-8?


Rouse_   (2009-03-25 18:09:00) [4]


> atruhin ©   (25.03.09 17:59) [47]
>
> > [43] Rouse_ ©   (25.03.09 17:34)
>
> Еще на одном файле, из этой же библиотеки спотыкается. Отправил.
>

Угу, спасибо...
Тут сам файл с ошибкой: 329-ая строка...
Одна кавычка.
 EPNGCannotAssignChunkText = Koљcki morajo biti med seboj kompatibilni za prireditev vrednosti.';


Palladin   (2009-03-25 18:04:00) [5]


> Удачи. Лет через 5 вернемся к дискуссии

Записал себе в календарь на смарте :)


Игорь Шевченко   (2009-03-25 18:02:00) [6]

atruhin ©   (25.03.09 17:59) [47]


> формировал бы еще html с гиперссылками.


вроде формирует. Вроде можно в его простыню мышью тыкать и произойдет переход.


atruhin   (2009-03-25 17:59:00) [7]

> [43] Rouse_ ©   (25.03.09 17:34)

Еще на одном файле, из этой же библиотеки спотыкается. Отправил.

> [42] Игорь Шевченко ©   (25.03.09 17:33)
> потому как есть Icarus от Peganza

Попробовал. Отработал нормально, нашел все модули, но как разбираться в этом файле, почти 600 кб.?
Каждый модуль искать поиском, смотреть и искать опять? Ни перекресных ссылок, ни фильтрации. :(
А так, при нужде, хороший продукт, формировал бы еще html с гиперссылками.


Игорь Шевченко   (2009-03-25 17:47:00) [8]

Rouse_ ©   (25.03.09 17:39) [44]


> Анализатор проекта который будет отображать взаимосвязи,
>  искать ненужные (лишние) uses, показывать места в коде
> где именно применяется определенный модуль из юзесов.
> Все это только для облегчения рефакторинга в сложных проектах.
> ..


Удачи. Лет через 5 вернемся к дискуссии


Rouse_   (2009-03-25 17:42:00) [9]

Ах, ну да - все это хочется сделать таким образом чтобы перед глазами сразу выстраивалась четкая картинка на одном экране без лишней информации и не нужно было проходить через дебри данных пытаясь понять что к чему.


Rouse_   (2009-03-25 17:39:00) [10]


> А какой, кстати, функционал планируется ?
>
> Другими словами, зачем вы это делаете ? :)

Пфф... Анализатор проекта который будет отображать взаимосвязи, искать ненужные (лишние) uses, показывать места в коде где именно применяется определенный модуль из юзесов.
Все это только для облегчения рефакторинга в сложных проектах...
Пока написан только каркас, но несмотря на это даже в таком виде этот каркас смог помочь нам более менее понять как надо рефакторить весь наш зоопарк.
Если придумать, как это сделать максимально юзабельно, то может что-то и публичное получиться.


Rouse_   (2009-03-25 17:34:00) [11]


> atruhin ©   (25.03.09 17:26) [41]

Угу посмотрел, падает на последней строчке:
//862fd5d6aa1a637203d9b08a3c0bcfb0
Он считает ее коментарием (что логично) и ищет конца строки (CRLF) которого нет...
ЗЫ: а вообще раньше на сколько я помню если писать коментарии после END.выводился ворнинг :)


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

atruhin ©   (25.03.09 17:24) [39]


> 1. там довольно неудобное представление, по крайней мере
> я не нашел как вывести весь список используемых модулей.
>
> (если это возможно подскажите, а то у меня отображает только
> в виде дерева от модулей напрямую включенных в проект)


Во-первых, я этим экспертом не пользуюсь (потому как есть Icarus от Peganza)
Во-вторых, GExperts сейчас у меня не установлен - увы, помочь не могу, а устанавливать не хочу.

Rouse_ ©   (25.03.09 17:13) [37]

А какой, кстати, функционал планируется ?

Другими словами, зачем вы это делаете ? :)


atruhin   (2009-03-25 17:26:00) [13]

> [37] Rouse_ ©   (25.03.09 17:13)

Файлик отправил, вообще он из стандарной http://pngdelphi.sourceforge.net


Rouse_   (2009-03-25 17:24:00) [14]


> а паутина из даже не 500, а 50 модулей - натурально юзабельно.

Ну так там-же фильтруется все при выборе модуля из левого списка :)

Ладно, чего спорить-то, функционала у утилиты сейчас все равно сильно толкового нет, поэтому...


atruhin   (2009-03-25 17:24:00) [15]

> [33] Игорь Шевченко ©   (25.03.09 16:29)
> Главная причина - это то, что такая функциональность есть
> в GExperts, ESSModel (вроде бы) и в продуктах Peganza.

О ESSModel, Peganza не знаю, а что касается GExpert:
1. там довольно неудобное представление, по крайней мере я не нашел как вывести весь список используемых модулей.
(если это возможно подскажите, а то у меня отображает только в виде дерева от модулей напрямую включенных в проект)
2. У меня он не увидел половину модулей.


Игорь Шевченко   (2009-03-25 17:19:00) [16]


> Это абсолютно не юзабельно, у нас более 500 модулей на каждый
> проект... ничего понять в таком виде не возможно :(


а паутина из даже не 500, а 50 модулей - натурально юзабельно.
Впрочем, что я буду советовать - делай, как считаешь нужным :)
Я ж говорю - внутри конторы оно может и ничего, если напильником доработать.


Rouse_   (2009-03-25 17:13:00) [17]


> Как в Icarus-е например - длинное полотно с гиперссылками.

Это абсолютно не юзабельно, у нас более 500 модулей на каждый проект... ничего понять в таком виде не возможно :(


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

Rouse_ ©   (25.03.09 16:47) [34]


> Ибо не понятно как это все дело представить пользователю
> в юзабельном виде


Как в Icarus-е например - длинное полотно с гиперссылками.

Riply ©   (25.03.09 17:05) [35]


> А можно сказать пользователю: "сам наплодил столько связей
> - сам и разбирайся" :)


В этом случае ценность вашего творчества стремится не к нулю, а к минус бесконечности.


Riply   (2009-03-25 17:05:00) [19]

> [34] Rouse_ ©   (25.03.09 16:47)

> Вот это и есть главная причина :)
> Ибо не понятно как это все дело представить пользователю в юзабельном виде

Нарисовать трехмерную, вращающуюся картинку
или лабиринт, по которому можно гулять :)
А можно сказать пользователю: "сам наплодил столько связей - сам и разбирайся" :)


Rouse_   (2009-03-25 16:47:00) [20]


> иллюстрацию на тему творчеста пауков.

Вот это и есть главная причина :) Ибо не понятно как это все дело представить пользователю в юзабельном виде, поэтому я и ограничил построением связей от корня до конечного только одного юнита :)


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

Наверх

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