Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.03;
Скачать: CL | DM;

Вниз

Принудительная регистрация OLE-сервера   Найти похожие ветки 

 
den777   (2004-02-18 15:17) [0]

В программе есть OLE-сервер. При старте программы соотвественно происходит принудительная регистрация OLE-сервера. Но в Win2000 если у пользователя нет определенных прав программа выдает ошибку и вылетает. Понятно что можно запустить программу один раз от "АДМИНИСТРАТОР" и потом спокойно работать. Но чаще всего в OLE-сервере, который встроен в мою программу, нет необходимости. Вопрос - можно ли запустить EXEшник без регистрации OLE-сервера или написать коды программы так, чтобы OLE-сервер регистировался только при определенных входных параметрах (не при REGSERVER, а при каком-то определенном мной параметре).


 
Digitman ©   (2004-02-18 15:20) [1]

где и как у тебя в приложении выполняется регистрация ?


 
den777   (2004-02-18 15:35) [2]

unit comserv.pas

procedure InitComServer;
begin
if SaveInitProc <> nil then TProcedure(SaveInitProc);
ComServer.FStartSuspended := (CoInitFlags <> -1) and
Assigned(ComObj.CoInitializeEx) and Assigned(ComObj.CoResumeClassObjects);
ComServer.Initialize; в этом методе и происходит регистрация
if ComServer.FStartSuspended then
ComObj.CoResumeClassObjects;
end;

initialization
begin
OleAutHandle := SafeLoadLibrary("OLEAUT32.DLL");
ComServer := TComServer.Create;
if not ModuleIsLib then
begin
SaveInitProc := InitProc;
InitProc := @InitComServer;
AddTerminateProc(@AutomationTerminateProc);
end;
end;

А в моих кодах соответственно есть
TMyAutoObject = class(TAutoObject, IConnectionPointContainer, IcoPP)

и

uses ComServ;

Наверное отсюда можно что-то понять, а иначе еще много кодов вставить придется.


 
just me   (2004-02-18 15:47) [3]

Посмотри реализацию конструктора класса TComServer - с помощью параметров командной строки этим можно управлять


 
Digitman ©   (2004-02-18 16:04) [4]

думаю, нужно каким-то образом сделать условным выполнение кода, выделенного жирным :

initialization

TAutoObjectFactory.Create(ComServer, TMyAutoObject, Сlass_MyAutoObject, ciMultiInstance, tmApartment);


 
den777   (2004-02-18 16:46) [5]


> думаю, нужно каким-то образом сделать условным выполнение
> кода, выделенного жирным :


Думаю это как раз никак не повлияет. Из приведенных мною выше кодов стандартного UNITа DELPHI comserv.pas следует что регистрация происходит не при создании класса TAutoObjectFactory, а при инициализации модуля comserv.pas. А вот на секцию initialization UNITA comserv.pas повлиять не удасться. Есть предположение переписать TComServer описанный в этом юните и перекрыть TComServer.Initialize в котором выполнять UpdateRegistry(FStartMode <> smUnregServer) по какому-либо условию. Соответственно сделав потом что-то типа TAutoObjectFactory.Create(ComServerMy ...) я смогу управлять процессом регистрации.Но как-бы потом это не аукнулось в каком-нибудь другом месте. Есть ли мнения на данный счет.


 
den777   (2004-02-18 18:22) [6]

Может кто-нибудь еще выскажется.


 
Бином Ньютоныч   (2004-02-18 21:15) [7]

Регистрация класса производится его фабрикой - метод UpdateRegistry.
Если не создавать фабрику в инициализации, то и регистрации не будет. Но при этом, возможно, придется вручную загрузить библиотеку типов, если этот класс - единственный, который ее использует.


 
den777   (2004-02-18 21:40) [8]

Действительно, так оно и есть. Сразу и не понял смысла строки 9, а ведь именно в ней и производится вызов метод UpdateRegistry всех фабрик.

1 procedure TComServer.UpdateRegistry(Register: Boolean);
2 begin
3 if FTypeLib <> nil then
4 if Register then
5 RegisterTypeLibrary(FTypeLib, GetModuleFileName) else
6 UnregisterTypeLibrary(FTypeLib);
7 FRegister := Register;
8 ComClassManager.ForEachFactory(Self, FactoryUpdateRegistry);
9 end;

Спасибо за ответ и Digitmanу. Сразу не разобрался, а ответ по сути правильный.



Страницы: 1 вся ветка

Текущий архив: 2004.03.03;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.02 c
14-6204
BALU1111
2004-02-11 12:31
2004.03.03
Продолжение вопроса Intel vs AMD


3-5958
alex-ran
2004-02-05 15:11
2004.03.03
Запросы на вставку и Исключения


1-6066
Creator
2004-02-21 14:05
2004.03.03
Caption активного окна


1-6124
111
2004-02-21 19:08
2004.03.03
Таблицы


1-6078
ddrum
2004-02-20 19:29
2004.03.03
помогите оптимизировать код