Главная страница
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.023 c
6-6171
NewD
2003-12-26 13:46
2004.03.03
Как переадресовать запрос на др. комп. в др. сети


1-6047
jiurajhgjhgty
2004-02-18 21:32
2004.03.03
Создание Upgrade-ов к программам


14-6223
Skier
2004-02-11 10:59
2004.03.03
Никто не поделится документацией ?


3-5948
Zilog
2004-02-05 16:39
2004.03.03
как програмно менять порядок столбцов (Fields) в комоненте Query?


14-6211
syte_ser78
2004-02-11 14:45
2004.03.03
Мастера, обьяснить плиз тупому...