@@ -13,17 +13,27 @@ Option Explicit
13
13
'Constants we use:
14
14
' Starting with CCNet 1.3, we are a .NET 2.0 application:
15
15
Dim DotNetFrameworkVersion: DotNetFrameworkVersion = "v2.0"
16
+
16
17
' We're going to create a "ccnet" virtual directory:
17
18
Dim vdirName: vdirName = "ccnet"
18
- ' We're going to create the virtual directory on web site #1:
19
- Dim webSiteNumber: webSiteNumber = "1"
19
+
20
+ ' We're going to create the virtual directory on web site : Default Web Site
21
+ Dim webSiteName: webSiteName = "Default Web Site"
22
+
23
+ 'dedicated application pool for CruiseControl.Net
24
+ Dim AppPoolName: AppPoolName= "CruiseControl.Net"
25
+
20
26
21
27
' Are we debugging this script?
22
28
Dim DEBUG: DEBUG = false
23
29
24
30
createVDir()
25
31
26
- ' Create a virtual directory named vdirName on web site webSiteNumber using .NET version DotNetFrameworkVersion
32
+ 'good site with documentation about appcmd
33
+ 'http://blogs.msdn.com/b/mikezh/archive/2012/04/23/iis-appcmd-quick-reference.aspx
34
+
35
+
36
+ ' Create a virtual directory named vdirName on web site webSiteName using .NET version DotNetFrameworkVersion
27
37
Function CreateVDir()
28
38
29
39
If WScript.Arguments.Count < 1 Then
@@ -32,161 +42,102 @@ Function CreateVDir()
32
42
End If
33
43
34
44
Dim webdashboardInstallDir: webdashboardInstallDir = WScript.Arguments( 0 )
35
-
36
- WScript.Echo "Searching for location of .NET framework version " & DotNetFrameworkVersion
37
- Dim DotNetFrameworkLocation
38
- DotNetFrameworkLocation = GetDotNetLocation(DotNetFrameworkVersion)
39
- If DotNetFrameworkLocation = "" Then
40
- WScript.Echo "Unable to location .NET framework version " & DotNetFrameworkVersion & "; cannot continue."
41
- WScript.Quit 6
42
- End If
43
-
44
-
45
- WScript.Echo "Checking whether there is an existing virtual directory with the name " & vdirName
46
- If DoesCCNetVDirExist(vdirName, webSiteNumber) Then
47
- WScript.Echo vdirName & " virtual directory already exists; cannot continue."
48
- WScript.Quit 3
45
+
46
+ WScript.Echo "Checking whether there is an existing virtual directory with the name " & vdirName
47
+ If not DoesCCNetVDirExist(vdirName) Then
48
+ CreateCCNetVDir webdashboardInstallDir, webSiteName, vdirName
49
49
End If
50
-
51
- Dim ccnetVDir: Set ccnetVDir = CreateCCNetVDir(webdashboardInstallDir, webSiteNumber)
52
- UpdateCCNetVDirScriptMaps ccnetVDir, webSiteNumber
53
-
54
- If SetASPNETVersion(vdirName, webSiteNumber, DotNetFrameworkLocation) = False then
55
- WScript.Quit 5
56
- End if
57
50
58
- ' Confirm the creation
59
- WScript.Echo "Confirming that the virtual directory " & vdirName & " was created..."
60
- If DoesCCNetVDirExist(vdirName, webSiteNumber) = False Then
61
- WScript.Echo vdirName & " virtual directory creation failed."
62
- WScript.Quit 4
63
- End If
51
+ SetASPNETVersion AppPoolName, DotNetFrameworkVersion, webSiteName, vdirName
52
+
53
+ ' Confirm the creation
54
+ WScript.Echo "Confirming that the virtual directory " & vdirName & " was created..."
55
+ If not DoesCCNetVDirExist(vdirName) Then
56
+ WScript.Echo vdirName & " virtual directory creation failed."
57
+ WScript.Quit 4
58
+ End If
64
59
65
- WScript.Echo "Virtual directory for CruiseControl.NET Web Dashboard created successfully."
60
+ WScript.Echo "Virtual directory for CruiseControl.NET Web Dashboard created successfully."
66
61
67
62
End Function
68
63
69
- ' Locate the installed copy of the specified .NET version
70
- ' MajorVersion should be "vx.y" (e.g., "v2.0" for .NET 2.0)
71
- ' Returns the full path to the framework (e.g., "C:\Windows\Microsoft.NET\Framework\v2.0.0.50727" for .NET 2.0).
72
- '
73
- ' Based on an NSIS-script version from the NSIS wiki article "Get directory of installed .NET runtime"
74
- ' (http://nsis.sourceforge.net/Get_directory_of_installed_.NET_runtime), converted to VBScript.
75
- Function GetDotNetLocation(majorVersion)
76
- ' Assume failure:
77
- GetDotNetLocation = ""
78
-
79
- Dim keyName
80
- ' Because we can't just type "HKLM":
81
- Const wmi_HKLM = &H80000002
82
-
83
- ' Find the .NET framework via the registry:
84
- On Error Resume Next
85
- Dim objReg: Set objReg = GetObject( "winmgmts:\\.\root\default:StdRegProv" )
86
- If Err.Number <> 0 Then
87
- WScript.Echo "Error " & Err.Number & " opening the registry: " & Err.Description
88
- Exit Function
89
- End If
90
- keyName = "SOFTWARE\Microsoft\.NETFramework\policy\" & MajorVersion
91
- Dim subKeyList(), subkeyValues() : objReg.EnumValues wmi_HKLM, keyName, subKeyList, subKeyValues
92
- If DEBUG Then : WScript.Echo "[DEBUG] GetDotNetLocation(): found " & UBound(subKeyList)+ 1 & " keys under " & keyName : End If
93
- If Err.Number <> 0 Then
94
- WScript.Echo "Error " & Err.Number & " finding installed keys under HKLM\" & keyName & ": " & Err.Description
95
- Exit Function
96
- End If
97
-
98
- Dim minorVersion : minorVersion = subKeyList( 0 )
99
- If DEBUG Then : WScript.Echo "[DEBUG] GetDotNetLocation(): minorVersion=" & minorVersion : End If
100
- keyName = "SOFTWARE\Microsoft\.NETFramework"
101
- Dim installRoot: objReg.GetStringValue wmi_HKLM, keyName, "InstallRoot" , installRoot
102
- If DEBUG Then : WScript.Echo "[DEBUG] GetDotNetLocation(): installRoot=" & installRoot : End If
103
- If Err.Number <> 0 Then
104
- WScript.Echo "Error " & Err.Number & " getting InstallRoot key: " & Err.Description
105
- Exit Function
106
- End If
107
- GetDotNetLocation = installRoot & majorVersion & "." & minorVersion
108
- If DEBUG Then : WScript.Echo "[DEBUG] GetDotNetLocation(): GetDotNetLocation=" & GetDotNetLocation : End If
109
-
110
- End Function
111
-
112
64
' Check if the specified virtual directory exists on the specified web site
113
65
' Returns true if so, false if not.
114
- Function DoesCCNetVDirExist(vdirName, webSiteNumber)
115
-
116
- Dim iisRoot
117
- Set iisRoot = GetObject( "IIS://localhost/W3SVC/" & webSiteNumber & "/ROOT" )
118
- Dim vdir
119
- For Each vdir in iisRoot
120
- If DEBUG Then : WScript.Echo "[DEBUG] DoesCCNetVDirExist(): found " & vdir.Name : End If
121
- If vdir.Name = vdirName Then
122
- DoesCCNetVDirExist = True
123
- Exit Function
124
- End If
125
- Next
66
+ Function DoesCCNetVDirExist(vdirName)
126
67
DoesCCNetVDirExist = False
127
68
128
- End Function
69
+ dim iisDirs
70
+ iisDirs = getCommandOutput( "cmd /c %systemroot%\system32\inetsrv\APPCMD list vdir" )
71
+ iisDirs = lcase(iisDirs)
129
72
130
- Function CreateCCNetVDir(webdashboardInstallDir, webSiteNumber)
131
-
132
- WScript.Echo "Creating virtual directory for CruiseControl.NET Web Dashboard at " & webdashboardInstallDir
133
- Dim iisRoot
134
- Set iisRoot = GetObject( "IIS://localhost/W3SVC/" & webSiteNumber & "/ROOT" )
135
- Dim ccnetVDir: set ccnetVDir = iisRoot.Create( "IisWebVirtualDir" , vdirName)
73
+ If DEBUG Then : WScript.Echo "[DEBUG] IIs dirs found : " & vbcrlf & iisDirs : End If
74
+
75
+ if instr(iisDirs,vdirName) > 0 then 'vbs is NOT zero based !
76
+ DoesCCNetVDirExist = true
77
+ end if
78
+
79
+ End Function
136
80
137
- ccnetVDir.AppCreate2 1
138
- ccnetVDir.AccessRead = True
139
- ccnetVDir.AccessScript = True
140
- ' ccnetVDir.AccessNoRemoteExecute = True
141
- ccnetVDir.AppFriendlyName = "ccnet"
142
- ccnetVDir.KeyType = "IisWebVirtualDir"
143
- ccnetVDir.DefaultDoc = "default.aspx"
144
- ccnetVDir.DirBrowseFlags = &H40000000
145
- ccnetVDir.Path = webdashboardInstallDir
81
+ Sub CreateCCNetVDir(webdashboardInstallDir, webSiteName, vdirName)
82
+
83
+ dim result
84
+ dim command
85
+ WScript.Echo "Creating virtual directory for CruiseControl.NET Web Dashboard at " & webdashboardInstallDir
86
+
87
+ command = "%systemroot%\system32\inetsrv\APPCMD add app /site.name:" & chr( 34 ) & webSiteName & chr( 34 ) & " /path:/" & vdirName & " /physicalpath:" & chr( 34 ) & webdashboardInstallDir & chr( 34 )
88
+
89
+ result = getCommandOutput( "cmd /c " & command)
90
+
91
+ If DEBUG Then : WScript.Echo "[DEBUG] IIs app creation : " & vbcrlf & result : End If
146
92
147
- ccnetVDir.SetInfo()
148
- Set CreateCCNetVDir = ccnetVDir
93
+ End Sub
149
94
150
- End Function
151
95
152
- Function UpdateCCNetVDirScriptMaps(ccnetVDir, webSiteNumber )
96
+ Sub SetASPNETVersion(AppPoolName, DotNetFrameworkVersion, webSiteName, vdirName )
153
97
154
- WScript.Echo "Updating the script maps for CruiseControl.NET virtual directory"
155
- Dim scriptMapCount
156
- Dim scriptMap
157
- Dim xmlScriptMap
98
+ dim appPools
99
+ dim result
100
+ dim command
158
101
159
- For Each scriptMap In ccnetVDir.ScriptMaps
160
- scriptMapCount = scriptMapCount + 1
161
- ' Create a ".xml" script map based on the ".aspx" map:
162
- If InStr( scriptMap, ".aspx" ) Then
163
- xmlScriptMap = Replace( scriptMap, ".aspx" , ".xml" )
164
- End If
165
- Next
102
+ WScript.Echo "Setting application pool for CruiseControl.NET Web Dashboard " & AppPoolName & " to frameworkversion : " & DotNetFrameworkVersion
166
103
167
- Dim iisRoot: Set iisRoot = GetObject( "IIS://localhost/W3SVC/" & webSiteNumber & "/ROOT" )
168
- Dim scriptMaps: ScriptMaps = iisRoot.Get( "ScriptMaps" )
169
- ReDim Preserve scriptMaps(scriptMapCount)
170
- scriptMaps(scriptMapCount) = xmlScriptMap
104
+ appPools = getCommandOutput( "cmd /c %systemroot%\system32\inetsrv\APPCMD list apppool" )
105
+ appPools = lcase(appPools)
171
106
172
- ccnetVDir.PutEx 2 , "ScriptMaps" , scriptMaps
173
- ccnetVDir.SetInfo
107
+ If DEBUG Then : WScript.Echo "[DEBUG] IIs app pools found : " & vbcrlf & appPools : End If
108
+
109
+ if instr(appPools,lcase(AppPoolName)) = 0 then 'vbs is NOT zero based !
110
+ WScript.Echo " * Creating application pool for CruiseControl.NET Web Dashboard " & AppPoolName & " frameworkversion : " & DotNetFrameworkVersion
111
+
112
+ command = "%systemroot%\system32\inetsrv\APPCMD ADD apppool /name:" & chr( 34 ) & AppPoolName & chr( 34 ) & " /managedRuntimeVersion:" & DotNetFrameworkVersion
113
+ result = getCommandOutput( "cmd /c " & command)
114
+ If DEBUG Then : WScript.Echo "[DEBUG] IIs app creation : " & vbcrlf & result : End If
115
+ end if
116
+
117
+
118
+ command = "%systemroot%\system32\inetsrv\APPCMD set apppool " & chr( 34 ) & AppPoolName & chr( 34 ) & " /managedRuntimeVersion:" & DotNetFrameworkVersion
119
+ result = getCommandOutput( "cmd /c " & command)
120
+ If DEBUG Then : WScript.Echo "[DEBUG] update app pool framework version : " & vbcrlf & result : End If
121
+
122
+
123
+ command = "%systemroot%\system32\inetsrv\APPCMD set app " & chr( 34 ) & webSiteName & "/" & vdirName & chr( 34 ) & " /applicationpool:" & AppPoolName
124
+ result = getCommandOutput( "cmd /c " & command)
125
+ If DEBUG Then : WScript.Echo "[DEBUG] IIs app set apppool : " & vbcrlf & result : End If
126
+
127
+
128
+
129
+ End Sub
174
130
175
- End Function
176
131
177
- Function SetASPNETVersion(vdirName, webSiteNumber, DotNetFrameworkLocation)
178
-
179
- WScript.Echo "Setting .NET framework to " & DotNetFrameworkLocation & " for CruiseControl.NET virtual directory"
180
- Dim cmd: cmd = """" & DotNetFrameworkLocation & "\aspnet_regiis.exe"" -s ""W3SVC/" & webSiteNumber & "/ROOT/" & vdirName & """"
181
- If DEBUG Then : WScript.Echo "[DEBUG] SetASPNETVersion(): cmd=" & cmd : End If
182
- Dim wsh: Set wsh = WScript.CreateObject( "WScript.Shell" )
183
- Dim response: response = wsh.Run(cmd , 1 , true )
184
- If ( response <> 0 ) Then
185
- WScript.Echo cmd & " failed; rc=" & response
186
- SetASPNETVersion = false
187
- Exit function
188
- End If
189
- SetASPNETVersion = true
132
+ '
133
+ ' Capture the results of a command line execution and
134
+ ' return them to the caller.
135
+ '
136
+ Function getCommandOutput(theCommand)
190
137
191
- End Function
138
+ Dim objShell, objCmdExec
139
+ Set objShell = CreateObject( "WScript.Shell" )
140
+ Set objCmdExec = objshell.exec(thecommand)
141
+ getCommandOutput = objCmdExec.StdOut.ReadAll
192
142
143
+ end Function
0 commit comments