我们有一个Eclipse产品,在启动时使用标准p2 Operations API或'p2 Silent Update'已经实现了“检查可用更新”的更新机制。这非常合适,更新操作可以解决所有依赖关系,例如安装了哪些更新,哪些不安装,如果有新的更新,它将正确下载它们。
我在启动时使用相同的Operations API或“p2 Silent install”实现了“检查可用的新安装”的类似功能。我的代码如下所示:
InstallOperation install = new InstallOperation(provisioningSession, toInstall);
IStatus status = install.resolveModal(null);
if (status.getSeverity() == IStatus.OK) {
Job job = operation.getProvisioningJob(null);
job.schedule();
}
问题是我安装新捆绑包后(仅在重启应用程序后才可见),我需要检查它们是否已经安装,我使用标准API:
IProfileRegistry profileRegistry = (IProfileRegistry) provisioningAgent.getService(IProfileRegistry.SERVICE_NAME);
IProfile profile = profileRegistry.getProfile(IProfileRegistry.SELF);
Collection<IInstallableUnit> alreadyInstalled = profile.available(QueryUtil.ALL_UNITS, null).toUnmodifiableSet();
问题是已安装的设备列表不包含我新安装的捆绑包。另一个奇怪的观察是我的应用程序会尝试一直安装相同的bundle,因为InstallOperation解析为OK,好像这些bundle从未安装过(我认为这是因为它们实际上并没有包含在当前的p2配置文件中,结果与我得到的相同)列出当前配置文件中所有已安装的软件包时,请参阅上面的代码。
我想知道这是一个错误,还是有另一个单独的p2配置文件,其中包含通过Operations API安装的软件包,以及为什么它们不会被注册为当前配置文件的一部分(即使我可以看到它们被复制并正确安装在我的应用程序中。
Operations API: