我正在尝试编写一个允许非管理员用户在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”复选框来完成它。
答案 0 :(得分:2)
我遇到这个问题已经很久了,所以我可能记得有些不对劲。但是IIRC ......
IIS的根目录受ACL保护,该ACL需要管理权限才能创建新目录。一个简单的模拟可能无法解决这个问题,因为我相信你将COM和RPC或本地RPC结合起来。跨越COM边界的模拟在本机代码中是棘手的,而且从托管代码中非常棘手。你冒充伎俩在这个领域遇到问题是非常有可能的。
虽然可以解除对Web服务器的限制并让普通用户在IIS中创建根目录。我在以下博客文章中概述了这样做的过程