2012-03-20 182 views
0

我在MSI安裝的Commit部分運行VBScript作爲自定義操作。腳本調用安裝ZB設備驅動程序的.exe文件。我想要做的是先檢查文件系統,看看驅動程序是否已經存在,如果是的話就跳過安裝。從MSI安裝中運行VBScript

到目前爲止,腳本是這樣的:

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和安裝軟件包,所以請溫柔:)

回答

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