2016-06-15 50 views
0

我有一个关于使用VBScript编辑MSI的两部分问题。编辑MSI属性表

  1. 下面的代码将使用静态值(C:\ users \ x等)放置到MSI'Property'表中。但是,如果我使用预定义变量,那么它会将变量名称作为文本插入到MSI中,而不是该变量转换为的内容。如何让msi.OpenView函数接受该变量的值?

    该变量是从命令行参数创建的。

    strNewServerName = WScript.Arguments.Item(0) 
    
    Set record = msiInstaller.CreateRecord(1) 
    Set view = msi.OpenView("INSERT INTO `Property` (`Property`, `Value`) VALUES ('SERVERNAME', 'strNewServerName')") 
    
    view.Execute record 
    
  2. view.Execute将错误,除非在MSI属性/行是空的。在我提交新的函数之前,我必须删除源MSI中更新的所有字段。有没有办法触发msi.OpenView("INSERT INTO...")与覆盖命令的任何已经在行/表?

回答

1

有办法将变量的内容插值到字符串:连接和替换。如:

>> v = "content" 
>> WScript.Echo "pipapo '" & v & "' popapi" 
>> WScript.Echo Replace("pipapo '@' popapi", "@", v) 
>> 
pipapo 'content' popapi 
pipapo 'content' popapi 
>> 

要更改现有的记录,用作展示here“更新”。

+0

谢谢,确定更新功能是有道理的。 不太确定你的意思是如何替换文字。无论写入第二组引号中的什么 - VALUES('SERVERNAME','strNewServerName')“) - 都会以清除文本的形式写入所有逻辑。 – n00borama

+0

完成寻找一种与您所描述的相似的方法但是我不太明白你的意思。 set view = msi.OpenView(“INSERT INTO'Property'('Property','Value')VALUES('SERVERPORT','”&strNewServerPort&“')”) – n00borama