Суть проблемы такова:
У меня есть out-of-process OLE компонент (назовём его EXE1), который установлен на той же машине, что и MSSQL Server. Я запускаю EXE1 (у него есть и графический интерфейс) и пробую подключится к нему локально клиентским приложением — например, вызывая CoCreateInstance. Работает всё следующим образом — создаётся новый ко-класс, но в уже запущенном процессе EXE1. Это мне и нужно, т.к. я использую из ко-класса глобальные переменные компоненты.
Но, при использовании хранимой процедуры sp_OACreate, происходит такая штука — SQL-сервер стартует новый инстанс процесса EXE1, несмотря на то, что один уже существует. Понятно, что он совсем новый, не инициализированный и нифига уже не работает.
Подскажите, можно ли какими-то настройками заставить SQL подключаться к уже существующему процессу? Либо иначе построить ЕХЕ-компоненту? Может какие-то ещё соображения на эту тему будут?
Спасибо, в принципе, действительно стоило искать в направлении Security.
Оказывается по умолчанию для local server'a такая переменная как Application Identity ставится в launching user. Это значит, что каждый аккаунт использует свой инстанс сервера — а получается, что мой OLE-сервер работает под залогиненным пользователем, а SQL server — под SYSTEM аккаунтом. Если её поставить в interacting user, то все аккаунты будут использовать инстанс сервера, запущенного под залогиненным пользователем. Изменить её можно через HKEY_CLASSES_ROOT\AppID\{идентификатор сервера}\RunAs, либо в утилитке dcomcnfg найти свой сервер и на вкладке Identity выставить interacting user.