您现在的位置:首页 >> API >> API >> 内容

用程序删除已注册的COM+应用程序

时间:2011/9/3 15:44:10 点击:

  核心提示:使用COM接口 1. 找到接口描述文件COMAdmin_TLB.pas 还是用了个笨办法,新建一个ActiveXLibrary,再新建一个COMObject,随便起个名字吧。保存。 然后选菜单View...

使用COM接口  
  1. 找到接口描述文件COMAdmin_TLB.pas  
  还是用了个笨办法,新建一个ActiveX   Library,再新建一个COM   Object,随便起个名字吧。保存。  
  然后选菜单View->Type   Library,在右边Uses页中点右键,选择查看所有类型库,找到COM+1.0   Admin   Type   Library,保存。OK,在你的保存目录下有了一个COMAdmin_TLB.pas,拷出来,其它的可以删除啦:)  
  2. 我们来删除一个COM+应用程序  
  新建一个Delphi工程,保存。添加我们刚才生成的COMAdmin_TLB.pas,别忘了uses啊:)  
  在COMAdmin_TLB.pas中一共有三个接口,看名字大概能猜出几分  
  ICOMAdminCatalog           管理COM+目录的接口  
  ICatalogObject               COM+对象的接口  
  ICatalogCollection       COM+对象集合的接口  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
      temp:IDispatch;  
      i:integer;  
  CataColl:ICatalogCollection;  
      CataObj:ICatalogObject;  
      COMADminCata:ICOMAdminCatalog;  
  begin  
  //先创建一个ICOMAdminCatalog的接口指针,用于  
  self.COMADminCata   :=   CoCOMAdminCatalog.Create;  
  //取得ICatalogCollection的接口指针,指向的是COM+应用程序的集合,注意参数是  
  //字符串,Delphi帮助中有这样一段话:有效的集合依赖于你的COMAdmin   Library的  
  //版本,查看微软的文档来找到在你的COMAdmin   Library版本中有效的集合  
  temp   :=   self.COMADminCata.GetCollection('Applications');  
      self.CataColl   :=   Iunknown(temp)   as   ICataLogCollection;  
  //下一句不可少,执行了它才真正读到的数据  
  self.CataColl.Populate;  
  //来个循环查找并删除,你可以新建一个叫aaa的COM+应用程序来进行测试,循环次  
  //数为COM+应用程序的个数   –1,因为我们在循环中删了一个COM+应用程序  
  for   i   :=   0   to   self.CataColl.Count   -   2   do  
      begin  
  //这是取第I个应用程序集合中的对象  
          self.CataObj   :=   Iunknown(self.CataColl.Item[i])   as   ICatalogObject;  
  //你可以打出来名字看看和你在组件服务中的是否一样  
          showmessage(self.CataObj.Name);  
  //如果对象名字是aaa,那么我们要进行删除啦  
          if   self.CataObj.Name   =   'aaa'   then  
          begin  
              self.CataColl.Remove(i);  
  //下一句有点像提交事务,如果你不写,是不会真正删除的  
              self.CataColl.SaveChanges;  
          end;  
      end;  
  end;  
   
  使用Delphi控件  
  无意中点了一下帮助,居然发现Delphi有一个类将这些接口封装了(Delphi就是好,呵呵)。好,我们就用这个控件封装的类来实现删除  
  类定义在CmAdmCtl中,在主窗体中uses一下即可  
  对应于前面描述的COM接口,Delphi为我们封装了三个类  
  TCOMAdminCatalog   =   class(TOleServer)  
  TCOMAdminCatalogObject   =   class(TOleServer)  
  TCOMAdminCatalogCollection   =   class(TOleServer)  
  有了前面的描述,第二个程序好写多了  
  procedure   TForm1.Button2Click(Sender:   TObject);  
  var  
      CataColl:TCOMAdminCatalogCollection;  
      CataObj:TCOMAdminCatalogObject;  
      COMADminCata:TCOMAdminCatalog;  
      i:integer;  
  begin  
      COMADminCata   :=   TCOMAdminCatalog.Create(self);  
      CataColl   :=   COMADminCata.GetCollection('Applications');  
      CataColl.Populate;  
      for   i   :=   0   to   CataColl.Count   -   2   do  
      begin  
          CataObj   :=   CataColl.Get_Item(i);  
          showmessage(CataObj.Name);  
          if   CataObj.Name   =   'aaa'   then  
          begin  
              CataColl.Remove(i);  
              CataColl.SaveChanges;  
          end;  
      end;  
      COMADminCata.Free;  
  end;  
   
  还有很多功能,比如导出应用程序,安装应用程序等等操作,函数名写的很清楚,具体可以看Delphi的帮助

 

上一页12下一页

作者:网络 来源:转载
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
本类推荐
  • 没有
本类固顶
  • 没有
  • 盒子文章(www.2ccc.com) © 2024 版权所有 All Rights Reserved.
  • 沪ICP备05001939号