You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET应用中如何移除Windows MSIX应用包?

解决方案:获取MSIX包的PackageFullName或实现移除功能

一、获取已安装MSIX包的PackageFullName

1. 通过包标识精准查询

如果你知道自研MSIX包的包名称和发布者信息(可从MSIX的AppxManifest.xml中Identity节点的Name、Publisher属性获取),可以直接用PackageManager.FindPackagesForUser方法定位:

using Windows.Management.Deployment;

var packageManager = new PackageManager();
// 替换为你的包实际名称和发布者
string targetPackageName = "YourSelfDevelopedPackageName";
string targetPublisher = "CN=YourPublisherName";

// 查询当前用户下的匹配包
var matchedPackages = packageManager.FindPackagesForUser(string.Empty, targetPackageName, targetPublisher);
foreach (var package in matchedPackages)
{
    string packageFullName = package.Id.FullName;
    // 此处拿到的packageFullName即可用于RemovePackageAsync
}

2. 通过MSIX文件解析标识后查询

如果手里保留着原MSIX安装文件,可以先解析包的标识信息,再匹配已安装包:

using Windows.Management.Deployment;

var packageManager = new PackageManager();
string msixFilePath = @"D:\Path\To\Your\App.msix";

// 从MSIX文件生成包标识
var packageId = packageManager.CreatePackageId(msixFilePath);
// 查询对应已安装包
var matchedPackages = packageManager.FindPackagesForUser(string.Empty, packageId.Name, packageId.Publisher);
foreach (var package in matchedPackages)
{
    string packageFullName = package.Id.FullName;
}

3. 遍历已安装包筛选

如果不清楚包的具体标识,也可以遍历当前用户所有已安装包,通过包的特征(比如安装路径关键词、包名称关键词)筛选目标包:

using Windows.Management.Deployment;

var packageManager = new PackageManager();
var allUserPackages = packageManager.FindPackagesForUser(string.Empty);
foreach (var package in allUserPackages)
{
    // 示例:通过安装路径包含自研包关键词筛选
    if (package.InstalledLocation.Path.Contains("YourPackageKeyword"))
    {
        string packageFullName = package.Id.FullName;
    }
}

二、能否直接通过MSIX文件移除包?

目前PackageManager没有提供直接通过MSIX文件路径移除包的API,必须传入packageFullName。不过可以结合上面的方法,先从MSIX文件解析出标识,再查询到对应packageFullName后执行移除:

using Windows.Management.Deployment;
using System.Threading.Tasks;

async Task RemovePackageViaMsixFile(string msixFilePath)
{
    var packageManager = new PackageManager();
    var packageId = packageManager.CreatePackageId(msixFilePath);
    var matchedPackages = packageManager.FindPackagesForUser(string.Empty, packageId.Name, packageId.Publisher);
    
    foreach (var package in matchedPackages)
    {
        await packageManager.RemovePackageAsync(package.Id.FullName);
    }
}

注意事项

  • 调用PackageManager的部署相关方法,需要在应用的AppxManifest.xml中添加packageManagement权限:
    <Capabilities>
        <Capability Name="packageManagement" />
    </Capabilities>
    
  • 桌面应用需引用Windows.winmd,并将项目目标平台设置为Windows 10/11的对应版本。

内容的提问来源于stack exchange,提问作者Anh dang nhat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:31:09