我们使用MSI Factory构建了msi安装程序,其中包含几个自定义操作脚本(lua
& vbs
)。其中一个脚本尝试从包中获取自定义属性,并在成功安装后将其写入文件。当使用参数请求下载时,在asp.NET处理程序中通过MSI.ChangeMSIProperty
将此自定义属性添加到下载的包中。问题是,该属性更改破坏了msi文件的签名,因此我们尝试将一些数据添加到msi文件名中。现在我需要改变那个vbscript来处理这个问题。但是我无法获得安装程序文件名。
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
是否可以获取安装程序文件名?
答案 0 :(得分:1)
OriginalDatabase property有你想要的东西。但是,您对CustomActionData的引用告诉我您的自定义操作正在延迟上下文中运行。您无权使用此酒店。无论立即执行哪些自定义操作并序列化您的CustomActionData属性,都必须获取此属性并将其放入CustomActionData。
您应该收到警告,VB / JScript自定义操作因其脆弱性而闻名。你提到SETUPEXENAME所以我假设你使用的是InstallShield,因为这是一个InstallShield属性。我建议使用InstallScript,C / C ++或C#代替。如果选择InstallScript,我在InstallSite.org上有一个示例CustomActionData序列化/反序列化模式。如果是C#,它内置于Microsoft.Deployment.WindowsInstaller库的Session类中。