Csharp/C#教程:受限制的权限AppDomain Grant Set问题分享


受限制的权限AppDomain Grant Set问题

我有一些代码可以动态地将Razor模板编译成一个程序集,我使用一组权限(无法访问文件等)执行。

这适用于我们的开发计算机和测试服务器(Windows 2008 IIS7 x64 .NET 4)。 但是在我们的生产服务器(相同规范)上,它给出了错误:

“加载此程序集将从其他实例生成不同的授权集。(HRESULTexception:0x80131401)”

这是代码: –

public static SandboxContext Create(string pathToUntrusted, List references) { AppDomainSetup adSetup = new AppDomainSetup(); adSetup.ShadowCopyFiles = "true"; var dir = new DirectoryInfo(pathToUntrusted); String tempPath = Path.Combine(Path.GetTempPath(), dir.Name + "_shadow"); adSetup.CachePath = tempPath; // Our sandbox needs access to this assembly. string AccessPath = Path.Combine(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath, "bin\CommonInterfaces.WebPages.dll"); System.IO.File.Copy(AccessPath, Path.Combine(pathToUntrusted, "CommonInterfaces.WebPages.dll"), true); var baseDir = Path.GetFullPath(pathToUntrusted); adSetup.ApplicationBase = baseDir; adSetup.PrivateBinPath = baseDir; adSetup.PartialTrustVisibleAssemblies = new string[] { typeof(System.Web.WebPageTraceListener).Assembly.FullName, typeof(System.Web.Razor.RazorEngineHost).Assembly.FullName}; //Setting the permissions for the AppDomain. We give the permission to execute and to //read/discover the location where the untrusted code is loaded. PermissionSet permSet = new PermissionSet(PermissionState.None); permSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution)); //We want the sandboxer assembly's strong name, so that we can add it to the full trust list. StrongName fullTrustAssembly = typeof(Sandboxer).Assembly.Evidence.GetHostEvidence(); Evidence evidence = new Evidence(); //Now we have everything we need to create the AppDomain, so let's create it. AppDomain newDomain = AppDomain.CreateDomain("Sandbox", evidence, adSetup, permSet, fullTrustAssembly); ObjectHandle handle = Activator.CreateInstanceFrom( newDomain, typeof(Sandboxer).Assembly.ManifestModule.FullyQualifiedName, typeof(Sandboxer).FullName ); //Unwrap the new domain instance into a reference in this domain and use it to execute the //untrusted code. var newDomainInstance = (Sandboxer)handle.Unwrap(); return new SandboxContext(newDomain, newDomainInstance); } 

任何想法为什么它会在一台服务器上有所不同? 我刚刚在损坏的服务器上安装了所有未完成的Windows更新,但它没有帮助。

如果我将PermissionSet更改为: –

  PermissionSet permSet = new PermissionSet(PermissionState.Unrestricted); 

所有代码都有效(但可能存在安全问题)

当您尝试使用不同的权限集将程序集加载到现有AppDomain两次时,通常会发生此错误。 $ 1M的问题是它是什么assembly,以及AppDomain是什么。

我没有完整的答案,但您可以查看以下内容:

您还可以尝试在服务器上安装远程调试运行时,将调试器附加到托管应用程序的进程,并直接检查在哪个域中加载的内容。 您可能需要SOS调试扩展。

https://msdn.microsoft.com/en-us/library/bb190764.aspx

上述就是C#学习教程:受限制的权限AppDomain Grant Set问题分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1016692.html

(0)
上一篇 2021年12月31日
下一篇 2021年12月31日

精彩推荐