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

Vbscript 从自定义操作脚本获取msi安装程序文件名,vbscript,windows-installer,Vbscript,Windows Installer,我们使用msi工厂构建了msi安装程序,其中包含两个自定义操作脚本(lua&vbs)。其中一个脚本尝试从包中获取自定义属性,并在成功安装后将其写入文件。当使用参数请求下载时,此自定义属性通过asp.NET处理程序中的MSI.changeMisProperty添加到下载的包中。问题是,属性更改会破坏msi文件的签名,所以我们尝试向msi文件名添加一些数据。现在我需要更改vbscript来处理这个问题。但我无法获取安装程序的文件名 Dim data, tokens Dim fso, f Dim se

我们使用msi工厂构建了msi安装程序,其中包含两个自定义操作脚本(
lua
&
vbs
)。其中一个脚本尝试从包中获取自定义属性,并在成功安装后将其写入文件。当使用参数请求下载时,此自定义属性通过asp.NET处理程序中的
MSI.changeMisProperty
添加到下载的包中。问题是,属性更改会破坏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
是否可以获取安装程序文件名?

具有您要查找的文件名。但是,您对CustomActionData的引用告诉我您的自定义操作正在延迟上下文中运行。您将无权访问此属性。无论是立即运行并序列化CustomActionData属性的任何自定义操作,都必须获取此属性并将其放入CustomActionData中


应该提醒您,VB/JScript自定义操作以其脆弱性而闻名。您提到了SETUPEXENAME,所以我假设您使用的是InstallShield,因为这是InstallShield属性。我建议改用InstallScript、C/C++或C#。如果您选择InstallScript,我在InstallSite.org上有一个CustomActionData序列化/反序列化模式示例。如果是C#,它将内置在Microsoft.Deployment.WindowsInstaller库的会话类中。

现在我正在写我自己问题的答案。您完全正确,OriginalDatabase是解决方案,是的,自定义操作在不同的上下文中运行:)我的解决方案是将
|[OriginalDatabase]
附加到我的CustomActionData并将其作为令牌读取(2)FWIW,您可以消除此自定义操作。您可以使用即时自定义操作来进行文件路径解析,只需设置一组属性,然后使用INI更改视图以INI格式将其写出。这不会带来诸如回滚、卸载等问题。