提问人:Tomi Kyöstilä 提问时间:8/24/2008 最后编辑:Michael SchmidtTomi Kyöstilä 更新时间:7/5/2013 访问量:8699
从网络共享运行“部分受信任的”.NET 程序集
Running "partially trusted" .NET assemblies from a network share
问:
当我尝试从网络共享(映射到驱动器)运行 .NET 程序集 () 时,它失败了,因为它只是部分受信任:boo.exe
Unhandled Exception: System.Security.SecurityException: That assembly does not allow partially trusted callers.
at System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Assembly asm, PermissionSet granted, PermissionSet refused, RuntimeMethodHandle rmh, SecurityAction action, Object demand, IPermission permThatFailed)
at BooCommandLine..ctor()
at Program..ctor()
at ProgramModule.Main(String[] argv)
The action that failed was:
LinkDemand
The assembly or AppDomain that failed was:
boo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=32c39770e9a21a67
The Zone of the assembly that failed was:
Intranet
The Url of the assembly that failed was:
file:///H:/boo-svn/bin/boo.exe
根据博客文章中的说明,我向 .NET 配置添加了一个策略,该策略完全信任所有程序集作为其 URL。我通过在 .NET 配置中的“评估程序集”工具中输入 URL 并注意到 boo.exe 具有“不受限制”权限(在策略之前没有)来验证这一点。file:///H:/*
file:///H:/boo-svn/bin/boo.exe
即使有权限,也不会运行。我仍然收到相同的错误消息。boo.exe
我该怎么做才能调试此问题?有没有另一种方法可以从网络共享运行“部分受信任”的程序集,而不必为要运行的每个程序集更改某些内容?
答:
在 .NET 3.5 SP1 中,从 UNC 共享运行的 .NET 程序集具有完全权限。
有关解决方法和讨论,请参阅 Brad Abrams 的允许在网络共享上运行 .exe,最后是后续的 .NET 3.5 SP1 允许从网络共享启动托管代码。
评论
我认为您希望将 AllowPartiallyTrustedCallers 属性添加到您的程序集中。错误消息意味着调用 boo.exe 程序集的某些内容不完全受信任,并且 boo.exe 没有允许它的此属性。
查看“caspol.exe”程序(随 .NET 运行时提供)。您必须在尝试运行应用程序的计算机上执行此操作。我无法“标记”和组装(可能只有我)。但是,使用 caspol 并为我的应用程序设置适当的权限,LocalIntranet_Zone,可以解决我的类似问题。
我听说(但还没有尝试过),.NET 3.5 sp1 删除了这种收紧的安全要求(默认情况下不允许 .NET 程序集驻留在共享上)。
我按照 Johnny Hughes 的博客文章从网络共享运行 .Net 应用程序中的说明使用 caspol
解决了这个问题:
caspol -addgroup 1.2 -url file:///H:/* FullTrust
似乎用于管理策略的 .NET 配置 GUI 根本不起作用。
上一个:通过公共网络安全同步文件夹
下一个:如何处理 ScanAlert?
评论