Создал по примеру сервис.
В ServiceMain после инициализации сервиса делаю:
CoInitialize(nil);
try
TServerApplicationFactory.Initialize;
try
WaitForSingleObject(WorkEvent, INFINITE);
finally
TServerApplicationFactory.Finalize;
end;
finally
CoUninitialize;
end;
Где WorkEvent - установится когда сервис получит сообщение Stop или Shutdown.
В TServerApplicationFactory.Initialize выполняю настройку безопасности и регистрирую фабрику:
Hr := CoInitializeSecurity(
nil,
-1,
nil,
nil,
6,
3,
nil,
0,
nil
);
Hr := CoRegisterClassObject(
CLASS_Application,
FFactory,
CLSCTX_REMOTE_SERVER,
REGCLS_MULTIPLEUSE,
TServerApplicationFactory.FRegID
);
Инсталлирую сервис.
В реестре в AppId вписываю имя службы.
Затем делаю попытку создать объект:
CoInitialize(nil);
ZeroMemory(@ServerInfo, SizeOf(ServerInfo));
ServerInfo.pwszName := 'CAT';
ServerInfo.pAuthInfo := @AuthInfo;
AuthInfo.dwAuthnSvc := 10;
AuthInfo.dwAuthzSvc := 0;
AuthInfo.pwszServerPrincName := nil;
AuthInfo.dwAuthnLevel := 6;
AuthInfo.dwImpersonationLevel := 3;
AuthInfo.pAuthIdentityData := nil;
AuthInfo.dwCapabilities := 0;
ZeroMemory(@QI, SizeOf(QI));
QI.IID := @IID_IApplication;
OleCheck(
CoCreateInstanceEx(
CLASS_Application,
nil,
CLSCTX_REMOTE_SERVER,
@ServerInfo,
1,
@QI));
CoUninitialize;
В итоге сервис запускается (без ошибок при вызовах), а через некоторое клиент выдает:
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EOleSysError with message 'Ошибка при выполнении приложения-сервера'.
---------------------------
Break Continue Help
---------------------------
При этом нет даже попыток вызовов методов фабрики.
Вопрос: почему, собственно, объект не создается?