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

UWP项目中PowerShell脚本执行失败,Runspace初始化异常求解

在UWP项目中使用PowerShell的正确姿势

你遇到的问题核心原因很明确:System.Management.Automation 6.1.2这个NuGet包并不兼容UWP环境。它是为.NET Core/.NET Framework设计的,而UWP运行在严格的沙箱中,搭配的是.NET Native运行时,很多PowerShell底层依赖的API和初始化逻辑在UWP里被限制或完全不可用,这才导致Runspace初始化失败抛出System.TypeInitializationException。

下面是解决这个问题的可行方案:

1. 替换为UWP专属的PowerShell API

微软为UWP提供了专门的WinRT版本PowerShell API——Windows.Management.Core.PowerShell,它是为UWP的沙箱环境量身打造的,具体操作步骤如下:

  • 先移除你当前引用的System.Management.Automation NuGet包,避免版本冲突。
  • 在UWP项目中添加对Windows Desktop Extensions for the UWP的引用:
    右键项目 → 添加 → 引用 → 通用Windows → 扩展 → 勾选和你目标Windows 10版本匹配的Windows Desktop Extensions for the UWP(建议选1809及以上版本)。
  • 使用WinRT的PowerShell API编写代码,示例如下:
using Windows.Management.Core;
using System.Diagnostics;

// 创建PowerShell实例(自动适配UWP沙箱)
using (var psInstance = PowerShell.Create())
{
    // 添加要执行的命令,比如获取系统进程列表
    psInstance.AddCommand("Get-Process");

    try
    {
        // 执行命令并获取结果
        var results = psInstance.Invoke();
        foreach (var result in results)
        {
            Debug.Write($"进程名称: {result.Properties["Name"].Value}, ID: {result.Properties["Id"].Value}\n");
        }
    }
    catch (Exception ex)
    {
        Debug.Write($"执行PowerShell命令出错: {ex.Message}\n");
        // 查看详细错误日志
        foreach (var error in psInstance.Streams.Error)
        {
            Debug.Write($"错误详情: {error.ToString()}\n");
        }
    }
}

2. 配置必要的应用权限

UWP应用受沙箱严格限制,如果你执行的PowerShell命令需要访问特定资源(比如文件系统、系统进程),需要在Package.appxmanifest中添加对应的能力:

  • 若需要访问任意文件系统,添加broadFileSystemAccess能力(注意这个能力需要用户在系统设置中手动授权);
  • 若需要执行后台相关命令,可能需要添加backgroundTasks能力;
  • 具体权限根据你的命令需求灵活配置。

为什么原来的方案在.NET 4.5控制台项目中可行?

因为.NET Framework控制台项目运行在完整的.NET环境中,没有UWP的沙箱限制,PowerShell的Runspace可以正常初始化所有依赖的系统组件,所以能顺利运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:55:58