如何在安装之前验证升级

时间:2012-10-05 09:23:39

标签: eclipse eclipse-rcp eclipse-plugin p2

我们有一个许可的eclipse功能,许可证由我们自己的代码处理。用户可以进入我们的更新站点并升级其功能。我们面临的问题是在用户的许可证需要使用新升级之前需要更新。

我想要做的是根据用户许可证验证功能版本,并警告用户在安装之前需要更新其许可证。

我以为我会使用自定义eclipse p2 touchPoint动作validateLicense来做到这一点。

示例:

我的代码被调用,我根据用户的许可证验证版本。如果失败,我会警告用户,然后他可以取消安装。

所以我的第一个问题是:

  • 我能做到这一点,还是以其他方式做到这一点?

我的第二个问题非常基本:

  • 我在哪里告诉eclipse运行我的代码? 我看了here at eclipse help,他们在那里解释它是什么。但我不明白将信息放在哪里运行我的代码?它在feature.xml中。

最后:

  • 是否有如何创建和使用p2 touchPonts的示例?

2 个答案:

答案 0 :(得分:1)

接触点在安装时执行,这意味着已经发生了分辨率(验证)。我不确定他们会帮忙。如何创建表示用户已安装的许可证的可安装单元(IU)(或Eclipse功能)。然后,您将从您的产品中依赖该许可证。

例如,创建一个名为com.mycompany.license(1.0.0)的IU。您将创建另一个名为com.mycompany.license(2.0.0)的文件。安装许可证后,相应的IU将添加到配置文件中。

现在,当您安装产品时,新版本的产品将需要许可证版本2.0.0。如果未安装此许可证,则解决方案将失败。

这有意义吗?你认为这会有所帮助吗?

答案 1 :(得分:1)

我实现了here所示的自定义操作,我有一个似乎有用的系统。我省略了“接触点”扩展,因为在我的情况下它是不必要的,但其余部分是相同的。

我的操作在我的功能(instructions.install)的安装阶段执行,但也许配置阶段也可以工作。收集阶段没有用。

在安装过程中,在已经执行下载后执行操作。理想情况下,它将在下载之前,但对我来说这不是一个大问题。从操作返回错误状态会取消安装。它会留下一些下载的文件,但它们不会被激活,可能会被p2的垃圾收集器删除。

我还设法做了一些更有趣的事情。我的动作插件在我的主插件上有一个依赖(可选和非贪婪)。所以安装的工作原理如下:

  • 动作插件已下载
  • 执行自定义操作
  • 该操作检测我的主插件是否已安装,如果是,则调用它来检索许可信息。主插件必须公开该动作的API。该操作还会检查主插件的版本,以检测API是否存在。
  • 现在,操作可以决定是继续还是取消安装。它甚至可以使用Display#syncExec与用户交互(这是checkTrust阶段的代码,所以我认为它是安全的)。如果需要,该操作还可以检测安装是否无头。

一些问题:

  • 操作本身必须进行版本控制。它是你在plugin.xml和p2.inf文件中声明的版本,它与插件的版本不同。我只是用我的插件所具有的相同版本替换1.0.0。这样,在执行之前总是下载最新版本的动作插件。这很好,因为现在可以在actions插件中实现许可规则的任何问题更改。
  • 在Eclipse 3.5和3.6之间更改了Actions API。我可能会放弃对3.5的支持,因为它很老了。
  • 应该签署动作插件。在我的情况下就是这种情况。系统似乎对我来说太强大了,因为只需将Eclipse指向更新站点就可以执行下载的代码。

我仍然需要测试它如何与不同版本的Eclipse和其他IDE一起使用。我在3.6中看到了一个奇怪的(非阻塞)错误。然而,结果是有希望的,看起来系统可能实际工作。