为什么CASPol允许我的.net应用程序运行?

本文关键字:net 应用程序 运行 我的 CASPol 许我的 为什么 | 更新日期: 2023-09-27 18:03:30

想知道为什么当我限制了分配给程序集的权限时,我的2.0 .net应用程序被允许执行。

我已经在企业级创建了一个新的代码组,它将匹配任何具有特定数字签名的程序集。已设置代码组,以便仅使用关联权限集的权限,并且不会评估较低的策略级别。

运行。net 2.0 PermCalc声明我的应用程序需要以下权限:

  • UnmanagedCode,
  • 环境
  • FileIO
  • 注册表
  • 反射

我已经给我的自定义代码组分配了非托管代码的权限,但没有其他权限。

我的应用程序中的第一个方法要求预先获得上述所有权限,以便我可以在退出之前向用户显示合理的消息。

在程序集上运行. net 2.0配置"评估程序集"工具确实显示我的应用程序只会被授予UnmanagedCode权限。

然而,当我执行我的应用程序是运行和完成,很明显,做各种文件输出和注册表操作。

我的应用程序是用数字签名签名的,应该与受限制的代码组匹配。

谁能解释一下为什么会这样?

注意:我的最终目标是确保我的应用程序在从网络共享中执行时不会严重崩溃。我本想检查程序集证据区是My_Computer,但我不能再使用。net 3.5 SP1这样做了。参见本地内网的FullTrust

提前感谢您的帮助/建议

为什么CASPol允许我的.net应用程序运行?

如果您正确配置了CAS策略,那么您的应用程序很可能不会被拒绝您所期望的权限,因为它没有在您配置其策略的CLR下运行。您是否在同一台机器上安装了32位和64位clr ?

另一种可能是您的"提前检查"要求在错误的地方。它是直接在应用程序的Main方法中吗?如果是这样,当需求运行时,调用堆栈上不会有任何需要验证的应用程序代码。如果这是问题所在,只需将需求移动到从Main调用的另一个方法中,就可以允许该需求失败。

您仍然可以在。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,然后检查它是否是UNC或网络驱动器通过DriveType为您的位置System.IO.DriveInfo[](即System.IO.DriveType.Network)。