11

当我尝试boo.exe从网络共享(映射到驱动器)运行 .NET 程序集 ( ) 时,它失败了,因为它只是部分受信任:

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 配置添加了一个策略,该策略完全信任所有程序集file:///H:/*作为其 URL。我通过在 .NET 配置中将 URL 输入file:///H:/boo-svn/bin/boo.exeEvaluate Assembly工具中验证了这一点,并注意到 boo.exe 具有Unrestricted权限(在策略之前它没有)。

即使有许可,boo.exe也不会运行。我仍然收到相同的错误消息。

我能做些什么来调试这个问题?是否有另一种方法可以从网络共享运行“部分受信任”的程序集,而不必为我要运行的每个程序集更改某些内容?

4

4 回答 4

5

使用 .NET 3.5 SP1,从 UNC 共享运行的 .NET 程序集具有完全权限。

有关解决方法和讨论,请参阅 Brad Abrams 的Allow .exes to be run off a network share,最后后续的.NET 3.5 SP1 允许从网络共享启动托管代码

于 2008-08-23T18:42:49.883 回答
3

caspol我按照 Johnny Hughes 的博客文章Running a .Net application from a network share中的说明使用解决了这个问题:

caspol -addgroup 1.2 -url file:///H:/* FullTrust

用于管理策略的 .NET 配置 GUI 似乎根本不起作用。

于 2008-08-25T16:48:07.037 回答
2

看一下“caspol.exe”程序(随 .NET 运行时提供)。您必须在尝试运行应用程序的机器上执行此操作。我无法“标记”和组装(可能只是我)。但是,使用 caspol 并为我的应用程序 LocalIntranet_Zone 设置适当的权限可以解决我的类似问题。

我听说(但还没有尝试过),.NET 3.5 sp1 删除了这个严格的安全要求(默认情况下不允许 .NET 程序集驻留在共享上)。

于 2008-08-23T18:50:09.863 回答
0

我认为您想将AllowPartiallyTrustedCallers属性添加到您的程序集中。该错误消息暗示调用您的 boo.exe 程序集的某些内容不完全受信任,并且 boo.exe 没有允许它的此属性。

于 2008-08-23T18:45:22.480 回答