Мы с Вами создадим клиента и сервер DCOM. Программирование объекта DCOM нечем не отличается от создание объекта COM. Вы воспользуемся ATL COM AppWizard. Создадим приложение NetRunning как EXE Server. К этому приложению добавим ATL класс как Simple Object с именем CCRun для подробностей смотрите "Шаг 10 - Создаем ActiveX с ATL" и создадим метод Run:
С кодом.
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 объекта на основе библиотеки типов.
Для подробностей смотрите "Шаг 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 и безопасность". Итак, давайте общие шаги.
Сама простая ошибка если не будет работать заключается в том что на сервере нет библиотек необходимых объекту для выполнения. Например, msvcrt.dll. Честное слово я два часа бился над запуском компонента только из за того что у клиента не было необходимых DLL. Итак, на клиенте надо, что бы помимо объекта были динамические библиотеки, с котором этот объект связан.
В прилагаем проекте есть и клиент и сервер. Попробуйте очень приятно запускать приложение на удаленном компьютере еще приятнее что мы можем сделать это сами.