关于设置IIS目录的属性问题

文件系统有这样这样的目录结构

c:\aaaa

|---zpp

|----zz

在IIS中,c:\aaaa作为一个虚拟站点。

由于需要,首先设置zz的某个属性,再设置zpp的相同属性。

相当于从子到父的顺序,如果从父到子则不会出错。

此时汇报错,0x80005006,属性不被支持。

原因:

设置了zz后,zz的SchemaClass是IIsWebDirectory,而zpp的是IIsObject。

所以会报出如上的错误。

解决:/Files/hilite/SetIISFolderProperty.zip

1 public static void SetDirectoryAnonymousUser1( string virSite, string path, string userName, string userPwd )

2 {

3 string fullPath = virSite + "/" + path;

4

5 DirectoryEntry de = new DirectoryEntry(fullPath);

6

18

19 again:

20 try

21 {

22

23 de.Properties["AnonymousUserName"][0] = userName;

24 de.Properties["AnonymousUserPass"][0] = userPwd;

25 de.CommitChanges();

26 }

27 catch ( System.Runtime.InteropServices.COMException err )

28 {

29

30 if ( err.ErrorCode == -2147024893 )

31 {

32 //上面错误是因为,没有meta对象,可以明确创建。

33

34 DirectoryEntry pDE = new DirectoryEntry(virSite);

35 de = pDE.Children.Add(path, "IIsWebDirectory");

36 pDE.CommitChanges();

37

38 goto again;

39 }

40 if ( (err.ErrorCode == -2147463162) && (de.Properties["KeyType"].Value.ToString() == "") )

41{

42 de.Properties["KeyType"].Value = "IIsWebDirectory";

43de.CommitChanges();

44de.Close();

45de.RefreshCache();

46 //de = new DirectoryEntry(fullPath);

47 gotoagain;

48}

49

50

51 throw err;

52 }

53 }