从MSI安装运行VBScript

从MSI安装运行VBScript,vbscript,windows-installer,Vbscript,Windows Installer,我正在MSI安装的提交部分运行VBScript作为自定义操作。该脚本调用为ZB设备安装驱动程序的.exe。我想做的是首先检查文件系统,看看驱动程序是否已经存在,如果已经存在,则跳过安装 到目前为止,脚本如下所示: Sub Run(ByVal sFile) Dim shell Set shell = CreateObject("WScript.Shell") shell.Run Chr(34) & sFile & Chr(34), 1, false Set

我正在MSI安装的提交部分运行VBScript作为自定义操作。该脚本调用为ZB设备安装驱动程序的.exe。我想做的是首先检查文件系统,看看驱动程序是否已经存在,如果已经存在,则跳过安装

到目前为止,脚本如下所示:

Sub Run(ByVal sFile)
Dim shell
    Set shell = CreateObject("WScript.Shell")
    shell.Run Chr(34) & sFile & Chr(34), 1, false
    Set shell = Nothing
End Sub

Set objFSO = CreateObject("Scripting.FileSystemObject")

IF objFSO.fileExists("c:\windows\system32\drivers\ftser2k.sys") THEN
    MsgBox("You already have the drivers installed.")
ELSEIF objFSO.fileExists("c:\windows\system32\ftserui2.dll")  THEN
    MsgBox("You already have the drivers installed.")
ELSE
    Run Session.Property("CustomActionData") & "CDM20600.exe"
END IF
这些文件确实存在于我的计算机上。因此,如果我双击vbs文件,我会看到MsgBox显示我已经拥有了该文件。但是,当我运行msi安装时,无论它安装什么驱动程序,都好像前两个条件语句都不存在一样。我确实读到你不能在MSI中使用WScript对象,所以我取出WScript.Echo行并用MsgBox替换它们。我想知道你是否也不能在msi中使用FileSystemObject

我的最终目标是不让任何信息出现。如果系统上存在文件,我只希望跳过驱动程序安装。这些消息现在仅用于调试目的

如果有帮助的话,msi包是在VisualStudio2010中构建的。此外,CustomActionData是TARGETDIR


我对VBScript和安装软件包都是新手,所以请保持温和:)

老实说,我对您提出的解决方案有很多顾虑:

1) VB/JScript CA的。我会阅读链接并将其牢记在心

2) 在我的职业生涯中,我见过很多FSO被破坏的机器

3) 您已硬编码到System32的路径,而不是使用SystemFolder或System64Folder

4) 禁用回滚时不执行提交自定义操作

5) 您正在运行双进程,并且没有记录EXE调用的错误

6) VisualStudio部署项目在很多方面都很糟糕,我数不清。证据是微软在VisualStudio11中杀死了他们

如果是我,我会问你是否必须使用这个EXE来安装驱动程序包,或者是否有一个INF文件与SYS/DLL文件一起使用。如果是这样,我将考虑创建一个使用。这允许您将驱动程序安装行为封装在一个离散模块中,然后将其添加到VDPROJ安装程序中,或者更好地添加到WiX或InstallShield限量版(免费)安装程序中

这里有几篇博客文章可以帮助你理解我的意思: