Сбой регистрации COM DLL в TFS 2010 - PullRequest
2 голосов
/ 01 августа 2011

У меня есть C ++ DLL проект, который создан в VS 2010. Он выставлен как COM (ATL). Я использовал эту DLL для другого .NET Project в качестве ссылки. Настройки компоновщика проекта C ++ установлены следующим образом:

­"Register Output" = Yes
"Per-user Redirection = Yes

Я создал определение сборки для сборки этих двух проектов в tfs 2010. C ++ Project работает нормально, но проект .NET завершается неудачно, поскольку выходная dll проекта C ++ не зарегистрирована. Установка «Перенаправление на пользователя» = false не работает. Я также попытался с помощью активности WF 'InvokeProecss' зарегистрировать dll c ++, используя Regsrv32 / batch file / mye exe и т. Д., Но я получил код выхода 5. Мой TFS 2010 находится в Windows 2008 Server R2. И я думаю, что он не запускает процесс от имени администратора.

Если я создаю dll взаимодействия с использованием tlbimp, а затем ссылаюсь на это взаимодействие в моем проекте .NET, оно работает нормально (очевидно, в сборке tfs мне нужно добавить InvokeProecss для вызова tlb). Но это неприемлемо, поскольку наша общая практика - ссылаться на COM-dll напрямую из проекта .NET.

Может кто-нибудь помочь с этим?

Есть ли способ запустить действие автоматической сборки tfs 'InvokeProcess' в качестве администратора без запроса имени пользователя / пароля?

1 Ответ

2 голосов
/ 02 августа 2011

По умолчанию служба сборки TFS запускается как учетная запись «Сетевая служба», которая является учетной записью с относительно низкими привилегиями. Кроме того, вы можете настроить его для работы под любой учетной записью домена, который вам нравится. Однако я бы не рекомендовал это в качестве решения описанной вами проблемы. Я согласен с Гансом, что в этом случае было бы лучше использовать импортер библиотек типов (TlbImp.exe) для «ссылки» на ваш COM-сервер из управляемой сборки.

Если объект COM не изменяется, вы можете просто использовать импортер библиотек типов для генерации сборки взаимодействия, проверить это и сослаться на него из своего проекта .NET. Если меняется , вы можете добавить шаг после сборки, чтобы сгенерировать сборку взаимодействия, вместо использования действия InvokeProcess. Как указывал Ханс, вы не можете ссылаться на COM-объект напрямую из управляемой сборки. Ваша ссылка фактически заставляет сборку взаимодействия генерироваться во время сборки после разрешения ссылки на зарегистрированный COM-сервер.

...