我正在使用Eclipse 3.7来开发项目,我需要使用已安装的插件和功能的信息来做一些事情:
我正在使用P2配置功能来允许软件更新。
1:我需要获取已安装且当前正在运行的插件和功能列表。我需要“已安装的软件”上显示的内容,可以通过“帮助>关于>安装详细信息”查看。
注意:我将使用此信息获取有关已安装功能的数据,例如版本号和说明。
2:我需要获取最近安装的软件列表。我需要“安装历史记录”中显示的内容,可以通过“帮助>关于>安装详细信息”查看。
注意:我将使用此信息添加清除旧安装的功能。像“只保留最后五个装置”这样的东西。
答案 0 :(得分:4)
import org.eclipse.core.runtime.Platform;
import org.eclipse.equinox.p2.engine.IProfileRegistry;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
import org.eclipse.equinox.p2.metadata.Version;
import org.eclipse.equinox.p2.operations.ProvisioningSession;
import org.eclipse.equinox.p2.query.IQueryResult;
import org.eclipse.equinox.p2.query.IQueryable;
import org.eclipse.equinox.p2.query.QueryUtil;
import org.eclipse.equinox.p2.ui.ProvisioningUI;
...
try {
ProvisioningUI provisioningUI = ProvisioningUI.getDefaultUI();
if ( null == provisioningUI ) {
return;
}
String profileId = provisioningUI.getProfileId();
ProvisioningSession provisioningSession = provisioningUI.getSession();
if ( null == provisioningSession ) {
return;
}
IQueryable<IInstallableUnit> queryable = ((IProfileRegistry) provisioningSession.getProvisioningAgent().getService(IProfileRegistry.SERVICE_NAME))
.getProfile( profileId );
if ( null == queryable ) {
return;
}
// to get the product ID
//String pId = Platform.getProduct().getId();
String pId = "feature.1";
if ( null != queryable ) {
IQueryResult<IInstallableUnit> iqr = queryable.query( QueryUtil.createIUQuery( pId ), null );
if ( null != iqr ) {
Iterator<IInstallableUnit> ius = iqr.iterator();
if( ius.hasNext() ) {
IInstallableUnit iu = ius.next();
Version v = iu.getVersion();
if ( null != v ) {
System.out.println( "ID: " + iu.getId() + " | IU: " + iu.toString() + " | Version: " + v.toString() );
}
}
}
}
} catch ( Exception e ) {
System.out.println( e.getStackTrace() );
return;
}