Как узнать в каком ресурсе лежит программа?
-
- партнер
- Сообщения: 28
- Зарегистрирован: Пт, 19/10/2007 11:49
- Имя Фамилия: Петр Кузьмин
- Откуда: ЗАО "Галактика Про"
- Контактная информация:
Как узнать в каком ресурсе лежит программа?
В Галактике есть пункт меню запуск внешнего интерфейса. Он открывает список программ, в котором рядом с именем интерфейса в скобочках отображается имя ресурса. Вопрос: как получить имя ресурса в программе на VIP-е? Это нужно для диагностики проблем с подключением ресурсов клиентом. Как мне кажется нужная информация содержится в объекте типа TResourcer. Я готов написать DLL, если поможете разобраться с TResourcer.
-
- партнер
- Сообщения: 28
- Зарегистрирован: Пт, 19/10/2007 11:49
- Имя Фамилия: Петр Кузьмин
- Откуда: ЗАО "Галактика Про"
- Контактная информация:
Например, такой случай, клиент переименовывает наши ресурсы (зачем это отдельная история) и подключает одно и то же, но разных версий несколько раз из разных мест. В результате, разобраться какая все-таки версия программы работает, без непосредственного прибытия на место, невозможно.
Просто хотелось бы иметь связь исполняемый интерфейс VIP -> физический файл. Тем более, что эта информация уже имеется (запуск внешнего интерфейса), только почему-то нет функций доступа к ней из VIP. Получается искусственный разрыв между программой и файлом. Мне бы простенький пример DLL где объект типа TResourcer правильно загружается/выгружается, а дальше сам методом научного тыка. Кроме того, в 7.12 были функции AddResourceByName/FreeResourceByName. Как же мне их не хватает в 8.1 для отладки, а ведь это тоже работа с TResourcer? Надеюсь, я не вторгаюсь в область интимного, это не секретная системная информация?
Просто хотелось бы иметь связь исполняемый интерфейс VIP -> физический файл. Тем более, что эта информация уже имеется (запуск внешнего интерфейса), только почему-то нет функций доступа к ней из VIP. Получается искусственный разрыв между программой и файлом. Мне бы простенький пример DLL где объект типа TResourcer правильно загружается/выгружается, а дальше сам методом научного тыка. Кроме того, в 7.12 были функции AddResourceByName/FreeResourceByName. Как же мне их не хватает в 8.1 для отладки, а ведь это тоже работа с TResourcer? Надеюсь, я не вторгаюсь в область интимного, это не секретная системная информация?
-
- партнер
- Сообщения: 28
- Зарегистрирован: Пт, 19/10/2007 11:49
- Имя Фамилия: Петр Кузьмин
- Откуда: ЗАО "Галактика Про"
- Контактная информация:
Правильным можно считать ресурс, прописанный в репозитарии (наши ресурсы находятся в отдельной группе), а не правильными ресурсы типа: user.res, debug.res, сам_не_знаю_что_это_но_подключил.res, Atlantis_Пупкин.res. Как раз для определения соответствия репозитарию и нужна эта возможность.
Пока мы дискутируем, у меня получилось собрать DLL на примере BitmapList. Все оказалось поразительно просто. Мне бы теперь описание методов TResourcer, если оно есть.
Пока мы дискутируем, у меня получилось собрать DLL на примере BitmapList. Все оказалось поразительно просто. Мне бы теперь описание методов TResourcer, если оно есть.
-
- топ-софт
- Сообщения: 566
- Зарегистрирован: Пт, 21/09/2007 15:19
- Имя Фамилия: Фёдор Терсин
- Откуда: Галактика Софт
- Контактная информация:
Т.е. вы запрещаете пользователям конфигурировать ваше решение? Интересный подход.
Дискутируем мы не понапрасну. Цель - выяснить, для чего же всё это нужно, и, если затребованный способ не очень хорош, предложить другой, более правильный.
В частности, есть следующие более правильные способы:
В сочетании с мерами, устраняющими переименовывание ресурса клиентами.
Мерами как по организации собственного производства, так и по обучению администраторов клиента.
Если же приведенные выше достаточно разумные и более правильные альтернативы будут вами отвергнуты и не пригодятся:
- интерфейс нужных объектов в atresource.int;
- подключать нужно objectcs;
- сам ресурсер загружать не надо, надо ковыряться в текущем, возвращается ф-цией resourcer, объявлена в упомянутом int;
- искомый метод: FirstContaining;
- далее у результата надо вызвать GetName.
Если не интересует расширенная информация об объекте, которая может возвращаться методом FirstContaining, то всё это можно написать на vip'е.
Дискутируем мы не понапрасну. Цель - выяснить, для чего же всё это нужно, и, если затребованный способ не очень хорош, предложить другой, более правильный.
В частности, есть следующие более правильные способы:
- Маркировка своих ресурсов версией и получение отчёта о системе от клиента.
В отчёте подключенные ресурсы выводятся в порядке старшинства.
Если выбрать номер версии, заведомо отличающийся от номеров версий ресурсов Галактики и Атлантиса, то свои ресурсы легко будет идентифицировать среди полного перечня.
А порядок даст ответ на вопрос - откуда же грузится искомый объект.
Минус - всё то же конфигурирование. - Объявление obj-интерфейса, имеющего метод, возвращающий версию объекта, и реализация этого obj-интерфейса каждым интерфейсом (версией может служить и дата сборки, например, есть соответствующий макрос).
Теперь достаточно загрузить интересуемый объект, вызывать ему этот метод, и получить версию.
Далее, по вышеупомянутому отчёту узнать, откуда же он загрузился (по дате ресурса или, что лучше, по маркировке версией) или, внимание, на основе чего он был сконфигурирован!
Минус - не подходит для отчётов (впрочем, насколько я понимаю, это и не нужно).
В сочетании с мерами, устраняющими переименовывание ресурса клиентами.
Мерами как по организации собственного производства, так и по обучению администраторов клиента.
Если же приведенные выше достаточно разумные и более правильные альтернативы будут вами отвергнуты и не пригодятся:
- интерфейс нужных объектов в atresource.int;
- подключать нужно objectcs;
- сам ресурсер загружать не надо, надо ковыряться в текущем, возвращается ф-цией resourcer, объявлена в упомянутом int;
- искомый метод: FirstContaining;
- далее у результата надо вызвать GetName.
Если не интересует расширенная информация об объекте, которая может возвращаться методом FirstContaining, то всё это можно написать на vip'е.
-
- партнер
- Сообщения: 28
- Зарегистрирован: Пт, 19/10/2007 11:49
- Имя Фамилия: Петр Кузьмин
- Откуда: ЗАО "Галактика Про"
- Контактная информация:
Спасибо за информацию и предложения.
1. Большинство программ сделаны под конкретного клиента, поэтому конфигуратор не актуален (проще нам подправить, чем клиенту поддерживать конфигурацию).
2. Задавать версию ресурсу хорошая возможность, но это ложиться на программиста, а он тоже человек и может ошибиться, забыть и т.д. Хотелось бы автоматом.
3. Идея реализовывать во всех программах стандартный интерфейс приходила ко мне не раз, но это дополнительные затраты при разработке новых программ и что самое страшное доработка всех существующих. Однако все-таки это лучшее решение, и мы им воспользуемся, но само по себе оно не решает поставленной проблемы. Дело в том, что все ваши предложения предполагают ручной анализ пользователем (формирование отчетов, поиск информации и т.д.), как раз в этом вся проблема. При наличии желания и элементарных знаний можно разобраться и существующими средствами, найти программу по имени в окне "запуск внешнего интерфейса" не проблема (для меня, но не для пользователя).
Суть затеи состоит в создании информационно-диагностической программы, которая сама умеет проводить выше описанный анализ всех наших программ доступных клиенту и информировать пользователя о проблемах, предлагать пути решения. Кроме подключения она будет проверять и ряд других проблем (например, наличие необходимых пользовательских таблиц в словаре). Поэтому мне нужен программный доступ к информации о физическом файле, она замкнет треугольник программа->репозитарий->ресурс.
1. Большинство программ сделаны под конкретного клиента, поэтому конфигуратор не актуален (проще нам подправить, чем клиенту поддерживать конфигурацию).
2. Задавать версию ресурсу хорошая возможность, но это ложиться на программиста, а он тоже человек и может ошибиться, забыть и т.д. Хотелось бы автоматом.
3. Идея реализовывать во всех программах стандартный интерфейс приходила ко мне не раз, но это дополнительные затраты при разработке новых программ и что самое страшное доработка всех существующих. Однако все-таки это лучшее решение, и мы им воспользуемся, но само по себе оно не решает поставленной проблемы. Дело в том, что все ваши предложения предполагают ручной анализ пользователем (формирование отчетов, поиск информации и т.д.), как раз в этом вся проблема. При наличии желания и элементарных знаний можно разобраться и существующими средствами, найти программу по имени в окне "запуск внешнего интерфейса" не проблема (для меня, но не для пользователя).
Суть затеи состоит в создании информационно-диагностической программы, которая сама умеет проводить выше описанный анализ всех наших программ доступных клиенту и информировать пользователя о проблемах, предлагать пути решения. Кроме подключения она будет проверять и ряд других проблем (например, наличие необходимых пользовательских таблиц в словаре). Поэтому мне нужен программный доступ к информации о физическом файле, она замкнет треугольник программа->репозитарий->ресурс.
-
- заказчик
- Сообщения: 46
- Зарегистрирован: Вт, 13/01/2009 10:52
- Имя Фамилия: Сергей Головчак
- Откуда: Гипротрубопровод
Фёдор Терсин
Вот честно говоря даже не знаю что ответить...
Если есть сомнения в понимании назначения
Если сомнения в том, что оно мне нужно, то могу уверить - для меня это нужная вещь в обиходе.
К чему вопрос? Не понимаю...
Вот честно говоря даже не знаю что ответить...
Если есть сомнения в понимании назначения
то могу уверить, что я понимаю о чем идет речь.Имя ресурса получил! Ура! Функция смешно сказать из 4-х строк.
Если сомнения в том, что оно мне нужно, то могу уверить - для меня это нужная вещь в обиходе.
К чему вопрос? Не понимаю...