使用vb.net作为非特权用户以编程方式在iis 6中创建虚拟目录

时间:2010-02-02 18:18:44

标签: vb.net winforms iis-6 impersonation virtual-directory

我正在尝试编写一个允许非管理员用户在IIS6中创建虚拟目录的应用程序。我尝试了许多不同的模拟管理帐户的方法,但似乎没有任何方法可以创建虚拟目录。

以下是我尝试过的一些内容:

dim sDirPath as string = "IIS://remotehost/W3svc/1/root"
Dim de As DirectoryEntry = New DirectoryEntry()
de.Path = sDirPath
de.AuthenticationType = AuthenticationTypes.Secure
de.Username = tbxUsername.Text
de.Password = tbxPassword.Text
''Fails here
virtualId = CType(de.Invoke("Create", "IIsWebVirtualDir", dirName), DirectoryEntry)

使用here中的AccountAlias类:

aa.BeginImpersonation()
Try
    dim sDirPath as string = "IIS://remotehost/W3svc/1/root"
    Dim de As DirectoryEntry = New DirectoryEntry()
    de.Path = sDirPath
    de.AuthenticationType = AuthenticationTypes.Secure
    ''Fails Here
    virtualId = CType(de.Invoke("Create", "IIsWebVirtualDir", dirName), DirectoryEntry)
Finally
    aa.EndImpersonation()
End Try

在winforms应用程序中模拟另一个用户的正确方法是什么,这将允许我创建虚拟目录而不运行应用程序的用户是Web服务器的管理员?我知道这可以做到,IIS管理器允许你使用“connect as”复选框来完成它。

1 个答案:

答案 0 :(得分:2)

我遇到这个问题已经很久了,所以我可能记得有些不对劲。但是IIRC ......

IIS的根目录受ACL保护,该ACL需要管理权限才能创建新目录。一个简单的模拟可能无法解决这个问题,因为我相信你将COM和RPC或本地RPC结合起来。跨越COM边界的模拟在本机代码中是棘手的,而且从托管代码中非常棘手。你冒充伎俩在这个领域遇到问题是非常有可能的。

虽然可以解除对Web服务器的限制并让普通用户在IIS中创建根目录。我在以下博客文章中概述了这样做的过程