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

C#调用PowerShell的Get-AppxPackage无法填充DataTable问题求助

问题原因及解决方案

Get-AppxPackage返回空集合的核心原因通常是权限不足或平台编译目标不匹配,以下是具体分析和修复方案:

1. 管理员权限要求

Get-AppxPackage -AllUsers 需要管理员权限才能访问所有用户的UWP应用信息。普通权限下,该命令仅能获取当前用户的UWP应用,若当前用户无UWP应用或权限受限无法读取,就会返回空集合。

修复:

在项目属性中配置管理员权限:右键项目 → 属性 → 安全性 → 勾选“启用ClickOnce安全设置”,打开app.manifest文件,将requestedExecutionLevel节点修改为:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

2. 平台编译目标不匹配

若WinForms项目编译目标为x86,在x64系统上运行时会调用32位PowerShell进程。32位PowerShell无法读取64位系统中UWP应用的注册信息,导致Get-AppxPackage返回空。

修复:

将项目编译目标改为Any CPU或x64:右键项目 → 属性 → 生成 → 平台目标,选择Any CPU(取消勾选“首选32位”)或x64。

3. 添加错误捕获逻辑

原代码未处理PowerShell的错误输出,无法定位命令执行失败的具体原因。建议添加错误捕获辅助排查:

修改后的GetPrograms_2代码:

private DataTable GetPrograms_2()
{
    DataTable programTable_2 = new DataTable();
    programTable_2.Columns.Add("App Name");
    programTable_2.Columns.Add("App Version");

    string command = "Get-AppxPackage -AllUsers | Select-Object Name, Version";
    using (PowerShell powerShell = PowerShell.Create())
    {
        powerShell.AddScript(command);
        Collection<PSObject> psObjects = powerShell.Invoke();

        // 检查并输出PowerShell执行错误
        if (powerShell.Streams.Error.Count > 0)
        {
            foreach (var error in powerShell.Streams.Error)
            {
                MessageBox.Show($"PowerShell执行错误: {error.Exception.Message}");
            }
        }

        foreach (PSObject psObject in psObjects)
        {
            if (psObject.Properties["Name"]?.Value != null && psObject.Properties["Version"]?.Value != null)
            {
                string appName = psObject.Properties["Name"]?.Value?.ToString();
                string appVersion = psObject.Properties["Version"]?.Value?.ToString();
                programTable_2.Rows.Add(appName, appVersion);
            }
        }
    }
    return programTable_2;
}

额外验证步骤

手动打开对应位数的PowerShell(以管理员身份),执行Get-AppxPackage -AllUsers | Select-Object Name, Version,确认是否能返回结果。若手动执行也无输出,需排查系统本身的UWP应用注册状态。

内容的提问来源于stack exchange,提问作者Joon Joon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:04:51