2011-02-27 34 views
1

对于在Web中注册.NET COM对象的每个示例,我都会看到用于执行此工作的工具“regasm”。每个人都这样做!
但它从来没有为我工作!我厌倦了试图克服它!我唯一的解决方案是regsvr32,它需要一个我只能在C++中定义的函数。
请告诉我为什么它不工作!regasm不起作用

考虑到它不适用于我所有的4台电脑以及3台运行Windows 7的虚拟机,任何人都可以给我看一个regasm调用的实例吗?我认为我是个白痴。

+0

你能为我们定义“不起作用”吗? –

回答

8

注册[ComVisible] .NET程序集与Regsvr32.exe是不可能的。它没有Regsvr32需要的所需的DllRegisterServer入口点。您将不得不使其与Regasm.exe或安装项目一起使用。当您将服务器部署到另一台计算机时,后者是必需的。

失败模式很少。除以外:

  • 忘记使用/ codebase选项。如果您未将程序集部署到GAC,则是必需的,这是开发人员不应该执行的操作。

  • 使用Regasm.exe的错误版本。在64位计算机上有两个,如果客户端代码是64位,则Framework64目录包含您必须使用的目录。

  • 从未提升的命令提示符运行它。 Regasm.exe写入注册表的HKLM配置单元,这是UAC主动阻止的。这是Vista和Win7上的问题。

刚刚得到程序集严重错误当然也有可能。如不制作一个或多个接口和/或类[ComVisible]。

+0

Visual C++(.NET)可以执行DLLRegisterServer,这就是为什么我可以使用regsvr32。无论如何,我猜,这个/ codebase选项应该是关键。 – Vercas

+1

'/ codebase'就是答案。非常感谢您最终打开我的shell编程的方式! – Vercas

0

其可能的,我以前这样的挑战,我跑在cmd窗口这段代码,它的工作 我发现它依赖于.NET Framework的版本的组件上 BUIT复制并粘贴下面

代码
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\regasm.exe MyAssembly.dll 

如果它对您有用,敬请投票。