文章作者:maya
信息来源:邪恶八进制信息安全团队(
www.eviloctal.com)
在Windwos2000的管理工具里有一个“组件服务”工具,可以实现对COM+组件的应用的安装、启动、删除和对组件的安装、删除。这在安装一个有COM+组件的应用系统时时非常有用的,我们可以通过程序控制一个组件添加删除,可以通过程序实现这个过程的自动化,而不必人工停止应用再安装组件!
现在我们来讨论怎样用VB程序实现这个工具的这些功能。
一、COMAdmin接口简介
COMAdmin接口是实现这些功能的关键对象,它有有三个基本接口,分别是IcomAdminCatalog,IcatalogCollection,IcatalogObject,调用这三个接口的相关属性方法可以实现对COM组件的添加、删除、应用的添加、删除、启动、关闭等功能。
1、IcomadminCatalog接口介绍
IcomAdminCatalog接口代表COM+ Catalog本身。
方法:GetCollection可以取得COM+ Catalog中包含的集合。
2、IcatalogCollection接口介绍
IcatalogCollection接口可以枚举内容、读取、增加、删除集合项目。
方法:Populate让集合填入内容;
方法:PopulateBykey同Populate,但让集合从akeys指定项读取数值;
方法:remove删除一个对象,参数是对象在集合中的索引;
方法:SaveChanges保存对属性的改变,无参数,返回保存的改变次数。
3、IcatalogObject接口介绍
属性:Name:包含目录对象的只读属性;
属性:Key:包含目录对象的唯一项的只读属性,这个属性用于需要对象项的方法,如PopulateByKeys ;
属性:Valid:表示对象是否有效的只读属性;
属性:Value包含对象所支持的任何命名属性值的读/写属性,每个目录对象支持的一组命名属性。
二、程序设计思路
建立对应用和组件的控制函数,在应用列表框中列表出本机上的应用名,在属性列表框显示所选择应用中包含的组件,通过工具条按钮事件实现对所选择的应用或组件的添加、删除、启动、关闭的功能。
要实现这些功能,我们计划有如下几个函数:
1. Createocatalog 创建取得应用集合的COMAdminCatalogCollection 对象;
2. Addapp 创建应用函数;
3. Deleteapp 删除应用函数;
4. Startobject 启动一个应用函数;
5. Stopobject 停止应用函数;
6. Addcomponent 在一个应用中添加一个组件;
7. Deletecomponent 在一个应用中删除一个组件;
8. Displayobjects 在应用列表框中显示应用名;
9. Disaplaycomponent 在应用组件列表框中显示所选则的应用中的组件名。
三、VB程序的实现
1、主界面的设计
将应用名列表放在左边的列表框lbobject内,选择一个应用,则在右边列出这个应用中的COM组件名。当我们选择一个应用或组件时,可以选择工具条上相关的操作对应用或COM+组件进行控制。
2、程序实现步骤
首先在定义变量如下
Option Explicit
Public ocatalog As COMAdminCatalog
Public ocatcol As COMAdminCatalogCollection
Public ocatobj As COMAdminCatalogObject
然后我们定义一个函数实现取得COM+应用的集合.
Private Function createocatalog() As Boolean
createocatalog = False
'创建catalog对象
Set ocatalog = New COMAdminCatalog
'得到应用连接
Set ocatcol = ocatalog.GetCollection("Applications")
createocatalog = True
End Function
接下来我们在Form的启动事件里写上如下代码:
Private Sub Form_Load()
If App.PrevInstance Then
Unload Me
MsgBox "程序已经运行!"
Exit Sub
End If
form1.Show
If createocatalog() Then
StatusBar1.Panels(2) = "连接COMADMIN成功"
displayobjects ocatcol
Else
StatusBar1.Panels(2) = "连接COMADMIN失败!"
MsgBox "连接失败,请确认系统是否安装的组件服务!"
End If
End Sub
到这里我们实现了对组件应用对象的连接,接下来就是对这些对象的操作。我们先定义这样一些函数:
Public Function addapp(Optional name As String = "NewAppliation", Optional activation As Integer = 1, Optional Identity As String = "Interactive User") As String
'添加一个应用
On Error GoTo errd
Set ocatobj = ocatcol.Add '添加一个新应用
ocatobj.Value("Name") = name '设置这个应用的属性
ocatobj.Value("Activation") = activation
ocatobj.Value("Identity") = Identity
ocatcol.SaveChanges '保存关于ocatcol对象的改变
addapp = "OK"
Exit Function
errd:
addapp = Err.Description '如果出错返回错误信息
End Function
(addapp函数实现添加一个组件应用,参数name是要为这个新应用确定一个名字,我们可以默认是NewApplication,Activation和Indentity分别是配置这个应用的相关属性)
Public Function deleteapp(name As String) As String '参数name是应用的PROGID
If name <> "" Then
Dim oo As Object
Dim i As Integer
i = 0
On Error GoTo errd
ocatcol.Populate '首次取得目录集合时,缺省为空,需要调用Populate来填入内容
For Each oo In ocatcol
If oo.name = name Then
ocatcol.Remove i '删除索引号为i的组件应用
ocatcol.SaveChanges '保存
End If
i = i + 1
Next
End If
deleteapp = "ok"
Exit Function
errd:
addapp = Err.Description
End Function
(函数deleteapp实现删除名字为name的一个组件应用。)
Public Function startobject(name As String) As String '参数name是应用的PROGID
Dim oo As Object
On error goto errd
ocatcol.Populate
For Each oo In ocatcol
If oo.name = name Then
ocatalog.StartApplication oo.Key '启动一个应用
End If
Next
startobject = "OK"
Exit function
errd: '错误处理
startobject = Err.Description
End Function
(函数startobject实现启动名字为name的一个组件应用。)
Public Function stopobject(name As String) As String
Dim oo As Object
On error goto errd
ocatcol.Populate
For Each oo In ocatcol
If oo.name = name Then
ocatalog.ShutdownApplication oo.Key '停止这个应用
End If
Next
Stopobject = "OK"
Exit funcition
Errd:
Stopobject = Err.Description.
End Function
(Stopobject函数实现停止一个应用)
到这里我们已经实现了对应用的控制,下面我们来实现对组件的控制。
Public Function addcomponent(name As String, filename As String) As String
Dim oo As Object
On error goto errd
For Each oo In ocatcol
If oo.name = name Then
ocatalog.InstallComponent name, filename, "", "" '在这里实现安装组件到一个应用
End If
addcomponent = "OK"
exit function
Next
Errd:
addcomponent = err. Description
End Function