2013-01-02 113 views
0

我正在使用Ant在不同的計算機上部署和安裝一些Windows Installer軟件包(MSI)。如何檢查是否使用Ant安裝Windows Installer產品

我想讓Ant在安裝之前檢查機器中是否已經安裝了msi軟件包(使用ProductCode)。

有沒有辦法在Ant中添加一個條件來檢查msi產品是否已經安裝?

我發現,查詢Windows安裝程序的產品,你可以使用API​​: linkanother link

我想我唯一的選擇是建立收到產品代碼,並使用API​​來看看一個.EXE msi已安裝。然後不知何故,它會告訴Ant產品是否安裝。

回答

0

我對Ant沒有太多的經驗(NAnt和MSBuild;是的),但是從我所看到的你可以編寫一個「外部任務」並從你的構建腳本中調用它。我假設外部任務是使用Java編寫的。我還假設在Java(JNI?)中有可能調用Win32或COM API,所以我認爲可以創建一個任務,它將ProductCode或UpgradeCode作爲參數並返回有關是否有東西被安裝或沒有。

+0

在Windows SDK - WiLstPrd.vbs中已經有一個示例VBS來執行此操作。只要你可以使用java來運行cscript.exe,你應該沒問題。 –

+0

結帳:http://stackoverflow.com/questions/2389156/calling-win32-api-method-from-java –

+0

FWIW,我會避免走出過程到cscript - > vbs - > COM。我使用「JNA」可以直接調用由MSI.dll公開的底層Win32 API,並擁有更強大的交互和錯誤處理功能。 –

相關問題