我正在尝试自动化一个过程,以在编译时更新一个 wise for windows 包,以更新产品代码、包代码、产品版本和更新表 versionmax 值。
我可以成功更新包代码的属性表和摘要信息。但是,更新表给我带来了问题。此表中有几个条目。
我可以枚举现有条目,但无法更新现有条目。每次我尝试得到一个错误“异常:需要对象'project.WTables(...).WRows.Row(...)'
我使用的语法与前面更新 ProductCode、ProductVersion 和包代码的调用相同。
我正在使用 vbscript。
我正在传递产品版本和 wise wsi 项目文件的完整路径。在 UpdateUpgradeTable 函数中,aUpgradeGuids 按照我的预期正确填充了一组升级代码。我现在要做的就是将每个代码的 VersionMax 值更改为当前的 wiseProductVersion。但是,vbscript 对象 WRows.Row(a(i)) 似乎存在一些问题,这是一个实际的 GUID。
我在帮助的自动化部分查看了其他示例脚本,它确实支持使用变量,而且看起来变量不像纯文本那样需要引号。我什至不确定这意味着什么,需要对象。项目绝对是一个对象。我已经确认了。我什至通过在函数中插入直接文本来尝试过这个,但它仍然失败。我已经用 tblProperty.WRows.Row(...) 尝试过,但它以同样的方式失败。在 Set tblProperty = ... 之后,我尝试在 For 循环之外用一个好的升级代码调用它,但它仍然失败。这种类型的结构适用于所有以前的表格。这让我很困惑。有任何想法吗?我认为这可能超越了 Wise for Windows 并且可能对 msi 也是通用的,所以我也将在 MSI 下发布。
我有一个看起来像这样的子主:
Dim wiseInstallDir: wiseInstallDir = WScript.Arguments(0)
Dim wiseProductVersion: wiseProductVersion = WScript.Arguments(1)
Sub main()
Set wise = CreateObject("WfWi.Document")
Dim nResult
nResult = wise.Open (wiseInstallDir)
UpdateProductVersion wise
... 'other functions
UpdateUpgradeTable wise
wise.Save wiseInstallDir
End Sub
'This function works properly
Sub UpdateProductVersion(project)
Set tblProperty = project.WTables("Property")
tblProperty.WRows.Row("ProductVersion").WColumns("Value").Data=wiseProductVersion
End Sub
Sub UpdateUpgradeTable(project)
Set tblProperty = project.WTables("Upgrade")
Dim tmpRow,count: count = 0
Dim aUpgradeGuids: Set aUpgradeGuids = CreateObject("Scripting.Dictionary")
Const UPGRADECODE = 0
For Each tmpRow In tblProperty.WRows
Dim tRow: tRow=tmpRow.Key
Dim values: values=Split(tRow, ",")
aUpgradeGuids.Add count,values(0)
count=count + 1
Next
a = aUpgradeGuids.Items
For i = 0 To aUpgradeGuids.Count - 1
project.WTables("Upgrade")._
WRows.Row(a(i)).WColumns("VersionMax").Data=wiseProductVersion
Next
End Sub
main
编辑:'更新了 UpdateUpgradeTable
Sub UpdateUpgradeTable(project)
Set tblProperty = project.WTables("Upgrade")
Dim tmpRow
'Get the UpgradeCode for each current record and change the VersionMax value for that record.
For Each tmpRow In tblProperty.WRows
Dim tRow: tRow=tmpRow.Key
Dim values: values=Split(tRow, ",")
tblProperty.WRows.Row(values(0)).WColumns("VersionMax").Data=wiseProductVersion
Next
End Sub