用程式設定COM+應用程式的屬性。 (轉)

amyz發表於2007-08-14
用程式設定COM+應用程式的屬性。 (轉)[@more@] 

用設定COM+應用程式的屬性。:namespace prefix = o ns = "urn:schemas--com::office" />

今天從別人機器上匯出了個程式,註冊在自己的機器上,在服務裡檢視COM+應用程式的屬性,發現代理程式有一個屬性是可以修改的,就是名稱,在更改了此名稱後,程式中不需要用CreateRemote,也可以申請到遠端介面指標。可是我們應該給一個友好的介面,不能總讓使用者開啟元件服務吧,來,我們寫個程式吧。

這次我們只用好啦(唉,懶就一個字^_^)

定義三個變數

CataColl:TCOMAdminCatalogCollection;

CataObj:TCOMAdminCatalog;

COMADminCata:TCOMAdminCatalog;

begin

  COMADminCata := TCOMAdminCatalog.Create(self);

  CataColl := COMADminCata.GetCollection('Applications');

  CataColl.Populate;

  for i := 0 to CataColl.Count - 1 do

  begin

  CataObj := CataColl.Get_Item(i);

  if CataObj.Name = 你的應用程式名 then

begin

CataObj.Set_Value('ApplicationServerName',新伺服器名);

CataColl.SaveChanges;    //記著儲存修改

break;

  end;

  end;

end;

程式碼並不長,關鍵的函式是Set_Value,函式原型如下:

procedure Set_Value(const bstrPropName: WString; retval: OleVariant);

關鍵是這個bstrPropName――屬性的名稱,字串型別,到底是什麼字串呢?我翻了一通MSDN,還是沒找到到底該用什麼值,瞎猜了一通也不對。就是搞笑,給了一個函式,卻不給怎麼,或許是我笨,沒找到。不過笨人也有笨辦法,把這些屬性值找出來。

TCOMAdminCatalogCollection這個變數儲存的是一個集合(Collection),變數透過GetCollection函式來賦值,MSDN中有對這些集合的說明,找到了一個PropertyInfo集合(看著像),於是把它取了出來,用for迴圈進行遍歷,就可以得到相應的屬性名了,程式碼如下:

CataColl := CataColl.GetCollection('PropertyInfo',CataObj.Get_Key);

CataColl.Populate;

for j := 0 to CataColl.Count - 1 do

begin

  CataObj := CataColl.Get_Item(j);

  self.Memo1.Lines.Add(CataObj.Name);

end;

從Memo中就可以讀出各個屬性值了。對COM+目錄的操作就是一個取集合和遍歷集合的過程,大家自己去舉一反三吧^_^

以下是PropertyInfo集合的各個屬性名稱,也就是Set_Value方法的第一個引數bstrPropName的值:

Name

ID

Description

IsSystem

Authentication

ShutdownAfter

RunForever

Identity

Pass

Activation

Changeable

Deleteable

Createy

AccessChecksLevel

ApplicationAccessChecksEnabled

CommandLine

ImpersonationLevel

CRMEnabled

AuthenticationCapability

3GigSupportEnabled

QueuingEnabled

QueueListenerEnabled

EventsEnabled

ApplicationProxy

ApplicationProxyServerName

CRMLogFile


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-956461/,如需轉載,請註明出處,否則將追究法律責任。

相關文章