用程序设置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
本文地址:http://com.8s8s.com/it/it5392.htm