В 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.
Спасибо.