我們有MSI安裝程序生成與MSI工廠與幾個自定義操作腳本(lua
& vbs
)。其中一個腳本嘗試從軟件包獲取定製屬性,並在成功安裝後將其寫入文件。當通過參數請求下載時,此自定義屬性將通過在asp.net處理程序中通過MSI.ChangeMSIProperty
添加到已下載的包中。問題在於,該屬性更改會釋放msi文件的簽名,因此我們嘗試將一些數據添加到msi文件名。現在我需要改變這個vbscript來處理這個問題。但我無法獲得安裝程序文件名。從自定義動作腳本獲取msi安裝程序文件名
Dim data, tokens
Dim fso, f
Dim setupExeFilename, setupExeFilenameParts
data = Session.Property("CustomActionData")
tokens = Split(data,"|")
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateTextFile(tokens(0) & "\\data.txt", True)
if tokens(1) = "_DEFAULT_" then
setupExeFilename = Session.Property("SETUPEXENAME")
setupExeFilenameParts = Split(data,".")
f.Write setupExeFilenameParts(UBound(setupExeFilenameParts) - 1)
else
f.Write tokens(1)
end if
f.Close
我發現Session.Property("SETUPEXENAME")
某處,但不適合我。我在Session,Session.Property,Session.ProductProperty,Installer中尋找一些屬性,但沒有運氣。我嘗試安裝程序對象,但沒有屬性返回我需要的東西。
If not Installer is nothing then
msgbox "Installer ok"
msgbox Installer.version
end if
是否可以獲取安裝程序文件名?
現在我正在爲自己的問題寫答案。你是絕對正確的,OriginalDatabase是解決方案,是的,自定義操作運行在緩存的上下文:)我的解決方案是將'| [OriginalDatabase]'追加到我的CustomActionData並讀取它作爲標記(2) – sasjaq
FWIW,你可以消除這個自定義操作。您可以使用不定製的自定義操作來執行文件路徑解析,並設置一組屬性,然後使用INI更改視圖以INI格式寫出它。這不會引入諸如回滾,卸載問題等問題。 –