为了分布式和多客户端调用我们还需要将写好的COM组件发布到一台服务器上。这里我们将组件部署到操作系统的COM+应用程序中去。如果没此需要就可以导出后,在C++环境中调用COM了。
第一步:导出COM组件。我们可以使用regasm.exe(导出并在本机注册)或tlbexp.exe(只导出不注册,在C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727中,也可以拷贝到你要的目录中,以前1.1时不行的,还需要调用vsvars32.bat才可以使用)我们也写各bat文件。
gacutil -i SayHello.dll(将强命名的程序集添加到全局缓存中去,不然在运行的时候会报找不到文件的错误)
regasm SayHello.dll /tlb(生成我们需要的tlb文件)
第二步:在得到tlb文件后我们 控制面板->管理工具->组件服务->计算机->我的电脑->COM+应用程序 中进行部署。首先添加一个新的空的COM+应用程序。
再向刚刚建好的COM+应用程序中添加组件。新建组件->安装新组件,选择第一步生成的tlb文件点完成。我们就可以在组件中看到ComDemo.CSayHello和该组件实现的接口ISayHello。
以上工作我们也可以通过脚本来完成,这里我们使用VB Script来做,同样他也时调用COM组件(COMAdminCatalog)实现的。
- '创建COMAdmin.COMAdminCatalog对象
- set cat = CreateObject("COMAdmin.COMAdminCatalog")
- '连接本地主机
- cat.Connect("127.0.0.1")
- '取得COM+应用程序配置
- set apps = cat.GetCollection("Applications")
- '读取现有COM+应用程序配置
- apps.Populate()
- '创建一各新的COM+应用程序配置
- set app = apps.Add()
- '用一各GUID来表示我们的com+应用程序
- app.Value("ID") = "{da2d72e3-f402-4f98-a415-66d21dafc0a9}"
- 'com+应用程序的名字
- app.Value("Name") = "SayHello"
- 'com+应用程序的描述
- app.Value("Description") = ".net and com+ demo"
- 'com+应用程序的模拟级别(1为匿名)
- app.Value("ImpersonationLevel") = 1
- 'com+应用程序的调用的身份验证级别(1为无)
- app.Value("Authentication") = 1
- '保存配置
- apps.SaveChanges()
- '将该应用程序设置为运行在NT Server上
- cat.CreateServiceForApplication "SayHello", "SayHello", "SERVICE_DEMAND_START", "SERVICE_ERROR_NORMAL", "", "", "", False
- '导入已经注册的控件(本来想用InstallComponent,但是总是报错,晕~)
- cat.ImportComponent "SayHello", "{C6D664F5-6CF6-4c12-9948-8A40B16818BE}"
保存VBScript文件将其添加到bat文件中去:
gacutil -i SayHello.dll
regasm SayHello.dll /tlb
installSayHello.vbs
这样就将我们的程序部署到COM+应用程序中去了,后面就是调用了。