﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-Kanas.Net Blog</title><link>http://www.cnblogs.com/Barton131420/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 06 Jul 2009 13:36:17 GMT</lastBuildDate><pubDate>Mon, 06 Jul 2009 13:36:17 GMT</pubDate><ttl>60</ttl><item><title>ASP.NET MVC + ADO.NET EF 项目实战（一）：应用程序布局设计</title><link>http://www.cnblogs.com/Barton131420/archive/2009/04/26/1443840.html</link><dc:creator>双鱼座</dc:creator><author>双鱼座</author><pubDate>Sun, 26 Apr 2009 03:49:00 GMT</pubDate><guid>http://www.cnblogs.com/Barton131420/archive/2009/04/26/1443840.html</guid><wfw:comment>http://www.cnblogs.com/Barton131420/comments/1443840.html</wfw:comment><comments>http://www.cnblogs.com/Barton131420/archive/2009/04/26/1443840.html#Feedback</comments><slash:comments>23</slash:comments><wfw:commentRss>http://www.cnblogs.com/Barton131420/comments/commentRss/1443840.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Barton131420/services/trackbacks/1443840.html</trackback:ping><description><![CDATA[<p><strong>什么叫上下文？</strong></p>
<p>在你设计一个方法的时候，无法直接从方法参数或实例成员(字段或属性)获得的所有信息都是上下文。例如：</p>
<ul>
    <li>当前用户是谁？  </li>
    <li>刚才提供操作的数据库连接实例从哪里拿到？  </li>
    <li>这个方法从哪个 View 或者哪个 Controller 调用的？</li>
</ul>
<p>当然，在方法体中获得上下文最终还是要靠方法参数或实例成员。</p>
<p>在MVC中有大量的上下文信息，例如：</p>
<ul>
    <li>ControllerContext  </li>
    <li>ViewContext  </li>
    <li>ModelBindingContext  </li>
    <li>ExceptionContext  </li>
    <li>ActionExcutingContext  </li>
    <li>ActionExcutedContext  </li>
    <li>AuthorizationContext  </li>
    <li>ResultExcutingContext  </li>
    <li>ResultExcutedContext</li>
</ul>
<p>这些上下文通过单一的参数提供了丰富的运行时信息。</p>
<p><strong>实体上下文放到哪里？</strong></p>
<p>除了MVC的上下文外，还有一个重要的上下文就是 ADO.NET EF的实体上下文，通常派生自System.Data.Objects.ObjectContext，都是由IDE自动生成的。这个上下文承载了数据库连接，需要通过IDisposable来释放连接。多数情况下，我们这样使用：</p>
<blockquote>
<p>using(MyEntities context = new MyEntities())<br />
{<br />
&#8230;&#8230; 在这里写入代码<br />
}</p>
</blockquote>
<p>如果在一次页面生命周期内只使用一次实体上下文这样处理是非常合适的，但是事实上不都是这样。更多的时候可能需要临时对实体进行一个小的访问，例如获得一个当前用户的显示名，通过这种方式访问就代价太大了。 </p>
<p>我们知道，这个上下文可以存放到HttpContext里。在HttpContext的所有容器中，只有Items是最合适的，因为这个属性的存续期在后台页面对象释放后就结束了。当然，被释放时也不会执行IDisposable的Dispose方法。我们仍然需要在Global.asax中捕捉EndRequest事件。但是奇妙的是：在ASP.NET MVC Application中<em>不能使用event方式来捕捉，只能手工写Application_EndRequest方法</em>。</p>
<p><strong>什么是一次Model、二次Model和Form Model？</strong></p>
<p>Model一共分为三种：</p>
<ul>
    <li>直接数据库实体映射实例，如Product(产品)  </li>
    <li>为View的呈现提供服务的包装对象，如ProductInfo(产品信息)  </li>
    <li>为Post回传提供服务的包装对象，如ProductForm(产品属性值)</li>
</ul>
<p>第一种类型Model的特点是非常浓缩，几乎没有冗余，通过复杂的关系进行组合，通常需要通过多个不同类型的实例进行组合来表达一个完整的有意义的场景。例如，一个产品信息可能包含产品名称、产品类别、该产品所有的规格型号以及每种规格型号的参数、单价等。虽然ADO.NET EF提供了获取组合属性的能力，但不能处理多层次，并且不能对加载过程进行控制。所以，需要专门定义一些Model对这一组Model进行包装。如果把原始的模型称做&#8220;一次Model&#8221;，则可以把这个包装对象称做&#8220;二次Model&#8221;。</p>
<p>页面上收集到的Form信息，通过三种方式传递到Controller(以登录为例)：</p>
<ul>
    <li>每个信息项一个参数：public ActionResult Login(string userName, string password){&#8230;}  </li>
    <li>一个单一的名值对参数：public ActionResult Login(FormCollection formCollection){&#8230;}  </li>
    <li>一个单一的包装对象：public ActionResult Login(LoginInfo info){&#8230;}</li>
</ul>
<p>第一种方式不利于重构。当需要加入一个参数时，必须修改Action的签名。而且也无法令Controller把值传递到View。第二种方式不利于设计时纠错，因为FormCollection中的值不是强类型的。所以，我们通常都会采用第三种方式。虽然ADO.NET EF对象可以直接作为Form Model，并且有BindAttribute对属性与Form值进行定制化的绑定，但是不够灵活，如果一个Form组合跨多个一次Model类型，则根本无法处理。所以我们有必要专门定义一个Model给View使用。我们不妨称之为&#8220;Form Model&#8221;。</p>
<p><strong>业务逻辑放到什么地方？</strong></p>
<p>MVC是一种&#8220;古老&#8221;的设计模式，提供了非常自然的分层方式，这也是为什么利于单元测试的原因。除了MVC这些&#8220;主层&#8221;以外，BLL可以算是一个&#8220;亚层&#8221;。那么，我们把BLL放到什么地方最合适？</p>
<p>BLL需要完全可见Model层，同时也需要一些上下文信息。例如，我们至少从我们刚才描述的论题中发现，需要从HttpContext的Items中获得实体上下文。有些时候，我们还需要将用户的一些登录信息缓存到HttpContext中，如果用户的登录信息非常复杂的话，仅仅依靠HttpContext.User.Identity.Name每次去抓取未必很合算。我的习惯是把和这个用户相关的信息组合到一个大的Model对象中，并把这个对象的实例 存放到HttpContext.Cache中。如果有任何变化，释放这个Cache项即可。</p>
<p>所以，对于业务逻辑的位置你可以有两个选择：</p>
<ul>
    <li>放到 Model 下，再建立一个&#8220;上下文提供器接口&#8221;，由 Model 借助上下文来独立处理。</li>
    <li>放到 Controller 下，直接使用 Controller 提供的上下文来进行处理。</li>
</ul>
<p>第一种方式不依赖Controller，解耦彻底，非常灵活，更易于测试。但是需要付出一定的成本，调用栈会稍深一点，还需要劳神处理到Controller与BLLContext间的关系。第二种方式解耦不够彻底，但非常简捷，比较适合 Controller 与 Model 不必彻底解耦的小型项目。有意思的是：ASP.NET MVC Application模板所生成的AccountController采用的就是第二种方式。</p>
<p>ADO.NET EF仅影响ASP.NET MVC的Model层。在Model层中除了EDMX自动生成的一次Model外，我们还需要建立大量的二次Model和Form Model。当然，从提升内聚度考虑，所有的业务逻辑方法都在这些Model中定义，特别是，可以利用partial类和扩展方法这两种手段加入业务逻辑。</p><img src ="http://www.cnblogs.com/Barton131420/aggbug/1443840.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48008/" target="_blank">IBM发布全球首款开源智能编译器</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>用asp.net mvc写一个后台文件上传</title><link>http://www.cnblogs.com/Barton131420/archive/2009/03/29/1424516.html</link><dc:creator>双鱼座</dc:creator><author>双鱼座</author><pubDate>Sun, 29 Mar 2009 10:18:00 GMT</pubDate><guid>http://www.cnblogs.com/Barton131420/archive/2009/03/29/1424516.html</guid><wfw:comment>http://www.cnblogs.com/Barton131420/comments/1424516.html</wfw:comment><comments>http://www.cnblogs.com/Barton131420/archive/2009/03/29/1424516.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cnblogs.com/Barton131420/comments/commentRss/1424516.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Barton131420/services/trackbacks/1424516.html</trackback:ping><description><![CDATA[<p>因为要在一个asp.net mvc应用程序中用到一个富文本编辑器，需要后台上传文件或图片，所以动手写了一个。我也曾经想通过Ajax来实现，看来确实有一定的难度。</p>
<p>参考了以下文档：</p>
<p>A.<a href="http://www.cnblogs.com/csharpsharper/archive/2008/08/07/uploadfilewithiframe.html">实现一个Ajax模式的文件上传有多难？&nbsp;</a></p>
<p>B.<a href="http://demo.tc/view.aspx?id=497">ASP.NET MVC 檔案上傳下載是很方便的</a></p>
<p>如果你也有这样的需求，你不妨直接<a href="http://files.cnblogs.com/Barton131420/MvcFileUpload.rar">下载</a>下来看看。</p>
<p>再讲多两句话。 <br />
</p>
<p>第一句话，由于HttpPostedFileBase本身已经区分了文件的MIME类型，所以在生成插入到tinyMCE元素的时候会根据是否为image来确定是&lt;img&gt;元素还是&lt;a&gt;元素。这一点可供参考文档A反参考。<br />
</p>
<p>第二句话， 不知道是基于什么原因，asp.net mvc的JavaScriptResult会给输出补上&lt;pre&gt;元素，导致脚本不能在嵌套页面中自动运行。<br />
</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/Barton131420/aggbug/1424516.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48007/" target="_blank">IE颓势不减 微软下月公布最新浏览器架构</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>ORM漫谈</title><link>http://www.cnblogs.com/Barton131420/archive/2008/12/01/1345314.html</link><dc:creator>双鱼座</dc:creator><author>双鱼座</author><pubDate>Mon, 01 Dec 2008 14:45:00 GMT</pubDate><guid>http://www.cnblogs.com/Barton131420/archive/2008/12/01/1345314.html</guid><wfw:comment>http://www.cnblogs.com/Barton131420/comments/1345314.html</wfw:comment><comments>http://www.cnblogs.com/Barton131420/archive/2008/12/01/1345314.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://www.cnblogs.com/Barton131420/comments/commentRss/1345314.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Barton131420/services/trackbacks/1345314.html</trackback:ping><description><![CDATA[<p>  还是以前那句话，我不喜欢ORM这个词，但是更多的时候又不得不用。</p>
<p>看到园友写的&#8220; <a href="http://www.cnblogs.com/birdshover/archive/2008/12/01/1345068.html">ORM是进化还是倒退？</a>&#8221;的文章，禁不住想说上几句。其实进化(或者进步?)或者倒退(或者退化?)是没有一个清晰标准的，追求这个进步或者倒退实在也没有什么意义。但是这个标题很惹人，很多年轻人很容易受到蛊惑，所以我必须站起来提醒一下他们。<br />
</p>
<p>ORM可以理解成object-relation-mapping，其实结构就是api-database-model。很多人理解的ORM就是database&#8594;model&#8594;api。事实上这样很自然，一直以来大家都是从数据库设计开始一个系统的。所以各种基于数据库的代码生成器非常盛行，以至于linq2sql和ADOEF(或者有人叫linq2entity)也是数据库先行。但是我之前所经历的ORM却反而鲜见这种模式，所以我一直都没有习惯过来。</p>
<p>最早接触ORM这个词，还是在1999~2001年前后混迹大富翁论坛的时候(那应该也是大富翁论坛最鼎盛的时候)。有一群牛人把java中的一些概念搬到Delphi上，的确让人大开眼界。现在去看，还能看到过去的一些痕迹。没有多久，Delphi上有了正式的ORM产品。首先出炉的是一个叫ModelMaker的MDA工具，有自己的Modeling GUI，从建模到api，浑然一体。MM以后，Bold for Delphi也慢慢火起来，这个基于UML的东东没有自己的Modeling GUI，但是可以使用当时流行的Rose或Together建模的成果。无论是MM还是BFD，都完全当数据库是一个透明的东西。这一类ORM模式是model&#8594;api&#8594;database，你几乎没有机会干预数据库的定义、生成 和操作。我说这是&#8220;纯&#8221;的orm。纯倒是纯了，彻底的OO了，但是你回头看一下生成的数据库，无字天书，比现如今sharepoint生成的数据库还丑陋。遇到想做数据挖掘的用户，只能是欲哭无泪了。在这方面，我承认其后来者ECO有了明显的改善，所以我一直相信ECO是一个伟大的产品，只是我用不起而已。</p>
<p>我认识Hibernate是在2003年，后来我一直当Hibernate是JDO的一个非EJB解决方案。Hibernate的确是按配置行事，先有数据库，当时仍然需要手工写一堆entity代码。一群懒人不屑做一些简单重复的事情，自动生成这些配置文件，从此开了&#8220;代码自动生成&#8221;的先河。哈哈，如果你讨厌&#8220;自动代码生成&#8221;，去找这些家伙们算账吧，他们身在曹营心在汉，搞java的居然做这么m$的事情，受点委曲也是应该的。所以，Hibernate是一个兼顾database的方案，也是database&#8594;model&#8594;api，尽管这个api其实是一堆配置。</p>
<p>你烦了当数据库变化以后，model和api的自动同步，我可以接受。不过想一想呢，同步model和api总是有一些好的解决方案。如果你用面向过程的方式，model是没有了，不需要同步了，但是那些api可都是一堆堆的sql语句，我不知道你可以用什么方式来同步。所以，无论OO也罢，PO以罢，进化也好，退化也好，都不是你想讨论的。你无非想要一个比较敏捷一点的方案罢了，如果你喜欢OO，当然你会选择ORM；反之，如果你喜欢PO，你也可以创造一个PRM(procedure-relation-mapping，我相信这个东东一定是可以做到的)。所以，不要告诉我什么OO与Database不匹配的话题，虽然我中意OO但我从来都认为db4o不会成功。database和OO所解决的问题完全不在一个领域，两者的功能是无法相互替代的。</p>
<p>我可是在.net下用了N年的ORM，虽然跌跌撞撞也罢，至少我明白我要的是什么，而市面上的东西其中缺什么。对于我来说，好的ORM产品必须具备以下因素：<br />
</p>
<ul>
    <li>必须一切从模型开始，无论你是UML也罢，ER也罢，都可以。有Modeling GUI也好，没有的话Hosting一个Addin到IDE也行。<br />
    </li>
    <li>必须有自动代码生成，并且既能生成api代码，也能生成sql脚本。当你的数据模型变化以后，改完model，你只需要按几个键，然后所有的一切都有工具帮你搞定(当然包括数据库结构重定义和测试数据自动导入)。 <br />
    </li>
    <li>功能上必须提供足够的数据操作，性能可靠。必须支持引用、继承和关联三种关系，且继承关系必须是一表一类。</li>
    <li>除了能传递数据，还必须能够传递&#8220;条件包&#8221;，当然，运行时的东东，可以是linq的expression也可以是hibernate的criteria。这是分层操作和分布式操作所必须的。<br />
    </li>
    <li>虽然通用的方式是以实体为类型、数据行为实例，也可以是以实体为组件(component)，而隐含行，但需要确保引用、继承和关联关系。</li>
</ul>
<p>检查一下ADOEF，头一条就不符合，所以我只能放弃。ORM不会为我提供最好的性能、最好的设计，但是因为其敏捷性，会为我提供最好的产能，特别是在业务复杂的时候。如果不是为了产能，ORM也没有什么生命力。<br />
</p>
<p>别嚷嚷ORM不是万能的。谁都没有说过有什么东西是万能的。如果你都不访问数据库，你当然不需要ORM了，所以不会有人说ORM是万能的。只有傻瓜才相信有人真的说过。<br />
</p>
别嚷嚷OO不是万能的。谁都没有说过有什么东西是万能的。如果你都不需要处理复杂的关系，你当然不需要OO了，所以不会有人说OO是万能的。只有傻瓜才相信有人真的说过。<img src ="http://www.cnblogs.com/Barton131420/aggbug/1345314.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48002/" target="_blank">竞争日趋激烈 微软欲借 Windows 7 扭转战局</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>对Delphi 7/Delphi 2007的Windows服务类库的一个小改进</title><link>http://www.cnblogs.com/Barton131420/archive/2008/03/01/1087382.html</link><dc:creator>双鱼座</dc:creator><author>双鱼座</author><pubDate>Sat, 01 Mar 2008 09:54:00 GMT</pubDate><guid>http://www.cnblogs.com/Barton131420/archive/2008/03/01/1087382.html</guid><wfw:comment>http://www.cnblogs.com/Barton131420/comments/1087382.html</wfw:comment><comments>http://www.cnblogs.com/Barton131420/archive/2008/03/01/1087382.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/Barton131420/comments/commentRss/1087382.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Barton131420/services/trackbacks/1087382.html</trackback:ping><description><![CDATA[<p>Windows 2000<span style="font-family: 宋体">以上的</span>Windows<span style="font-family: 宋体">版本所支持的</span>Windows<span style="font-family: 宋体">服务的功能有所改进，其变化体现在</span>AdvApi32.dll<span style="font-family: 宋体">中。其新增的函数包括：</span></p>
<ul>
    <li>ChangeServiceConfig2</li>
    <li>
    <div style="margin-left: 21pt; text-indent: -21pt">QueryServiceConfig2</div>
    <li>
    <div style="margin-left: 21pt; text-indent: -21pt">EnumServicesStatusEx</div>
    <li>
    <div style="margin-left: 21pt; text-indent: -21pt">QueryServiceStatusEx</div>
    <li>
    <div style="margin-left: 21pt; text-indent: -21pt">RegisterServiceCtrlHandlerEx</div>
    <li>
    <div style="margin-left: 21pt; text-indent: -21pt">NotifyServiceStatusChange</div>
    <li>
    <div style="margin-left: 21pt; text-indent: -21pt">ControlServiceEx</div>
    </li>
</ul>
<p><span style="font-family: 宋体">这些函数在最新版本的</span>MSDN<span style="font-family: 宋体">文档中有详细记载。这些改进对我们编写</span>Windows<span style="font-family: 宋体">服务的主要影响有：</span></p>
<p><span style="font-family: 宋体">首先，最大的好处在于，以往在</span>ServiceMain<span style="font-family: 宋体">中调用</span>RegisterServiceCtrlHandler<span style="font-family: 宋体">的时候，所注册的</span>ServiceController<span style="font-family: 宋体">例程只有一个参数，就是控制码。在很多情况下，这是不够的。换句话说，如果需要注册一段共享的</span>ServiceController<span style="font-family: 宋体">代码，是无法做到的。例如</span>Delphi<span style="font-family: 宋体">的</span>Windows<span style="font-family: 宋体">服务架构在处理这个问题的时候就不太方便，一个</span>Windows<span style="font-family: 宋体">服务应用程序就只有有一个</span>ServiceController<span style="font-family: 宋体">例程，并且该例程只能访问全局上下文。而新的</span>RegisterServiceCtrlHandlerEx<span style="font-family: 宋体">所注册的</span>ServiceController<span style="font-family: 宋体">例程一共有四个参数：控制码、事件类型、事件数据和外部上下文。特别是这个上下文，非常方便在</span>ServiceController<span style="font-family: 宋体">中访问单独的私有的类实例代码。我没有</span>Delphi2007<span style="font-family: 宋体">的</span>WinSvc<span style="font-family: 宋体">的源码，但我根据编译时的提示，判定估计该类库没有更新。</span></p>
<p><span style="font-family: 宋体">其次，在调用</span>ControlService<span style="font-family: 宋体">的时候，只能控制服务的状态，而</span>ControlServiceEx<span style="font-family: 宋体">还可以加注进行这些控制的原因。</span></p>
<p><span style="font-family: 宋体">再次</span>, QueryServiceStatusEx<span style="font-family: 宋体">可以查询相关进程的信息。</span></p>
<p><span style="font-family: 宋体">最后，在登记</span>Windows<span style="font-family: 宋体">服务后，可以进一步修改配置，例如，</span>Delphi<span style="font-family: 宋体">的</span>Windows<span style="font-family: 宋体">服务架构无法设置</span>Windows<span style="font-family: 宋体">服务的描述。</span>JEDI<span style="font-family: 宋体">类库虽然也可以设置描述，但是却是通过修改注册器来实现的。而</span>ChangeServiceConfig2<span style="font-family: 宋体">可以很简单地解决这个问题。此外，还可以设置在</span>Windows<span style="font-family: 宋体">启动或停止失败后，可以指定运行某个活动</span>(<span style="font-family: 宋体">例如，可以重启或者执行某个命令</span>)<span style="font-family: 宋体">。</span></p>
<p><span style="font-size: 10.5pt; font-family: 宋体">附件中<a href="http://www.cnblogs.com/Files/Barton131420/WinSvc.rar">文件</a>包括一个源文件和一个</span><span style="font-size: 10.5pt; font-family: 'Calibri','sans-serif'">DCU</span><span style="font-size: 10.5pt; font-family: 宋体">文件，在</span><span style="font-size: 10.5pt; font-family: 'Calibri','sans-serif'">Delphi7</span><span style="font-size: 10.5pt; font-family: 宋体">下测试通过。最简单的办法是：将</span><span style="font-size: 10.5pt; font-family: 'Calibri','sans-serif'">WinSvc.Pas</span><span style="font-size: 10.5pt; font-family: 宋体">文件复制到</span><span style="font-size: 10.5pt; font-family: 'Calibri','sans-serif'">C:\Program Files\Borland\Delphi7\Source\Rtl\Win</span><span style="font-size: 10.5pt; font-family: 宋体">下，将</span><span style="font-size: 10.5pt; font-family: 'Calibri','sans-serif'">WinSvc.dcu</span><span style="font-size: 10.5pt; font-family: 宋体">文件复制到</span><span style="font-size: 10.5pt; font-family: 'Calibri','sans-serif'">C:\Program Files\Borland\Delphi7\Lib</span><span style="font-size: 10.5pt; font-family: 宋体">下，分别替换掉原来的文件即可</span><span style="font-size: 10.5pt; font-family: 'Calibri','sans-serif'">(</span><span style="font-size: 10.5pt; font-family: 宋体">安全起见，建议将原来的文件换个名称备份</span><span style="font-size: 10.5pt; font-family: 'Calibri','sans-serif'">)</span><span style="font-size: 10.5pt; font-family: 宋体">。</span></p>
 <img src ="http://www.cnblogs.com/Barton131420/aggbug/1087382.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>案例分析：面向对象得失论</title><link>http://www.cnblogs.com/Barton131420/archive/2007/11/04/948968.html</link><dc:creator>双鱼座</dc:creator><author>双鱼座</author><pubDate>Sun, 04 Nov 2007 08:22:00 GMT</pubDate><guid>http://www.cnblogs.com/Barton131420/archive/2007/11/04/948968.html</guid><wfw:comment>http://www.cnblogs.com/Barton131420/comments/948968.html</wfw:comment><comments>http://www.cnblogs.com/Barton131420/archive/2007/11/04/948968.html#Feedback</comments><slash:comments>32</slash:comments><wfw:commentRss>http://www.cnblogs.com/Barton131420/comments/commentRss/948968.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Barton131420/services/trackbacks/948968.html</trackback:ping><description><![CDATA[摘要: 本文通过一个真实案例，探讨面向对象方法在项目实践中的意义。&nbsp;&nbsp;<a href='http://www.cnblogs.com/Barton131420/archive/2007/11/04/948968.html'>阅读全文</a><img src ="http://www.cnblogs.com/Barton131420/aggbug/948968.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48000/" target="_blank">数万名网友签名抗议星际争霸2取消局域网功能</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>闲话时间调度算法</title><link>http://www.cnblogs.com/Barton131420/archive/2007/08/29/874531.html</link><dc:creator>双鱼座</dc:creator><author>双鱼座</author><pubDate>Wed, 29 Aug 2007 06:16:00 GMT</pubDate><guid>http://www.cnblogs.com/Barton131420/archive/2007/08/29/874531.html</guid><wfw:comment>http://www.cnblogs.com/Barton131420/comments/874531.html</wfw:comment><comments>http://www.cnblogs.com/Barton131420/archive/2007/08/29/874531.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/Barton131420/comments/commentRss/874531.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Barton131420/services/trackbacks/874531.html</trackback:ping><description><![CDATA[摘要: 本文讨论延时控制逻辑中的某些细节。&nbsp;&nbsp;<a href='http://www.cnblogs.com/Barton131420/archive/2007/08/29/874531.html'>阅读全文</a><img src ="http://www.cnblogs.com/Barton131420/aggbug/874531.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47999/" target="_blank">Silverlight打造杰克逊纪念专题</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>2007体检结果出来了</title><link>http://www.cnblogs.com/Barton131420/archive/2007/06/30/801322.html</link><dc:creator>双鱼座</dc:creator><author>双鱼座</author><pubDate>Sat, 30 Jun 2007 05:51:00 GMT</pubDate><guid>http://www.cnblogs.com/Barton131420/archive/2007/06/30/801322.html</guid><description><![CDATA[摘要: 2007-6-23进行了体检,今天出来结果。总的情况还不错。体检结论是：1.乙肝无感染；2.甘油三脂高。医生建议是：1.应注射乙肝疫苗(三针)；2.应低脂饮食，勿饮酒；3.控制体重，适当加强体育锻炼；4.定期复查血脂。常规 项目 结果值 身高 168cm 体重 89kg 左视力(裸) 1.2 右视力(裸) 1.2 色盲 正常 血压 110/70mmHg 尿液pH值 6.0 生化检测结果 项目 结果&nbsp;&nbsp;<a href='http://www.cnblogs.com/Barton131420/archive/2007/06/30/801322.html'>阅读全文</a><img src ="http://www.cnblogs.com/Barton131420/aggbug/801322.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47998/" target="_blank">传诺基亚正在开发Android手机</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>在ASP.NET应用程序中捕捉身份验证状态的变化</title><link>http://www.cnblogs.com/Barton131420/archive/2007/03/11/670761.html</link><dc:creator>双鱼座</dc:creator><author>双鱼座</author><pubDate>Sat, 10 Mar 2007 20:39:00 GMT</pubDate><guid>http://www.cnblogs.com/Barton131420/archive/2007/03/11/670761.html</guid><wfw:comment>http://www.cnblogs.com/Barton131420/comments/670761.html</wfw:comment><comments>http://www.cnblogs.com/Barton131420/archive/2007/03/11/670761.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/Barton131420/comments/commentRss/670761.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Barton131420/services/trackbacks/670761.html</trackback:ping><description><![CDATA[摘要: 讨论在ASP.NET应用中以最灵活、最解耦的方式捕获通过身份验证和注销身份验证的事件。&nbsp;&nbsp;<a href='http://www.cnblogs.com/Barton131420/archive/2007/03/11/670761.html'>阅读全文</a><img src ="http://www.cnblogs.com/Barton131420/aggbug/670761.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47996/" target="_blank">7月编程语言排行榜</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>以非泛型方式调用泛型方法</title><link>http://www.cnblogs.com/Barton131420/archive/2007/02/07/643026.html</link><dc:creator>双鱼座</dc:creator><author>双鱼座</author><pubDate>Wed, 07 Feb 2007 02:13:00 GMT</pubDate><guid>http://www.cnblogs.com/Barton131420/archive/2007/02/07/643026.html</guid><wfw:comment>http://www.cnblogs.com/Barton131420/comments/643026.html</wfw:comment><comments>http://www.cnblogs.com/Barton131420/archive/2007/02/07/643026.html#Feedback</comments><slash:comments>20</slash:comments><wfw:commentRss>http://www.cnblogs.com/Barton131420/comments/commentRss/643026.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Barton131420/services/trackbacks/643026.html</trackback:ping><description><![CDATA[摘要: 在一些特定场合需要对泛型方法进行非泛型包装以解决运行时才能确定泛型类型的情况以解决类型冲突，并适度兼顾性能。本文的创意由装配脑袋提供，我个人仅仅是实现他的创意而已。&nbsp;&nbsp;<a href='http://www.cnblogs.com/Barton131420/archive/2007/02/07/643026.html'>阅读全文</a><img src ="http://www.cnblogs.com/Barton131420/aggbug/643026.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47995/" target="_blank">Google Voice 上手</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>ORM之硬伤</title><link>http://www.cnblogs.com/Barton131420/archive/2007/01/07/613955.html</link><dc:creator>双鱼座</dc:creator><author>双鱼座</author><pubDate>Sun, 07 Jan 2007 04:19:00 GMT</pubDate><guid>http://www.cnblogs.com/Barton131420/archive/2007/01/07/613955.html</guid><wfw:comment>http://www.cnblogs.com/Barton131420/comments/613955.html</wfw:comment><comments>http://www.cnblogs.com/Barton131420/archive/2007/01/07/613955.html#Feedback</comments><slash:comments>70</slash:comments><wfw:commentRss>http://www.cnblogs.com/Barton131420/comments/commentRss/613955.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/Barton131420/services/trackbacks/613955.html</trackback:ping><description><![CDATA[摘要: 园子里有些人，他们真以为自己明白了面向对象，然后装着满腹经纶，侃侃而谈，一篇接一篇，不厌其烦地喊着ORM如何如何。&nbsp;&nbsp;<a href='http://www.cnblogs.com/Barton131420/archive/2007/01/07/613955.html'>阅读全文</a><img src ="http://www.cnblogs.com/Barton131420/aggbug/613955.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47994/" target="_blank">Google号召社区力量为互联网加速</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item></channel></rss>