从MSI安装运行VBScript

时间:2012-03-20 18:30:04

标签: vbscript windows-installer

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

到目前为止,脚本看起来像这样:

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包是在Visual Studio 2010中构建的.CustomActionData也是TARGETDIR。

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

1 个答案:

答案 0 :(得分:2)

我必须诚实,我对你提出的解决方案有很多顾虑:

1)VB / JScript CA的Suck。我会阅读链接并将其铭记于心。

2)我在职业生涯中见过许多机器,其中FSO被打破了。

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

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

5)您正在运行双重进程,没有错误记录EXE呼叫。

6)Visual Studio部署项目吸引了很多我无法计算的方式。有证据表明Micrsoft已经在Visual Studio 11中杀死了它们。

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

以下几篇博客文章可以帮助您理解我的意思:

Augmenting InstallShield using Windows Installer XML - Certificates

Augmenting InstallShield using Windows Installer XML - Windows Services

Redemption of Visual Studio Deployment Projects