0

好吧,这让我发疯了。

我有一个 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

我究竟做错了什么?我敢肯定,这很简单,很愚蠢。非常感谢帮助。

4

1 回答 1

0

设置为 vbscript 自定义操作命名的属性的自定义操作是设置私有属性(并非全部大写)。因此,设置属性自定义操作必须在执行序列而不是 UI 序列中进行排序。一旦我进行了此更改,就会在脚本中检索正确的数据。

如果我创建了一个公共属性(全部为大写),它可以在 UI 序列中工作,但是,我没有测试这个理论。

于 2009-10-30T17:39:15.103 回答