我很想知道,当我限制分配给程序集的权限时,为什么允许我的2.0 .net应用程序执行。
我已经在企业级创建了一个新的代码组,它将与任何具有特定数字签名的程序集相匹配。已设置代码组,以便只使用来自关联权限集的权限,并且不会计算较低的策略级别。
运行.Net 2.0 PermCalc时指出,我的应用程序需要以下权限:
我已经为我的自定义代码组分配了非托管代码的权限,但没有其他权限。
我的应用程序中的第一种方法要求预先拥有所有上述权限,这样我就可以在退出之前向用户显示一条合理的消息。
在我的程序集上运行.NET 2.0配置“评估程序集”工具确实表明,我的应用程序将只获得UnmanagedCode权限。
但是,当我执行我的应用程序是运行和完成时,很明显,执行各种FileIO和注册表操作。
我的应用程序用数字签名进行签名,该签名应该与受限代码组相匹配。
有谁能解释一下为什么。
注意:我的最终目标是确保如果从网络共享中执行,我的应用程序不会崩溃。我本来希望检查程序集证据区域是My_Computer,但是我不能再用.NET 3.5 SP1进行检查了。请参阅FullTrust On LocalIntranet
提前感谢您的帮助/建议。
发布于 2011-07-25 12:54:30
如果您正确配置了CAS策略,那么您的应用程序很可能不会被拒绝您所期望的权限,因为它不是在您配置的策略CLR下运行的。您是否在同一台计算机上安装了32位和64位CLR?
另一种可能是,您的“早期检查”需求在错误的地方。它是否直接出现在应用程序的主要方法中?如果是这样的话,当需求运行时,调用堆栈上不会有任何经过验证的应用程序代码。如果这是问题所在,只需将需求移动到另一个从Main调用的方法,就会导致需求失败。
发布于 2011-07-25 10:35:51
您仍然可以在.NET 3.5 SP1 - http://msdn.microsoft.com/en-us/library/system.security.policy.zone.aspx中检查程序集证据区域。
有关caspol允许您的程序集的内容,请参阅http://msdn.microsoft.com/en-us/library/tx1dts55.aspx。
这个http://blogs.msdn.com/b/brada/archive/2007/10/26/adhoc-poll-allowing-net-exes-to-run-off-a-network-share.aspx可能会影响你看到的..。
编辑:
为了检查何时从网络共享运行,您仍然可以获得Assembly.GetExecutingAssembly().Location,然后通过DriveType检查它是UNC还是netowrk驱动器,用于您的位置System.IO.DriveInfo[] (即System.IO.DriveType.Network)。
https://stackoverflow.com/questions/6814661
复制相似问题