-
r.o.o.t (20.11.07 12:55) [0]Господа нужна помощь пишу сервис в котором имеется COM сервер
с определеным списком методов... ну эт неважно
важно следующее что клиенты использующие этот COM сервер реализованный в сервисе работают как то странно а именно при подключении COM сервер работает потом выдает диалоговое окно и связь рвется.....
взял пример из
Автор: Набережных С.Н.
Дата: 30.10.2005 г.
Пример создания двух типов серверных COM объектов в сервисе.
http://kladovka.net.ru/index.cgi?pid=dir&rid=24
но данный пример вообще отказывается работать клиенты немогут даже подключится к серверу пишет что доступ запрещен.
прошу дайте разумную информацию по данной тематике что как и зачем
если такова есть.... -
clickmaker © (20.11.07 15:02) [1]
> доступ запрещен
это надо в dcomcnfg настраивать. Вкладка Security - Access Permissions -
r.o.o.t (20.11.07 15:10) [2]ок разобрался
а как это сделать программно через реестр например или есть какянибудь функция например?? -
clickmaker © (20.11.07 15:12) [3]CoInitializeSecurity
-
ага (20.11.07 16:38) [4]Там в comservice2.zip утилита лежит для програмной настройки защиты. Она же тут с исходникам cacnfg.zip http://kladovka.net.ru/index.cgi?pid=dir&rid=4
-
r.o.o.t (21.11.07 10:17) [5]Ошибка при выполнении приложения-сервера
в каких случаях появляются такие ошибки
код вот что делаю нетак???
const
AppID: TGUID = '{D6A9EA53-5E1A-4103-AF8C-9DB909C74227}';
AppDescription = 'RpcProc Object';
.....
procedure TService1.ServiceAfterInstall(Sender: TService);
begin
CoInitialize(nil);
try
ComServer.LoadTypeLib;
SvcComObjFact:=TAutoObjectFactory.Create(ComServer, TRpcProc, Class_RpcProc,
ciMultiInstance, tmApartment);
// Теперь регистрируем...
ComServer.UpdateRegistry(true);
RegisterComApplication(AppID, CLASS_RpcProc, AppDescription, false);
RegisterComService(DisplayName, AppID);
// Удалять фабрики нет нужды, это сделает ComServer
finally
CoUninitialize;
end;
end;
.....................................................
procedure TService1.ServiceExecute(Sender: TService);
begin
CoInitialize(nil);
try
// Загружаем библиотеку типов и создаем фабрику
ComServer.LoadTypeLib;
SvcComObjFact:=TAutoObjectFactory.Create(ComServer, TRpcProc, Class_RpcProc,
ciMultiInstance, tmApartment);
try
// Регистрируем нашу фабрику в COM.
// После этого клиенты смогут использовать ее для создания объектов.
SvcComObjFact.RegisterClassObject;
repeat
ServiceThread.ProcessRequests(true);
until Terminated;
finally
// Пора завершаться, извещаем поток и удаляем его
// Раз сервис остановлен, то и фабрика больше не нужна.
FreeAndNil(SvcComObjFact);
end;
finally
CoUninitialize;
end;
end;
соответвенно интерфейс
IRpcProc = interface(IDispatch)
['{16AE828E-077F-41E6-AE8B-847BDBE029DF}']
CLASS_RpcProc: TGUID = '{78ED3DEF-6988-43F3-8EC4-7BD8496DAA46}';
в чем может быть загводка??? -
r.o.o.t (21.11.07 10:19) [6]ошибка появляется при обращение клиента к серверу вот код
II:=CoRpcProc.Create;
II.QueryInterface(IRpcProc,Server);
где
CoRpcProc = class
class function Create: IRpcProc;
class function CreateRemote(const MachineName: string): IRpcProc;
end;