用于卸载非受管软件包的 Apex 脚本抛出 INSUFFICIENT_ACCESS:访问权限不足错误

Apex script to uninstall an unmanaged package throws INSUFFICIENT_ACCESS: insufficient access rights error

我正在尝试在 apex 中编写一个简单的脚本来处理非托管包的卸载。 代码如下

 public static void uninstallPackage() {    
    String[] fullNames = new String[1];
    fullNames[0] = 'SomePackage';
    System.debug('fullNames -->'+fullNames);
    MetadataService.DeleteResult[] result = createService().deleteMetadata('InstalledPackage',fullNames);
}   
private static  MetadataService.MetadataPort createService() {
    MetadataService.MetadataPort service = new MetadataService.MetadataPort();
    service.SessionHeader = new MetadataService.SessionHeader_element();
    service.SessionHeader.sessionId = UserInfo.getSessionId();
    return service;
}

当我 运行 这个脚本时,我得到以下错误 'INSUFFICIENT_ACCESS:对交叉引用 ID faultcode=sf:INSUFFICIENT_ACCESS faultactor='[=12 的访问权限不足=]

我尝试搜索所有可能的解决方案,但都指出要在正在处理的配置文件上启用修改所有权限这个脚本,是的,我正在使用系统管理员配置文件 运行 这个脚本并且权限已启用。

我尝试使用连接的应用程序来获取会话 ID,但同样未能解决问题。

有人可以帮我解决这个问题吗?

进一步研究发现上述脚本不适用于非托管包。 使用上述脚本,我们能够卸载受管软件包。 我们应该将包的命名空间作为名称参数 由于非托管包没有命名空间,我们将无法卸载非托管包。