Запуск com-объекта на основе библиотеки dll вне sql server процесса

Введение в серверы ActiveX

Серверы ActiveX делятся на три типа. Рассмотрим их предназначение.

Первым является полный сервер (full server) — неудачное название,
поскольку можно подумать, что речь идет о полнофункциональном сервере ActiveX.
На самом деле это не так. Прилагательное полный означает в данном случае, что
он может выполняться и как сервер, и как полноценное приложение .
Например, Microsoft Word можно запустить в виде самостоятельного приложения,
создать документ или брошюру и затем сохранить содержание в виде doc-файла. Или
же можно запустить другое приложение, например WordPad, и включить в него
содержание, созданное в Microsoft Word.

Второй тип серверов является противоположностью первому и тоже назван
неудачно — мини-сервер (mini-server). Это название означает, что
сервер может использоваться только для включения его содержимого в другие
приложения
. Например, с Microsoft Word поставляется множество аплетов,
помогающих создать документы профессионального вида. Одно из них называется
WordArt. Если попытаться запустить эту программу, то выдается сообщение о том,
что это приложение может выполняться только при запуске из другого
приложения.

Простой пример создания ActiveX-control на Qt

Мне была поставлена задача разработать некий ActiveX-control. Так как основным языком программирования для разработки у нас используется C++, то C# не рассматривался. Я решил выбрать Qt, так как он мне интересен.

Создание ActiveX объектов на Qt достаточно простой процесс, в примерах к QtCreator есть несколько вариантов, показывающих как можно использовать ActiveQt (например этот).

При написании компонента пришлось много времени потратить на поиск ответов на казалось бы простые вопросы, по крупицам их собирать. В результате я получил, что требовалось и решил написать простой пример, чтобы ускорить процесс старта разработки ActiveX-control другим.

Сразу обращу внимание, что не описываю всю технологию ActiveQt, подробную информацию можно получить в документации Qt Assistant и в интернете (например здесь), это пример и пара интересных на мой взгляд моментов

4.2 Настройка параметров для OPC сервера

Рис. 26 Настройка DCOM для OPC сервера

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

Рис. 27 Общие свойства OPC сервера

Рис. 28 Свойства безопасности

Рис. 29 Конечные узлы

Рис. 30 Удостоверение

На закладке “Удостоверение” необходимо указать имя пользователя, который был создан ранее, от имени которого будет запускаться OPC сервер.

Замечание 1. Перед изменением настроек OPC сервера необходимо убедиться, что он не запушен и отсутствует в списке активных процессов. Или перезапустить OPC сервер после изменения настроек.

Замечание 2. Для некоторых OPC серверов необходимо, чтобы они были запущены хотя бы один раз с правами администратора, для того чтобы зарегистрироваться в системе и инициализировать параметры OPC сервера. Только после такой инициализации они будут доступны для обнаружения через OpcEnum и подключения.

ATL-cерверы автоматизации

В этом разделе рассмотрим процессы создания серверов автоматизации с помощью более новой и более компактной библиотеки активных шаблонов (Active Template Library ґ ATL). Основным преимуществом библиотеки ATL является компактность, но она достигается за счет усложнения процесса разработки. Создание простых приложений остается довольно простым, но разработка сложных представляет большую проблему. Если сервер, к тому же должен обеспечивать развитой пользовательский интерфейс, уметь работать с базами данных, то средств ATL для этого явно недостаточно, поэтому в таких ситуациях рекомендуется создавать MFC-сервера.

Создание сервера автоматизации

Рассмотрим создание сервера процесса, предоставляющего класс под названием SimpleATL.

Среди проектов Developer Studio следует выбрать пункт ATL СОМ AppWizard и в поле «Project Name¬ ввести имя проекта SvrDll (или SvrExe в случае локального сервера). Мастер ATL СОМ AppWizard создаст сервер за один шаг. Следует только в появившейся диалоговой панели отметить обе предлагаемые дополнительные опции «Allow merging of proxy/stub code¬ и «Support MFC¬, а затем выбрать тип сервера «Dynamic Link Library (DLL)¬ (сервер в процессе) или «Executable (EXE)¬ (локальный сервер). Заметим, что включение опции «Allow merging of proxy/stub code¬ позволяет мастеру разместить в COM-сервере вспомогательный код для MIDL.

Мастер ATL СОМ AppWizard елает еще меньше, чем мастер из библиотеки MFC: он вообще не генерирует никаких классов, только глобальные объявления, необходимые для создания файла DLL. Все остальное разработчику необходимо выполнить самостоятельно.

Усовершенствование сервера

Попросту говоря, сейчас необходимо выполнить всю основную работу. Для этого следует:

  • выбрать команду «New ATL Object¬ меню «Insert¬ среды Developer Studio;
  • в окне мастера ATL Object Wizard следует выбрать категорию «Objects¬ и элемент «Simple Object¬, затем нажать кнопку «Next¬.
  • в поле ¬Short Name¬ закладки «Names¬ появившегося диалогового окна «ATL Object Wizard Properties¬ необходимо указать имя объекта SimpleATL;
  • перейти к закладке «Attributes¬ этого же диалогового окна и выбрать свойства: «Threading model¬ Ї «Free¬, «Interface¬ Ї «Dual¬, «Aggregation¬ Ї «No¬. Также следует отметить (выбрать) опции «Support ISupportErrorInfo¬, «Support Connection Points¬, «Free Threaded Marshaler¬, а затем щелкнуть на кнопке ОК.

Теперь в рабочем окне классов проекта повляется два новых узла. Первый узел Ї это класс CSimpleATL, основанный на нескольких различных интерфейсах. Второй узел Ї это непосредственно интерфейс ISimpleATL, основанный на интерфейсе IDispatch. Мастер ATL Object Wizard генерирует класс CSimpleATL и файл IDL для данного проекта. Этот файл используется для создания библиотеки типов для нескольких интерфейсов COM.

Следует обратить внимание, что интерфейс ISimpleATL представлен в рабочем окне проекта в виде одного из подузлов. Это показывает, что класс CSimpleATL реализует по крайней мере интерфейс ISimpleATL

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

  • выбрать узел ISimpleATL и щелкнуть на нем правой кнопкой мыши;
  • выбрать команду «Add Method¬ или «AddProperty¬;
  • в случае добавления метода в поле «Method Name¬ ввести имя метода, а в поле «Parameters¬ ввести параметры, их типы и характеристики (как в описании методов IDL-файле). Реализации методов ATL должны возвращать HRESULT для всех методов и свойств. Характеристика соответствует входным параметрам, а обозначение ґ выходным, обозначение соответствует возвращаемому параметру (он должен быть только один, причем последним в списке параметров);
  • в случае добавления свойства следует ввести тип свойства и его имя, а также вариант реализации нового параметра (например, через пару функций Get/Put).

Advanced OPC Data Logger

Trust In Confidence!

Для Win2000 — Windows 11 (2019) (Server, x86, x64). Последняя версия: 3.9.4 build 1220. 20 декабря 2022.

Настройка DCOM и OPC на Windows 2008 и Windows 7

  • Часть 1. Установка OPC компонент, необходимых для функционирования OPC интерфейса.
  • Часть 2. Настройка DCOM и OPC. Создание пользователя и выдача прав.
  • Часть 3. Настройка брандмауэра Windows 2008 и Windows 7 для разрешения работы DCOM и OPC.
  • Часть 4. Настройка параметров DCOM. Dcomcnfg.
  • Часть 5. Настройка DCOM и OPC. Проблемы и их решение.

2. Создание пользователя и выдача прав

2.1 Добавление пользователя

Необходимо создать пользователя, имеющего права для запуска и использования DCOM приложений. Для увеличения безопасности можно создать пользователя с ограниченными правами. Для добавления пользователя необходимы права администратора.

Внимание! Необходимо создать пользователей с одинаковым именем и паролем на обоих компьютерах (с сервером и клиентом). В дальнейшем, необходимо запускать OPC клиент от имени созданного пользователя


Рис. 2 Доступ к консоли управления компьютером или сервером


Рис. 3 Добавление нового пользователя


Рис. 4 Параметры нового пользователя

Вы можете создать пользователя с любым именем. Пароль должен быть задан и не должен быть пустым.

2.2 Выдача прав

Для разрешения работы с DCOM необходимо включить пользователя в соответствующую группу «Пользователи DCOM».


Рис. 5 Группы пользователей


Рис. 6 Добавление пользователя в группу


Рис. 7 Выбор пользователя


Рис. 8 Список пользователей


Рис. 9 Выбранный пользователь


Рис. 10 Пользователь в группе

Замечание. Вы можете создать несколько пользователей и поместить их в одну группу «Пользователи DCOM». Также вы можете включить существующих пользователей в указанную группу.

Сопутствующие статьи:

  • Запись данных OPC в базу данных черех ODBC (на примере MS Access) (возможности: добавление групп и переменных, запись в базу ODBC)
  • Добавление метки времени в CSV файл (возможности: OPC группы)
  • OPC в MSSQL: Запись множества переменных OPC в базу MS SQL 2008
  • OPC в MSSQL: Запись нескольких переменных OPC в разные колонки
  • OPC в MySQL: Запись тегов OPC в базу данных MySQL 5
  • OPC в базу данных: Сохранение OPC тегов в базе данных
  • OPC в Excel: Запись данных OPC в Excel
  • Фильтрация данных по значению OPC тега, и запись в базу только, когда значение меняется
  • Игнорирование данных, если значение тега не равно указанному значению
  • Обработка и сохранение данных OPC по событию от OPC сервера
  • Агрегация данных с нескольких серверов в один OPC сервер

Настройка DCOM и OPC на Windows 2008 и Windows 7

  • Часть 1. Установка OPC компонент, необходимых для функционирования OPC интерфейса.
  • Часть 2. Настройка DCOM и OPC. Создание пользователя и выдача прав.
  • Часть 3. Настройка брандмауэра Windows 2008 и Windows 7 для разрешения работы DCOM и OPC.
  • Часть 4. Настройка параметров DCOM. Dcomcnfg.
  • Часть 5. Настройка DCOM и OPC. Проблемы и их решение.
  • Часть 1. Установка OPC компонент, необходимых для функционирования OPC интерфейса.
  • Часть 2. Настройка DCOM и OPC. Создание пользователя и выдача прав.
  • Часть 3. Настройка брандмауэра Windows 8 и Windows Server 2012 для разрешения работы DCOM и OPC.
  • Часть 4. Настройка параметров DCOM. Dcomcnfg.
  • Часть 5. Настройка DCOM и OPC. Проблемы и их решение.

Bring in the Connection Point

NOTE: This only works if the event source interface is a , like our interface.

The next thing to do is to use ClassWizard to give us a class which will implement our connection point for us (!). Yes, we’ve finally arrived!! To do this, open up ClassWizard, click the Message Maps tab, click Add Class, and then click New, as shown below in Figure 2:

Figure 2. Adding a new class with ClassWizard.

The next thing to do is to specify the new class we want to add to our project. Since this class is (kind of) implementing an interface, that is, the dispinterface, we’ll call this class the class. Next, we specify that we want to derive this class from the MFC class, which helps us with all the COM implementation. People have often said that «MFC doesn’t really have any COM support besides that needed for OLE and UI stuff. And then, it only does dispinterfaces.» None of the preceeding sentence is entirely correct. MFC is great at helping us out with UI stuff, but I have seen example code (that works) where MFC is used to implement any interface you like, even in COM servers with non-dispinterface and non- interfaces! The class is the key.

Anyway, enough of my blathering. The last thing to do before we can click OK in the New Class dialog box is to click the Automation option button. This turns on the support in that we need to use; don’t worry, choosing this won’t even add so much as an .ODL file to your project, and you needn’t have checked ‘Automation’ in AppWizard to use this. When everything in the New Class dialog box is as it should be, it should look like Figure 3, below:

Figure 3. Specifying the settings for our new class in ClassWizard.

ClassWizard will add the class to your project, but it will whine because you didn’t specify Automation support in AppWizard. Since you didn’t, your project doesn’t have a file. Too bad for ClassWizard; it shows you the protest message below, but you can click OK and ignore it:

Figure 4. ClassWizard should just grow up, and quit its whining; but, oh well… Ignore this warning and click OK.

💡Как устранить ошибку ID 10036

Первое, что вы должны сделать, это установить все доступные обновления, как на стороне сервера, куда идет подключение, так и на стороне системы откуда идет подключение. Напоминаю, что последнего можно найти в тексте ошибки:

ID 10036: Политика уровня проверки подлинности на стороне сервера не разрешает пользователю ROOT\sem SID (S-1-5-21-551888299-3078463796-123456789-46162) с адреса 10.11.11.210 для активации DCOM-сервера. Повысьте уровень проверки подлинности активации, чтобы RPC_C_AUTHN_LEVEL_PKT_INTEGRITY в клиентском приложении.

Тут IP-адрес откуда идет подключение 10.11.11.210, там и нужно установить все возможные обновления безопасности.

Как только я обновился, ошибка EOleException ушла и мой Terminal Services Manager успешно подключился к серверу.

Если по каким, то причинам ваше приложение не заработало, а вам нужно, то есть лазейка до 2023 года в виде ключа реестра, который вы должны добавить на сервере, куда вы пытаетесь производить подключение. Запустите реестр Windows и перейдите в раздел:

HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\Ole\AppCompat

И создайте там ключ реестра с типом REG_DWORD (32-бита) с именем RequireIntegrityActivationAuthenticationLevel.

  • RequireIntegrityActivationAuthenticationLevel = 0x00000000 выключает политику
  • RequireIntegrityActivationAuthenticationLevel = 0x00000001 включает политику

не забываем после создания ключа в реестре Windows произвести перезагрузку сервера

Если и данный метод вам не помог, то как крайняя мера может быть, это удаление обновления. Посмотрите список установленных обновлений командой:

wmic qfe list

Дополнительные ссылки

  • https://docs.microsoft.com/en-us/windows/win32/rpc/authentication-level-constants
  • https://support.microsoft.com/en-us/topic/kb5004442-manage-changes-for-windows-dcom-server-security-feature-bypass-cve-2021-26414-f1400b52-c141-43d2-941e-37ed901c769c
  • https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-26414

Разработка трехуровневых приложений с помощью компонентов серверов

Традиционно термин клиент/сервер соотносится с приложением, выполняемым на
PC, которое связывается с базой данных, выполняемой на сервере. Это хорошее
решение для мелкого и среднего предприятия с количеством пользователей от 5 до
50. Однако, когда количество пользователей достигает 500 и более, поддержка
такой системы становится проблематичной (процесс увеличения числа пользователей
от одного до сотен тысяч обычно называется масштабируемостью (scalability)).
При каждом изменении в программном обеспечении необходимо переустановить
новое приложение на каждом клиентном компьютере. Этот процесс требует много
времени и средств, учитывая необходимость совместимости всех
компонентов.

Что касается приложений Internet и intranet, то они должны основываться на
работе с броузерами. Впрочем, если попытаться обслужить тысячи пользователей с
помощью простых сценариев CGI, то все закончится обеспечением одновременного
доступа к файлам или базе данных.

Сегодня компания Microsoft продвигает технологии OLE и ActiveX (термины, по
сути, являющиеся синонимами), которые предусматривают так называемую удаленную
автоматизацию. Фактически, удаленная автоматизация (remote automation) позволяет
приложению, выполняемому на компьютере РС1, соединиться и создать объект
автоматизации на компьютере РС2. Наиболее существенным здесь является не то,
что можно заниматься распределенной разработкой без углубленного знания
протоколов TCP/IP или NetBEUI, а переход к трехуровневой разработке приложений
на основе продуктов Microsoft.

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

Позднее Microsoft выпустила спецификацию распределенной модели СОМ
(Distributed СОМ — DCOM), улучшающую распределенный аспект объектов модели СОМ,
включая поддержку приложений Internet и intranet, но не затрагивающую
вопросы безопасности.

Недавно компания Microsoft объявила о выпуске сервера транзакций Microsoft
Transactions Server (MTS)
. Он не только решает все проблемы безопасности,
названные ранее, но и поддерживает обработку транзакций. Фактически теперь
серверы автоматизации OLE можно создавать в виде небольших, простых компонентов,
не нуждающихся в информации о внешнем мире.

Давайте рассмотрим пример применения сервера MTS. Располагая номером
банковского счета, можно создать два сервера автоматизации: один для внесения
денежного вклада со счета и другой для зачисления денег на счет. Теперь
необходимо сообщить об этих компонентах серверу MTS (запомните слово
компоненты). Для этого они устанавливаются не на клиентный компьютер, а на
сервер, выполняющий MTS.

Остается написать небольшое приложение, которое будет соединяться с сервером
MTS, начинать транзакцию, вызывать компонент для зачисления денег на счет,
вызывать компонент для снятия денег со счета и затем завершать транзакцию.
Обработка процессов, выполненных компонентами, ложится на сервер MTS. Если любой
из них заканчивается ошибкой, то сервер автоматически аннулирует всю
транзакцию.

Такая идеология выглядит странной. Требуется время на то, чтобы понять ее
преимущества. MTS выполняет серию транзакции, базирующихся на компонентах.
Обычно для этого используется язык SQL, который теперь становится ненужным.
Сервер MTS в состоянии обработать транзакцию самостоятельно с помощью механизма
MSDTC.

Сервер 1С:Предприятие на Ubuntu 16.04 и PostgreSQL 9.6, для тех, кто хочет узнать его вкус. Рецепт от Капитана

Если кратко описать мое отношение к Postgres: Использовал до того, как это стало мейнстримом.
Конкретнее: Собирал на нем сервера для компаний среднего размера (до 50 активных пользователей 1С).
На настоящий момент их набирается уже больше, чем пальцев рук пары человек (нормальных, а не фрезеровщиков).
Следуя этой статье вы сможете себе собрать такой же и начать спокойную легальную жизнь, максимально легко сделать первый шаг в мир Linux и Postgres.
А я побороться за 1. Лучший бизнес-кейс (лучший опыт автоматизации предприятия на базе PostgreSQL).
Если, конечно, статья придется вам по вкусу.

Настройка ПК с ОРС-сервером

Настройка DCOM на уровне компьютера

  1. Нажимаем Win+R или «Пуск-меню — Выполнить».
  2. В строке пишем dcomcnfg и нажимаем «Enter».
  3. В открывшемся окне ищем вкладку «Службы компонентов — Компьютеры — Мой компьютер».
  4. Нажимаем правой кнопкой мыши на «Мой компьютер» и нажимаем «Свойства».

Далее нажимаем:

«Свойства по умолчанию». Выставляем, как показано на рисунке

«Безопасность COM».

В разделе «Разрешение на запуск и активацию» нажать «Изменить ограничения».

Добавить группу «Distrebuted COM Users» или «Пользователи DCOM». И дать ей полные права.

Настройка пользователей Server и Scada.

Пользователь Server

1. Открываем «Управление компьютером», Открываем вкладку «Служебные программы — Локальные пользователи и группы — Пользователи». Добавляем пользователя Server.

2. Галочки расставляем, как на рисунке. Пароль — 0000 (или свой).

3. Добавляем пользователя «Server» в группу «Администраторы». Остальные группы у пользователя удаляем.

5. Открываем вкладку «Локальные политики — Назначение прав пользователя».

6. Добавляем пользователя Server в следующие политики : «Запретить локальный вход» и «Отказать в доступе к этому компьютеру из сети».

Пользователь Scada

  1. Открываем «Локальные пользователи и группы»
  2. Добавляем пользователя Scada, галочки и пароль — аналогично,как пользователю Server.
  3. Добавляем его в группу «Пользователи DCOM», отальные группы удаляем.
  4. В локальной политике безопасности запрещаем этому пользователю локальный вход.

Права DCOM компонентам OpcEnum и Tekon OPC Server

Настройка OpcEnum

  1. Открываем dcomcnfg.
  2. Открываем вкладку «Службы компонентов — Компьютеры — Мой компьютер — Настройка DCOM».
  3. В выпадающем списке, либо в окне с права ищем компонент «OpcEnum».
  4. Нажимаем на него правой кнопкой мыши и выбираем «Свойства».
  5. Во вкладке «Общие» параметр «Проверка подлинности» — выставляем » По умочанию».
  6. Во кладке «Безопасность» в разрешениях «на запуск и активацию» и «на доступ» выставляем «По умолчанию»
  7. Парамерт «на изменение настроек» не трогаем и нажимаем «ОК»

Настройка Tekon OPC Server

  1. Ищем в окне компонентов Tekon OPC Data Access Server (version 3.4)
  2. Наживаем правой кнопкой мыши — «Свойства»
  3. Во вкладке «Общие» параметр «Уровень проверки подлинности» выставляем «По умолчанию».
  4. Во кладке «Безопасность» в разрешениях «на запуск и активацию» и «на доступ» выставляем «По умочанию».
  5. Параметр «на изменение настроек» не трогаем и нажимаем «ОК».
  6. Открываем вкладку «Удостоверение» и указываем пользователя Server с его паролем на запуск приложения и нажимаем «ОК».

Настройка брандмауэра Windows

  1. Добавить правило во входящих подключениях для 135 ТСР порта. 
  2. Добавить правило во входящих подключениях для приложения «%SystemRoot%\SysWOW64\OpcEnum.exe» (или «%SystemRoot%\System32\OpcEnum.exe» , если у Вас 32-х разрядная ОС) .
  3. Добавить правило во входящих подключениях для приложения «%SystemDrive%\1Tekon\ASUD Scada\OPC Server\opcsrv.exe».
  4. Добавить правило в исходящих подключениях для приложения «%SystemDrive%\1Tekon\ASUD Scada\OPC Server\opcsrv.exe».
  5. Здесь же включить два правила «Наблюдение за виртуальной машиной (эхо-запрос — ICMPv4 — входящий трафик)» и «Наблюдение за виртуальной машиной (DCOM — входящий трафик)».

Замечание относительно версий АСУД.SCADA до 2.8.0

При настройке АСУД Scada версии до версии 2.8.0, на ПК с OPC-сервером дополнительно к указанным действиям должен быть создан:

  • пользователь, учетные данные которого  (логин и пароль) совпадают с учетными данными пользователя запускающего АСУД Scada на ПК со SCADA
  • пользователь, который был указан при регистрации подключения SCADA к ОРС-серверу.

Обычно, на Пультах-ПК — это пользователи:

  • dispatcher
  • adminscada.

Копирование числовых ячеек из 1С в Excel Промо

Решение проблемы, когда значения скопированных ячеек из табличных документов 1С в Excel воспринимаются последним как текст, т.е. без дополнительного форматирования значений невозможно применить арифметические операции. Поводом для публикации послужило понимание того, что целое предприятие с более сотней активных пользователей уже на протяжении года мучилось с такой, казалось бы на первый взгляд, тривиальной проблемой. Варианты решения, предложенные специалистами helpdesk, обслуживающими данное предприятие, а так же многочисленные обсуждения на форумах, только подтвердили убеждение в необходимости описания способа, который позволил мне качественно и быстро справиться с ситуацией.

Дополнительные сведения

Вам не нужно изменять код, чтобы разрешить клиентским приложениям создавать экземпляры удаленного сервера с помощью DCOM. Разница заключается в способе упаковки и развертывания клиента. Кроме того, после установки клиента и сервера необходимо внести некоторые параметры безопасности. Эти параметры можно задать с помощью служебной программы Dcomcnfg.

Ниже показано, как распространять и настраивать клиентское или серверные приложения. Приведите имя DCOMDemo_Svr и имя клиента DCOMDemo_Cli. Создайте отдельную папку для каждого из них. Для целей этой статьи вызовите эти папки .

Упаковка клиента

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

Укажите пакет клиента, выполнив следующие действия.

  1. Запустите мастер упаковки и развертывания, а затем выберите проект клиента.

  2. Нажмите кнопку «Пакет «. В диалоговом окне «Тип пакета» выберите стандартный пакет установки и нажмите кнопку » Далее».

  3. В диалоговом окне «Папка пакета» выберите папку для хранения пакета и нажмите кнопку » Далее». В этом случае это c:\DCOMDemo\Client\Package.

    Примечание.

    Может появиться диалоговое окно с сообщением об отсутствии сведений о зависимостях для сервера. Нажмите кнопку » ОК», так как этот сервер не имеет зависимостей.

    Теперь вы должны находиться в диалоговом окне «Включенные файлы».

  4. Отмените выбор исполняемого файла DCOMDemo_Svr.exe, так как вы не хотите распространять исполняемый файл сервера, а затем нажмите кнопку «Добавить».

  5. Измените поле со списком «Файлы типа» на «Файлы удаленного сервера» (*.vbr).

  6. Наведите указатель мыши на папку, в которой находится проект сервера ( в данном случае), и выберите связанный VBR-файл, DCOMDemo_Svr.VBR. Нажмите кнопку «Открыть», и диалоговое окно «Добавить файл» закроется.

    Примечание.

    Эти два файла включаются в DCOMDemo_Svr.VBRи DCOMDemo_Svr.TLB. Нажмите кнопку «Далее «. В диалоговом окне «Удаленные серверы» можно определить имя компьютера (Net Address), на котором запущен сервер. Обычно это поле пустое, так как заранее не знаете, где будет установлен сервер. Если оставить его пустым, при установке клиента вам будет предложено его выполнить. В этом примере оставьте его пустым.

  7. Для продолжения нажмите кнопку Далее. Теперь можно перейти к стандартным процедурам мастера упаковки и развертывания. В этом случае просто щелкните «Рядом со всеми оставшимися диалогами».

Исправление ошибки 10016 через PowerShell

Если вам не удалось изменить запуск службы для системы, то можно все поправить и избавиться от сообщений «APPID {9CA88EE3-ACB7-47C8-AFC4-AB702511C276} пользователю NT AUTHORITY\СИСТЕМА с ИД безопасности (S-1-5-18) и адресом LocalHost (с использованием LRPC), выполняемого в контейнере приложения Недоступно с ИД безопасности (Недоступно)» с помощью скрипта PowerShell. Открываем ссылку с Microsoft

https://gallery.technet.microsoft.com/Grant-Revoke-Get-DCOM-22da5b96

Или во тут

Скачать скрипт DCOMPermissions.psm1

Скачиваем тут сценарий DCOMPermissions.psm1

Кладем данный модуль в нужную вам папку. Далее вы открываете консоль PowerShell и переходите в месторасположение данного модуля, после чего его нужно импортировать:

Import-Module .\DCOMPermissions.psm1

Grant-DCOMPermission -ApplicationID «{9CA88EE3-ACB7-47C8-AFC4-AB702511C276}» -Account «SYSTEM» -Type Launch -Permissions LocalLaunch,LocalActivation -OverrideConfigurationPermissions

Если ошибок не вышло, то значит все успешно применено, перезагрузка не потребуется.

Далее вы можете посмотреть примененные разрешения:

Get-DCOMPermission -ApplicationID «{9CA88EE3-ACB7-47C8-AFC4-AB702511C276}» -Type Launch

Вы увидите права у системы, у нее будет SID S-1-5-10.

На этом у меня все, мы успешно устранили ошибку DCOM 10016.  Я должен подчеркнуть, что ошибка DCOM 10016 вряд ли повлияет на производительность вашей системы. В очень старые времена, когда Microsoft впервые представила «Distributed» в компонентной объектной модели, были уязвимости. Однако эти уязвимости были исправлены, и DCOM теперь безопасен. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Аннотация

Microsoft SQL Server предоставляет возможность загрузки и запуска объектов пользовательской объектной модели компонентов (COM) с помощью набора хранимых процедур OLE-автоматизации или расширенных хранимых процедур. По умолчанию COM-объекты на основе DLL загружаются как на сервере обработки. Это означает, что COM-объекты загружаются не только в адресное пространство памяти SQL Server обработки, но и имеют полный доступ к этому диапазону адресов памяти. Поэтому COM-объект, загруженный в SQL Server процесса, должен соответствовать тем же правилам, что и любой файл DLL. Существует вероятность того, что COM-объект может перезаписать память в SQL Server или утечку ресурсов, что может привести к нестабильной работе.

Если есть подозрение, что COM-объект может влиять на надежность процесса SQL Server, можно использовать действия, описанные в этой статье, чтобы создать экземпляр COM-объекта за пределами SQL Server процесса. Реализация спецификации DCOM для прозрачности расположения в операционной системе предоставила возможность запуска COM-объекта на основе DLL за пределами SQL Server процесса.

Процесс запуска COM-объекта на основе DLL за пределами адресного пространства основного приложения называется удаленным взаимодействием. Удаленное взаимодействие требует, чтобы другой исполняемый файл был суррогатным процессом вместо SQL Server исполняемого файла. Исполняемый файл по умолчанию, используемый диспетчером управления службами DCOM (Rpcss.exe), называется Dllhost.exe. Структура поддержки DCOM использует файл Dllhost.exe для загрузки библиотеки DLL в пространство процесса, а затем использует пары прокси-заглушки для прозрачного маршалирования запрашиваемого интерфейса клиенту, в данном случае это SQL Server. Этот исполняемый файл может одновременно принимать несколько запросов интерфейса или метода. После завершения использования интерфейса диспетчер управления службами DCOM (SCM) управляет очисткой и выгрузкой Dllhost.exe файла. Com-объекты не должны хранить сведения о состоянии между экземплярами.

Следующие действия могут применяться к любому COM-объекту на основе DLL, который создается в пространстве SQL Server процесса независимо от того, создается ли он с помощью или с помощью расширенной хранимой процедуры.

Быстрое создание Внешних Компонент на C#. Примеры использования Глобального Контекста, IAsyncEvent, IExtWndsSupport, WinForms и WPF

В большинстве случаев хватает и обычного COM объекта, учитывая, что в 8.х можно использовать события. Но иногда нужно использовать Глобальный Контекст для вызова глобальных функций, таких как Сообщить, NewObject и т.д. Кроме того, для использования форм нужен дескриптор окна 1С.
Это продолжение статей
Использование сборок .NET в 1С 7.x b 8.x. Создание внешних Компонент. http://infostart.ru/public/238584/
Там же лежат и исходники

.NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия
http://infostart.ru/public/417830/

1C Messenger для отправки сообщений, файлов и обмена данными между пользователями 1С, вэб страницы, мобильными приложениями а ля Skype, WhatsApp
http://infostart.ru/public/434771/

Использование классов .Net в 1С для новичков
http://infostart.ru/public/448668/

Шаг 92 — DCOM клиент и сервер для удаленного администрирования

Мы с Вами создадим клиента и сервер DCOM. Программирование объекта DCOM нечем не отличается от создание объекта COM. Вы воспользуемся ATL COM AppWizard. Создадим приложение NetRunning как EXE Server. К этому приложению добавим ATL класс как Simple Object с именем CCRun для подробностей смотрите «Шаг 10 — Создаем ActiveX с ATL» и создадим метод Run:

С кодом.

STDMETHODIMP CCRun::Run(BSTR bcstr)
{
	char chars;	
	wcstombs((CHAR*)&chars,(OLECHAR*)bcstr,sizeof(chars));
	WinExec(chars,SW_SHOW);
	return S_OK;
}

Можно компилировать и собирать. После этого нужно зарегистрировать элемент на сервере и клиенте. EXE сервер может регистрироваться сам если воспользоваться командой типа

имя_сервера.ехе /regserver

Теперь нужно создать клиента. Обычное приложение на базе диалогового окна с именем CTestRun. В проекте нужно добавить класс COM объекта на основе библиотеки типов.

Для подробностей смотрите «Шаг 11 — Тестируем элемент на VC». Теперь нам нужно добавить использование OLE в проект. В файл stdafx.h ссылку на библиотеки OLE.

#include // MFC support for Internet Explorer 4 Common Controls
#include "ole2.h"
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include // MFC support for Windows Common Controls

Экземпляр класса объекта в классе диалогового окна.

#include "netrunning.h"

class CCTestRunDlg : public CDialog
{
// Construction
public:
	CCTestRunDlg(CWnd* pParent = NULL);	// standard constructor
	ICRun ci;
// Dialog Data
	//{{AFX_DATA(CCTestRunDlg)
........
};

Инициализаций OLE и связь с объектом при запуске приложения.

BOOL CCTestRunDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	AfxOleInit();
	if (!ci.CreateDispatch("NetRunning.CRun.1")) return FALSE; 
	// Add "About..." menu item to system menu.
................
}

Ну и реакция на нажатие на кнопку.

void CCTestRunDlg::OnButton1() 
{
CComBSTR bstr("c:\\Temp\\Notepad.exe");
ci.Run(&bstr); 
}

Настройка нужна и DCOM. На клиенте переадресация запроса на сервер. На сервере разрешения быть сервером DCOM и разрешение пользователю использовать DCOM. Подробнее смотри «Шаг 89 — Удаленный запуск компонентов DCOM» и «Шаг 90 — DCOM и безопасность». Итак, давайте общие шаги.

  1. Создать COM объект любыми средствами (ATL, WIN32 API, VB, DELPHI).
  2. Создаем клиента любыми средствами
  3. Переадресовываем клиента на сервер
  4. На сервере разрешаем клиенту пользоваться DCOM

Сама простая ошибка если не будет работать заключается в том что на сервере нет библиотек необходимых объекту для выполнения. Например, msvcrt.dll. Честное слово я два часа бился над запуском компонента только из за того что у клиента не было необходимых DLL. Итак, на клиенте надо, что бы помимо объекта были динамические библиотеки, с котором этот объект связан.

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


Загрузить проект | Предыдущий Шаг | Следующий Шаг | ОглавлениеАвтор Каев Артем — 22.08.2001

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Работатека
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: