我有一个C# Web服务项目。我创建了一个客户机,它创建并管理到服务的连接。我们有一个用C++编写的旧PC产品,它们需要有一个接口来调用服务。我在客户机上为它们创建了一些调用,并创建了COM可见的新对象来传递数据。然后,我选中项目设置中的“Register for COM interop”框。这一切似乎都是在本地构建和工作的(我以管理员的身份运行visual studio)。但是当我在TFS服务器上签入时,构建失败,说明:无法注册程序集“MyClient.dll”-访问被拒绝。请确保您正在以管理员身份运行应用程序。拒绝访问注册表项“HKEY_CLASSES_ROOT\MyClient.MyClass”。有没有办法在构建机器上提升我的令牌,或者有没有其他方法来解决这个问题?
4条答案
按热度按时间wtlkbnrh1#
您需要使用构建定义的process参数中的MSBuildArguments选项将以下值传递给MSBuild。
/p:RegisterForComInterop=false
rxztt3cl2#
我想到了一个办法让它工作!如果查看项目中的XML,您会看到如下所示的节点:
这里的问题当然是告诉项目注册com互操作的那一行。我还看到了发布配置的类似定义。我可以通过删除这一行来解决这个问题,或者通过UI,取消选中框,但我在项目上有其他人需要获得代码,如果项目的版本在源代码控制中只是为他们工作,那就更好了。答案是取消选中发布定义上的寄存器互操作框,但将其保留在调试定义上,然后将构建TFS定义更改为仅为发布而构建。这样,我的同事就可以拥有com对象,构建服务器也不会抱怨。
kg7wmglp3#
您的TFS构建代理可能正在某个服务帐户下运行,因此该帐户需要提升的特权。您需要将服务帐户添加到生成服务器上的管理员组。
但是,您的TFS管理员可能不想这样做。即使给帐户额外的权限不是问题,他们也可能会对您的构建对注册表进行“操作”有问题。
你can call COM components from c++ without needing to register them
This article上注册免费COM去更多细节
tcomlyy64#
我也发现了这个症状,但这是因为Windows更新公开根据公司的政策,并遵循JonesCola的建议。