Installation WIX:如何在现有Web应用程序或网站上注册新的ISAPI扩展或脚本映射?
我见过元素,但因为它必须是的子元素,所以它似乎需要创建一个新的WebApplication。我不想那样 我想在现有网站上创建扩展(或脚本映射)。卸载时,网站应保留,但扩展(脚本映射条目)应删除 有人知道如何在WIX中做到这一点吗Installation WIX:如何在现有Web应用程序或网站上注册新的ISAPI扩展或脚本映射?,installation,wix,windows-installer,isapi,Installation,Wix,Windows Installer,Isapi,我见过元素,但因为它必须是的子元素,所以它似乎需要创建一个新的WebApplication。我不想那样 我想在现有网站上创建扩展(或脚本映射)。卸载时,网站应保留,但扩展(脚本映射条目)应删除 有人知道如何在WIX中做到这一点吗 如果我没有得到好的答案,我想我必须在InstallFinalize之前在脚本中完成它。我想不出在WIX中实现这一点的方法,所以我求助于自定义操作。我一直在写我所有的故事。我发现Javascript很容易使用,而且为此目的很健壮 但是我找不到从Javascript添加s
如果我没有得到好的答案,我想我必须在InstallFinalize之前在脚本中完成它。我想不出在WIX中实现这一点的方法,所以我求助于自定义操作。我一直在写我所有的故事。我发现Javascript很容易使用,而且为此目的很健壮 但是我找不到从Javascript添加scriptmap的方法,因为IIS元数据库更新需要使用VBArray数据类型,这在VBScript中受支持,但在Javascript中不受支持。哎呀 下面是VBScript中的代码
Function AddExtension_CA()
VBSLogMessage("AddExtension_CA() ENTRY")
Dim iis
Set iis = GetObject("winmgmts://localhost/root/MicrosoftIISv2")
dim siteName
siteName = Session.Property("WEBSITE_NAME")
VBSLogMessage "website name(" & siteName & ")"
If (siteName <> "") Then
Dim idir, dll
idir = Session.Property("INSTALLDIR")
dll = idir & "\MyIsapiExtension.dll"
Dim query
If (siteName <> "W3SVC") Then
query = "SELECT * FROM IIsWebServerSetting WHERE Name = '" & siteName & "'"
Else
query = "SELECT * FROM IIsWebServiceSetting"
End If
Set results = iis.ExecQuery(query)
Dim newMaps() '' dynamically-sized Array
'' two passes
For t = 0 to 1
Dim c
c=0
For Each item in results
'' in pass 1, count them.
'' in pass 2, copy them.
For i = 0 to Ubound(item.ScriptMaps)
If UCase(item.ScriptMaps(i).Extensions) <> ".IIRF" Then
If t = 1 Then
Set newMaps(c) = item.ScriptMaps(i)
End if
c = c+1
End If
Next
If t = 0 Then
ReDim Preserve newMaps(c)
Else
VBSLogMessage("setting new filter")
Set newMaps(c) = iis.get("ScriptMap").SpawnInstance_()
newMaps(c).Extensions = ".iirf"
newMaps(c).ScriptProcessor= dll
newMaps(c).Flags = "1"
newMaps(c).IncludedVerbs = "GET,POST"
item.ScriptMaps = newMaps
item.Put_()
End If
Next
Next
VBSLogMessage("Allowing the DLL as an Extension")
dim IIsWebServiceObj
Set IIsWebServiceObj = GetObject("IIS://localhost/W3SVC")
IIsWebServiceObj.AddExtensionFile dll, True, "GroupId", True, "Description of the Extension"
Set IIsWebServiceObj = Nothing
End If
Set iis = Nothing
VBSLogMessage("AddExtension_CA() EXIT")
AddExtension_CA = 1 ' MsiActionStatus.Ok
End Function
函数AddExtension_CA()
VBSLogMessage(“AddExtension_CA()条目”)
模糊iis
设置iis=GetObject(“winmgmts://localhost/root/MicrosoftIISv2")
模糊站点名
siteName=Session.Property(“网站名称”)
VBSLogMessage“网站名称(&siteName&)”
如果是(siteName“”),则
Dim idir,dll
idir=Session.Property(“INSTALLDIR”)
dll=idir&“\MyIsapiExtension.dll”
模糊查询
如果(siteName“W3SVC”),则
query=“从iiswebserver设置中选择*,其中Name=”&siteName&“
其他的
query=“从IIsWebServiceSetting中选择*
如果结束
Set results=iis.ExecQuery(查询)
Dim newMaps()“”动态调整大小的数组
“两个通行证
对于t=0到1
dimc
c=0
对于结果中的每个项目
“”在过程1中,计算它们。
“”在过程2中,复制它们。
对于i=0到Ubound(item.ScriptMaps)
如果UCase(item.ScriptMaps(i).Extensions)“.IIRF”,那么
如果t=1,则
设置新映射(c)=项。脚本映射(i)
如果结束
c=c+1
如果结束
下一个
如果t=0,则
ReDim保留新地图(c)
其他的
VBSLogMessage(“设置新过滤器”)
Set newMaps(c)=iis.get(“ScriptMap”).SpawnInstance
新地图(c).Extensions=“.iirf”
newMaps(c).ScriptProcessor=dll
newMaps(c).Flags=“1”
newMaps(c).IncludedVerbs=“获取,发布”
item.ScriptMaps=newMaps
项目.放置()
如果结束
下一个
下一个
VBSLogMessage(“允许DLL作为扩展”)
dim iiSwebService北京
设置IIsWebServiceObj=GetObject(“IIS://localhost/W3SVC”)
IIsWebServiceObj.AddExtensionFile dll,True,“GroupId”,True,“扩展名说明”
设置IIsWebServiceObj=Nothing
如果结束
设置iis=Nothing
VBSLogMessage(“AddExtension_CA()退出”)
AddExtension_CA=1'MsiActionStatus。确定
端函数
以下是WIX代码:
<Fragment>
<CustomAction Id="CA.AddExtension"
BinaryKey="B.VBScript"
VBScriptCall="AddExtension_CA"
Execute="immediate"
Return="check" />
....
....
另请参见:.我想不出在WIX中实现这一点的方法,所以我求助于自定义操作。我一直在写我所有的故事。我发现Javascript很容易使用,而且为此目的很健壮 但是我找不到从Javascript添加scriptmap的方法,因为IIS元数据库更新需要使用VBArray数据类型,这在VBScript中受支持,但在Javascript中不受支持。哎呀 下面是VBScript中的代码
Function AddExtension_CA()
VBSLogMessage("AddExtension_CA() ENTRY")
Dim iis
Set iis = GetObject("winmgmts://localhost/root/MicrosoftIISv2")
dim siteName
siteName = Session.Property("WEBSITE_NAME")
VBSLogMessage "website name(" & siteName & ")"
If (siteName <> "") Then
Dim idir, dll
idir = Session.Property("INSTALLDIR")
dll = idir & "\MyIsapiExtension.dll"
Dim query
If (siteName <> "W3SVC") Then
query = "SELECT * FROM IIsWebServerSetting WHERE Name = '" & siteName & "'"
Else
query = "SELECT * FROM IIsWebServiceSetting"
End If
Set results = iis.ExecQuery(query)
Dim newMaps() '' dynamically-sized Array
'' two passes
For t = 0 to 1
Dim c
c=0
For Each item in results
'' in pass 1, count them.
'' in pass 2, copy them.
For i = 0 to Ubound(item.ScriptMaps)
If UCase(item.ScriptMaps(i).Extensions) <> ".IIRF" Then
If t = 1 Then
Set newMaps(c) = item.ScriptMaps(i)
End if
c = c+1
End If
Next
If t = 0 Then
ReDim Preserve newMaps(c)
Else
VBSLogMessage("setting new filter")
Set newMaps(c) = iis.get("ScriptMap").SpawnInstance_()
newMaps(c).Extensions = ".iirf"
newMaps(c).ScriptProcessor= dll
newMaps(c).Flags = "1"
newMaps(c).IncludedVerbs = "GET,POST"
item.ScriptMaps = newMaps
item.Put_()
End If
Next
Next
VBSLogMessage("Allowing the DLL as an Extension")
dim IIsWebServiceObj
Set IIsWebServiceObj = GetObject("IIS://localhost/W3SVC")
IIsWebServiceObj.AddExtensionFile dll, True, "GroupId", True, "Description of the Extension"
Set IIsWebServiceObj = Nothing
End If
Set iis = Nothing
VBSLogMessage("AddExtension_CA() EXIT")
AddExtension_CA = 1 ' MsiActionStatus.Ok
End Function
函数AddExtension_CA()
VBSLogMessage(“AddExtension_CA()条目”)
模糊iis
设置iis=GetObject(“winmgmts://localhost/root/MicrosoftIISv2")
模糊站点名
siteName=Session.Property(“网站名称”)
VBSLogMessage“网站名称(&siteName&)”
如果是(siteName“”),则
Dim idir,dll
idir=Session.Property(“INSTALLDIR”)
dll=idir&“\MyIsapiExtension.dll”
模糊查询
如果(siteName“W3SVC”),则
query=“从iiswebserver设置中选择*,其中Name=”&siteName&“
其他的
query=“从IIsWebServiceSetting中选择*
如果结束
Set results=iis.ExecQuery(查询)
Dim newMaps()“”动态调整大小的数组
“两个通行证
对于t=0到1
dimc
c=0
对于结果中的每个项目
“”在过程1中,计算它们。
“”在过程2中,复制它们。
对于i=0到Ubound(item.ScriptMaps)
如果UCase(item.ScriptMaps(i).Extensions)“.IIRF”,那么
如果t=1,则
设置新映射(c)=项。脚本映射(i)
如果结束
c=c+1
如果结束
下一个
如果t=0,则
ReDim保留新地图(c)
其他的
VBSLogMessage(“设置新过滤器”)
Set newMaps(c)=iis.get(“ScriptMap”).SpawnInstance
新地图(c).Extensions=“.iirf”
newMaps(c).ScriptProcessor=dll
newMaps(c).Flags=“1”
newMaps(c).IncludedVerbs=“获取,发布”
item.ScriptMaps=newMaps
项目.放置()
如果结束
下一个
下一个
VBSLogMessage(“允许DLL作为扩展”)
dim iiSwebService北京
设置IIsWebServiceObj=GetObject(“IIS://localhost/W3SVC”)
IIsWebServiceObj.AddExtensionFile dll,True,“GroupId”,True,“扩展名说明”
设置IIsWebServiceObj=Nothing
如果结束
设置iis=Nothing
VBSLogMessage(“AddExtension_CA()EXI