2016-06-15 51 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