2013-01-02 84 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,并拥有更强大的交互和错误处理功能。 –

相关问题