如何在安装之前验证升级

giZ*_*Zm0 5 eclipse eclipse-plugin p2 eclipse-rcp

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

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

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

例:

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

所以我的第一个问题是:

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

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

  • 我在哪里告诉eclipse运行我的代码?我在这里看了一下eclipse的帮助,他们解释了它是什么.但我不明白将信息放在哪里运行我的代码?它在feature.xml中.

最后:

  • 有一个例子如何创建和使用p2 touchPonts?

小智 1

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

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

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

我还设法做了一些更有趣的事情。我的动作插件依赖于我的主插件(可选且非贪婪)。所以安装过程如下:

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

一些问题:

  • 操作本身必须进行版本控制。这是您在plugin.xml和p2.inf文件中声明的版本,它与插件的版本不同。我只是将 1.0.0 替换为与我的插件相同的版本。这样,在执行之前始终会下载最新版本的操作插件。这很棒,因为现在许可规则的任何问题更改都可以在操作插件中实现。
  • Actions API 在 Eclipse 3.5 和 3.6 之间发生了变化。我可能会放弃对 3.5 的支持,因为它已经很旧了。
  • 操作插件可能应该被签名。我的情况就是这样。该系统对我来说似乎太强大了,因为只需将 Eclipse 指向更新站点即可让它执行下载的代码。

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