Список форумов www.integro.ru www.integro.ru
ЦСИ ИНТЕГРО
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Сборки

 
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков
Предыдущая тема :: Следующая тема  
Автор Сообщение
Николаускас



Зарегистрирован: 27.11.2013
Сообщения: 52

СообщениеДобавлено: Вт 24 Дек 2013 13:06    Заголовок сообщения: Сборки Ответить с цитатой

Здравствуйте!
У меня вопрос, касающийся работы моего модуля для ИнГео на других компьютерах.
При разработке модуля я по инструкции создавал в ИнГео VB-скрипт, в котором создавался объект моего класса, необходимый для взаимодействия с Application. Упомянутый класс регистрировался в системе с помощью Regasm.exe. Это я понял.
Я не совсем понимаю, как организовать работу модуля на стороннем компьютере. На нем ведь тоже необходимо зарегистрировать свою сборку, чтобы модуль *.inm работал.? Как это сделать, если на стороннем компьютере нет командной строки Visual Studio (студии нет), из-под которой и работают заветные Regasm и Gacutil?
И не могли бы вы объяснить разницу в том, что делают Regasm и Gacutil?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Азаматов Азамат Хадисович



Зарегистрирован: 17.02.2005
Сообщения: 100
Откуда: г. Учалы, Респ. Башкортостан

СообщениеДобавлено: Пн 30 Дек 2013 00:15    Заголовок сообщения: Ответить с цитатой

regasm регистрирует сборку для COM взаимодействия

gacutil управляет глобальными сборками. вполне можно обходиться и без нее, тем более что для COM регистрация через regasm все равно будет глобальной.


в принципе регистрация сборки достаточно проста, я просто сделал программу регистратор и поставляю с модулями сделанными под .NET
в installer.dat нужно просто вписать название сборки.

http://yadi.sk/d/0TZdBJFoFB4ss

а еще можно создать стандартный проект установки в Visual Studio, установщик будет все сам регистрировать.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
APopov



Зарегистрирован: 19.06.2006
Сообщения: 347
Откуда: Самара

СообщениеДобавлено: Вт 21 Янв 2014 17:43    Заголовок сообщения: Ответить с цитатой

Мы устанавливаем модули с помощью innoSetup, в котором на завершающем шаге установки делаем как-то так:

Код:

procedure RegDotnetCom(const fn:string; withCodebase:boolean);
  var ResultCode :Integer;
      good        :boolean;
      regPars    :string;
begin
  regPars := '"'+ExpandConstant(fn)+'"';
  if withCodebase then
     regPars := regPars +' /codebase';
  log('script exec: '+ExpandConstant('{dotnet40}\regasm.exe')+' '+regPars);
  good := Exec(ExpandConstant('{dotnet40}\regasm.exe'), regPars,
    '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
  log('result: '+IntToStr(Integer(good))+' rescode: '+IntToStr(ResultCode));
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep=ssPostInstall then begin
   RegDotnetCom('{app}\Interop.GeoTransformer.dll', true);
   RegDotnetCom('{app}\Interop.Ingeo.dll', true);
   RegDotnetCom('{app}\Interop.InScripting.dll', true);
   RegDotnetCom('{app}\XmlMPImport.dll', true);
  end;
end;

_________________
ОАО "Самара-Информспутник",
инженер-программист Попов Артем
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Николаускас



Зарегистрирован: 27.11.2013
Сообщения: 52

СообщениеДобавлено: Вт 21 Янв 2014 17:51    Заголовок сообщения: Ответить с цитатой

Большое спасибо всем ответившим!
APopov, можете сказать, для чего вообще нужна "InScripting.dll"?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
APopov



Зарегистрирован: 19.06.2006
Сообщения: 347
Откуда: Самара

СообщениеДобавлено: Вт 21 Янв 2014 18:44    Заголовок сообщения: Ответить с цитатой

в Ingeo.exe "содержатся" две tlb - ingeo.tlb и InScripting.tlb. первая - основная, содержит определение почти всех интерфейсов, вторая вспомогательная, содержит, в основном, интерфейсы используемые из скриптов (наверное так задумывалось, судя по названию) и так же интерфейсы для работы с символьными методами отображения.
В общем, обе тесно взаимосвязаны, почему они идут не "в одном флаконе" я не знаю.

_________________
ОАО "Самара-Информспутник",
инженер-программист Попов Артем
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Азаматов Азамат Хадисович



Зарегистрирован: 17.02.2005
Сообщения: 100
Откуда: г. Учалы, Респ. Башкортостан

СообщениеДобавлено: Чт 23 Янв 2014 17:38    Заголовок сообщения: Ответить с цитатой

APopov писал(а):
Мы устанавливаем модули с помощью innoSetup, в котором на завершающем шаге установки делаем как-то так:

Код:

...
   RegDotnetCom('{app}\Interop.GeoTransformer.dll', true);
   RegDotnetCom('{app}\Interop.Ingeo.dll', true);
   RegDotnetCom('{app}\Interop.InScripting.dll', true);
...

насколь я понимаю документацию, если интероповские сборки находятся в одной папке с основной сборкой, то регить их не нужно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
APopov



Зарегистрирован: 19.06.2006
Сообщения: 347
Откуда: Самара

СообщениеДобавлено: Чт 23 Янв 2014 17:48    Заголовок сообщения: Ответить с цитатой

да. мы до этого недавно дошли Smile
это кусок старого инсталлера. теперь регаем только сборки содержащие COM-объекты.

_________________
ОАО "Самара-Информспутник",
инженер-программист Попов Артем
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Николаускас



Зарегистрирован: 27.11.2013
Сообщения: 52

СообщениеДобавлено: Вт 28 Янв 2014 17:31    Заголовок сообщения: Ответить с цитатой

Здравствуйте! Снова я.
Закончил с инсталлятором. Решил последовать совету RegAsm.exe и подписать сборку. Теперь подписанная сборка regasm'ом вообще не хочет регистрироваться. "Невозможно загрузить файл или сборку ... или один из зависимых от них компонентов. Найденное определение манифеста сборки не соответствует ссылке на сборку. <Исключение из HRESULT: 0x80131040>".

При этом с неподписанной сборкой проблем нет. При последующем удалении программы происходит "разрегистрация" неподписанной сборки по методу APopov'a (интересно звучитSmile) и, например, в реестре я не нахожу и следа от ее CLSID.
Знает ли кто-нибудь причины такого поведения?
Подписываю сборку в свойствах проекта в Visual Studio.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kolyanch



Зарегистрирован: 28.01.2014
Сообщения: 3
Откуда: Самара

СообщениеДобавлено: Вт 28 Янв 2014 21:15    Заголовок сообщения: Ответить с цитатой

Регистрируете с параметром /codebase?
Все зависимые .net сборки подписаны?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Николаускас



Зарегистрирован: 27.11.2013
Сообщения: 52

СообщениеДобавлено: Ср 29 Янв 2014 10:49    Заголовок сообщения: Ответить с цитатой

Да, с /codebase.
Зависимых сборок-то больше вроде и нет. Она сама зависима от Interop.Ingeo.dll.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kolyanch



Зарегистрирован: 28.01.2014
Сообщения: 3
Откуда: Самара

СообщениеДобавлено: Ср 29 Янв 2014 12:24    Заголовок сообщения: Ответить с цитатой

Может быть несколько причин:
1. Не установлено ИнГео на машине, на которую Вы деплоите
2. В инсталлятор всё таки попали сборки с неактуальной подписью

Попробуйте сделать полный ребилд солюшена и пересобрать инсталлятор.
Ещё уточню исключение возникает для вашей сборки или "Невозможно загрузить файл или сборку..." выводится для Interop-а?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Николаускас



Зарегистрирован: 27.11.2013
Сообщения: 52

СообщениеДобавлено: Ср 29 Янв 2014 12:31    Заголовок сообщения: Ответить с цитатой

ИнГео установлено.
Благодаря Вашему вопросу, я заметил, что исключение возникает для Interop.Ingeo, а не для моей сборки. Все моя невнимательность. Но тогда я вообще не понимаю, чего regasm'у надоSmile

Хочу заметить, что данная проблема возникает точно не из-за инсталлятора, поскольку при обычной регистрации сборки с ручным вводом команды выходит то же самое.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kolyanch



Зарегистрирован: 28.01.2014
Сообщения: 3
Откуда: Самара

СообщениеДобавлено: Ср 29 Янв 2014 13:13    Заголовок сообщения: Ответить с цитатой

Я бы всё-таки посоветовал целиком очистить и пересобрать солюшен.
В свойствах interop-ов выставить
Embed Interop Types в false
Copy Local в true
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Николаускас



Зарегистрирован: 27.11.2013
Сообщения: 52

СообщениеДобавлено: Ср 29 Янв 2014 14:51    Заголовок сообщения: Ответить с цитатой

Причина нашлась. Я проводил опыты с регистрацией сборок в каталоге, в котором лежали Interop.Ingeo.dll и Interop.InScripting.dll, взятые из папки Release проекта еще до проведения подписывания сборки. Неподписанная сборка с ними регистрировалась, а подписанная нет. То есть получается, что подписанной сборке требуются Interop.Ingeo.dll и Interop.InScripting.dll, взятые непосредственно после ее подписывания и сборки проекта.
Никогда бы не подумал, что уже готовые библиотеки каким-то образом могут различаться в зависимости от ситуации. Наверно я не до конца понимаю процесс подписывания сборок.

Спасибо за участие и советы.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Николаускас



Зарегистрирован: 27.11.2013
Сообщения: 52

СообщениеДобавлено: Чт 30 Янв 2014 17:54    Заголовок сообщения: Ответить с цитатой

Здравствуйте!
Возник вопрос относительно работы метода FindStyleView(string id).
Оказалось, что при работе в клиенте ИнГео версии 4.4 он отрабатывает нормально, а при вызове его в модуле в клиенте версии 4.3 возникает ошибка с сообщением следующего содержания:
"Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена".
Кто-нибудь знает, в чем причина? В ИнГео 4.3 этот метод не поддерживается?
Здесь http://www.integro.ru/dl/ingeo/ingeo4History.htm ничего на этот счет не нашел.
Код, вызывающий исключение:
IIngeoStyleView styleView = app.ActiveProjectView.FindStyleView(styleItem.Id);
где styleItem.Id - существующий текстовый id существующего стиля.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
APopov



Зарегистрирован: 19.06.2006
Сообщения: 347
Откуда: Самара

СообщениеДобавлено: Чт 30 Янв 2014 18:51    Заголовок сообщения: Ответить с цитатой

в ингео 4.3 этого метода не было вообще, там и стили в основном окне ингео не показывались и им видимость невозможно было отключить.
Получается, вы используете таблицы вызовов процедур из 4.4, а в 4.3 адрес этой функции ведёт чёрте куда...

_________________
ОАО "Самара-Информспутник",
инженер-программист Попов Артем
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
APopov



Зарегистрирован: 19.06.2006
Сообщения: 347
Откуда: Самара

СообщениеДобавлено: Чт 30 Янв 2014 18:52    Заголовок сообщения: Ответить с цитатой

и да. снова осмелюсь напомнить: новая несвязанная проблема - новый топик.
это простое правило облегчает поиск тем и ответов на вопросы для будущих поколений.

_________________
ОАО "Самара-Информспутник",
инженер-программист Попов Артем
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Николаускас



Зарегистрирован: 27.11.2013
Сообщения: 52

СообщениеДобавлено: Пт 31 Янв 2014 10:40    Заголовок сообщения: Ответить с цитатой

Спасибо.
Согласен.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


© phpBB Group
Русская поддержка phpBB