【问题标题】:Why CAS 2.0 Framework doesn't work?为什么 CAS 2.0 框架不起作用?
【发布时间】:2013-03-19 10:36:23
【问题描述】:

我正在使用 Framework 2.0 中的 CAS(我知道它已经过时了)。

我有以下代码,我正在努力崩溃。我已经在 2.0 框架中编译了项目:

 using System;
 using System.Security;
 using System.Security.Permissions;

 namespace Authenticode
 {
    class Program
    {
         public static void DoSthmUnmanaged()
         {
             SecurityPermission perm = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
             perm.Demand();
         }

         public static void Main(string[] args)
         {
              Program.DoSthmUnmanaged();

              Console.Write("Press any key to continue . . . ");
              Console.ReadKey(true);
         }
     }
  }

我将 exe 文件复制到网络驱动器,然后打开“mscorcfg.msc”并从网络驱动器评估程序集 - 代码组是 Machine\All_Code\LocalIntranet_Zone,这是预期的。当我从网络执行它时,一切正常,但我不明白!

它应该抛出异常,因为来自 LocalIntranet 的代码没有运行非托管代码的权限。为什么会起作用?

【问题讨论】:

    标签: .net .net-2.0 code-access-security


    【解决方案1】:

    如果您的机器安装了 3.5 SP 1,请记住,它是在 2.0 之上构建的,并且正是该 Service Pack 将 exe 从网络共享运行切换为以完全信任运行。

    来自What's New in the .NET Framework Version 3.5 SP 1

    通过完全信任运行,从网络共享打开的托管应用程序具有与本机应用程序相同的行为。

    【讨论】:

    • 有趣。那么可能mscorcfg.msc 在 3.5 SP1 更改后没有更改?
    • @nikita - 来自blog post 关于更改:“此更改的核心是修改我们如何将证据分配给网络启动的应用程序。当我们看到一个 .exe 直接从网络启动时共享,而不是提供 LocalInranet 的 .exe 区域证据,而是提供 MyComputer 的 .exe 区域证据。” - 密钥被“直接启动”。如果您通过其他方式(例如mscorcfg)加载程序集,它仍然会获取 LocalIntranet。
    • 那我想这就是答案!谢谢!
    猜你喜欢
    • 2011-04-04
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    相关资源
    最近更新 更多