注册regasm和regsvcs

时间:2011-11-08 20:13:19

标签: .net com com+

我有以下问题:是否有可能使用Regasm和Regsvcs注册.NET程序集正文?感谢

1 个答案:

答案 0 :(得分:22)

这是该问题的超时响应。但是让我解释一下我所知道的差异。

为了理解这一点,你必须想出COM和COM +应用程序之间的区别。

将您的类型注册为COM - 每次代码尝试初始化对象时按需创建对象

将您的类型注册为COM +应用程序 - 创建对象,支持对象池,支持事务,支持增强的Windows安全性等。

为了理解合并,我正在借用http://www.tek-tips.com/viewthread.cfm?qid=116249

的回复
  

COM +增加可伸缩性和性能的主要方法是通过对象池完成的。不幸的是,这需要一个自由线程组件,这是VB6无法做到的。但是...... .NET(任何语言)和C ++都可以。

     

对象池的作用是告诉MTS / COM +创建一个可用对象池,从COM +启动时创建的最小值到最大值(我不知道它是否是硬盘最大值,或者它是否是灵活)。池为您做的是为调用者提供预先初始化的对象。这比等待创建对象(特别是通过网络)快得多。调用者连接到对象,进行方法调用和断开连接。然后该对象返回池中。

     

它确实需要对程序架构进行根本性的改变。在COM +之前,每个人都会打开与数据库的连接,并在应用程序期间保持打开状态。当用户数量<100时,这是可以的,因为服务器上的负载是可管理的(每个连接占用RAM)。但是对于大量人群或未知数量的用户(例如来自Internet的用户),数据库服务器很快就会过载。有人意识到每个交易用户实际上只在很小的时间内完成了实际工作 - 剩下的时间他们都是空闲的。

     

因此,您的程序必须建立连接,发出请求,获取结果,然后断开连接(这也适用于非数据库对象)。这也意味着应用程序是无状态的(程序状态不在请求之间维护)。因为......您当前使用的对象在200毫秒之前属于其他人。当您使用该对象时,另一个用户将在您之后使用它。因此,对象无法保留任何信息 - 它们必须只是代码。

regasm - 将.net程序集类型注册为COM。这意味着regasm挑选了.Net程序集的公开暴露类型,然后在HKCR编写适当的注册表项.... (这是regsvr32的工作方式)。

  • regasm可以为您生成一个tlb文件(就像tlbexp.exe一样)
  • regasm可以为您的.Net程序集编写代码。也就是说,如果您在GAC中没有.Net程序集,那么您可以将COM编码到.Net程序集所在的文件位置。从这里开始,COM Marshaller将选择使用CLR执行程序集。
  • regasm允许您通过双击来创建.reg文件,您可以更新注册表项。你必须确保将.Net程序集安装到GAC中,因为regasm中的select / regfile开关不允许你/ codebase(如果它代码库那么它没有意义)

regsvcs - 从.Net程序集创建COM +应用程序。这意味着regsvcs会选择公开的.Net程序集类型,除了编写相应的注册表项之外,它还会创建一个COM +应用程序,您可以通过Componet Services Manager控制台管理它(%systemroot%\ system32 \ comexp.msc )。

  • regsvcs根据从命令行传递给它的信息或基于.Net dll中的信息创建COM +应用程序。

  • regsvcs允许您将COM +类型合并到现有的COM +应用程序。看一下comexp.msc来遍历以了解COM +应用程序以及COM +管理的COmponets。

如果你用ComVisible编写一个C#类(true) - &gt;这个类的公共类型(Foo)已经准备好注册COM了。

    // Set the COM visibility attribute to true
[ComVisibleAttribute(true)]
public class Foo{....}

如果你编写一个带有ComVisible(true)的C#类,继承自System.EnterpriseServices.ServicedComponent(当然还有更多设置......) - &gt;这个类(FooBar)已准备好注册为COM +应用程序。

    // Set the COM visibility attribute to true
[ComVisibleAttribute(true)]
  public class FooBar: System.EnterpriseServices.ServicedComponent{.....}

从.Net创建COM +应用程序 - 您可以从这里开始。记住COM +为COM公开的对象提供高级的transaaction mangement。

http://support.microsoft.com/kb/306296 http://my.execpc.com/~gopalan/dotnet/complus/complus.net_accountmanager.html http://www.codeproject.com/Articles/3845/Creating-COM-Objects-using-EnterpriseServices-in-N