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

    技术2022-05-11  65

    用程序设置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


    最新回复(0)