从自定义操作脚本获取msi安装程序文件名

时间:2013-05-29 08:33:22

标签: vbscript windows-installer

我们使用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

是否可以获取安装程序文件名?

1 个答案:

答案 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类中。