用程序设置COM+应用程序的属性

用程序设置COM+应用程序的属性。

今天从别人机器上导出了个代理程序,注册在自己的机器上,在组件服务里查看COM+应用程序的属性,发现代理程序有一个属性是可以修改的,就是远程服务器名称,在更改了此名称后,程序中不需要用CreateRemote函数,也可以申请到远程接口指针。可是我们应该给用户一个友好的界面,不能总让用户打开组件服务吧,来,我们写个程序吧。

这次我们只用Delphi控件好啦(唉,懒就一个字^_^)

定义三个变量

CataColl:TCOMAdminCatalogCollection;

CataObj:TCOMAdminCatalogObject;

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('ApplicationProxyServerName',新服务器名);

CataColl.SaveChanges; //记着保存修改

break;

end;

end;

end;

代码并不长,关键的函数是Set_Value,函数原型如下:

procedure Set_Value(const bstrPropName: WideString; 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

Password

Activation

Changeable

Deleteable

CreatedBy

AccessChecksLevel

ApplicationAccessChecksEnabled

CommandLine

ImpersonationLevel

CRMEnabled

AuthenticationCapability

3GigSupportEnabled

QueuingEnabled

QueueListenerEnabled

EventsEnabled

ApplicationProxy

ApplicationProxyServerName

CRMLogFile

Published At
Categories with Web编程
Tagged with
comments powered by Disqus