2016-07-22 11 views
0

Есть ли хороший способ программно получить путь зарегистрированного COM-сервера в C#?Как мне получить путь к зарегистрированному серверу COM в C#?

У нас есть COM-сервер вне процесса (т. Е. Exe-файл), который мы ссылаемся в нашем проекте C#; однако мы хотим обеспечить, чтобы мы запускали COM-сервер из определенного места, поэтому мы должны проверить путь к зарегистрированному exe-файлу перед его запуском. Есть ли хороший способ сделать это, помимо погружения в реестр?

+2

Использование реестра фактически документировано, например, ключ LocalServer32: https://msdn.microsoft.com/en-us/library/windows/desktop/ms683844.aspx –

+0

Нет, нет хорошего способа. Просто не полагайтесь на оракула, когда сам сервер может тривиально сказать вам. –

ответ

0

Функция QueryPathOfRegTypeLib делает именно это.

Однако, я заметил странную причуду:

Если я первый регистр с одного пути на каждый пользователь основе:

C: \ Path1 \ comserver.exe/regserverperuser

и затем зарегистрировать другого пути на системном уровне основы:

C: \ Path2 \ comserver.exe/RegServer

Тогда QueryPathOfRegTypeLib возвращает C: \ Path1 \ comserver.exe, но на самом деле это c: \ Path2 \ comserver.exe, который запускается при загрузке библиотеки типов ...