Как узнать в каком ресурсе лежит программа?

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

Peter
партнер
Сообщения: 28
Зарегистрирован: Пт, 19/10/2007 11:49
Имя Фамилия: Петр Кузьмин
Откуда: ЗАО "Галактика Про"
Контактная информация:

Как узнать в каком ресурсе лежит программа?

Сообщение Peter »

В Галактике есть пункт меню запуск внешнего интерфейса. Он открывает список программ, в котором рядом с именем интерфейса в скобочках отображается имя ресурса. Вопрос: как получить имя ресурса в программе на VIP-е? Это нужно для диагностики проблем с подключением ресурсов клиентом. Как мне кажется нужная информация содержится в объекте типа TResourcer. Я готов написать DLL, если поможете разобраться с TResourcer.
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

А в чём именно будет состоять диагностика "проблем с подключением ресурсов клиентом"?
Peter
партнер
Сообщения: 28
Зарегистрирован: Пт, 19/10/2007 11:49
Имя Фамилия: Петр Кузьмин
Откуда: ЗАО "Галактика Про"
Контактная информация:

Сообщение Peter »

Например, такой случай, клиент переименовывает наши ресурсы (зачем это отдельная история) и подключает одно и то же, но разных версий несколько раз из разных мест. В результате, разобраться какая все-таки версия программы работает, без непосредственного прибытия на место, невозможно.
Просто хотелось бы иметь связь исполняемый интерфейс VIP -> физический файл. Тем более, что эта информация уже имеется (запуск внешнего интерфейса), только почему-то нет функций доступа к ней из VIP. Получается искусственный разрыв между программой и файлом. Мне бы простенький пример DLL где объект типа TResourcer правильно загружается/выгружается, а дальше сам методом научного тыка. Кроме того, в 7.12 были функции AddResourceByName/FreeResourceByName. Как же мне их не хватает в 8.1 для отладки, а ведь это тоже работа с TResourcer? Надеюсь, я не вторгаюсь в область интимного, это не секретная системная информация?
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

А как поможет знание того, что интерфейс грузится из ресурса ХХХ, если клиентам поставлялись разные сборки ресурса РРР?
А если пользователь отконфигурит интерфейс, то он будет грузится из конфигурационного ресурса, причём информации о том, откуда он туда попал, не будет.
Peter
партнер
Сообщения: 28
Зарегистрирован: Пт, 19/10/2007 11:49
Имя Фамилия: Петр Кузьмин
Откуда: ЗАО "Галактика Про"
Контактная информация:

Сообщение Peter »

Правильным можно считать ресурс, прописанный в репозитарии (наши ресурсы находятся в отдельной группе), а не правильными ресурсы типа: user.res, debug.res, сам_не_знаю_что_это_но_подключил.res, Atlantis_Пупкин.res. Как раз для определения соответствия репозитарию и нужна эта возможность.
Пока мы дискутируем, у меня получилось собрать DLL на примере BitmapList. Все оказалось поразительно просто. Мне бы теперь описание методов TResourcer, если оно есть.
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

Т.е. вы запрещаете пользователям конфигурировать ваше решение? Интересный подход.

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

В частности, есть следующие более правильные способы:
  1. Маркировка своих ресурсов версией и получение отчёта о системе от клиента.
    В отчёте подключенные ресурсы выводятся в порядке старшинства.
    Если выбрать номер версии, заведомо отличающийся от номеров версий ресурсов Галактики и Атлантиса, то свои ресурсы легко будет идентифицировать среди полного перечня.
    А порядок даст ответ на вопрос - откуда же грузится искомый объект.
    Минус - всё то же конфигурирование.
  2. Объявление obj-интерфейса, имеющего метод, возвращающий версию объекта, и реализация этого obj-интерфейса каждым интерфейсом (версией может служить и дата сборки, например, есть соответствующий макрос).
    Теперь достаточно загрузить интересуемый объект, вызывать ему этот метод, и получить версию.
    Далее, по вышеупомянутому отчёту узнать, откуда же он загрузился (по дате ресурса или, что лучше, по маркировке версией) или, внимание, на основе чего он был сконфигурирован!
    Минус - не подходит для отчётов (впрочем, насколько я понимаю, это и не нужно).
Вышеупомянутые способы куда лучше ручного ковыряния в ресурсере, и я бы рекомендовал именно их.
В сочетании с мерами, устраняющими переименовывание ресурса клиентами.
Мерами как по организации собственного производства, так и по обучению администраторов клиента.

Если же приведенные выше достаточно разумные и более правильные альтернативы будут вами отвергнуты и не пригодятся:
- интерфейс нужных объектов в atresource.int;
- подключать нужно objectcs;
- сам ресурсер загружать не надо, надо ковыряться в текущем, возвращается ф-цией resourcer, объявлена в упомянутом int;
- искомый метод: FirstContaining;
- далее у результата надо вызвать GetName.

Если не интересует расширенная информация об объекте, которая может возвращаться методом FirstContaining, то всё это можно написать на vip'е.
Peter
партнер
Сообщения: 28
Зарегистрирован: Пт, 19/10/2007 11:49
Имя Фамилия: Петр Кузьмин
Откуда: ЗАО "Галактика Про"
Контактная информация:

Сообщение Peter »

Спасибо за информацию и предложения.
1. Большинство программ сделаны под конкретного клиента, поэтому конфигуратор не актуален (проще нам подправить, чем клиенту поддерживать конфигурацию).
2. Задавать версию ресурсу хорошая возможность, но это ложиться на программиста, а он тоже человек и может ошибиться, забыть и т.д. Хотелось бы автоматом.
3. Идея реализовывать во всех программах стандартный интерфейс приходила ко мне не раз, но это дополнительные затраты при разработке новых программ и что самое страшное доработка всех существующих. Однако все-таки это лучшее решение, и мы им воспользуемся, но само по себе оно не решает поставленной проблемы. Дело в том, что все ваши предложения предполагают ручной анализ пользователем (формирование отчетов, поиск информации и т.д.), как раз в этом вся проблема. При наличии желания и элементарных знаний можно разобраться и существующими средствами, найти программу по имени в окне "запуск внешнего интерфейса" не проблема (для меня, но не для пользователя).

Суть затеи состоит в создании информационно-диагностической программы, которая сама умеет проводить выше описанный анализ всех наших программ доступных клиенту и информировать пользователя о проблемах, предлагать пути решения. Кроме подключения она будет проверять и ряд других проблем (например, наличие необходимых пользовательских таблиц в словаре). Поэтому мне нужен программный доступ к информации о физическом файле, она замкнет треугольник программа->репозитарий->ресурс.
Peter
партнер
Сообщения: 28
Зарегистрирован: Пт, 19/10/2007 11:49
Имя Фамилия: Петр Кузьмин
Откуда: ЗАО "Галактика Про"
Контактная информация:

Сообщение Peter »

Имя ресурса получил! Ура! Функция смешно сказать из 4-х строк.

Еще не подскажете, как подключить ресурс после загрузки Галактики, хочу реанимировать AddResourceByName.
m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Сообщение m0p3e »

Петр Кузьмин
Поделитесь с общественностью технологией.
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

Сергей Головчак
А вам-то это зачем? Для решения каких задач?
m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Сообщение m0p3e »

Фёдор Терсин
Странный вопрос. Для тех же целей. Понять из какого ресурса был подгружен интерфейс. Или такая информация может потребоваться только партнерам?
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

Сергей Головчак
Я понимаю, что для тех же целей. Я не понимаю, почему у вас возникают эти цели???
m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Сообщение m0p3e »

Бывает, что интерфейс/докомпиляция лезет из какого-нибудь debug.res, user.res. И инструмент контроля не помешает.

Не только партнеры занимаются доработками.
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Сообщение cruger »

Я понимаю, что не только партнёры занимаются доработками. Суть в другом.

Что за инструмент контроля? Что он должен делать? Запрещать использование user.res? Так может его проще в репозитарии отключить?
m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Сообщение m0p3e »

Фёдор Терсин
Вот честно говоря даже не знаю что ответить...
Если есть сомнения в понимании назначения
Имя ресурса получил! Ура! Функция смешно сказать из 4-х строк.
то могу уверить, что я понимаю о чем идет речь.
Если сомнения в том, что оно мне нужно, то могу уверить - для меня это нужная вещь в обиходе.
К чему вопрос? Не понимаю...
Ответить