Могут ли процессы в сеансе 0 совместно использовать внепроцессный COM-сервер?

В Windows 7 у меня есть COM-сервер вне процесса, скажем, «MyComServer.exe». Я регистрирую его как CLSCTX_LOCAL_SERVER и REGCLS_MULTIPLEUSE | REGCLS_SUSPENDED.

В интерактивных сеансах, номер сеанса > 0, запускается только один экземпляр моего MyComServer.exe, независимо от того, сколько запущено клиентов. Скажем, я запускаю 5 Excel, 3 Matlab и 7 других, используя мой COM-сервер, я вижу только 1 MyComServer.exe. Это нормально, это то, что я имел в виду.

Если несколько сеансов активны, скажем, сеансы 1, 2 и 3, то я вижу 3 экземпляра MyComServer.exe. Используя список задач, я вижу, что каждый экземпляр работает в другом сеансе. Это тоже хорошо, как я и предполагал.

Однако, если я использую его из сеанса 0, я вижу экземпляр для каждого клиента. Скажем, у меня есть 3 службы Windows, все они используют его, тогда я вижу 3 экземпляра MyComServer.exe. Используя список задач, я вижу, что все 3 из них работают в сеансе 0. Могут ли процессы в сеансе 0 совместно использовать внепроцессный COM-сервер, пожалуйста?

Изучая эту проблему, я заметил, что PostMessage не работает между процессами в сеансе 0. Читая документацию, я понимаю, что PostMessage не должен пересекать сеансы, то есть процесс в сеансе 0 не может отправлять сообщение процессу в сеансе 1. У меня есть заметил, что хотя процесс в сеансе 1 может отправить сообщение другому процессу в том же сеансе, процесс в сеансе 0 не может отправить сообщение любому другому процессу, даже если цель также работает в сеансе 0. Может кто-нибудь подтвердить это? Кажется, это противоречит документации Microsoft.

Спасибо.


person McPolu    schedule 17.03.2014    source источник


Ответы (1)


Начиная с Vista, сеанс 0 содержит только службы и системные процессы. Пользовательские приложения запускаются в сеансе 1, 2 и т. д.

PostMessage и SendMessage не работают в сеансе 0. Невозможно отправить сообщение через границы сеанса. Что касается отправки сообщений в сеансе 0, то это не имеет смысла, так как в этом сеансе есть только службы и системные процессы.

Что касается COM, вы должны заметить, что изоляция сеанса 0 также применяется к серверным приложениям COM+ и внепроцессным приложениям COM, работающим не под интерактивным пользователем. См. сеанс 0. изоляция, COM и COM+:

Изоляция сеанса 0 не ограничивается службами NT. Это также относится к серверным приложениям COM+ и внепроцессным приложениям COM, работающим не под интерактивным пользователем. Таким образом, все проблемы, связанные со службами, находящимися в другом сеансе сервера терминалов от первого пользователя, вошедшего в систему, теперь также относятся к процессам dllhost (COM+ или суррогатные DLL-библиотеки COM) и приложениям COM-сервера.

person Marius Bancila    schedule 23.04.2014