Не удалось зарегистрировать библиотеку типов config tlb 1с
If you decide to compile the add in yourself, please follow these steps:
- Register CHLib.tlb found in Interfaces sub folder
- Register WinAPIForVB.tlb
- Build CHGlobal.vbp
- Build CHCore.vbp
- Build all the vbp in plugins sub folder, place the compiled dll of each plugin in "plugins"
sub folder where the CHCore.dll resides.
Регистрирую, используя regasm
(из состава сборки FrameWork 2.0 (4.0))
Открываю консоль с повышенными привилегиями. Пишу:
Может какие ключи нужно задавать?
*.tlb файлы - как их делать и как они работают .
Дело в том что имеется куча плезных *.tlb файлов - а вот как их сделать самостоятельно - еслия хочу.
Как правильно зарегистрировать пайпел?
Доброго времени суток, подскажите , как правильно зарегистрировать пайпел. 1. на какую.
Как правильно зарегистрировать домена?
Привет CyberForum! Как правила, я не понял и не пойму. Например, объём диска, трафик и.
Как правильно зарегистрировать тип?
Есть класс var MyPanel=Ext.extend(Ext.Panel, < . >Как при таком наследовании.
Решение
RegisterTypeLib
RegisterTypeLibForUser
LoadTypeLibEx
Вроде regtlib регистрирует tlb, возможности нет сейчас проверить. При подключении в References она также регистрируется.
vbRegTLB by Steve McMahon.
Как "декомпилировать" TLB -> ODL:
- качаете PEBrowse Professional
- File -> Open File. -> xxx.TLB
- TypeLib -> Правый клик -> ODL for TypeLib.
Добавлено через 8 минут
Как скомплировать ODL (Object Description Language) или IDL (Interface Definition Language).
Компиляторы - MkTypLib.exe, MIDL.exe.
Например, через встроенный в VB6 будет так:
"%SystemDrive%\Program Files (x86) \Microsoft Visual Studio\VC98\Bin\midl.exe" Ntoskrnl.idl
Например, с помощью Microsoft OLE/COM Object Viewer (oleview.exe).
Можно найти в Windows Resource Kit 2003. Не забудьте прихватить библиотеку iviewers.dll
Набор самых различных интерфейсов в уже скомпилированном виде, в том числе примеры использования некоторых из них. Вот, к примеру, распаковка ZIP и другие примеры с ZIP.
Для регистрации этих библиотек через regtlib.exe написал батник. Качаете из архива. Запуск "От имени администратора" файла regAll.bat
Файлы TLB будут скопированы в папки c:\windows\system32 и c:\windows\sysWow64 (в зависимости от разрядности системы)
После этого в References проекта нужно подключить из системного каталога файлы olelib.tlb, olelib2.tlb
Интерфейсы теперь будут доступны и как подсказка из всплывающего меню при наборе команд.
Кроме них, также появятся:
- перечисления
- константы
- описания типов
Если возникает проблема с подключением TLB через References (бывает и такое),
Вы можете:
- попробовать запустить проект с повышенными привилегиями
- открыть блокнотом свой файл проекта .vbp и прописать в нем такие ссылки:
Порядок расположения ссылок имеет значение.
Как видно выше, в архив я включил еще библиотеки:
- GDI+
- Win32
Это бонусом.
Win32 - включает в себя описания некоторых системных структур, перечислений и API-функций.
Подключение TLB к проекту никак не влияет на запуск программы на другой системе.
Эти библиотеки после компиляции будут не нужны и на другом ПК никакой дополнительной регистрации не потребуется.
В большинстве случаев никаких проблем с этой библиотекой не наблюдается - обновлятор сам автоматически регистрирует и использует библиотеку нужной версии 1с, но изредка возникают случаи (в основном на серверных ОС), когда требуются "пляски с бубном".
Как понять, что у нас проблемы с COM
Для этого нажимаем кнопку "Проверить настройки" удерживая клавишу "Shift" на клавиатуре:
При нормальной работе COM отчёт будет примерно таким:
При проблемах же с COM возникнет вот такая или похожая ошибка:
Ещё может писать, что -то типа " Не удалось создать программное подключение к 1С ".
Да, судя по тесту, у нас проблемы с COM
Прежде всего, о какой именно библиотеке идёт речь? Эта библиотека comcntr.dll, которая находится в папке bin конкретной платформы 1с:
Эта библиотека устанавливается и автоматически регистрируется в системе при установке платформы.
Кроме того, обновлятор перед тем как подключаться к базе через внешнее соединение сам дополнительно регистрирует в системе библиотеку из нужной версии платформы при помощи команды:
Итак, что мы можем предпринять?
Шаг №0
Обратите внимание на утилиту для отображения и регистрации библиотек RegDllView. При помощи неё вы как минимум сможете контролировать результат работы следующих шагов.
Шаг №1
Прежде всего убеждаемся, что у нас действительно проф-версия платформы, потому что для базовой версии платформы внешнее подключение к базам работать и не должно (это ограничение платформы).
Чтобы понять какая у нас платформа (базовая или проф) выполним вот этот пункт.
Если лицензия на платформу у нас всё же не проф, а базовая, то все остальные шаги не имеют смысла. Внешнее подключение к базам у нас работать не будет (из-за ограничений платформы). Ничего не остаётся, кроме как настроить базы вот так.
Шаг №2
Далее пробуем запустить обновлятор с правами администратора.
Если у вас включён UAC, то добиться этого можно, нажав на ярлыке обновлятора правой кнопкой, и выбрав вариант "Запуск от имени администратора".
Далее выбираем базу и нажимаем кнопку "Проверить настройки". Если ошибка пропала и больше не воспроизводится даже при обычном запуске обновлятора (без прав администратора) - поздравляю, проблема решена. Если нет - идём дальше.
Шаг №3
В 32-битной версии ОС пробуем выполнить команду
В 64-битной версии ОС команда будет такой:
- для регистрации 64-битной платформы 1С:
- для регистрации 32-битной платформы 1С:
Эти команды запускаем от имени пользователя с правами администратора. А при включённом UAC, запускаем cmd через "Запуск от имени администратора", либо через такой же запуск написанного батника.
Если команда регистрации не помогла, то нужно предварительно удалить регистрацию библиотеки comcntr.dll, запустив ту же команду вызова regsvr32 с ключом /u
Если этот шаг не помог - идём дальше.
Шаг №4
Похоже, что у обновлятора не получается зарегистрировать COM компоненту из-за настроек безопасности на вашем сервере.
В этом случае:
- Заходим в Панель управления - Администрирование - Службы компонентов.
- Переходим к ветке Компьютеры - Мой компьютер - Приложения COM+.
- В контекстном меню выбираем Создать - Приложение. Откроется Мастер установки приложений COM+.
- Нажимаем "Далее".
- Выбираем "Создать новое приложение".
- Вводим имя "V83COMConnector". Устанавливаем переключатель "Серверное приложение". Нажимаем "Далее".
- На следующем шаге устанавливаем "Текущий пользователь". Нажимаем "Далее".
- Нажимаем "Готово".
- В появившейся ветке V83COMConnector переходим к подветке Компоненты.
- В контекстном меню выбираем Создать - Компонент. Откроется Мастер установки компонентов COM+.
- Нажимаем "Далее".
- Выбираем "Установка новых компонентов".
- Выбираем файл \bin\comcntr.dll.
- Нажимаем "Далее" - "Готово".
- Переходим к ветке V83COMConnector.
- В контекстном меню выбираем "Свойства". В открывшемся окне переходим на вкладку «Безопасность».
- Снимаем галку «Принудительная проверка доступа для приложений». Ставим галку "Применить политику программных ограничений". Устанавливаем Уровень ограничений - "Неограниченный".
- Нажимаем "ОК".
После этого обновлятор должен смочь самостоятельно регистрировать компоненты всех версий платформ, а не только той, которую мы прописали в компоненте.
Шаг №5
Бывает так, что помогает только повторная переустановка платформы (при этом происходит корректная регистрация компоненты).
Шаг №6
Если проблема начала возникать сразу после обновления платформы 1с, то вероятнее всего новой версии платформы 1с не хватает какого-нибудь сервиспака или обновления для вашей операционной системы. Поэтому если есть возможность - ставим их все, если нет - действуем выборочно согласно этой ссылке.
Шаг №7
Бывает так, что всё работает при обычном запуске обновлятора, но не работает при запуске с повышением привилегий до администратора, когда вы запускаете обновлятор через пункт меню "Запустить от имени администратора" или из программы (типа TotalCommander), которая сама запущена с повышенными привилегиями.
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.
Аноним, Внимательней читаем описание, и вниметельней смотрим на Помощник переноса данных из 7.7 в 1С8.
Переносятся остатки на начало года и обороты с начала года по конец закрытого налогового периода. Для УСН это месяц, ОСН - квартал. Обороты переносятся операциями, без документов.
Спасибо за отклик! А еще один вопрос остался
можно 1С 7.7,который находится на другом компьютере, перетащить в тот,где стоит версия 8,и как это сделать?
Спасибо за отклик! А еще один вопрос остался
можно 1С 7.7,который находится на другом компьютере, перетащить в тот,где стоит версия 8,и как это сделать?
Можно. В 7.7 Сервис - Переход на 1С:Бухгалтерию 8. Выгрузите данные в файл. Этот файл перенесете на комп с 8. В 8 Сервис - Перенос данных данных из информационных баз 7.7 - Загрузить данные из файла. Только обновите предварительно и 7.7 и 8 до последних версий.
Сергей вы меня немного неправильно поняли,могу ли я сму базу перетащить,чтобы на одном компьютере были версии 7.7 и 8,или это невозможно?
Сергей вы меня немного неправильно поняли,могу ли я саму базу перетащить,чтобы на одном компьютере были версии 7.7 и 8,или это невозможно?
Сергей вы меня немного неправильно поняли,могу ли я саму базу перетащить,чтобы на одном компьютере были версии 7.7 и 8,или это невозможно?
Там, где сейчас стоит 7.7 делаете архивную копию базы на съемный носитель (флэшку, диск). Устанавливаете 7.7 на новый комп, восстанавливаете архивную копию.
Сергей спасибо Вам за помощь,я в этом деле очень мало соображаю,так что извините если вопросы глуповаты,а создать архивную копию это как?просто скопировать на флешку и вставить на другом кмпьютере?или по другому?
По моей печальной практике люди научаются делать архивные копии только после того, как дважды потеряют свои данные. Одного раза обычно не хватает, увы..
Это было лирическое отступление. То, как создать архивную копию написано у вас в документации. Или вам с экрана легче читать?
Конфигуратор. Администрирование - Сохранить информационную базу. На втором компе Администрирование - Восстановить информационную базу.
Здравствуйте. Делаю так выбираю в пункте меню (1с8.2) нажим. перенос данных из 1с 7 в 1с 8 в закладке Сервис появляется окно выберите вариант загрузки,выбираю загрузить данные из информ.базы, появл.окно, требующее указать инфор.базу,Но не дает писать ни одной буквы ни цифры. Что делать?
только выбрать!
Здравствуйте. Делаю так выбираю в пункте меню (1с8.2) нажим. перенос данных из 1с 7 в 1с 8 в закладке Сервис появляется окно выберите вариант загрузки,выбираю загрузить данные из информ.базы, появл.окно, требующее указать инфор.базу,Но не дает писать ни одной буквы ни цифры. Что делать?
список баз ессно!
1.Открыта новая радиостанция для юзеров под названием RТ FМ. По ней будут транслироваться чтения различных мануалов и ответы на часто задаваемые вопросы.
2. "Помогая ленивым людям, ты помогаешь им сесть на свою шею" Сян-Цзы
я выгрузила из 1с7.7 данные за 2012 год,в другом компе установлена 1с8.2, хочу туда все перекинуть, выбора из списка баз мне не предоставляется, просто окно пустое появляется и внизу окна нужно указать какую инфу перенести остатки или справочники.
а как сделать так чтобы "выбор предоставлялся"
я выгрузила из 1с7.7 данные за 2012 год,в другом компе установлена 1с8.2, хочу туда все перекинуть, выбора из списка баз мне не предоставляется, просто окно пустое появляется и внизу окна нужно указать какую инфу перенести остатки или справочники.
а как сделать так чтобы "выбор предоставлялся"
1.Открыта новая радиостанция для юзеров под названием RТ FМ. По ней будут транслироваться чтения различных мануалов и ответы на часто задаваемые вопросы.
2. "Помогая ленивым людям, ты помогаешь им сесть на свою шею" Сян-Цзы
Из 1С 7.7 , редакция 4.5, через конфигуратор-администрирование -выгрузить данные = получился файл 17110851Сv7 (архив zip), еще есть резервная копия базы 1Сv7 оттуда же. Потом через флешку в диск D на дуругой комп перенесла, на котор. установлена 1С8.2. Теперь пытаюсь запихнуть данные из 1С7.7 в 1С8.2
1.Открыта новая радиостанция для юзеров под названием RТ FМ. По ней будут транслироваться чтения различных мануалов и ответы на часто задаваемые вопросы.
2. "Помогая ленивым людям, ты помогаешь им сесть на свою шею" Сян-Цзы
телепатирую
я выгрузила из 1с7.7 данные за 2012 год,в другом компе установлена 1с8.2, хочу туда все перекинуть, выбора из списка баз мне не предоставляется, просто окно пустое появляется и внизу окна нужно указать какую инфу перенести остатки или справочники.
а как сделать так чтобы "выбор предоставлялся"
выгрузила в файл? имя файла помнишь? можешь его найти на компе/флешке, перенести на комп с 8.2? А там уже все просто - выбираешь загрузку из файла и ждешь
Всем добрый день!
Как и кем регистрируется tlb? Дело в том, что она у меня перестала сама регистрироваться после того как я стал переделывать проект и перенес idl файл со всеми GUID в другое место, в другой проект. Потом я удалил из реестра всякое упоминание о ней, а при регистрации нового компонента, tlb больше не регистрируется.
Да, вот еще, каким образом ее помещают в ресурсы? Достаточно просто поместить или нужно что-то еще делать?
Здравствуйте, silart, Вы писали:
S>Как и кем регистрируется tlb? Дело в том, что она у меня перестала сама регистрироваться после того как я стал переделывать проект и перенес idl файл со всеми GUID в другое место, в другой проект. Потом я удалил из реестра всякое упоминание о ней, а при регистрации нового компонента, tlb больше не регистрируется.
И после этого Вы удивляетесь, почему не регистрируется?
А почему должна?
S>Да, вот еще, каким образом ее помещают в ресурсы? Достаточно просто поместить или нужно что-то еще делать?
1. Добавить к проекту ATL-компонент;
2. Вернуть на место IDL;
3. Скомпилировать IDL в TLB;
4. Добавить TLB в ресурсы;
5. Больше так не шалить
Здравствуйте, filkov, Вы писали:
F>И после этого Вы удивляетесь, почему не регистрируется?
F>А почему должна?
Мой компонент создан без использования ATL.
Просто Дейл Роджерсон пишет что она должна сама регистрироваться. Мне нужно знать как это происходит (достаточно бросить tlb-файл в папку с моей dll?) и можно ли ее принудительно перерегистрировать. Может есть какая-то утилита в Windows? Понимаете, я создал проект, описал все интерфейсы и библиотеку типа в idl в первом проекте, собрал проект, зарегистрировал его. После этого я сделал другой проект с тем же idl файлом. Потом я разрегистрировал первый компонент, и зарегистрировал второй? при этом библиотека типа осталась в реестре от первого компонента. Получилось так, что второй компонент использует tlb-файл первого компонента. Кто должен регистрировать tlb? Сам компонент или все-таки она сама регистрируется при регистрации компонента?
У меня возникла подозрение, что ее мог зарегистрировать Visual Basic, которым я осуществляю тестирование компонента. В момент когда я им открывал tlb-файл. Сначала он почему-то глючил, не хотел видеть библиотеку типа, а потом вдруг заработал.
S>>Да, вот еще, каким образом ее помещают в ресурсы? Достаточно просто поместить или нужно что-то еще делать?
F>1. Добавить к проекту ATL-компонент;
F>2. Вернуть на место IDL;
F>3. Скомпилировать IDL в TLB;
F>4. Добавить TLB в ресурсы;
F>5. Больше так не шалить
Меня интересует вопрос, достаточно просто добавить в ресурс tlb-файл или нет? Или может надо как-то по хитрому добавлять? Объясните пожалуйста.
Здравствуйте, silart, Вы писали:
S>Как и кем регистрируется tlb?
Правильнее всего регистрировать tlb инсталлятором приложения (т.е. WindowsInstaller-ом)
Для этого нужно создать пакет установки вашего приложения (msi), и добавить в него вашу TLB.
Существует так же возможность "само-регистрации", когда приложение само регистрирует свою TLB,
в частности, COM DLL, обычно это делает при вызове функции DllRegisterServer.
Наиболее упоминаемая в этой связи конструкция "regsvr32 your.dll" просто вызывает данную функцию в your.dll
Для того чтобы зарегистрировать tlb самому из командной строки самому "здесь и сейчас" руками, есть еще утилита regtlib.exe
S>Дело в том, что она у меня перестала сама регистрироваться после того как я стал переделывать проект и перенес idl файл со всеми GUID в другое место, в другой проект. Потом я удалил из реестра всякое упоминание о ней, а при регистрации нового компонента, tlb больше не регистрируется.
Это я не понял, разбирайтесь сами
S>Да, вот еще, каким образом ее помещают в ресурсы? Достаточно просто поместить или нужно что-то еще делать?
Тип ресурса должен быть TYPELIB, а ID без разницы (хотя обычно ставится 1,
т.к. в одном файле почти всегда содержится только одна TLB).
Спасибо Вам, bnk, за подробный ответ!
Утилитка regtlib.exe помогла.
Хочу вам задать еще один вопрос. Вы случайно не знаете, есть ли API функции (или стандартные интерфейсы) для регистрации библиотеки типов? Хотелось бы ее регистрировать в момент регистрации компонента, но очень не хотелось писать код работы с реестром руками.
Здравствуйте, silart, Вы писали:
S>Спасибо Вам, bnk, за подробный ответ!
S>Утилитка regtlib.exe помогла.
S>Хочу вам задать еще один вопрос. Вы случайно не знаете, есть ли API функции (или стандартные интерфейсы) для регистрации библиотеки типов? Хотелось бы ее регистрировать в момент регистрации компонента, но очень не хотелось писать код работы с реестром руками.
Можно открыть исходик ATL, поглядеть как она это делает
Но вообще, лучше всю эту работу отдать инсталлятору приложения. И не делать саморегистрацию (self-registration)
Рекомендую поискать по форуму "установка и поддержка", почему это плохо и может не работать (на висте например).
И еще, если вы пишете программу не в само-образовательных целях, тогда не очень понятно, почему не используется ATL.
Здравствуйте, silart, Вы писали:
S>Меня интересует вопрос, достаточно просто добавить в ресурс tlb-файл или нет? Или может надо как-то по хитрому добавлять? Объясните пожалуйста.
Давно этого не делал, всех деталей не упомню.
> достаточно просто добавить в ресурс tlb-файл
— кинечно нет. Нужны дополнительные макросы.
Я бы сделал это так:
— создать пустой АТЛ-проект;
— создать АТЛ-обьект;
— тщательно сохраняя весь framework, заменить определения классов и интерфейсов в ИДЛ;
— скопировать код из Вашего проекта — implementation методов.
Спасибо всем за дельные советы.
Библиотека типов теперь регистрируется и все работает.
Все-таки я решил сделать саморегистрацию, а библиотеку типа я вставил в ресурсы.
Можно ее регистрировать как с помощью DllRegisterServer() так и инсталлятором, если в висте саморегистрация не работает.
Библиотека типов регистрируется функцией RegisterTypeLib(), и разрегистрируется соответственно функцией UnRegisterTypeLib().
На моей машине для разработки это второе приложение установлено, поэтому я могу скомпилировать без каких-либо проблем. Если я попытаюсь выполнить компиляцию на нашем автоматизированном сервере сборки или на любой машине с установленной Visual Studio, но без этой второй программы, я получаю следующие ошибки и компиляция:
Текст для google:
Не удалось найти имя типа или пространства имен (вам не хватает директивы using или ссылки на сборку?)
Указанный компонент “SecurityAgentLib” не найден
Изображение для читаемости:
Я не уверен, как обойти это, кроме как путем установки приложения, которое регистрирует фактическую DLL, которая реализует эти типы, но я не хочу этого делать на нашем сервере сборки. Код, который использует эти типы, обернут в класс, который никогда не создается, если не выполняются предварительные проверки, чтобы проверить, действительно ли приложение установлено, поэтому вероятность ошибки во время выполнения отсутствует. На самом деле я могу просто запустить приложение на компьютере без установки второго приложения – я просто не могу его скомпилировать.
В визуальной студии ссылка указывает на файл.tlb, который включен в каталог решений, поэтому сам файл tlb присутствует.
Я не могу себе представить, что это должно работать так, и я искал вокруг, но я, по-видимому, не ищу подходящих условий.
EDIT: Запуск tlbimp.exe генерирует dll, но библиотека типов должна быть достаточной для компиляции, я думал, по крайней мере. Существует также проблема неработающих ссылок. Я читал эту статью ” Устранение неполадок с Broken References”, и она говорит, что если ссылка на COM-компонент, который не установлен, чем установка компонента, исправляет ошибку, что верно.
Установка его на сервер сборки действительно не является вариантом. Открытие визуальной студии и повторное добавление ссылки, если путь был сломан, также не работает.
Я смог использовать tlbimp для создания dll, а используемая визуальная студия добавила ссылку на эту DLL. Это позволяет мне скомпилировать, но как это будет работать на сервере автоматической установки?
EDIT. Хорошо, я придумал два решения, которые работали, учитывая, что мое требование об этом все без присмотра
- Ran tlbimp для создания dll из библиотеки типов. Я удалил ссылку на tlb из моего проекта и добавил ссылку на самую DLL. Когда исходный код был скопирован на новый компьютер, он скомпилирован без проблем.
В этом сценарии в идеале мы бы проверили SVN на сервере сборки и скопировали последнюю DLL из второго проекта, а затем скомпилируем этот проект.
- Я также удалил tlb и добавил dll в visual studio и сделал diff в файле.csproj. Я не вижу недостатков, просто имея ссылку на dll вместо tlb, но при необходимости сервер сборки может внести изменения непосредственно в этот файл, чтобы удалить раздел tlb и добавить ссылку на dll после сборки второго продукт.
Вот несколько вариантов, которые каждый из них работал.
- Ran tlbimp для создания dll из библиотеки типов. Я удалил ссылку на tlb из моего проекта и добавил ссылку на самую DLL. Когда исходный код был скопирован на новый компьютер, он скомпилирован без проблем.
В этом сценарии в идеале мы бы проверили SVN на сервере сборки и скопировали последнюю DLL из второго проекта, а затем скомпилируем этот проект.
Читайте также: