程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 用程序刪除已注冊的COM+應用程序

用程序刪除已注冊的COM+應用程序

編輯:Delphi

  使用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
   file://先創建一個ICOMAdminCatalog的接口指針,用於
   self.COMADminCata := CoCOMAdminCatalog.Create;
  file://取得ICatalogCollection的接口指針,指向的是COM+應用程序的集合,注意參數是
  file://字符串,Delphi幫助中有這樣一段話:有效的集合依賴於你的COMAdmin Library的
  file://版本,查看微軟的文檔來找到在你的COMAdmin Library版本中有效的集合
   temp := self.COMADminCata.GetCollection('Applications');
     self.CataColl := Iunknown(temp) as ICataLogCollection;
   file://下一句不可少,執行了它才真正讀到的數據
   self.CataColl.Populate;
  file://來個循環查找並刪除,你可以新建一個叫aaa的COM+應用程序來進行測試,循環次
  file://數為COM+應用程序的個數 –1,因為我們在循環中刪了一個COM+應用程序
   for i := 0 to self.CataColl.Count - 2 do
     begin
    file://這是取第I個應用程序集合中的對象
       self.CataObj := Iunknown(self.CataColl.Item[i]) as ICatalogObject;
    file://你可以打出來名字看看和你在組件服務中的是否一樣
       showmessage(self.CataObj.Name);
    file://如果對象名字是aaa,那麼我們要進行刪除啦
       if self.CataObj.Name = 'aaa' then
       begin
          self.CataColl.Remove(i);
     file://下一句有點像提交事務,如果你不寫,是不會真正刪除的
          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的幫助
  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved