azyet24
asked on
VB.NET Create Virtual Directory
I am using two scripts that I found that I can create a Virtual Dirctory or Web Site. I have two questions:
CreateVirtualDir: When I run this, it creats the virtual directory fine, but it creates it in the Default Web site. I'd like to specify a Web site for the VD to be created. How?
CreateWebsite: This creates a web site with no problems, however it does not automatically start. How can I invoke start? Lastly, how do I get this to first check if the web site exists and if so not add the site again?
CreateVirtualDir: When I run this, it creats the virtual directory fine, but it creates it in the Default Web site. I'd like to specify a Web site for the VD to be created. How?
CreateWebsite: This creates a web site with no problems, however it does not automatically start. How can I invoke start? Lastly, how do I get this to first check if the web site exists and if so not add the site again?
Sub CreateVirtualDir(ByVal WebSite As String, ByVal AppName As String, ByVal Path As String)
Dim IISSchema As New System.DirectoryServices.DirectoryEntry("IIS://" & WebSite & "/Schema/AppIsolated")
Dim CanCreate As Boolean = Not IISSchema.Properties("Syntax").Value.ToString.ToUpper() = "BOOLEAN"
IISSchema.Dispose()
If CanCreate Then
Dim PathCreated As Boolean
Try
Dim IISAdmin As New System.DirectoryServices.DirectoryEntry("IIS://" & WebSite & "/W3SVC/1/Root")
'make sure folder exists
If Not System.IO.Directory.Exists(Path) Then
System.IO.Directory.CreateDirectory(Path)
PathCreated = True
End If
'If the virtual directory already exists then delete it
For Each VD As System.DirectoryServices.DirectoryEntry In IISAdmin.Children
If VD.Name = AppName Then
IISAdmin.Invoke("Delete", New String() {VD.SchemaClassName, AppName})
IISAdmin.CommitChanges()
Exit For
End If
Next VD
'Create and setup new virtual directory
Dim VDir As System.DirectoryServices.DirectoryEntry = IISAdmin.Children.Add(AppName, "IIsWebVirtualDir")
VDir.Properties("Path").Item(0) = Path
VDir.Properties("AppFriendlyName").Item(0) = AppName
VDir.Properties("EnableDirBrowsing").Item(0) = False
VDir.Properties("AccessRead").Item(0) = True
VDir.Properties("AccessExecute").Item(0) = True
VDir.Properties("AccessWrite").Item(0) = True
VDir.Properties("AccessScript").Item(0) = True
VDir.Properties("AuthNTLM").Item(0) = True
VDir.Properties("EnableDefaultDoc").Item(0) = True
' VDir.Properties("DefaultDoc").Item(0) = "Index.aspx"
VDir.Properties("AspEnableParentPaths").Item(0) = True
VDir.CommitChanges()
'the following are acceptable params
'INPROC = 0
'OUTPROC = 1
'POOLED = 2
VDir.Invoke("AppCreate", 1)
End If
Catch Ex As Exception
If PathCreated Then
System.IO.Directory.Delete(Path)
End If
Throw Ex
End Try
End Sub
Public Function CreateWebsite(ByVal webserver As String, ByVal serverComment As String, ByVal serverBindings As String, ByVal homeDirectory As String) As Integer
Dim w3svc As DirectoryEntry
w3svc = New DirectoryEntry("IIS://localhost/w3svc")
'Create a website object array
Dim newsite() As Object
newsite = New Object() {serverComment, New Object() {serverBindings}, homeDirectory}
'invoke IIsWebService.CreateNewSite
Dim websiteId As Object
websiteId = w3svc.Invoke("CreateNewSite", newsite)
'''' My Attempt to get the start to work automatically...doesn't work.
'newsite = w3svc.Invoke("Start", System.DBNull.Value)
Return websiteId
End Function
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Maybe you should post the full source for which you are having the problem.
ASKER
CreateVirtualDir("LocalHost", name, "C:\Inetpub\wwwroot\Communities")
Sub CreateVirtualDir(ByVal WebSite As String, ByVal AppName As String, ByVal Path As String)
Dim servername As String
servername = "XPSM1210"
Dim root As New System.DirectoryServices.DirectoryEntry("IIS://" & servername & "/W3SVC")
Dim IISSchema As New System.DirectoryServices.DirectoryEntry("IIS://" & WebSite & "/Schema/AppIsolated")
Dim CanCreate As Boolean = Not IISSchema.Properties("Syntax").Value.ToString.ToUpper() = "BOOLEAN"
IISSchema.Dispose()
If CanCreate Then
Dim PathCreated As Boolean
Try
Dim IISAdmin As New System.DirectoryServices.DirectoryEntry("IIS://" & WebSite & "/W3SVC/" & 2 & "/Root")
'make sure folder exists
If Not System.IO.Directory.Exists(Path) Then
System.IO.Directory.CreateDirectory(Path)
PathCreated = True
End If
'If the virtual directory already exists then delete it
For Each VD As System.DirectoryServices.DirectoryEntry In IISAdmin.Children
If VD.Name = AppName Then
IISAdmin.Invoke("Delete", New String() {VD.SchemaClassName, AppName})
IISAdmin.CommitChanges()
Exit For
End If
Next VD
Dim avoid As Integer = 1
If avoid = 1 Then
'Create and setup new virtual directory
Dim VDir As System.DirectoryServices.DirectoryEntry = IISAdmin.Children.Add(AppName, "IIsWebVirtualDir") '(VDirName, "IIsWebVirtualDir")
VDir.Properties("Path").Item(0) = Path
VDir.Properties("AppFriendlyName").Item(0) = AppName
VDir.Properties("EnableDirBrowsing").Item(0) = False
VDir.Properties("AccessRead").Item(0) = True
VDir.Properties("AccessExecute").Item(0) = True
VDir.Properties("AccessWrite").Item(0) = True
VDir.Properties("AccessScript").Item(0) = True
VDir.Properties("AuthNTLM").Item(0) = True
VDir.Properties("EnableDefaultDoc").Item(0) = True
' VDir.Properties("DefaultDoc").Item(0) = "Index.aspx"
VDir.Properties("AspEnableParentPaths").Item(0) = True
VDir.CommitChanges()
'the following are acceptable params
'INPROC = 0
'OUTPROC = 1
'POOLED = 2
VDir.Invoke("AppCreate", 1)
End If
Catch Ex As Exception
If PathCreated Then
System.IO.Directory.Delete(Path)
End If
Throw Ex
End Try
End If
End Sub
>This is updating the correct website, but it creates application rather than virtualhost (icon is glob instead of folder). When I right click on the web site, there is two options: Add Application, Add Virtual Host. I want the virtual host.<
Okay, I see what you mean now. Comment out this line from the above:
VDir.Invoke("AppCreate", 1)
That's what takes your virtual directory and creates an application... I would leave it in if you are deploying an ASP.NET application however.
ASKER
Yes that worked perfectly. Woulld you also know how to delete a website and/or virtual domain via vb.net?
There's a bit in CreateVirtualDir above shows how to delete a virtual directory:
'If the virtual directory already exists then delete it
For Each VD As System.DirectoryServices.D irectoryEn try In IISAdmin.Children
If VD.Name = AppName Then
IISAdmin.Invoke("Delete", New String() {VD.SchemaClassName, AppName})
IISAdmin.CommitChanges()
Exit For
End If
Next VD
I'm not sure how to delete a web site, but I think I answered your original question pretty completely.
'If the virtual directory already exists then delete it
For Each VD As System.DirectoryServices.D
If VD.Name = AppName Then
IISAdmin.Invoke("Delete", New String() {VD.SchemaClassName, AppName})
IISAdmin.CommitChanges()
Exit For
End If
Next VD
I'm not sure how to delete a web site, but I think I answered your original question pretty completely.
Okay, this worked to delete a web site. No error checking or anything, but should give the basic idea.
Private Sub DeleteWebSite(ByVal ID As String)
Using web As New System.DirectoryServices.DirectoryEntry("IIS://" & Environment.MachineName & "/W3svc/" & ID)
web.Invoke("Stop")
web.DeleteTree()
End Using
End Sub
ASKER
>Here again, you need to use the websiteID returned above. In this line of the CreateVirtualDir sub, you >need to specify the correct ID instead of 1 which is the default web site:
>Dim IISAdmin As New System.DirectoryServices.D
This is updating the correct website, but it creates application rather than virtualhost (icon is glob instead of folder). When I right click on the web site, there is two options: Add Application, Add Virtual Host. I want the virtual host.