我们有一个 Eclipse 产品,在启动时使用标准 p2 操作 API 或“p2 静默更新”实现了“检查可用更新”的更新机制。这工作得很好,更新操作可以解决所有的依赖关系,比如安装了哪些更新,哪些没有,如果有新的更新可用,它将正确下载它们。
我在启动时使用相同的操作 API 或“p2 静默安装”实现了类似的“检查可用新安装”功能。我的代码如下所示:
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();
问题是已安装单元的列表不包括我新安装的捆绑包。另一个奇怪的观察是,我的应用程序会一直尝试安装相同的包,因为 InstallOperation 解析为 OK,就好像这些包从未安装过一样(我认为这是因为它们实际上并未包含在当前 p2 配置文件中,与我得到的结果相同列出当前配置文件中所有已安装的捆绑包时,请参见上面的代码)。
我想知道这是否是一个错误或是否存在另一个单独的 p2 配置文件,其中包括通过 Operations API 安装的捆绑包,以及为什么它们没有注册为当前配置文件的一部分(即使我可以看到它们被复制并安装在我的应用程序正确)。
操作 API: