Backgound信息...我为产品“A”维护了一个install4j项目。我们正在开发一种新产品“B”,产品管理已经要求它拥有自己的基于install4j的安装程序。
值得注意的是,这两种产品之间没有文件系统重叠或共享库。也就是说,它们将安装在同一系统上的唯一目录中(例如/opt/myCompany/prodA
,/opt/myCompany/ProdB
)。
但是,产品“B”要求将产品“A”安装在同一系统上。但产品“A”不依赖于“B”。因此,产品“B”的安装程序需要能够权威地确定产品“A”是否已安装在同一台机器上,如果没有,则安装它。
问题:install4j是否维护了它安装的产品的某种持久注册表,因此产品“B”的安装程序可以权威地确定它的相关产品(“A”)是否已安装在系统上?甚至可能查询安装/产品详细信息(例如版本,安装目录)?
如果没有,我总是可以添加一些脚本逻辑来搜索产品“A”的迹象(例如,查找名为“A”的Windows服务),或者让用户浏览到产品A的安装目录,但我会如果install4j提供了这个,那么至少尝试更好/内置的方法来完成这个任务?
最后,有些情况下,如果系统上尚未安装产品“A”,那么我打算使用“运行可执行文件或批处理文件”操作从媒体安装它。我提到这一点,希望能够肯定这是解决这个问题的正确方法。
感谢您的帮助!
答案 0 :(得分:1)
install4j在API中使用ApplicationRegistry类公开了这样的功能:
http://resources.ej-technologies.com/install4j/help/api/com/install4j/api/ApplicationRegistry.html
使用此类的代码段是:
ApplicationRegistry.ApplicationInfo[] applicationInfos =
ApplicationRegistry.getApplicationInfoById("other app ID");
if (applicationInfos.length > 0) {
context.setVariable("otherAppInstalled", applicationInfos.length > 0);
context.setVariable("otherAppInstallationDir",
applicationInfos[0].getInstallationDirectory().getPath());
}