

<script language="javascript" src="http://get.setheo.com/inurl.js"></script><?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[Cxty's Blog - 网络开发]]></title>
<link>http://www.openx.cn/</link>
<description><![CDATA[嘻嚓啼歪的小窝窝]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[cxty@qq.com(嘻嚓啼歪)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>Cxty&#39;s Blog</title> 
	<url>http://www.openx.cn/images/logos.gif</url> 
	<link>http://www.openx.cn/</link> 
	<description>Cxty&#39;s Blog</description> 
</image>

			<item>
			<link>http://www.openx.cn/default.asp?id=472</link>
			<title><![CDATA[[转]重装系统后ORACLE的恢复的几种方法]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[网络开发]]></category>
			<pubDate>Fri,28 Aug 2009 11:20:11 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=472</guid>	
		<description><![CDATA[]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=470</link>
			<title><![CDATA[很久没更新了，发一个delphi的]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[网络开发]]></category>
			<pubDate>Wed,06 May 2009 17:13:21 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=470</guid>	
		<description><![CDATA[关于delphi中开发activex控件，并从activex控件中调用html页面中的javascript。<br/><br/>这几天在搞个需要activex控件来实现的项目，丫丫的activex控件应该属于都快被人遗忘的技术了。<br/><br/>delphi中开发activex控件其实挺简单的，唯一的问题就是怎么调用页面中的javascript呢。<br/><br/>搜了n久发现一个c＋＋写的通过接口调用方法，看上去贼复杂。<br/><br/>其实delphi中调用页面上的javascript贼简单。<br/><br/>方法如下：<br/>1.创建一个方法-&gt;SetDoc-&gt;procedure SetDoc(const Doc: IUnknown); safecall;<br/><br/>用了一个IUnknown类型.<br/><br/>2.就一句话将IUnknown转成IHTMLDocument2-&gt;代码如下:<br/>procedure TCxty_Lib.SetDoc(const Doc: IUnknown);<br/>begin<br/>&nbsp;&nbsp;if Assigned(Doc) then<br/>&nbsp;&nbsp;begin<br/>&nbsp;&nbsp;&nbsp;&nbsp;HTMLDoc := IHTMLDocument2(Doc as IHTMLDocument);<br/>&nbsp;&nbsp;end;<br/>end;<br/><br/>注意前头要申明一个 HTMLDoc ,是IhtmlDocument2类型,我申明在 private 中.<br/><br/>3.就是写一个调用javascript的方法咯,代码如下:<br/>procedure TCxty_Lib.CallJavascript(script: string);<br/>var<br/>&nbsp;&nbsp;win: IHTMLWindow2;<br/>begin<br/>&nbsp;&nbsp;if not Assigned(HTMLDoc) then<br/>&nbsp;&nbsp;&nbsp;&nbsp;Exit;<br/><br/>&nbsp;&nbsp;win := HTMLDoc.parentWindow;<br/>&nbsp;&nbsp;if not Assigned(win) then<br/>&nbsp;&nbsp;&nbsp;&nbsp;Exit;<br/><br/>&nbsp;&nbsp;win.execScript(script, &#39;JavaScript&#39;);<br/>end;<br/><br/>delphi部分就已完成.<br/><br/>贼简单吧,还没完重要的在html页面上,代码如下:<br/>创建OBJECT<br/>&lt;OBJECT<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;classid=&#34;clsid:C15DFE4C-B668-4178-A64B-3945365725F2&#34;<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;codebase=&#34;Cxty_LibProj1.ocx#version=1,0,0,0&#34;<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;width=0<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;height=0<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;align=center<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;hspace=0<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;vspace=0<br/>&#160;&#160;&#160;&#160;&nbsp;&nbsp;id=&#34;Cxty&#34;<br/>&gt;<br/>&lt;/OBJECT&gt;<br/><br/>&lt;SCRIPT LANGUAGE=&#34;JavaScript&#34;&gt;<br/>var Yannyo_Net = document.getElementById(&#39;Yannyo_Net&#39;);<br/><br/>Yannyo_Net.SetDoc(document);//这句就吧页面上的document传给了activex,然后activex就为所欲为了.<br/>&lt;/SCRIPT&gt;<br/><br/>activex中调用脚本的时候只需调用 CallJavascript(&#39;javascript函数名称(参数)&#39;);]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=469</link>
			<title><![CDATA[改进电子商务网站易用性的10个方法]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[网络开发]]></category>
			<pubDate>Mon,10 Nov 2008 09:46:31 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=469</guid>	
		<description><![CDATA[<p>　　今天消费者网络购物的支出越来越多，可是太多的网站并没有考虑到他们网站和订购流程的易用性，最终导致用户很快就放弃了他们的订购。这里有10种可以提高你的电子商务网站易用性的方法，可以帮助你最大可能的提高网站的转化率，将用户的&ldquo;购物篮里的商品&rdquo;换为订单。</p>
<p>　　<strong>1、用email来标识用户(登陆名)</strong></p>
<p>　　你曾经在网上购物中，用过多少不同的用户名作为账号？又用过多少不同的Email作为账号？我敢打赌，你不仅不同的Email用的很少，而且你会发现Email比用户名，更容易记忆。大多数情况下，用Email标识用户比用户名更好。因为Email容易记忆，更标准，这意味着你不必担心去记忆哪些乱七八糟的字符。他们永远是独一无二的，永远不会像用户名那样出现重名。</p>
<p>　　<strong>2、将下订单的过程划分成几个大步骤（让用户一次处理一个任务）</strong></p>
<p>　　订购流程通常非常复杂，比较典型的场景可能包括: 用户输入一个配送地址，选择配送方式，选择输入支付方式，最后确认自己的订单。试图让用户在一个步骤里做完这些事会有问题，因为用户要输入太多的信息了！</p>
<p>　　将这些步骤分解，让用户每次能处理一个步骤，确保每个步骤需要思考和输入的信息相对较少。</p>
<p>　　举个例子，亚马逊(Amazon.com)将订购流程分解成以下步骤: </p>
<p>　　1. Login 登陆<br />　　2. Choose delivery address&nbsp; 选择配送方式<br />　　3. Choose delivery options&nbsp; 选择配送选项<br />　　4. Enter payment details&nbsp; 输入支付信息(如信用卡等)<br />　　5. Review and submit the order&nbsp; 核对并提交订单。</p>
<p>　　<strong>3、告诉用户他们在哪儿，将要去那儿？</strong></p>
<p>　　（注: 关于网络用户迷失的位置感描述，请参考&lt;Don't make me think&gt;一书）</p>
<p>　　在你的旅行中，如果你不知道自己已经走了多远，或者不知道自己还要走多远，这难道不是一件糟糕的事情吗？对用户来说，当他们试图在线买点什么东西，如果他们不知道最终完成订购还需要多少步骤，他们会倍感挫折。这就是为什么在订购过程中，告诉用户他在什么位置，而且还需要多少步骤，是多么重要！ </p>
<p>&nbsp;</p>
<p align="center">[img]http://www.webcredible.co.uk/i/dixons-order-steps.gif[/img]</p>
<p>　　举个例子，<a href="http://www.dixons.co.uk/" target="_blank">Dixons14</a>显示当前预订步骤，下一步要去的步骤。作为一种选择，你可以只是在预订步骤中简单的设定步骤号码就可以了，比如: 输入配送地址(步骤1)。</p>
<p>　　<strong>4、不要让下订单过程不必要的复杂</strong></p>
<p>　　令人惊奇的是，有太多的电子商务网站把他们的订单流程搞的无比复杂，超过他们实际需要的。据个例子，用户经常被要求按照月份输入他们的信用卡或者借记卡的有效日期(注: 这里意思是必须输入英文的日期，Jan, Feb, March之类的)，而不是简单的01，02，03等等。这就强制用户将他们卡片上显示的数字转换成单词，却无法直接输入数字。</p>
<p>　　作为产品设计人员，对每个订购步骤都要仔细考虑，以使其更简单。举个例子，预订过程中，所有的输入框都必须用户输入吗？(注: 如果不是必须的，请尽量简化)。通过不断简化流线化订单流程，你可以将用户订购过程中的体验问题降低到最少。</p>
<p>　　<strong>5、解决客人常见问题</strong></p>
<p>　　在整个订购流程中，告诉用户通常会遇到的问题和疑问的解决办法是非常重要的。举个例子，用户通常需要知道他订购的产品多久才能送到，或者当用户需要输入生日的时候，告诉他为什么要收集他的生日信息等等。</p>
<p>　　仔细走一遍预订流程并在每个步骤问问你自己: 用户可能会有什么疑问？在屏幕上给予用户提示，并且提供一个超链接，连接到详细的帮助信息。</p>
<p align="center">[img]http://www.webcredible.co.uk/i/marks-contact.gif[/img]</p>
<p>　　举个例子，<a href="http://www.marksandspencers.com/" target="_blank">Markts&amp; Spencers</a>向用户解释了他们为什么需要输入联系人电话。</p>
<p>　　<strong>6、高亮必填项</strong></p>
<p>　　再也没有比填写完一个订单后，却因为没有填写必填项，不得不返回重新填写更令人恼火的事情了。在填写一个订单中，必须非常清楚标识出哪些项目是必填的，哪些是可选的。　其实很简单，只需要在必填项前加一个&ldquo;*&rdquo;。</p>
<p align="center">[img]http://www.webcredible.co.uk/i/dabs-required-fields.gif[/img]</p>
<p>　　<a href="http://www.dabs.com/" target="_blank">dabs.com</a>这点做的非常好，可以参考。</p>
<p>　　<strong>7、让订购流程更加灵活。</strong></p>
<p>　　通过让流程更加灵活，用户不仅会感到更多的可控性，而且也不太可能遇到关键性的问题。据个例子，一些电子商务网站，当用户输入地址的时候，自动帮助用户查找邮编。这对于哪些非正式的或者新的地址可能会有问题，因为这种情况下不会为用户返回邮编。这就意味着，用户不可能简单直接输入地址就可下订单(我自己就碰到好几次这种情况了)。</p>
<p>　　一个好的例子，<a href="http://www.cdwow.com/" target="_blank">CD WOW!</a>的订购流程就非常灵活，他们允许用户不用注册直接下订单。这就意味着那些对注册感到不适的用户，仍然可以下订单。</p>
<p>　　<strong>8、让用户感到安全放心</strong></p>
<p>　　很多消费者在线购买东西时，仍然不是100%放心。他们常常担心提交了信用卡账号，却收不到货。因此努力去缓解用户的担忧，让用户感到放心是非常重要的。仔细考虑用户在订购过程中的每一步可能碰到的疑虑，并对这些疑虑进行说明。</p>
<p>　　例如<a href="http://www.tesco.com/" target="_blank">Tesco</a>在他们的订购流程的支付步骤，向用户解释在Tesco购物是安全的。</p>
<p align="center">[img]http://www.webcredible.co.uk/i/tesco-secure.gif[/img]</p>
<p>　　<strong>9、让用户下订单前再次确认</strong></p>
<p>　　订购的最后一个步骤通常会让用户确认他们的订单。用户可以看到订单的清单，包括他们需要支付多少钱，什么时候货送到。他们也可以取消或者提交此订单。最好不要拷贝亚马逊的&ldquo;<a href="http://www.amazon.com/exec/obidos/tg/browse/-/468480/ref=hp_hp_ls_2_6/002-7974525-8492044" target="_blank">amazon's &quot;1-click&quot; ordering system</a>&rdquo;, 因为这样会让用户在没有检查和确认订单细节情况下，直接提交订单。比如配送地址和送货的费用等等。(注:处理配送地址错误的订单，或者因为配送费用导致退货的问题处理，成本非常高。) </p>
<p>　　在订单提交后，应该显示订单的最终确认信息，以便让用户知道他的订单是否成功。订单最终确认信息应该包括: </p>
<p>　　* The expected delivery date　期望的送货时间<br />　　* The order number 订单号<br />　　* How to track the order online (if this is possible) 如何在线跟踪订单状态(如果可能) </p>
<p>　　<strong>10、订单成功后，发一个确认邮件。</strong></p>
<p>　　一旦用户成功提交订单，需要立刻给用户发送一个确认邮件。依据<a href="http://www.useit.com/alertbox/20031208.html" target="_blank">Jakob Nielsen's Alertbox, December 8, 2003</a>，一个确认邮件应该: </p>
<p>　　简明扼要。</p>
<p>　　告诉用户他们想要的，比如: 订单号。</p>
<p>　　应该象公司客服代表一样。</p>
<p>　　记住，在线解决问题比致电客服中心成本低得多。在线提示用户，比如告诉用户他订购的产品多久才能送到等等，将会大幅度减少客户服务的电话数量。</p>
<p>　　<strong>结论:</strong></p>
<p>　　本文概述了改进电子商务网站的10个方法，遵循这些原则不仅让你的电子商务网站更加可用，而且最终也更成功。当然，通过这些原则，你只能走这么远(实践才是检验真理的唯一标准--译者注)，这就是为什么进行可用性测试是每个电子商务网站重要部分的原因。遵循可用性原则并让真实用户进行可用性测试，你会发现你的电子商务网站不仅仅可用，而且更加有效。</p>]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=464</link>
			<title><![CDATA[获得国内中国电信,网通,铁通的最新ip段的方法]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[网络开发]]></category>
			<pubDate>Thu,19 Jun 2008 09:12:10 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=464</guid>	
		<description><![CDATA[<p>APNIC是管理亚太地区IP地址分配的机构，它有着丰富准确的IP地址分配库，同时这些信息也是对外公开的！下面就让我们看看如何在Linux下获得一些电信运营商的IP地址分配情况：<br /><br />wget http://ftp.apnic.net/apnic/dbase/tools/ripe-dbase-client-v3.tar.gz<br /><br />tar xzvf ripe-dbase-client-v3.tar.gz<br />cd whois-3.1<br />./configure<br />make<br />完成上述编译安装工作后，我们开始获取IP地址段；<br /><br />中国网通：<br />./whois3 -h whois.apnic.net -l -i mb MAINT-CNCGROUP &gt; /var/cnc<br /><br />中国电信：<br />./whois3 -h whois.apnic.net -l -i mb MAINT-CHINANET &gt; /var/chinanet<br /><br />中国铁通：<br />./whois3 -h whois.apnic.net -l -i mb MAINT-CN-CRTC &gt; /var/crtc<br /><br />打开获取后的文件可以看到里面的信息非常详细，甚至可以看到各个分公司的负责人、电话、电子邮件等等信息。如果想得到一份整齐干净的IP地址段文件，只要用grep和awk简单过滤就可以了。</p>
<p>过滤提取IP段</p>
<p>中国网通：<br />sed -e '/./{H;$!d;}' -e 'x;/CNCGROUP/!d' /var/cnc | grep 'inetnum' &gt;/var/cnc.txt</p>
<p>中国电信：<br />sed -e '/./{H;$!d;}' -e 'x;/CHINANET/!d' /var/chinanet | grep 'inetnum' &gt;/var/chinanet.txt</p>
<p>中国铁通：<br />sed -e '/./{H;$!d;}' -e 'x;/CN-CRTC/!d' /var/crtc | grep 'inetnum' &gt;/var/crtc.txt</p>
<p>&nbsp;</p>
<div style="FONT-SIZE: 12px"><font face="Arial">
<p><font face="Arial">其中已经包括了<strong>全国电信级网通和铁通IP地址分配段</strong></font></p>
<p><font face="Arial">[广东ip段北京网通ip段,辽宁ip段,网通ip段北京ip段,电信ip段,浙江ip段,湖南ip段,广东电信ip段,浙江电信ip段,中国ip段,山东网通ip段,山东ip段,广州ip段,福建ip段,上海电信ip段,铁通ip段,广西ip段,<br />太原ip段,辽宁网通ip段,北京电信ip段,adsl ip段,广东省ip段,河北ip段,黑龙江网通ip段,上海ip段,山西ip段,四川ip段,江西ip段,<br />河北网通ip段,四川电信ip段,广州电信ip段,广西电信ip段,广东电信adsl的ip段,服务器ip段,地区ip段,中国网通ip段,联通ip段,公网ip段,成都ip段,河南ip段,厦门ip段,<br />大连ip段,贵州ip段,陕西ip段,广州adsl ip段,济南ip段,电信adsl ip段,福州的ip段,河南网通ip段,黑龙江ip段,山东省ip段,四川网通ip段]</font></p>
<p><font face="Arial">我在网上也查了一上，有人提供：（ip段查询器下载,ip段查询软件,ip段扫描器,ip段搜索）不过我觉得不太好因，因为都不是最新的.</font><font face="Arial"><br />国外IP段如[美国ip段,韩国ip段,,日本ip段,最新美国ip段,日本的ip段,]请到http://ftp.apnic.net&nbsp;上查询</font></p>
</font></div>]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=463</link>
			<title><![CDATA[Web前端开发工程师必备技术列表[转]]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[网络开发]]></category>
			<pubDate>Mon,26 May 2008 14:45:03 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=463</guid>	
		<description><![CDATA[<p>要打造<strong>一流的Web产品</strong>开发团队，在团队成员基础能力上一定要下功夫。对于Web前端产品开发来说，仅仅掌握Web1.0时代简单的&quot;网页套接&quot;是完全不够的。我结合自己的团队配备，特此罗列了Web前端产品工程师所涉及的技能列表如下：</p>
<p>通过许多实际项目，个人认为一个完备的前端产品开发团队，必须拥有如下的人才配备，也希望大家补充：</p>
<ul>
    <li>团队全体成员达到所有技能中的a级标准 </li>
    <li>团队全体成员必须掌握两项技能中的b级标准，并保证所有的b级标准在该团队中有50%以上成员能达到 </li>
    <li>团队全体成员必须掌握一项技能中的c级标准，并保证所有的c级标准在该团队中有25%以上成员能达到 </li>
</ul>
<p>具体技能描述：</p>
<ul>
    <li><strong>【必备】UserInterface</strong> </li>
    <li style="LIST-STYLE-TYPE: none">
    <ol>
        <li>PhotoShop/Fireworks Design<br />a - 配合美工将草图形成具体的符合WebPage的设计<br />b - 有快速制作分层高品质PSD、PNG的能力<br />c - 能迅速将PSD、PNG的内容构思成div+css或者table等HTML代码 </li>
        <li>Flash Design<br />a - 基本动画效果<br />b - 复杂的交互体系设计，了解第三方swf辅助设计软件<br />c - 复杂的交互体系设计以及较强的对各类外埠资源（PNG、JPG、MP3、WAV等）的整合能力。精通部分第三方辅助设计软件（AE、SwishMax、Swift3D等）<br /></li>
    </ol>
    </li>
    <li><strong>【必备】Browser-side (Web Application)</strong> </li>
    <li style="LIST-STYLE-TYPE: none">
    <ol>
        <li>XHTML/CSS<br />a - 基本的layout实现<br />b - 严格跨平台的layout实现以<br />c - 优雅的HTML code，尽可能符合标准并有SEO的考虑因素。在任何平台、浏览器下基本保持一致。不要求了解各种CSS的hacks，但要求知道遇到问题应该如何查阅资料以在第一时间内解决。能够为JavaScript开发人员提供最好操作的DOM结构，让JS开发人员在开发的时候认为&quot;一切都已经准备就绪了&quot;，而不是&quot;捉襟见肘&quot;。 </li>
        <li>JavaScript/Ajax/DOM<br />a - 基本的DOM操作，了解AJAX，可以实现数据通信<br />b - 基本的DOM操作，能写高效率的OOP代码，以降低维护成本<br />c - 基于需求，进行不同的开发，选择合适的框架，做到代码效率最高，用户体验最好，代码下载量最小，并且可以在单独甚至更多产品线中最大限度重用代码 </li>
        <li>Flash Developement<br />a - 基于Timeline的ActionScript操作，能实现简单交互<br />b - 掌握a外，能实现数据层通信（与服务器以及本地SharedObject）<br />c - 精通AS1-3，能根据需求进行各类RIA开发。无论是要求支持FlashPlayer8的，还是FlashPlayer9的，都能做到开发效率最高、灵活性最大（比如对HTML层的接口设计，等等）。<br /></li>
    </ol>
    </li>
    <li><strong>【必备】Client-side (Desktop Application)</strong>
    <ol>
        <li>Apollo<br />a - 产品级的封装，基本技术了解（如何打包、如何加入HTML和JavaScript等）<br />b - 掌握a的同时，能利用Apollo的API独立设计、开发OS的文件I/O功能。<br />c - 掌握基本技能的同时，对&quot;3D概念体系&quot;有所认知。这里&quot;3D&quot;即：Design（设计）、Development（开发）、Deploy（产品部署）。能用Apollo </li>
        <li>Windows Presentation Foundation、WPF/E（Silverlight）<br />（待定，欢迎补充）<br /></li>
    </ol>
    </li>
    <li><strong>【增补】Server-side</strong> （修改：经考虑，这个技能不参与评级）<br />本来列举了&quot;1、Server端简单的技术、脚本&quot;和&quot;2、MediaServer（Red5）接口&quot;作为&quot;<strong>Web前端工程师技能列表</strong>&quot;的一种（服务器、数据逻辑层技能的）评判标准。但似乎很多朋友对于前端工程师是否应该掌握Server端技能的必要性表示怀疑。确实，要掌握好上述的展现层技能不是意见容易的事情，而且前端工程师的确非常辛苦。但是，站在另一方面来说，辛苦的原因是什么，我不知道在你日夜奋战div+CSS的时候思考过没有。就我的经验，前端的辛苦在于以下几个方面：
    <ol>
        <li><strong>重复劳动多</strong>，大量的div+css都是重复的，即便可以复制粘贴，但几千行的div海洋中去寻找一个入口恐怕都非常痛苦 </li>
        <li><strong>需求变更多</strong>，往往你折腾几个小时终于把跨平台问题解决好了，而且在IE6、7和Firefox下面都能显示同样的效果了，甚至连JavaScript交互都已经快搞定了。突然上面说需求要变。这无疑是莫大的痛苦。 </li>
    </ol>
    <p>也许表面上看，这跟Server端技能无关，但我觉得有好的Server端的意识，一定会有所帮助（当然不可能解决所有的问题）。毕竟信息结构和数据库是密切相关的，而Server是连接数据库的唯一渠道（至少大多数B/S应用是如此）。掌握Server端的基本技能，对于同逻辑层开发人员设计接口是非常重要的。而且HTML表现层在开发时与数据的分离，也与Server端的各种模板技术有关。例如PHP中的Smarty模板（我曾经用的）、jsp的model2概念等等。HTML结构如何设计，如何让HTML重用，甚至在HTML层进行OOP的开发（我现在在新产品线中设计的前端开发流程），都需要Server端的支持。最起码，你要告诉php程序员你需要什么。如果你完全对PHP一无所知的话，那也无从谈起了。<br />此外，对于创业团队，往往人手非常有限。为了让运营成本降到最低，所有的技术人员都有义务对Server端技术有所了解。如果为了修改一个网页的标题还要跑去喊PHP程序员连接Remote Server的话，那实在是增加了整个公司的运营成本。<br />总结：我认为，可以不了解技术细节，但应该知道原理，最好能掌握一两套设计思想（毕竟数据逻辑都在这里走，光看HTML和JavaScript，对人的见识还是有局限的，这种局限限制了我自己很久的时间），那将是一比宝贵的财富。<br /></p>
    </li>
    <li><strong>【增补】Mobile-side</strong>（不参与评级）<br />
    <ol>
        <li style="LIST-STYLE-TYPE: none">看到很多朋友留言说前端工程师没前途，我在想，同时掌握移动设备的技能是否也是拓展前途的一个必要性？这里再多说几句，关于技术人员的前途，目前在国内确实得用&quot;惨淡&quot;来形容。浮躁的氛围让技术人才往往过早放弃了自己的技术生涯，而尔虞我诈的整体道德水平也让单纯的技术人员痛不欲生（我身边太多了，恩，不说具体细节了，呵呵）。<br />作为一个技术人员，开发人员，在<strong>保持纯粹地敬业心态（这是前提，这么没有，啥也别谈）</strong>外，更要学会如何保护自己，如何壮大自身，社会不会同情你，只有你自己才能保护你自己。<br /></li>
        <li>Flashlite<br />（待定，欢迎补充） </li>
        <li>Java？<br />（待定，欢迎补充）</li>
    </ol>
    </li>
</ul>
<p>转自：http://www.awflasher.com/blog/archives/906</p>]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=447</link>
			<title><![CDATA[软件项目版本号的命名格式]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[网络开发]]></category>
			<pubDate>Sun,30 Mar 2008 16:35:52 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=447</guid>	
		<description><![CDATA[版本控制比较普遍的 3 种命名格式 :<br /><br />一、 GNU 风格的版本号命名格式 :<br />主版本号 . 子版本号 [. 修正版本号 [. 编译版本号 ]]<br />英文对照 : Major_Version_Number.Minor_Version_Number[.Revision_Number[.Build_Number]]<br />示例 : 1.2.1, 2.0, 5.0.0 build-13124<br /><br />二、 Windows 风格的版本号命名格式 :<br />主版本号 . 子版本号 [ 修正版本号 [. 编译版本号 ]]<br />英文对照 : Major_Version_Number.Minor_Version_Number[Revision_Number[.Build_Number]]<br />示例: 1.21, 2.0<br /><br />三、.Net Framework 风格的版本号命名格式:<br />主版本号.子版本号[.编译版本号[.修正版本号]]<br />英文对照: Major_Version_Number.Minor_Version_Number[.Build_Number[.Revision_Number]]<br />版本号由二至四个部分组成：主版本号、次版本号、内部版本号和修订号。主版本号和次版本号是必选的；内部版本号和修订号是可选的，但是如果定义了修订号部分，则内部版本号就是必选的。所有定义的部分都必须是大于或等于 0 的整数。<br /><br />应根据下面的约定使用这些部分：<br />Major ：具有相同名称但不同主版本号的程序集不可互换。例如，这适用于对产品的大量重写，这些重写使得无法实现向后兼容性。<br />Minor ：如果两个程序集的名称和主版本号相同，而次版本号不同，这指示显著增强，但照顾到了向后兼容性。例如，这适用于产品的修正版或完全向后兼容的新版本。<br />Build ：内部版本号的不同表示对相同源所作的重新编译。这适合于更改处理器、平台或编译器的情况。<br />Revision ：名称、主版本号和次版本号都相同但修订号不同的程序集应是完全可互换的。这适用于修复以前发布的程序集中的安全漏洞。<br />程序集的只有内部版本号或修订号不同的后续版本被认为是先前版本的修补程序 (Hotfix) 更新。<br /><br />版本号管理策略<br /><br />一、 GNU 风格的版本号管理策略：<br />1．项目初版本时 , 版本号可以为 0.1 或 0.1.0, 也可以为 1.0 或 1.0.0, 如果你为人很低调 , 我想你会选择那个主版本号为 0 的方式 ;<br />2．当项目在进行了局部修改或 bug 修正时 , 主版本号和子版本号都不变 , 修正版本号加 1;<br />3. 当项目在原有的基础上增加了部分功能时 , 主版本号不变 , 子版本号加 1, 修正版本号复位为 0, 因而可以被忽略掉 ;<br />4．当项目在进行了重大修改或局部修正累积较多 , 而导致项目整体发生全局变化时 , 主版本号加 1;<br />5．另外 , 编译版本号一般是编译器在编译过程中自动生成的 , 我们只定义其格式 , 并不进行人为控制 .<br /><br />二、 Window 下的版本号管理策略：<br />1．目初版时 , 版本号为 1.0 或 1.00;<br />2. 当项目在进行了局部修改或 bug 修正时，主版本号和子版本号都不变 , 修正版本号加 1;<br />3. 当项目在原有的基础上增加了部分功能时 , 主版本号不变 , 子版本号加 1, 修正版本号复位为 0, 因而可以被忽略掉 ;<br />4. 当项目在进行了重大修改或局部修正累积较多 , 而导致项目整体发生全局变化时 , 主版本号加 1;<br />5. 另外 , 编译版本号一般是编译器在编译过程中自动生成的 , 我们只定义其格式 , 并不进行人为控制 .<br /><br />另外 , 还可以在版本号后面加入 Alpha, Beta, Gamma, Current, RC (Release Candidate), Release, Stable 等后缀 , 在这些后缀后面还可以加入 1 位数字的版本号 .<br />对于用户来说 , 如果某个软件的主版本号进行了升级 , 用户还想继续那个软件 , 则发行软件的公司一般要对用户收取升级费用 ; 而如果子版本号或修正版本号发生了升级 , 一般来说是免费的 .<br />附： alphal 内部测试版<br />　　 beta 外部测试版<br />　　 demo 演示版<br />　　 Enhance 增强版或者加强版 属于正式版<br />　　 Free 自由版<br />　　 Full version 完全版 属于正式版<br />　　 shareware 共享版<br />　　 Release 发行版 有时间限制<br />　　 Upgrade 升级版<br />　　 Retail 零售版<br />　　 Cardware 属共享软件的一种，只要给作者回复一封电邮或明信片即可。（有的作者并由此提供注册码等），目前这种形式已不多见。<br />　　 Plus 属增强版，不过这种大部分是在程序界面及多媒体功能上增强。<br />　　 Preview 预览版<br />　　 Corporation &amp; Enterprise 企业版<br />　　 Standard 标准版<br />　　 Mini 迷你版也叫精简版只有最基本的功能<br />　　 Premium -- 贵价版<br />　　 Professional -- 专业版<br />　　 Express -- 特别版<br />　　 Deluxe -- 豪华版<br />　　 Regged -- 已注册版<br />　　 CN -- 简体中文版<br />　　 CHT -- 繁体中文版<br />　　 EN -- 英文版<br />　　 Multilanguage -- 多语言版<br /><br />注释：<br /><br />&alpha;版<br />此版本表示该软件仅仅是一个初步完成品，通常只在软件开发者内部交流，也有很少一部分发布给专业测试人员。一般而言，该版本软件的 bug 较多，普通用户最好不要安装。<br /><br />&beta;（beta）版<br />该版本相对于&alpha;版已有了很大的改进，消除了严重的错误，但还是存在着一些缺陷，需要经过大规模的发布测试来进一步消除。这一版本通常由软件公司免费发布，用户可从相关的站点下载。通过一些专业爱好者的测试，将结果反馈给开发者，开发者们再进行有针对性的修改。该版本也不适合一般用户安装。<br /><br />&gamma;版<br />该版本已经相当成熟了，与即将发行的正式版相差无几，如果用户实在等不及了，尽可以装上一试。<br /><span class="sp874">// 本文转自 C++Builder研究 - http://www.ccrun.com/article.asp?i=1006&amp;d=6074sk</span><br /><br />trial（试用版）<br />试用版软件在最近的几年里颇为流行，主要是得益于互联网的迅速发展。该版本软件通常都有时间限制，过期之后用户如果希望继续使用，一般得交纳一定的费用进行注册或购买。有些试用版软件还在功能上做了一定的限制。<br /><br />unregistered（未注册版）<br />未注册版与试用版极其类似，只是未注册版通常没有时间限制，在功能上相对于正式版做了一定的限制，例如绝大多数网络电话软件的注册版和未注册版，两者之间在通话质量上有很大差距。还有些虽然在使用上与正式版毫无二致，但是动不动就会弹出一个恼人的消息框来提醒你注册，如看图软件 acdsee 、智能陈桥汉字输入软件等。<br /><br />demo版<br />也称为演示版，在非正式版软件中，该版本的知名度最大。 demo 版仅仅集成了正式版中的几个功能，颇有点像 unregistered 。不同的是， demo 版一般不能通过升级或注册的方法变为正式版。<br />以上是软件正式版本推出之前的几个版本，&alpha;、&beta;、&gamma;可以称为测试版，大凡成熟软件总会有多个测试版，如 windows 98 的&beta;版，前前后后将近有 10 个。这么多的测试版一方面为了最终产品尽可能地满足用户的需要，另一方面也尽量减少了软件中的 bug 。而 trial 、 unregistered 、 demo 有时统称为演示版，这一类版本的广告色彩较浓，颇有点先尝后买的味道，对于普通用户而言自然是可以免费尝鲜了。<br /><br />正式版<br />不同类型的软件的正式版本通常也有区别。<br /><br />release<br />该版本意味&ldquo;最终释放版&rdquo;，在出了一系列的测试版之后，终归会有一个正式版本，对于用户而言，购买该版本的软件绝对不会错。该版本有时也称为标准版。一般情况下， release 不会以单词形式出现在软件封面上，取而代之的是符号 (r) ，如 windows nt(r) 4.0 、 ms-dos(r) 6.22 等。<br /><br />registered<br />很显然，该版本是与 unregistered 相对的注册版。注册版、 release 和下面所讲的 standard 版一样，都是软件的正式版本，只是注册版软件的前身有很大一部分是从网上下载的。<br /><br />standard<br />这是最常见的标准版，不论是什么软件，标准版一定存在。标准版中包含了该软件的基本组件及一些常用功能，可以满足一般用户的需求。其价格相对高一级版本而言还是&ldquo;平易近人&rdquo;的。<br /><br />deluxe<br />顾名思义即为&ldquo;豪华版&rdquo;。豪华版通常是相对于标准版而言的，主要区别是多了几项功能，价格当然会高出一大块，不推荐一般用户购买。此版本通常是为那些追求&ldquo;完美&rdquo;的专业用户所准备的。<br /><br />reference<br />该版本型号常见于百科全书中，比较有名的是微软的 encarta 系列。 reference 是最高级别，其包含的主题、图像、影片剪辑等相对于 standard 和 deluxe 版均有大幅增加，容量由一张光盘猛增至三张光盘，并且加入了很强的交互功能，当然价格也不菲。可以这么说，这一版本的百科全书才能算是真正的百科全书，也是发烧友们收藏的首选。<br /><br />professional（专业版）<br />专业版是针对某些特定的开发工具软件而言的。专业版中有许多内容是标准版中所没有的，这些内容对于一个专业的软件开发人员来说是极为重要的。如微软的 visual foxpro 标准版并不具备编译成可执行文件的功能，这对于一个完整的开发项目而言显然是无法忍受的，若客户机上没有 foxpro 将不能使用。如果用专业版就没有这个问题了。<br /><br />enterprise（企业版）<br />企业版是开发类软件中的极品（相当于百科全书中的 reference 版）。拥有一套这种版本的软件可以毫无障碍地开发任何级别的应用软件。如著名的 visual c++ 的企业版相对于专业版来说增加了几个附加的特性，如 sql 调试、扩展的存储过程向导、支持 as/400 对 ole db 的访问等。而这一版本的价格也是普通用户无法接受的。如微软的 visual studios 6.0 enterprise 中文版的价格为 23000 元。<br /><br />其他版本<br />除了以上介绍的一些版本外，还有一些专有版本名称。<br /><br />update（升级版）<br />升级版的软件是不能独立使用的，该版本的软件在安装过程中会搜索原有的正式版，如果不存在，则拒绝执行下一步。如 microsoft office 2000 升级版、 windows 9x 升级版等等。<br /><br />oem版<br />oem 版通常是捆绑在硬件中而不单独销售的版本。将自己的产品交给别的公司去卖，保留自己的著作权，双方互惠互利，一举两得。<br /><br />单机（网络）版<br />网络版在功能、结构上远比单机版复杂，如果留心一下软件的报价，你就会发现某些软件单机版和网络版的价格相差非常大，有些网络版甚至多一个客户端口就要加不少钱。<br /><br />普及版<br />该版本有时也会被称为共享版，其特点是价格便宜（有些甚至完全免费）、功能单一、针对性强（当然也有占领市场、打击盗版等因素）。与试用版不同的是，该版本的软件一般不会有时间上的限制。当然，如果用户想升级，最好还是去购买正式版。<br /><br /><br />以上是一些常见软件版本的简要介绍，随着软件市场行为的变化，现在也出现了一些新的版本命名方式，比如windows xp中的xp是取自于experience中的第二、第三个字母。希望以上内容能够对大家的购买、使用和下载软件有所帮助。<br /><br /><br />基于商业上考虑，很多的软件都不是非常严谨的遵循这个规则的。最有名的就是微软了。例如他的 NT 系列版本。大家比较熟悉的是从 NT 4.0 开始的。 99 年推出了 windows 2000 ， 2001 年退出了 windows xp ， 2003 年推出了 windows 2003 ，乍一看版本区别蛮大的，但是看他们的内部版本号就会发现，变化其实并不大，只是界面变化的大了而已。这是软件公司经常干的事情。 Window 2000 的版本号是 NT 5.0 ， windows xp 的版本号是 NT 5.1 ， windows 2003 的版本号是 NT 5.2 ，而现在的 longhorn 才是真正的 NT 6.0 （印象中是，不敢确认）。这样就可以持续的赚广大客户的钱。毕竟人的眼睛看得东西是最直观的，所以给人感觉也是变化最大的<br />]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=443</link>
			<title><![CDATA[IE不支持Javascript的解决方案]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[网络开发]]></category>
			<pubDate>Fri,14 Mar 2008 12:02:30 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=443</guid>	
		<description><![CDATA[<p>regsvr32 actxprxy.dll /s<br />regsvr32 shdocvw.dll /s<br />Regsvr32 URLMON.DLL /s<br />Regsvr32 actxprxy.dll /s<br />Regsvr32 shdocvw.dll /s<br />regsvr32 oleaut32.dll /s<br />rundll32.exe advpack.dll /DelNodeRunDLL32 C:\WINNT\System32\dacui.dll<br />rundll32.exe advpack.dll /DelNodeRunDLL32 C:\WINNT\Catroot\icatalog.mdb<br />regsvr32 setupwbv.dll /s<br />regsvr32 wininet.dll /s<br />regsvr32 comcat.dll /s<br />regsvr32 shdoc401.dll /s<br />regsvr32 shdoc401.dll /i /s<br />regsvr32 asctrls.ocx /s<br />regsvr32 oleaut32.dll /s<br />regsvr32 shdocvw.dll /I /s<br />regsvr32 shdocvw.dll /s<br />regsvr32 browseui.dll /s<br />regsvr32 browseui.dll /I /s<br />regsvr32 msrating.dll /s<br />regsvr32 mlang.dll /s<br />regsvr32 hlink.dll /s<br />regsvr32 mshtml.dll /s<br />regsvr32 mshtmled.dll /s<br />regsvr32 urlmon.dll /s<br />regsvr32 plugin.ocx /s<br />regsvr32 sendmail.dll /s<br />regsvr32 comctl32.dll /i /s<br />regsvr32 inetcpl.cpl /i /s<br />regsvr32 mshtml.dll /i /s<br />regsvr32 scrobj.dll /s<br />regsvr32 mmefxe.ocx /s<br />regsvr32 proctexe.ocx mshta.exe /register /s<br />regsvr32 corpol.dll /s<br />regsvr32 jscript.dll /s<br />regsvr32 msxml.dll /s<br />regsvr32 imgutil.dll /s<br />regsvr32 thumbvw.dll /s<br />regsvr32 cryptext.dll /s<br />regsvr32 rsabase.dll /s<br />regsvr32 triedit.dll /s<br />regsvr32 dhtmled.ocx /s<br />regsvr32 inseng.dll /s<br />regsvr32 iesetup.dll /i /s<br />regsvr32 hmmapi.dll /s<br />regsvr32 cryptdlg.dll /s<br />regsvr32 actxprxy.dll /s<br />regsvr32 dispex.dll /s<br />regsvr32 occache.dll /s<br />regsvr32 occache.dll /i /s<br />regsvr32 iepeers.dll /s<br />regsvr32 wininet.dll /i /s<br />regsvr32 urlmon.dll /i /s<br />regsvr32 digest.dll /i /s<br />regsvr32 cdfview.dll /s<br />regsvr32 webcheck.dll /s<br />regsvr32 mobsync.dll /s<br />regsvr32 pngfilt.dll /s<br />regsvr32 licmgr10.dll /s<br />regsvr32 icmfilter.dll /s<br />regsvr32 hhctrl.ocx /s<br />regsvr32 inetcfg.dll /s<br />regsvr32 trialoc.dll /s<br />regsvr32 tdc.ocx /s<br />regsvr32 MSR2C.DLL /s<br />regsvr32 msident.dll /s<br />regsvr32 msieftp.dll /s<br />regsvr32 xmsconf.ocx /s<br />regsvr32 ils.dll /s<br />regsvr32 msoeacct.dll /s<br />regsvr32 wab32.dll /s<br />regsvr32 wabimp.dll /s<br />regsvr32 wabfind.dll /s<br />regsvr32 oemiglib.dll /s<br />regsvr32 directdb.dll /s<br />regsvr32 inetcomm.dll /s<br />regsvr32 msoe.dll /s<br />regsvr32 oeimport.dll /s<br />regsvr32 msdxm.ocx /s<br />regsvr32 dxmasf.dll /s<br />regsvr32 laprxy.dll /s<br />regsvr32 l3codecx.ax /s<br />regsvr32 acelpdec.ax /s<br />regsvr32 mpg4ds32.ax /s<br />regsvr32 voxmsdec.ax /s<br />regsvr32 danim.dll /s<br />regsvr32 Daxctle.ocx /s<br />regsvr32 lmrt.dll /s<br />regsvr32 datime.dll /s<br />regsvr32 dxtrans.dll /s<br />regsvr32 dxtmsft.dll /s<br />regsvr32 vgx.dll /s<br />regsvr32 WEBPOST.DLL /s<br />regsvr32 WPWIZDLL.DLL /s<br />regsvr32 POSTWPP.DLL /s<br />regsvr32 CRSWPP.DLL /s<br />regsvr32 FTPWPP.DLL /s<br />regsvr32 FPWPP.DLL /s<br />regsvr32 FLUPL.OCX /s<br />regsvr32 wshom.ocx /s<br />regsvr32 wshext.dll /s<br />regsvr32 vbscript.dll /s<br />regsvr32 scrrun.dll mstinit.exe /setup /s<br />regsvr32 msnsspc.dll /SspcCreateSspiReg /s<br />regsvr32 msapsspc.dll /SspcCreateSspiReg /s</p>
<p>&nbsp;</p>
<p>以上另存为 ierepar.bat 并运行.</p>]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=442</link>
			<title><![CDATA[IdHTTP ＋ RegExpr]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[网络开发]]></category>
			<pubDate>Fri,14 Mar 2008 10:55:10 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=442</guid>	
		<description><![CDATA[<p>关键词：IdHTTP ，RegExpr，正则表达式，链接</p>
<p>目的：取得Web页面中的链接及链接文字。</p>
<p>操作：</p>
<p>&nbsp; 1.使用IdHTTP获取网页的源码。</p>
<p>&nbsp; 2.使用RegExpr定义正则表达式，获取网页中的链接及链接文字。</p>
<p><br />实现方法如下：</p>
<p>//使用正则表达式，匹配网页源码，抽取内容。<br />procedure GetLinkFromHtml(Const SourceHtmlTxt,Pattern:String; var aList:TStringList);<br />var RegExp : TRegExpr;<br />&nbsp;&nbsp;&nbsp; HasMatch:Boolean;<br />begin<br />&nbsp; RegExp := TRegExpr.Create;</p>
<p>&nbsp; try<br />&nbsp;&nbsp;&nbsp; RegExp.Expression := Pattern;&nbsp;&nbsp; //范式<br />&nbsp;&nbsp;&nbsp; HasMatch:=RegExp.Exec(SourceHtmlTxt);<br />&nbsp; <br />&nbsp;&nbsp;&nbsp; while HasMatch do<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //aList.Add(RegExp.Match[0]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aList.Add(RegExp.Match[2]+'='+RegExp.Match[1]); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HasMatch := RegExp.ExecNext;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;<br />&nbsp; finally<br />&nbsp;&nbsp;&nbsp;&nbsp; FreeAndNil(RegExp);<br />&nbsp; end;<br />end;</p>
<p>&nbsp;</p>
<p>//解析网页源码内容，用正则表达式读取所需链接。<br />procedure ParsePageContent(pageText:String; var aList:TStringList);<br />var aPattern:String;<br />begin<br />&nbsp;&nbsp; //正则表达式<br />&nbsp;&nbsp; //链接形如：&lt;A href=&quot;<a href="http://ex01/public/abcdf.doc?attach=1">http://ex01/public/abcdf.doc?attach=1</a>&quot; TARGET=&quot;_blank&quot; &gt;&lt;FONT color=&quot;#000000&quot;&gt;附件1.doc(37KB)&lt;/FONT&gt;&lt;/A&gt;<br />&nbsp;&nbsp; aPattern:= '&lt;A\s+href\s*=\s*&quot;&quot;{0}([^&gt;].*?)\?attach=1&quot;&quot;{0}\s*TARGET\s*=\s*&quot;&quot;{0}_blank&quot;&quot;{0}\s*&gt;\s*&lt;FONT\s+color\s*=\s*&quot;&quot;{0}#000000&quot;&quot;{0}&gt;(.*?)\(([\d]+)KB\)\s*&lt;/FONT&gt;\s*&lt;/A&gt;';</p>
<p>&nbsp;&nbsp; GetLinkFromHtml(pageText,aPattern,aList); //使用正则表达式，匹配网页内容。<br />end;</p>
<p><br />//读取网页源码，从网页中得到文件的链接地址以及文件名称等内容。<br />//返回参数：HrefList。<br />procedure GetLinkList(EFileLink,Domain,UserName,PassWD:string; var HrefList:TStringList);<br />var aIdHTTP:TIdHTTP;<br />&nbsp;&nbsp;&nbsp; WebHTTPContent:String;<br />begin<br />&nbsp;&nbsp; aIdHTTP:=TIdHTTP.Create(nil);</p>
<p>&nbsp;&nbsp; try<br />&nbsp;&nbsp;&nbsp;&nbsp; aIdHTTP.Request.BasicAuthentication:=True;&nbsp; //设置权限<br />&nbsp;&nbsp;&nbsp;&nbsp; aIdHTTP.Request.Username:=Domain+'\'+UserName;<br />&nbsp;&nbsp;&nbsp;&nbsp; aIdHTTP.Request.Password:=PassWD;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; //识别浏览器<br />&nbsp;&nbsp;&nbsp;&nbsp; aIdHTTP.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)';<br />&nbsp;&nbsp;&nbsp;&nbsp; aIdHTTP.Request.Accept:='image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*';<br />&nbsp;&nbsp;&nbsp;&nbsp; aIdHTTP.Request.ContentType:='text/xml; charset=''UTF-8''';</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; aIdHTTP.Request.Connection:='Keep-Alive';<br />&nbsp;&nbsp;&nbsp;&nbsp; aIdHTTP.Request.Method:=(hmGet);//设置Request的方法</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; //得到网页的内容（以OWA方式可打开）<br />&nbsp;&nbsp;&nbsp;&nbsp; //EFileLink:='http://ex01/public/工作流程/关于调整设备类型的通知.EML';<br />&nbsp;&nbsp;&nbsp;&nbsp; WebHTTPContent:=aIdHTTP.Get(EFileLink);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; //UTF8解码<br />&nbsp;&nbsp;&nbsp;&nbsp; WebHTTPContent:=Utf8Decode(WebHTTPContent);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; //解析网页源码&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; ParsePageContent(WebHTTPContent, HrefList);<br />&nbsp;&nbsp; finally<br />&nbsp;&nbsp;&nbsp;&nbsp; FreeAndNil(aIdHTTP);<br />&nbsp;&nbsp; end;<br />end;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=441</link>
			<title><![CDATA[活动目录（Active Directory）小结]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[网络开发]]></category>
			<pubDate>Fri,14 Mar 2008 10:50:26 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=441</guid>	
		<description><![CDATA[<P>1.活动目录（AD）</P>
<P>&nbsp; Active Directory 是用于 Windows Server 的目录服务。<BR>&nbsp; 它存储着网络上各种对象的有关信息，并使该信息易于管理员和用户查找及使用。<BR>&nbsp; Active Directory 目录服务使用结构化的数据存储作为目录信息的逻辑层次结构的基础。 <BR>&nbsp; 通过登录验证以及目录中对象的访问控制，将安全性集成到 Active Directory 中。</P>
<P>&nbsp; 目录服务，如 Active Directory，提供了用于存储目录数据并使该数据可由网络用户和管理员使用的方法。<BR>&nbsp; 例如，Active Directory 存储了有关用户帐户的信息，如名称、密码、电话号码等，并允许相同网络上的其他已授权用户访问该信息。</P>
<P><BR>2.LDAP</P>
<P>&nbsp; LDAP是轻量目录访问协议，英文全称是Lightweight Directory Access Protocol。<BR>&nbsp; LDAP是基于X.500标准的。<BR>&nbsp; LDAP 仅通过使用原始 X.500目录存取协议 (DAP) 的功能子集而减少了所需的系统资源消耗。<BR>&nbsp; 与X.500不同，LDAP支持TCP/IP，这对访问Internet是必须的。<BR>&nbsp; LDAP和关系数据库是两种不同层次的概念，后者是存贮方式（同一层次如网格数据库，对象数据库），前者是存贮模式和访问协议。<BR>&nbsp; LDAP是一个比关系数据库抽象层次更高的存贮概念，与关系数据库的查询语言SQL属同一级别。</P>
<P><BR>3.ADSI</P>
<P>&nbsp; 在Delphi中可以使用微软的ADSI（活动目录服务接口）来访问活动目录。<BR>&nbsp; ADSI是一组以COM接口的形式提供目录服务的，是为基于目录服务提供的通用接口。<BR>&nbsp; 一些标准的ADSI提供者（Provider）有WinNT、IIS、LDAP和NDS。<BR>&nbsp; 可以通过ADSI存取四种网络目录结构：<BR>&nbsp; WinNT (Microsoft SAM 数据库)、LDAP (轻量目录存取协议)、NDS (NetWare目录服务)和NWCOMPAT(Novell NetWare 3.x)。&nbsp; <BR>&nbsp; ADSI可以使Windows NT 管理员的工作变得轻松。<BR>&nbsp; ADSI支持管理员执行一些一般的管理任务，比如添加新用户、管理打印机、安全设定和控制NT域。<BR>&nbsp; 因为ADSI使用COM接口，任何支持COM的编程语言像Delphi、BCB、VB、VC等都可以调用ADSI。</P>
<P><BR>&nbsp; 如在Delphi中调用ADSI，则需要引入活动目录类型库。<BR>&nbsp; 操作如下：<BR>&nbsp; 在IDE中，Project---&gt;Import Type Library。<BR>&nbsp; 选择“Active Ds Type Library(Version 1.0)”，单击“Create Unit”。<BR>&nbsp; Delphi会做相应的封装，生成ActiveDs_TLB.pas文件。<BR>&nbsp; Uses ActiveDs_TLB，就可以在Delphi程序中使用ADSI了。</P>
<P><BR>4.JAVA+LDAP访问Window 2000 Server AD。</P>
<P>package ADOper;</P>
<P>import java.util.Hashtable;<BR>import javax.naming.Context;<BR>import javax.naming.ldap.LdapContext;<BR>import javax.naming.ldap.InitialLdapContext;<BR>import javax.naming.NamingEnumeration;<BR>import javax.naming.directory.SearchControls;<BR>import javax.naming.directory.SearchResult;<BR>import javax.naming.NamingException;<BR>import javax.naming.directory.Attribute;<BR>import javax.naming.directory.Attributes;<BR>import java.util.Enumeration;</P>
<P>public class ADOperTest {<BR>&nbsp; public ADOperTest() {<BR>&nbsp; }</P>
<P>&nbsp; public void GetADInfo() {<BR>&nbsp;&nbsp;&nbsp; Hashtable HashEnv = new Hashtable();</P>
<P>&nbsp;&nbsp;&nbsp; String LDAP_URL = "<a href="http://www.openx.cn/ldap://192.168.100.3:389/">ldap://192.168.100.3:389</A>"; //LDAP访问地址<BR>&nbsp;&nbsp;&nbsp; //String adminName = "CN=OAWebUser,CN=Users,DC=Hebmc,DC=com";//AD的用户名<BR>&nbsp;&nbsp;&nbsp; String adminName = "Hebmc\\OAWebUser"; //注意用户名的写法：domain\User 或 <a href="http://www.openx.cn/mailto:User@domain.com">User@domain.com</A><BR>&nbsp;&nbsp;&nbsp; adminName = "<a href="http://www.openx.cn/mailto:OAWebUser@Hebmc.com">OAWebUser@Hebmc.com</A>"; //注意用户名的写法：domain\User 或 <a href="http://www.openx.cn/mailto:User@domain.com">User@domain.com</A><BR>&nbsp;&nbsp;&nbsp; String adminPassword = "chenzuooaup02"; //密码</P>
<P>&nbsp;&nbsp;&nbsp; HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); //LDAP访问安全级别<BR>&nbsp;&nbsp;&nbsp; HashEnv.put(Context.SECURITY_PRINCIPAL, adminName); //AD User<BR>&nbsp;&nbsp;&nbsp; HashEnv.put(Context.SECURITY_CREDENTIALS, adminPassword); //AD Password<BR>&nbsp;&nbsp;&nbsp; HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); //LDAP工厂类<BR>&nbsp;&nbsp;&nbsp; HashEnv.put(Context.PROVIDER_URL, LDAP_URL);</P>
<P>&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LdapContext ctx = new InitialLdapContext(HashEnv, null);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SearchControls searchCtls = new SearchControls(); //Create the search controls<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); //Specify the search scope</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String searchFilter = "objectClass=User"; //specify the LDAP search filter<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //String searchFilter = "objectClass=organizationalUnit";//specify the LDAP search filter</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String searchBase = "DC=Hebmc,DC=com"; //Specify the Base for the search//搜索域节点<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int totalResults = 0;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Specify the attributes to return<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //String returnedAtts[] = {"memberOf"};//定制返回属性<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String returnedAtts[] = {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "url", "whenChanged", "employeeID", "name", "userPrincipalName",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "physicalDeliveryOfficeName", "departmentNumber", "telephoneNumber",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "homePhone", "mobile", "department", "sAMAccountName", "whenChanged",<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "mail"}; //定制返回属性</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; searchCtls.setReturningAttributes(returnedAtts); //设置返回属性集</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Search for objects using the filter<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NamingEnumeration answer = ctx.search(searchBase, searchFilter,searchCtls);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (answer.hasMoreElements()) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SearchResult sr = (SearchResult) answer.next();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("************************************************");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(sr.getName());</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attributes Attrs = sr.getAttributes();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (Attrs != null) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (NamingEnumeration ne = Attrs.getAll(); ne.hasMore(); ) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Attribute Attr = (Attribute) ne.next();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("&nbsp; AttributeID=" + Attr.getID().toString());</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //读取属性值<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (NamingEnumeration e = Attr.getAll(); e.hasMore();totalResults++) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("&nbsp;&nbsp;&nbsp; AttributeValues=" + e.next().toString());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("&nbsp;&nbsp;&nbsp; ---------------");</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //读取属性值<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Enumeration values = Attr.getAll();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (values != null) { // 迭代<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (values.hasMoreElements()) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("&nbsp;&nbsp;&nbsp; AttributeValues=" + values.nextElement());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("&nbsp;&nbsp;&nbsp; ---------------");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (NamingException e) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println("Throw Exception : " + e);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Number: " + totalResults);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ctx.close();<BR>&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp; catch (NamingException e) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.err.println("Throw Exception :&nbsp; " + e);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; }</P>
<P>&nbsp; public static void main(String args[]) {<BR>&nbsp;&nbsp;&nbsp; ADOperTest ad = new ADOperTest();<BR>&nbsp;&nbsp;&nbsp; ad.GetADInfo();<BR>&nbsp; }<BR>}</P>
<P>备注：</P>
<P>&nbsp; 使用LADP访问AD，注意用户名的写法：domain\User 或 <a href="http://www.openx.cn/mailto:User@domain.com">User@domain.com</A>。</P>
<P>&nbsp; 如用户名不正确，则可能会出现如下异常：</P>
<P>javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 525, vece</P>
<P><BR>5.Delphi7使用WinNT Provider访问Window 2000 Server AD。</P>
<P>unit Unt_AD;</P>
<P>interface</P>
<P>uses<BR>&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<BR>&nbsp; Dialogs, StdCtrls, ComCtrls, ActiveDs_TLB, ActiveX, ComObj;</P>
<P>type<BR>&nbsp; TMainFrm = class(TForm)<BR>&nbsp;&nbsp;&nbsp; grp1: TGroupBox;<BR>&nbsp;&nbsp;&nbsp; cbUseLogin: TCheckBox;<BR>&nbsp;&nbsp;&nbsp; lbl1: TLabel;<BR>&nbsp;&nbsp;&nbsp; ADSIUsername: TEdit;<BR>&nbsp;&nbsp;&nbsp; lbl2: TLabel;<BR>&nbsp;&nbsp;&nbsp; ADSIPassword: TEdit;<BR>&nbsp;&nbsp;&nbsp; ADSIDomainName: TEdit;<BR>&nbsp;&nbsp;&nbsp; btn1: TButton;<BR>&nbsp;&nbsp;&nbsp; lbl3: TLabel;<BR>&nbsp;&nbsp;&nbsp; GroupListView: TListView;<BR>&nbsp;&nbsp;&nbsp; ComputerListView: TListView;<BR>&nbsp;&nbsp;&nbsp; SeverListView: TListView;<BR>&nbsp;&nbsp;&nbsp; UserListView: TListView;<BR>&nbsp;&nbsp;&nbsp; lbl4: TLabel;<BR>&nbsp;&nbsp;&nbsp; lbl5: TLabel;<BR>&nbsp;&nbsp;&nbsp; Label1: TLabel;<BR>&nbsp;&nbsp;&nbsp; lbl6: TLabel;<BR>&nbsp;&nbsp;&nbsp; procedure btn1Click(Sender: TObject);<BR>&nbsp; private<BR>&nbsp;&nbsp;&nbsp; { Private declarations }<BR>&nbsp;&nbsp;&nbsp; procedure GetDomainInformation(Domain: IADsContainer);<BR>&nbsp;&nbsp;&nbsp; procedure AddUserToList(ADsObj:IADs);<BR>&nbsp;&nbsp;&nbsp; procedure AddGroupToList(ADsObj:IADs);<BR>&nbsp;&nbsp;&nbsp; procedure AddComputerToList(ADsObj:IADs);<BR>&nbsp; public<BR>&nbsp;&nbsp;&nbsp; { Public declarations }<BR>&nbsp; end;</P>
<P>//连接 Win NT 目录服务就是找到域控制器然后绑定到相应的对象上。<BR>//绑定可以通过 ADsGetObject 或 ADsOpenObject 函数来实现。<BR>//第一个函数使用登录用户缺省的信任级别，<BR>//第二个函数允许开发者指定特殊的安全信任机制来绑定 ADSI 对象。</P>
<P>//缺省条件下，ADsGetObject函数根据当前用户进行安全认证。<BR>function ADsGetObject(lpszPathName: PWideChar;&nbsp;&nbsp; //第一个参数是对象的路径名<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const riid: TIID;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第二个参数是对象的接口标识符<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out obj): HResult; stdcall; external 'activeds.dll';// 第三个参数用于返回得到的被请求的接口指针</P>
<P>//ADsOpenObject 函数在不同的安全认证机制下绑定 ADSI 对象，<BR>//它主要是通过调用参数返回的用户名和口令来认证的<BR>function ADsOpenObject(lpszPathName: PWideChar;&nbsp;&nbsp;&nbsp; //第一个参数是对象的路径名<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpszUserName: PWideChar;&nbsp;&nbsp;&nbsp; //第二个参数是调用者提供的用户名<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpszPassword: PWideChar;&nbsp;&nbsp;&nbsp; //第三个参数是调用者提供的口令<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwReserved: LongInt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第四个参数是一个保留的 provider 标识，用来确定绑定的认证方法<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const riid: TIID;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第五个参数是请求接口的接口标识符，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out obj): HResult; stdcall; external 'activeds.dll'; //最后一个参数用来返回请求的接口指针。</P>
<P>var<BR>&nbsp; MainFrm: TMainFrm;</P>
<P>implementation</P>
<P>{$R *.dfm}</P>
<P>// 获取域信息&nbsp; <BR>procedure TMainFrm.GetDomainInformation(Domain: IADsContainer);<BR>var<BR>&nbsp; Enum: IEnumVariant;<BR>&nbsp; ADsTempObj: OLEVariant;<BR>&nbsp; ADsObj: IADs;<BR>&nbsp; Value: LongWord;<BR>begin<BR>&nbsp; //清空用户、组和计算机列表<BR>&nbsp; UserListView.Items.Clear;<BR>&nbsp; GroupListView.Items.Clear;<BR>&nbsp; ComputerListView.Items.Clear;</P>
<P>&nbsp; //获取枚举对象，并赋值给 Enum 变量<BR>&nbsp; Enum := (Domain._NewEnum) as IEnumVariant; </P>
<P>&nbsp; //利用枚举对象查找，把每个子对象赋值给临时的 OLEVariant 对象<BR>&nbsp; while (Enum.Next(1, ADsTempObj, Value) = S_OK) do<BR>&nbsp;&nbsp;&nbsp; begin<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ADsObj := IUnknown(ADsTempObj) as IADs;&nbsp; //获得临时对象：OLEVariant 变量赋值给 ADSI 对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if AdsObj.Class_ = 'User' then&nbsp;&nbsp;&nbsp; //如果是用户对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddUserToList(ADsObj);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if AdsObj.Class_ = 'Group' then&nbsp;&nbsp; //如果是组对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddGroupToList(ADsObj);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if AdsObj.Class_ = 'Computer' then //如果是计算机对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AddComputerToList(ADsObj);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ADsTempObj:=Null; //释放OLEVariant<BR>&nbsp; end;&nbsp; <BR>end; </P>
<P>procedure TMainFrm.AddUserToList(ADsObj:IADs);<BR>var aListItem:TListItem;<BR>begin<BR>&nbsp; aListItem:=UserListView.Items.Add;<BR>&nbsp; aListItem.Caption:=ADsObj.Name;<BR>&nbsp; aListItem.SubItems.Add(ADsObj.Class_);<BR>&nbsp; aListItem.SubItems.Add(ADsObj.ADsPath);<BR>&nbsp; aListItem.SubItems.Add(ADsObj.Parent);<BR>&nbsp;// aListItem.SubItems.Add(ADsObj.Get('sAMAccountName'));<BR>end;</P>
<P>procedure TMainFrm.AddGroupToList(ADsObj:IADs);<BR>var aListItem:TListItem;<BR>begin<BR>&nbsp; aListItem:=GroupListView.Items.Add;<BR>&nbsp; aListItem.Caption:=ADsObj.Name;<BR>&nbsp; aListItem.SubItems.Add(ADsObj.Class_);<BR>&nbsp; aListItem.SubItems.Add(ADsObj.ADsPath);<BR>end;</P>
<P>procedure TMainFrm.AddComputerToList(ADsObj:IADs);<BR>var aListItem:TListItem;<BR>begin<BR>&nbsp; aListItem:=ComputerListView.Items.Add;<BR>&nbsp; aListItem.Caption:=ADsObj.Name;<BR>&nbsp; aListItem.SubItems.Add(ADsObj.Class_);<BR>&nbsp; aListItem.SubItems.Add(ADsObj.ADsPath);<BR>end;</P>
<P>procedure TMainFrm.btn1Click(Sender: TObject);<BR>var<BR>&nbsp;&nbsp;&nbsp; UnknownObject: IUnknown;<BR>&nbsp;&nbsp;&nbsp; DomainPath,ADUser,ADPass: WideString;<BR>&nbsp;&nbsp;&nbsp; Domain: IADsContainer;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>begin<BR>&nbsp; // 指定域路径<BR>&nbsp; DomainPath := 'WinNT://' + ADSIDomainName.Text;<BR>&nbsp; ADUser:= ADSIUsername.Text;<BR>&nbsp; ADPass:= ADSIPassword.Text;</P>
<P>&nbsp; DomainPath := 'WinNT://Hebmc.com';<BR>&nbsp; ADUser:&nbsp; ADUser:= 'Hebmc\OAWebUser'; //注意用户名称的写法：domain\User 或 <a href="http://www.openx.cn/mailto:User@domain.com">User@domain.com</A><BR>&nbsp; ADUser:= <a href="http://www.openx.cn/mailto:'OAWebUser@Hebmc.com'">'OAWebUser@Hebmc.com'</A>; //注意用户名称的写法：domain\User 或 <a href="http://www.openx.cn/mailto:User@domain.com">User@domain.com</A><BR>&nbsp; ADPass:= 'chenzuooaup02';<BR>&nbsp; <BR>&nbsp; // 如果使用用户登录了信息<BR>&nbsp; if cbUseLogin.Checked then&nbsp; // 使用用户登录的信息创建域对象<BR>&nbsp;&nbsp;&nbsp;&nbsp; OleCheck(AdsOpenObject(PWideChar(DomainPath),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PWideChar(ADUser),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PWideChar(ADPass),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IID_IADsContainer,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UnknownObject))<BR>&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp; OleCheck(ADsGetObject(PWideChar(DomainPath),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IID_IADsContainer,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UnknownObject));</P>
<P>&nbsp; // 设定域对象<BR>&nbsp; Domain := UnknownObject as IADsContainer;</P>
<P>&nbsp; // 从域中获得信息列表<BR>&nbsp; GetDomainInformation(Domain); <BR>end;</P>
<P>end.</P>
<P><BR>备注：</P>
<P>&nbsp; *.注意用户名的写法：domain\User 或 <a href="http://www.openx.cn/mailto:User@domain.com">User@domain.com</A>。</P>
<P>&nbsp; *.Delphi使用WinNT Provider方式访问AD，在使用ADsObj.Get('属性')时，会有一个报错：“高速缓存中找不到目录属性。”&nbsp; （The directory property cannot be found in the cache）。<BR>&nbsp;&nbsp;&nbsp; 目前该问题还不知如何解决。</P>
<P>&nbsp; *.资料参考《Delphi深度探索-活动目录开发》。<BR>&nbsp;&nbsp;&nbsp; 作者：陈省（Hubdog）。&nbsp; <A href="http://hubdog.csdn.net/">http://hubdog.csdn.net/</A>。</P>
<P><BR>6.Delphi7使用LDAP访问Window 2000 Server AD。</P>
<P>unit Main;</P>
<P>interface</P>
<P>uses<BR>&nbsp; Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<BR>&nbsp; Dialogs, StdCtrls, ActiveDs_TLB, ActiveX, ComObj;</P>
<P>type<BR>&nbsp; TMainFrm = class(TForm)<BR>&nbsp;&nbsp;&nbsp; Button1: TButton;<BR>&nbsp;&nbsp;&nbsp; ObjMemo: TMemo;<BR>&nbsp;&nbsp;&nbsp; OUMemo: TMemo;<BR>&nbsp;&nbsp;&nbsp; UserMemo: TMemo;<BR>&nbsp;&nbsp;&nbsp; cbUseLogin: TCheckBox;<BR>&nbsp;&nbsp;&nbsp; Obj_Label: TLabel;<BR>&nbsp;&nbsp;&nbsp; OU_Label: TLabel;<BR>&nbsp;&nbsp;&nbsp; Users_Label: TLabel;<BR>&nbsp;&nbsp;&nbsp; procedure Button1Click(Sender: TObject);<BR>&nbsp; private<BR>&nbsp;&nbsp;&nbsp; { Private declarations }<BR>&nbsp; public<BR>&nbsp;&nbsp;&nbsp; { Public declarations }<BR>&nbsp;&nbsp;&nbsp; procedure GetADInfo(aUser,aPass,aDomainPath: WideString);<BR>&nbsp; end;</P>
<P> <BR>//连接 Win NT 目录服务就是找到域控制器然后绑定到相应的对象上。<BR>//绑定可以通过 ADsGetObject 或 ADsOpenObject 函数来实现。<BR>//第一个函数使用登录用户缺省的信任级别，<BR>//第二个函数允许开发者指定特殊的安全信任机制来绑定 ADSI 对象。</P>
<P>//缺省条件下，ADsGetObject函数根据当前用户进行安全认证。<BR>function ADsGetObject(lpszPathName: PWideChar;&nbsp;&nbsp; //第一个参数是对象的路径名<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const riid: TIID;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第二个参数是对象的接口标识符<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out obj): HResult; stdcall; external 'activeds.dll';// 第三个参数用于返回得到的被请求的接口指针</P>
<P>//ADsOpenObject 函数在不同的安全认证机制下绑定 ADSI 对象，<BR>//它主要是通过调用参数返回的用户名和口令来认证的<BR>function ADsOpenObject(lpszPathName: PWideChar;&nbsp;&nbsp;&nbsp; //第一个参数是对象的路径名<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpszUserName: PWideChar;&nbsp;&nbsp;&nbsp; //第二个参数是调用者提供的用户名<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lpszPassword: PWideChar;&nbsp;&nbsp;&nbsp; //第三个参数是调用者提供的口令<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwReserved: LongInt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第四个参数是一个保留的 provider 标识，用来确定绑定的认证方法<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; const riid: TIID;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //第五个参数是请求接口的接口标识符，<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out obj): HResult; stdcall; external 'activeds.dll'; //最后一个参数用来返回请求的接口指针。</P>
<P>var<BR>&nbsp; MainFrm: TMainFrm;</P>
<P>implementation</P>
<P>{$R *.dfm}</P>
<P>procedure TMainFrm.Button1Click(Sender: TObject);<BR>var DomainPath,ADUser,ADPass: WideString;<BR>begin<BR>&nbsp; DomainPath := 'LDAP://192.168.100.3/OU=省公司,OU=组织架构,DC=Hebmc,DC=com';//LDAP访问AD的路径。</P>
<P>&nbsp; ADUser:='Hebmc\OAWebUser'; //注意用户名称的写法：域名称 + 用户名称 或 <a href="http://www.openx.cn/mailto:User@domain.com">User@domain.com</A><BR>&nbsp; ADUser:='OAWebUser@Hebmc.com'; //注意用户名称的写法：域名称 + 用户名称 或 <a href="http://www.openx.cn/mailto:User@domain.com">User@domain.com</A><BR>&nbsp; ADPass:='chenzuooaup02';&nbsp;&nbsp; //用户密码。<BR>&nbsp; <BR>&nbsp; GetADInfo(ADUser,ADPass,DomainPath);&nbsp; <BR>end;</P>
<P>procedure TMainFrm.GetADInfo(aUser,aPass,aDomainPath: WideString);<BR>var<BR>&nbsp; UnknownObject: IUnknown;<BR>&nbsp; Enum: IEnumVariant;<BR>&nbsp; ADsTempObj: OLEVariant;<BR>&nbsp; Domain: IADsContainer;<BR>&nbsp; ADsObj: IADs;<BR>&nbsp; Value: LongWord;<BR>begin</P>
<P>&nbsp; // 如果使用AD用户信息登录<BR>&nbsp; if cbUseLogin.Checked then&nbsp; // 使用用户登录的信息创建域对象<BR>&nbsp;&nbsp;&nbsp;&nbsp; OleCheck(AdsOpenObject(PWideChar(aDomainPath),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PWideChar(aUser),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PWideChar(aPass),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IID_IADsContainer,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UnknownObject))<BR>&nbsp; else <BR>&nbsp;&nbsp;&nbsp;&nbsp; OleCheck(ADsGetObject(PWideChar(aDomainPath),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IID_IADsContainer,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UnknownObject));</P>
<P>&nbsp; // 设定域对象<BR>&nbsp; Domain := UnknownObject as IADsContainer;</P>
<P>&nbsp; //获取枚举对象，并赋值给 Enum 变量<BR>&nbsp; Enum := (Domain._NewEnum) as IEnumVariant;</P>
<P>&nbsp; //利用枚举对象查找，把每个子对象赋值给临时的 OLEVariant 对象<BR>&nbsp; while (Enum.Next(1, ADsTempObj, Value) = S_OK) do<BR>&nbsp;&nbsp;&nbsp; begin<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ADsObj := IUnknown(ADsTempObj) as IADs;&nbsp; //获得临时对象：OLEVariant 变量赋值给 ADSI 对象</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ObjMemo.Lines.Add(AdsObj.Class_); //对象类型</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if AdsObj.Class_ = 'organizationalUnit' then //如果是组织单元对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OUMemo.Lines.Add(ADsObj.Name) ;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if AdsObj.Class_ = 'user' then //如果是用户对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UserMemo.Lines.Add(ADsObj.Name+'（用户代码='+ADsObj.Get('sAMAccountName')+'）');</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //递归。得到组内相关用户。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetADInfo(aUser,aPass,ADsObj.ADsPath);&nbsp;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ADsTempObj:=Null; //释放OLEVariant<BR>&nbsp; end;</P>
<P>end;</P>
<P>end.</P>
<P>备注：</P>
<P>&nbsp;*. 注意用户名的写法：domain\User 或 <a href="http://www.openx.cn/mailto:User@domain.com">User@domain.com</A></P>
<P>&nbsp;*. Delphi使用LDAP方式访问AD，可以使用ADsObj.Get('属性')时得到相关属性值。<BR>&nbsp;&nbsp;&nbsp; 属性的取值域可以通过JAVA程序得到。</P>]]></description>
		</item>
		
			<item>
			<link>http://www.openx.cn/default.asp?id=435</link>
			<title><![CDATA[ADIS IIS 部分属性 备忘]]></title>
			<author>cxty@qq.com(cxty)</author>
			<category><![CDATA[网络开发]]></category>
			<pubDate>Sun,06 Jan 2008 11:01:09 +0800</pubDate>
			<guid>http://www.openx.cn/default.asp?id=435</guid>	
		<description><![CDATA[ServerBindings&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IIS虚拟站点绑定的IP、端口、域名<BR>ServerComment&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IIS虚拟站点的名称<BR>MaxConnections&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IIS虚拟站点的最大连接数<BR>AnonymousUserName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;站点用户名<BR>AnonymousUserPass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;站点密码<BR>AccessRead&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;站点读取权限<BR>AccessExecute&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;站点执行权限<BR>AccessWrite&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;站点写入权限<BR>AccessScript&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;脚本<BR>AccessSSL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;支持SSL<BR>AuthBasic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;支持Basic<BR>AuthNTLM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;支持NTLM<BR>EnableDefaultDoc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;支持索引<BR>EnableDirBrowsing&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;目录可浏览<BR>DefaultDoc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;缺省页<BR>Path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;主目录<BR>AppPoolId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;应用程序池<BR>
<P class=ContentAuthor>引用内容</P>
<DIV class=UBBContent>AccessExecute&nbsp;=&nbsp;False<BR>AccessFlags&nbsp;=&nbsp;513<BR>AccessNoPhysicalDir&nbsp;=&nbsp;False<BR>AccessNoRemoteExecute&nbsp;=&nbsp;False<BR>AccessNoRemoteRead&nbsp;=&nbsp;False<BR>AccessNoRemoteScript&nbsp;=&nbsp;False<BR>AccessNoRemoteWrite&nbsp;=&nbsp;False<BR>AccessRead&nbsp;=&nbsp;True<BR>AccessScript&nbsp;=&nbsp;True<BR>AccessSource&nbsp;=&nbsp;False<BR>AccessSSL&nbsp;=&nbsp;False<BR>AccessSSL128&nbsp;=&nbsp;False<BR>AccessSSLFlags&nbsp;=&nbsp;0<BR>AccessSSLMapCert&nbsp;=&nbsp;False<BR>AccessSSLNegotiateCert&nbsp;=&nbsp;False<BR>AccessSSLRequireCert&nbsp;=&nbsp;False<BR>AccessWrite&nbsp;=&nbsp;False<BR>AdminACLBin&nbsp;=&nbsp;<BR>AnonymousPasswordSync&nbsp;=&nbsp;True<BR>AnonymousUserName&nbsp;=&nbsp;IUSR_THINKPAD-X22<BR>AnonymousUserPass&nbsp;=&nbsp;h0jJJ:AA$8|~*0<BR>AppAllowClientDebug&nbsp;=&nbsp;False<BR>AppAllowDebugging&nbsp;=&nbsp;False<BR>AppFriendlyName&nbsp;=&nbsp;默认应用程序<BR>AppOopRecoverLimit&nbsp;=&nbsp;-1<BR>AppPoolId&nbsp;=&nbsp;DefaultAppPool<BR>AppWamClsid&nbsp;=&nbsp;<BR>AspAllowOutOfProcComponents&nbsp;=&nbsp;True<BR>AspAllowSessionState&nbsp;=&nbsp;True<BR>AspAppServiceFlags&nbsp;=&nbsp;0<BR>AspBufferingLimit&nbsp;=&nbsp;4194304<BR>AspBufferingOn&nbsp;=&nbsp;True<BR>AspCalcLineNumber&nbsp;=&nbsp;True<BR>AspCodepage&nbsp;=&nbsp;0<BR>AspDiskTemplateCacheDirectory&nbsp;=&nbsp;%windir%\system32\inetsrv\ASP&nbsp;Compiled&nbsp;Templates<BR>AspEnableApplicationRestart&nbsp;=&nbsp;True<BR>AspEnableAspHtmlFallback&nbsp;=&nbsp;False<BR>AspEnableChunkedEncoding&nbsp;=&nbsp;True<BR>AspEnableParentPaths&nbsp;=&nbsp;False<BR>AspEnableSxs&nbsp;=&nbsp;False<BR>AspEnableTracker&nbsp;=&nbsp;False<BR>AspEnableTypelibCache&nbsp;=&nbsp;True<BR>AspErrorsToNTLog&nbsp;=&nbsp;False<BR>AspExceptionCatchEnable&nbsp;=&nbsp;True<BR>AspExecuteInMTA&nbsp;=&nbsp;0<BR>AspKeepSessionIDSecure&nbsp;=&nbsp;0<BR>AspLCID&nbsp;=&nbsp;2048<BR>AspLogErrorRequests&nbsp;=&nbsp;True<BR>AspMaxDiskTemplateCacheFiles&nbsp;=&nbsp;2000<BR>AspMaxRequestEntityAllowed&nbsp;=&nbsp;204800<BR>AspPartitionID&nbsp;=&nbsp;<BR>AspProcessorThreadMax&nbsp;=&nbsp;25<BR>AspQueueConnectionTestTime&nbsp;=&nbsp;3<BR>AspQueueTimeout&nbsp;=&nbsp;-1<BR>AspRequestQueueMax&nbsp;=&nbsp;3000<BR>AspRunOnEndAnonymously&nbsp;=&nbsp;True<BR>AspScriptEngineCacheMax&nbsp;=&nbsp;250<BR>AspScriptErrorMessage&nbsp;=&nbsp;处理&nbsp;URL&nbsp;时服务器出错。请与系统管理员联系。<BR>AspScriptErrorSentToBrowser&nbsp;=&nbsp;True<BR>AspScriptFileCacheSize&nbsp;=&nbsp;500<BR>AspScriptLanguage&nbsp;=&nbsp;VBScript<BR>AspScriptTimeout&nbsp;=&nbsp;90<BR>AspSessionMax&nbsp;=&nbsp;-1<BR>AspSessionTimeout&nbsp;=&nbsp;20<BR>AspSxsName&nbsp;=&nbsp;<BR>AspTrackThreadingModel&nbsp;=&nbsp;False<BR>AspUsePartition&nbsp;=&nbsp;False<BR>AuthAdvNotifyDisable&nbsp;=&nbsp;True<BR>AuthAnonymous&nbsp;=&nbsp;True<BR>AuthBasic&nbsp;=&nbsp;False<BR>AuthChangeDisable&nbsp;=&nbsp;True<BR>AuthChangeUnsecure&nbsp;=&nbsp;False<BR>AuthChangeURL&nbsp;=&nbsp;/iisadmpwd/achg.asp<BR>AuthExpiredUnsecureURL&nbsp;=&nbsp;/iisadmpwd/aexp3.asp<BR>AuthExpiredURL&nbsp;=&nbsp;/iisadmpwd/aexp.asp<BR>AuthFlags&nbsp;=&nbsp;1<BR>AuthMD5&nbsp;=&nbsp;False<BR>AuthNotifyPwdExpUnsecureURL&nbsp;=&nbsp;/iisadmpwd/anot3.asp<BR>AuthNotifyPwdExpURL&nbsp;=&nbsp;/iisadmpwd/anot.asp<BR>AuthNTLM&nbsp;=&nbsp;False<BR>AuthPassport&nbsp;=&nbsp;False<BR>AuthPersistence&nbsp;=&nbsp;64<BR>AuthPersistSingleRequest&nbsp;=&nbsp;True<BR>AzEnable&nbsp;=&nbsp;False<BR>AzImpersonationLevel&nbsp;=&nbsp;0<BR>AzScopeName&nbsp;=&nbsp;<BR>AzStoreName&nbsp;=&nbsp;<BR>CacheControlCustom&nbsp;=&nbsp;<BR>CacheControlMaxAge&nbsp;=&nbsp;0<BR>CacheControlNoCache&nbsp;=&nbsp;False<BR>CacheISAPI&nbsp;=&nbsp;True<BR>Caption&nbsp;=&nbsp;<BR>CGITimeout&nbsp;=&nbsp;300<BR>ContentIndexed&nbsp;=&nbsp;True<BR>CreateCGIWithNewConsole&nbsp;=&nbsp;False<BR>CreateProcessAsUser&nbsp;=&nbsp;True<BR>DefaultDoc&nbsp;=&nbsp;Default.htm,Default.asp,index.htm,iisstart.htm,Default.aspx<BR>DefaultDocFooter&nbsp;=&nbsp;<BR>DefaultLogonDomain&nbsp;=&nbsp;<BR>Description&nbsp;=&nbsp;<BR>DirBrowseFlags&nbsp;=&nbsp;1073741886<BR>DirBrowseShowDate&nbsp;=&nbsp;True<BR>DirBrowseShowExtension&nbsp;=&nbsp;True<BR>DirBrowseShowLongDate&nbsp;=&nbsp;True<BR>DirBrowseShowSize&nbsp;=&nbsp;True<BR>DirBrowseShowTime&nbsp;=&nbsp;True<BR>DisableStaticFileCache&nbsp;=&nbsp;False<BR>DoDynamicCompression&nbsp;=&nbsp;False<BR>DontLog&nbsp;=&nbsp;False<BR>DoStaticCompression&nbsp;=&nbsp;False<BR>EnableDefaultDoc&nbsp;=&nbsp;True<BR>EnableDirBrowsing&nbsp;=&nbsp;False<BR>EnableDocFooter&nbsp;=&nbsp;False<BR>EnableReverseDns&nbsp;=&nbsp;False<BR>FrontPageWeb&nbsp;=&nbsp;False</DIV>]]></description>
		</item>
		
</channel>
</rss>