Есть такой код:
ClassID := ProgIDToClassID(AProgID);
HRes := GetActiveObject(ClassID, nil, Unknown);
if Failed(HRes) then
HRes := CoCreateInstance(ClassID, nil, CLSCTX_SERVER, IUnknown, Unknown);
...
работа с Unknown
...
Если нужный OLE-объект (Outlook) уже запущен, возвращается запущенный экземпляр, иначе запускается новый.
Проблемы начинаются, если Аутлук или приложение запущено с администраторскими привилегиями, или же приложение запущено в режиме совместимости с XP. В таком случае вызов CoCreateInstance длится 30 секунд и возвращает CO_E_SERVER_EXEC_FAILURE или E_ACCESSDENIED. Как создать OLE-объект с правами приложения? Чревато ли это проблемами с безопасностью?