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

如何加入两个列表?

System.Net.WebException:远程服务器返回错误:(403)禁止

charles 抓取eclipse中的请求