# 如何安装指定路径下的应用包

#### 问题现象

调用接口bundleManager.install安装应用更新包时，报以下错误：

Failed to install bundles. Code is 9201002, message is Failed to install the application. \[MSG\_ERR\_INSTALL\_PERMISSION\_DENIED\].

#### 背景知识

bundleManager.install用于静默安装指定路径下的应用包，此接口只能安装分发类型为enterprise\_mdm（MDM应用）和enterprise\_normal（企业普通应用）类型的应用。

#### 解决方案

1.  检查调用方（调用bundleManager.install接口的APP）是否属于设备管理应用，且已激活状态。
    *   创建一个设备管理应用需要完成以下步骤：（1）申请资质。（2）创建EnterpriseAdminExtensionAbility。（3）声明接口所需权限。更详细的步骤参考：MDM应用开发指南。
    *   激活设备管理应用。调试阶段使用hdc shell edm enable-admin命令激活。正式发布时通过HEM平台激活。
2.  检查被调用方（待安装APP）分发类型是否为enterprise\_mdm（MDM应用）和enterprise\_normal（企业普通应用）。
    *   待安装的应用需集成企业MDM应用发布证书。申请企业MDM应用发布Profile。
    *   查询待安装APP是否属于enterprise\_mdm（MDM应用）和enterprise\_normal（企业普通应用）。通过getBundleInfoForSelf接口查询应用自身的BundleInfo，其中BundleInfo.appInfo.appDistributionType为应用的分发类型，检查是否为enterprise\_mdm（MDM应用）和enterprise\_normal（企业普通应用）类型的应用。
3.  检查待安装APP路径是否正确。
    
    用hdc命令把安装包push到物理路径上，通过应用沙箱路径和真实物理路径的对应关系，找到对应的沙箱路径，把沙箱路径作为hapFilePaths参数传入。
    
    一般情况下，安装包在沙箱中的路径形如"/data/storage/el2/base/cache/files/xxxx.hap"。
    

#### 常见FAQ

Q：MDM应用可以通过bundleManager.install接口自升级吗？

A：可以，将InstallParam的参数installFlag值设置为1即可。