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

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

92_1.gif (3911 b)

С кодом.

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

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

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

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

92_2.gif (2712 b)

Для подробностей смотрите "Шаг 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