首页 文章

使用TFS 2010,COM DLL注册失败

提问于
浏览
2

我有一个在VS 2010中创建的C DLL项目 . 它公开为COM(ATL) . 我将这个dll用作另一个.NET项目作为参考 . C项目链接器设置如下:

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

我创建了一个构建定义来在tfs 2010中构建这两个项目.C Project构建正常,但.NET项目失败,因为C项目的输出dll未注册 . 设置为“每用户重定向”= false不起作用 . 我也尝试使用WF活动'InvokeProecss'来使用Regsrv32 /批处理文件/我自己的exe等注册c dll,但我得到退出代码5.我的TFS 2010在Windows 2008 Server R2中 . 我认为,它不是以管理员身份运行流程 .

如果我使用tlbimp生成一个interop dll,然后我在我的.NET proejct中引用interop,它工作正常(显然在tfs构建中,我需要添加InvokeProecss来调用tlb) . 但这是不可接受的,因为我们的一般做法是直接从.NET proejct引用COM dll .

有人可以帮忙吗?

有没有办法在不提示输入用户名/密码的情况下以管理员身份运行tfs自动构建活动'InvokeProcess'?

1 回答

  • 2

    默认情况下,TFS构建服务作为“网络服务”帐户运行,该帐户是一个相对低权限的帐户 . 或者,您可以将其配置为以您喜欢的任何域帐户运行 . 但是,我不建议将其作为您所描述问题的解决方案 . 我同意汉斯的观点,在这种情况下,最好使用类型库导入程序(TlbImp.exe)从托管程序集“引用”您的COM服务器 .

    如果COM对象没有更改,您可以使用类型库导入程序生成互操作程序集,检查它并从.NET项目中引用它 . 如果它正在更改,您可以添加生成后步骤以生成互操作程序集,而不是使用InvokeProcess活动 . 正如Hans指出的那样,您无法直接从托管程序集引用COM对象 . 您的引用实际上导致在解析对已注册的COM服务器的引用后,在构建时生成interop程序集 .

相关问题