当我尝试从网络共享(映射到驱动器)运行.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
根据a blog post的说明,我向.NET配置添加了一个策略,完全信任所有以file:///H:/*
为其URL的程序集。我通过在.NET配置中的评估程序集工具中输入URL file:///H:/boo-svn/bin/boo.exe
来验证这一点,并注意到boo.exe具有 Unrestricted 权限(它没有没有政策之前。
即使获得了许可,boo.exe
也无法运行。我仍然收到相同的错误消息。
如何调试此问题?是否有另一种方法可以从网络共享运行“部分受信任”的程序集,而无需为我想要运行的每个程序集更改某些内容?
答案 0 :(得分:5)
使用.NET 3.5 SP1,从UNC共享运行的.NET程序集具有完全权限。
请参阅Brad Abrams的Allow .exes to be run off a network shares进行解决方法和讨论,最后查看后续行动.NET 3.5 SP1 allows managed code to be launched from a network share。
答案 1 :(得分:3)
我按照Johnny Hughes的博文caspol
中的说明使用Running a .Net application from a network share解决了问题:
caspol -addgroup 1.2 -url file:///H:/* FullTrust
用于管理策略的.NET配置GUI似乎根本不起作用。
答案 2 :(得分:2)
查看'caspol.exe'程序(随.NET运行时提供)。您必须在尝试运行应用程序的计算机上执行此操作。我无法“标记”和装配(可能只是我)。但是,使用caspol并为我的应用程序LocalIntranet_Zone设置适当的权限,修复了我的类似问题。
我听说过(但尚未尝试过),.NET 3.5 sp1删除了这种严格的安全要求(默认情况下不允许.NET程序集驻留在共享上)。
答案 3 :(得分:0)
我认为您要将AllowPartiallyTrustedCallers属性添加到程序集中。错误消息表示调用boo.exe程序集的内容不完全受信任,并且boo.exe没有此属性允许它。