2011-07-25 46 views
3

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

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

运行.NET 2.0 PermCalc指出我的应用程序需要以下权限:

  • UnmanagedCode,
  • 环境
  • FileIO专注
  • 注册
  • 反思

我已分配给我的自定义代码组非托管代码的许可,但没有别的。

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

运行.NET 2.0配置我的程序集上的“评估程序集”工具确实表明我的应用程序只能获得UnmanagedCode权限。

但是,当我执行我的应用程序正在运行并完成时,显然要做各种FileIO和注册表操作。

我的应用程序使用应与限制代码组匹配的数字签名进行签名。

任何人都可以解释为什么这个工程。

注意:我的最终目的是确保我的应用程序不会在网络共享中执行时发生可怕的崩溃。我希望检查汇编证据区域是My_Computer,但我不能再用.NET 3.5 SP1来做这件事。见FullTrust On the LocalIntranet

在此先感谢您的任何帮助/建议。

回答

2

如果您已正确配置您的CAS策略,那么很可能是您的应用程序未被拒绝,因为它未在您配置的策略的CLR下运行。你可能在同一台机器上安装了32位和64位CLR?

另一种可能性可能是您的“早期检查”需求错误。它是否直接在您的应用程序的Main方法中?如果是这样,当需求运行时,在验证的调用堆栈上将不会有任何应用程序代码。如果这是问题,只需将需求移动到Main调用的另一个方法中就可以使需求失败。

+0

嗨尼科尔,谢谢你的回应。我意识到我在误导我的问题上犯了一个错误。我的应用程序实际上是一个.Net 2.0应用程序(不应具有3.5的先决条件)。但我确实安装了3.5 SP1 Framework。我需要进行检查,因为用户可能只安装了.NET 2.0,但仍尝试从网络共享执行。在这种情况下,该应用程序只是崩溃,我希望它更优雅。上面概述的情况是一种测试情况,我期望我的应用程序崩溃......但它不是! –

+0

我现在仔细检查一下32/64位的clr。 –

+0

啊......现在更有意义了。我已经编辑了我的答案,在规定的条件下为需求通过添加另一个可能的解释。 –

-1

您仍然可以检查.NET 3.5 SP1 - http://msdn.microsoft.com/en-us/library/system.security.policy.zone.aspx中的程序集证据区域。

对于什么卡斯波尔允许您的组装见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)。

+0

使用.NET 3.5 SP1托管的应用程序从网络共享中运行将显示在MY_COMPUTER_ZONE而不是INTRANET_ZONE中。这意味着我无法再检查我的应用程序是否在MY_COMPUTER_ZONE中执行,因为它可能仍然位于网络共享中。 –

+0

哦好吧...不知道这是他们如何“黑客”它.. – Yahia

+0

看到我的编辑关于从网络驱动器运行 – Yahia

相关问题