我正在运行 MCTS 70-536 培训工具包第 11 章关于代码访问安全性的实验室。我正在运行 XP Pro。第一个实验室创建了一个程序集,该程序集检查不同的权限并在它们存在时报告一条消息。但是,当我运行它时,\\\127.0.0.1\c$\ListPermissions.exe
它应该识别处于 Intranet 区域并使用 Intranet 权限集。但是,似乎授予了所有权限。这种行为对任何人来说都很熟悉吗?如果没有,有没有办法检查程序集从共享运行时认为它在哪个区域?如果这个问题的特定部分太模糊,请告诉我,我会尝试重新表述。
3 回答
.net 平台似乎发生了变化。启动托管 exe 时添加了一条新证据。当 exe 直接从 win32 CreateProcess API 启动时,托管的 exe 将获得完全信任。
当然,.net 配置工具不会启动 exe,只是检查它。这意味着证据不同并影响分配给它的代码组。这反过来会影响权限。
这非常令人困惑。更令人困惑的是你应该在考试中给出的答案。我想答案会和书中一样。我不认为这种变化已经渗透到考试内容团队。
更多信息可以在这里找到:
我遇到了同样的问题。但是我尝试了其他方法。我没有从共享文件夹或 C 驱动器的根目录等不同位置执行程序,而是创建了一个应用程序域并使用各种区域设置从我的应用程序域执行代码。这是我的代码:
object[] hostEvidence = { new Zone(SecurityZone.Internet) };
Evidence appDomainEvidence = new Evidence(hostEvidence, null);
AppDomain d = AppDomain.CreateDomain("MyDomain", appDomainEvidence);
d.ExecuteAssembly("ListPermissions.exe");
当我的区域设置为 MyComputer 时,ListPermissions 会执行而不给出任何异常,并且每个权限都返回 true。但是,当我将我的区域设置为 Internet 或 Intranet 时,ExecuteAssembly 行开始给出异常,这实际上让我很高兴。至少在某些时候它是有效的。
根据我的理解,当您从不同位置运行应用程序时,CLR 会看到正在运行的代码具有不同的证据,并将程序集分配给不同的代码组,例如 mycomputer 或 internet。然而,至少我的配置不是这样,另一个论坛得出结论,使用 .NET 框架 3.5,来自共享文件夹的正在运行的程序集没有作为从 Internet 区域运行的程序集的确切证据。 http://social.msdn.microsoft.com/Forums/en/clr/thread/5f5f0925-64fc-4fc8-9be3-d077d27d2554 我实际上不知道使程序像书中那样执行的确切解决方案。只想与创建的自定义应用程序域共享该代码按预期工作。
希望这可以帮助
谢谢
嗨,我不知道您是否发现在运行此示例时发生了什么,但使用 .NET Framework 2.0 配置工具下的评估程序集我可以看到该程序集应该在 Internet_Zone 和 Internet_Same_Site_Access 代码组下运行。这些代码组授予由 5 个授权组成的子集: - UI - 隔离存储 - 保护 - IO 对话框 - 打印
在配置工具下似乎没问题...但是组装行为完全不同...不知道:(
马可