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.AutomationNuGet包,避免版本冲突。 - 在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
相关产品推荐
相关产品推荐

