100165437.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 142 行 · 第 1/2 页
HTM
142 行
<p class="2" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">}</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">这个按钮从</span><span lang="EN-US">c:\</span><span style="FONT-FAMILY: 宋体">驱动器的根目录下打开一个简单的文本文件,这个文本文件包含几行内容,每一行都是一个动物名称,把每一行的动物名称都载入到字符串中,然后使用字符串创建列表框中的每一个项目。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">如果从本地机器上运行这个应用程序,并单击窗体上的按钮,列表框中就会出现从</span><span lang="EN-US">C:\</span><span style="FONT-FAMILY: 宋体">驱动器的根目录中载入的数据,如图</span><span lang="EN-US">14-8</span><span style="FONT-FAMILY: 宋体">所示。运行时在后台赋予程序集访问用户界面和从本地磁盘读取数据这两个权限。</span></p>
<p align="center"><span lang="EN-US" style="COLOR: black"><img height="152" src="14/image008.jpg" width="166" alt="" /></span></p>
<p style="FTEL: 8.15pt" align="center"><span style="COLOR: black; FONT-FAMILY: 宋体">图</span><span lang="EN-US" style="COLOR: black"> 14-8</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">前面曾经说过,在</span><span lang="EN-US">Intranet</span><span style="FONT-FAMILY: 宋体">区域代码组上的权限比在本地机器上的权限有更多的限制,特别是</span><span lang="EN-US">Intranet</span><span style="FONT-FAMILY: 宋体">区域代码组中的代码不允许访问本地磁盘。如果再次运行应用程序,但是这次是从网络共享上运行,则它与前面的运行没有什么区别,因为它被授予执行和访问用户界面的权限,但是,如果单击窗体上的</span><span lang="EN-US">Load Data</span><span style="FONT-FAMILY: 宋体">按钮,就会产生安全异常,如图</span><span lang="EN-US">14-9</span><span style="FONT-FAMILY: 宋体">所示。</span></p>
<p align="center"><span lang="EN-US"><img height="146" src="14/image009.jpg" width="250" alt="" /></span></p>
<p style="FTEL: 8.15pt" align="center"><span style="COLOR: black; FONT-FAMILY: 宋体">图</span><span lang="EN-US" style="COLOR: black"> 14-9</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">从显示的异常信息文本中可以看出,</span><span lang="EN-US">System.Security.Permissions.FileIOPermission</span><span style="FONT-FAMILY: 宋体">对象没有赋予应用程序,这个对象就是</span><span lang="EN-US">Framework</span><span style="FONT-FAMILY: 宋体">中的类所要求的权限,有了这个权限,才能从本地磁盘上载入数据。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">默认状态下,</span><span lang="EN-US">Intranet</span><span style="FONT-FAMILY: 宋体">代码组被赋予</span><span lang="EN-US">LocalIntranet</span><span style="FONT-FAMILY: 宋体">权限集,把权限集更改为</span><span lang="EN-US">FullTrust</span><span style="FONT-FAMILY: 宋体">,</span><span lang="EN-US">Intranet</span><span style="FONT-FAMILY: 宋体">区域中的所有代码就可以完全无限制地运行:</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">首先,需要获得</span><span lang="EN-US">LocalIntranet</span><span style="FONT-FAMILY: 宋体">代码组的数字标签,为此,可以使用下面的命令:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><strong><span lang="EN-US">caspol.exe –listgroups</span></strong></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">这会得到如下结果:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">Code Groups:</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">1. All code: Nothing</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> 1.1. Zone - MyComputer: FullTrust</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> 1.1.1. StrongName - </span></p>
<p class="a6" style="TEXT-JUSTIFY: inter-ideograph; MARGIN-LEFT: 21.45pt; TEXT-ALIGN: justify; FTEL: 0cm"><span lang="EN-US" style="LETTER-SPACING: -0.1pt">002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF98</span><span lang="EN-US">0957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652<span style="LETTER-SPACING: -0.1pt">C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293: FullTrust</span></span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> 1.1.2. StrongName - 00000000000000000400000000000000: FullTrust</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> 1.2. Zone - Intranet: LocalIntranet</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> 1.2.1. All code: Same site Web.</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> 1.2.2. All code: Same directory FileIO - Read, PathDiscovery</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> 1.3. Zone - Internet: Internet</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> 1.3.1. All code: Same site Web.</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> 1.4. Zone - Untrusted: Nothing</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> 1.5. Zone - Trusted: Internet</span></p>
<p class="a6" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US"> 1.5.1. All code: Same site Web.</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">注意</span><span lang="EN-US">LocalIntranet</span><span style="FONT-FAMILY: 宋体">组被列为</span><span lang="EN-US">1.2</span><span style="FONT-FAMILY: 宋体">。现在使用下面的命令应用完全信任级别:</span></p>
<p class="a6" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><strong><span lang="EN-US" style="COLOR: black">caspol.exe –chggroup 1.2 FullTrust</span></strong></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">现在,如果再次从网络共享上运行这个应用程序,并单击按钮,</span><span lang="EN-US">C:\</span><span style="FONT-FAMILY: 宋体">驱动器根目录中文件的内容就被填写到列表框中,并且没有异常情况出现。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">因此,如果利用的资源是由权限管理的,最好扩展代码,捕获安全异常,让应用程序能正常退出。例如,在上面的应用程序中,可以为文件的访问代码添加一个</span><span lang="EN-US">try-catch</span><span style="FONT-FAMILY: 宋体">块,如果抛出了</span><span lang="EN-US">SecurityException</span><span style="FONT-FAMILY: 宋体">异常,就在列表框中显示:</span><span lang="EN-US">"Permission denied accessing file"</span><span style="FONT-FAMILY: 宋体">。</span></p>
<p class="2" style="MARGIN-TOP: 8.15pt; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">// Code from SecurityApp9</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">private void button1</span><span lang="EN-US" style="FONT-FAMILY: 'Baskerville BE Regular'">_</span><span lang="EN-US">Click(object sender, System.EventArgs e)</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US">{</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> try</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> {</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> StreamReader din = File.OpenText(@"C:\animals.txt");</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> String str;</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> while ((str=din.ReadLine()) != null) </span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> {</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> listBox1.Items.Add(str);</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> }</span></p>
<p class="a6" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> }</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> catch (SecurityException exception)</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> {</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> listBox1.Items.Add("Permission denied accessing file");</span></p>
<p class="2" style="MARGIN-LEFT: 21.45pt; FTEL: 18.45pt"><span lang="EN-US"> }</span></p>
<p class="a6" style="MARGIN-TOP: 0cm; MARGIN-LEFT: 21.45pt; MARGIN-RIGHT: 0cm; FTEL: 18.45pt"><span lang="EN-US">}</span></p>
<p class="MsoNormal"><span style="COLOR: black; FONT-FAMILY: 宋体">在实际应用中,如果要通过网络共享运行某一应用程序,最好的解决方法就是使客户机不共享内部网上的所有代码。而是使用代码组和成员条件去严格控制应用程序的需求,例如使用应用程序在企业网上的位置、强名称或证明发布者身份的证书等。</span></p></div>
<!-- page -->
<div class="page" style="text-align: center">
<a href="100165436.htm">上一页</a> <a href="index.html">首页</a> <a href="100165438.htm">下一页</a>
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165437.htm'><font color='red'>14.4.1 安全配置文件</font></a></h1>
<div id="divRealteNod2" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165434.htm'>14.3.3 角色</a></div><div style='float:right;width:49%'>·<a href='100165435.htm'>14.3.4 声明基于角色的安全性</a></div><div style='float:left;width:49%'>·<a href='100165436.htm'>14.4 安全策略的管理</a></div><div style='float:right;width:49%'>·<a href='100165438.htm'>14.4.2 代码组和权限的管理</a></div><div style='float:left;width:49%'>·<a href='100165439.htm'>14.4.3 安全性的启用和禁用</a></div><div style='float:right;width:49%'>·<a href='100165440.htm'>14.4.4 重置安全策略</a></div></div>
</div>
</div>
</div>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?