好吧,这让我发疯了。
我有一个 CA,它需要知道 INSTALLDIR 的路径才能编辑 XML 文件。
因此,我设置了一个设置属性自定义操作,将名为 RemoveAuthTypesNode 的属性设置为 [INSTALLDIR]。然后我有一个 RemoveAuthTypesNode CA,它在安装执行序列中的 SetConfigFolder(将 installdir 设置为系统搜索路径的集合属性)之后排序,在系统上下文中延迟(仅在延迟执行时也不起作用)。
在日志中,我看到已设置 RemoveAuthTypesNode:
MSI (c) (D4:EC) [16:12:05:314]:属性更改:添加 RemoveAuthTypesNode 属性。其值为“C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportServer\”。
自定义操作错误:
错误 1720。此 Windows 安装程序包有问题。无法运行完成此安装所需的脚本。请联系您的支持人员或软件包供应商。自定义操作 RemoveAuthTypesNode 脚本错误 -2146827864,Microsoft VBScript 运行时错误:需要对象:'objXMLDOMNode' 第 9 行,第 1 列,MSI (s) (78:EC) [16:12:23:916]:产品:ASMI 用户定义报告-- 错误 1720。此 Windows 安装程序包有问题。无法运行完成此安装所需的脚本。请联系您的支持人员或软件包供应商。自定义操作 RemoveAuthTypesNode 脚本错误 -2146827864,Microsoft VBScript 运行时错误:需要对象:'objXMLDOMNode' 第 9 行,第 1 列,
这是失败的,因为路径不正确,因此 XMLDom 对象永远不会加载。我知道这一点,因为如果我对路径进行硬编码,一切正常。
此外,当我在日志中搜索 CustomActionData 时,我预计它会在那里设置。
这是自定义操作的代码。msgbox 仅用于调试。它总是什么都不显示。
strConfigFile = session.Property("CustomActionData") & "rsreportserver.config"
MsgBox session.Property("CustomActionData")
Set xDoc = CreateObject("Microsoft.XMLDOM")
xDoc.async = False
xDoc.Load(strConfigFile)
set objXMLDOMNode = xDoc.selectSingleNode("//Configuration/Authentication/AuthenticationTypes")
set objParentNode = objXMLDOMNode.parentNode
objParentNode.removeChild(objXMLDOMNode)
xDoc.save(strConfigFile)
Set xDoc = Nothing
我究竟做错了什么?我敢肯定,这很简单,很愚蠢。非常感谢帮助。