DotNetFiddle 抛出“System.Security.SecurityException”
Posted
技术标签:
【中文标题】DotNetFiddle 抛出“System.Security.SecurityException”【英文标题】:DotNetFiddle throws "System.Security.SecurityException" 【发布时间】:2016-07-31 14:00:04 【问题描述】:由于目前没有可用的 PSFiddle,我想知道是否可以通过将 PS 代码包装在 C# 中来使用 DotNetFiddle。
我使用了以下代码:
using System;
using System.Collections.ObjectModel;
using System.Management.Automation; //if run on your machine, first ensure Windows SDK is installed (https://www.microsoft.com/en-us/download/details.aspx?id=11310)
public class Program
public static void Main()
string script = @"
param([string]$name)
""hello $name"" #NB:Double quotes have to be escaped; otherwise all's good
";
RunPSScript(script);
private static void RunPSScript(string script)
using (PowerShell ps = PowerShell.Create())
ps.AddScript(script);
ps.AddParameter("name", "Player One");
Collection<PSObject> psOutput = ps.Invoke();
foreach(PSObject item in psOutput)
if(item != null)
Console.WriteLine(item.BaseObject.ToString());
在 DotNetFiddle 中运行时会引发 System.Security.SecurityException
错误。
可以在这里找到:https://dotnetfiddle.net/B4JLU0
代码在我的本地机器上运行时有效,所以我认为问题是由于 DotNetFiddle 上的安全问题。
问题
是否有解决方法来允许/避免异常;或者这根本不可能?
【问题讨论】:
在选择RunspaceFactory
类型初始化程序后,我可以说由于 P/Invoke 调用而发生异常,这会在SecurityPermission(SecurityPermissionFlag.UnmanagedCode)
权限上生成完整的Demand
。由于它是非常敏感的权限,因此不太可能授予沙箱,该服务用于调用您的代码。
【参考方案1】:
完整的错误信息如下:
运行时异常(第 19 行):“System.Management.Automation.Runspaces.RunspaceFactory”的类型初始化程序引发了异常。
堆栈跟踪:
[System.Security.SecurityException:请求“System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”类型的权限失败。]
[System.TypeInitializationException:'System.Management.Automation.Runspaces.RunspaceFactory' 的类型初始化程序引发了异常。] 在 Program.RunPSScript(字符串脚本):第 19 行 在 Program.Main():第 14 行
PowerShell 必须在用户的上下文中运行,当System.Security.Permissions.SecurityPermission
引发异常时,很可能意味着当前用户上下文没有运行 PowerShell 所需的权限或信任,并且没有创建运行空间并进行一些模拟,我想它正在尝试以 Web 服务用户身份运行,这很可能具有最小权限。
我只是做出假设,您可能需要联系 Entech Solutions 的优秀人员以获得明确的答案,但希望这有助于回答您的问题。
【讨论】:
同意,这听起来像是一个信任级别问题,我不指望能够解决它以上是关于DotNetFiddle 抛出“System.Security.SecurityException”的主要内容,如果未能解决你的问题,请参考以下文章
C# MVC 使用 dotnetfiddle 将参数从视图传递到控制器
C# 控制台应用程序 ReadLine() 适用于 .NET 4.7.2 而不是 .NET 5(在 dotnetfiddle 上)
Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.Se