怎样读取(设置)IIS4的MMC的设置? 300分(300分)

  • 主题发起人 主题发起人 cAkk
  • 开始时间 开始时间
C

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!
IIS4是通过MMC管理WEB站点的,现在我想通过程序来实现其中的部分功能,
我查了注册表,发现MMC没有把设置保存到注册表,也打开*.msc文件看了看,
似乎也没有保存在里面.

请问怎样实现我的要求? 当然,通过程序也许不可能实现MMC全部功能,不过
能实现多少就说多少吧!
 
IIS是MS backoffice系列的一个组成部分.backoffice通过VBA/VBS 结合
COM规范实现各个组成部件统一的.其实VBA/VBS的特点是提供不同的封装对象处理不同的事务.因此参考其编程帮助,利用VBA/VBS和COM编制其控制对象即可.easy.
 
能讲一讲吗? 说得太简略了. :-(
举一个小小的操作MMC的例子就可以,我会举一反三的.
 
应当在*.mmc中,只是我们不知道它的格式,或是否有相应的api.
 
>>或是否有相应的api.

是否有呢?
 
狡猾的m$可能把信息放在metabase.bin里了, 仔细看看吧:-)
 
能不能解释一下什么叫mmc?
 
MMC是IIS4的一个通用管理界面.
和sql server 7.0的管理界面很相似.
 
应该是通过COM技术来实现,而不是什么api
纯属个人意见
 
dick: 有相关资料吗?
 
我用了一下,感觉好像就是在操作好多个小的应用程序。
这些程序可能是用ActiveX来实现的。
不然,为什么在iis4.0控制台里和浏览器里看到的结果是那么的
类似?
 
thtfsyh: 准确的说是COM对象 --- 就象lookingafter说的那样.
但是怎么使用呢?
 
在iis的培训书内提了一下

1。 iis的数据是存在一个特别数据的数据库内,名为metabase ,效率比较高,适合网络管理
2。 iis使用mmc规范,所以使用mmc规范的管理程序,都通过ADSI实现接口
3。 adsi是通过com调用的

adsi是一个线索,但我也没使用过。(一堆废话),我还得回去在研究一下
 
利用Delphi设定IIS确实很费劲.我费了很多的力气,最后还是不得不放弃
了。不过用VB就简单多了,具体的访问方法可以阅读MSDN中的FlatSDK中的Internet/...
/Program../IIS Admin Object。
下面是简单的使用VB设置虚拟目录的操作:

set IISWebServer = GetObject("IIS://LM/W3SVC/1")
set VirDir=IISWebServer.CreateObject("IIsWebVirtualDir","newDir")
VirDir.Path = "c:/mydir"
VirDir.SetInfo
'呵呵,具体使用还要复杂,设置权限等等。

其实用Delphi的话,主要是Com我找不到说明,也无法引入,你如果能的话,不要
忘了通知我,一定感谢。
 
有2种方法可以管理iis。
 
第一种方法:

下面的程序可以给iis增加一个虚拟目录
下面的程序是用bcb写的,我不用delphi,
所以没安装delphi,不过可以很容易化成delphi


#define INITGUID
#include <iadmw.h>
#include <iiscnfg.h>

CoInitialize(NULL);
try
{
IMSAdminBase* pi;

int err=CoCreateInstance(CLSID_MSAdminBase, NULL, CLSCTX_ALL,IID_IMSAdminBase, (void **) &pi);
if(err!=S_OK)
throw Exception("Error:"+IntToHex(err,8));
try
{
METADATA_HANDLE hmeta;
err=pi->OpenKey(METADATA_MASTER_ROOT_HANDLE,L"/lm/w3svc",METADATA_PERMISSION_READ|METADATA_PERMISSION_WRITE,0,&hmeta);
if(err!=ERROR_SUCCESS)
throw Exception("Error:"+IntToHex(err,8));
err=pi->AddKey(hmeta,L"/1/root/testVdir");
if(err!=ERROR_SUCCESS)
ShowMessage("addkey Error:"+IntToHex(err,8));

wchar_t buf1[]=L"IIsWebVirtualDir";
METADATA_RECORD rec1={MD_KEY_TYPE,METADATA_NO_ATTRIBUTES,IIS_MD_UT_SERVER,STRING_METADATA,sizeof buf1,(BYTE*)buf1,0};
err=pi->SetData(hmeta,L"/1/root/testVdir",&rec1);
if(err!=ERROR_SUCCESS)
ShowMessage("setdata Error:"+IntToHex(err,8));

wchar_t buf2[]=L"e://temp//testVdir";
METADATA_RECORD rec2={MD_VR_PATH,METADATA_INHERIT,IIS_MD_UT_FILE,STRING_METADATA,sizeof buf2,(BYTE*)buf2,0};
err=pi->SetData(hmeta,L"/1/root/testVdir",&rec2);
if(err!=ERROR_SUCCESS)
ShowMessage("setdata Error:"+IntToHex(err,8));

pi->CloseKey(hmeta);
ShowMessage("ok");
}
__finally
{
pi->Release();
}
}
__finally
{
CoUninitialize();
}

注:在c++程序中 L"abcd" 是表示unicode字符串"abcd"(在常数字符串前加L表示)

 
第二种方法:

下面的asp可以给iis增加一个虚拟目录,(客户机用浏览器浏览就可以运行它)
下面的代码当然不能以匿名用户运行,如果以匿名用户访问,在getobject那行
就会报告错误了(IUSR_xxx用户没有权限创建管理iis的对象)。
需要在资源管理器或者iis管理器设置该asp文件的权限,仅使administrator
可访问,在其他机器用ie浏览这个asp就会提示输入密码,输入administrator密码
后该asp 会在服务器创建一个虚拟目录。
下面的代码不能运行2次(因为目录已经存在)。当然,你可以加点代码,
比如判断目录是否已经存在,如果已经存在,先删再建。
下面的代码当然只是提供一个基本的东西。如果需要实用,还可以使用一个
form,让用户输入要创建的目录。

《%
Dim obj
Set obj = GetObject("IIS://localhost/W3SVC/1/root")
Set obj=obj.Create("IIsWebVirtualDir","testVdir2") REM 添加虚拟目录
obj.Path="e:/temp/testVdir" REM 设置物理地址
obj.setinfo
%》

该asp一定要以管理员帐号才能运行,GetObject("IIS://。。。")这行
用匿名浏览用户IUSR_xxx 是不能运行的,因此需要设置这个文件的权限,
浏览器才会提示输入其他用户来浏览这个文件

当然,你认为改asp文件权限技术性太低,可以在asp判断user,如果不符合,
发送 401 Unauthorized ,让浏览器弹出登录窗口换个用户

 
把iisadmin目录下的asp全看一遍不就搞定了?
 

Similar threads

回复
0
查看
804
不得闲
回复
0
查看
978
不得闲
回复
0
查看
848
不得闲
回复
0
查看
863
不得闲
后退
顶部