<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>鸟鸟居 &#187; 技术研究</title>
	<atom:link href="http://www.birdwang.com/category/tech/feed" rel="self" type="application/rss+xml" />
	<link>http://www.birdwang.com</link>
	<description>天高任鸟飞</description>
	<lastBuildDate>Sat, 31 Oct 2009 17:12:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>FreeBSD 的 Ports 系统</title>
		<link>http://www.birdwang.com/276.html</link>
		<comments>http://www.birdwang.com/276.html#comments</comments>
		<pubDate>Mon, 29 Sep 2008 19:15:31 +0000</pubDate>
		<dc:creator>飞鸟真</dc:creator>
				<category><![CDATA[技术研究]]></category>
		<category><![CDATA[freebsd]]></category>

		<guid isPermaLink="false">http://www.birdwang.com/?p=276</guid>
		<description><![CDATA[什么是 Ports 系统 简单的讲，一个 port 就是一个被移植到了 FreeBSD 上的软件。所有这些软件的集合，加上 FreeBSD 处理这些软件的各种工具，就是 Ports 系统。 Ports 系统有什么用 每一个被移植到 FreeBSD 上的软件（就是 Port），都能通过 Ports 系统中的工具方便有序的安装，升级，卸载。而且符合 FreeBSD 系统对应用软件施加的各种规范。免去了你到处寻找软件，自己编译，安装，升级的麻烦。借助这些 ports 维护者的努力，你也不用担心这些软件与系统不兼容导致无法安装升级等等。 怎么安装 Ports 系统 有三种方法来安装 Ports 系统： 1 安装系统时选择安装 Ports 系统 这是最简单的方法，但是也有缺点。因为 Ports 系统总是随时更新的。因此你从安装光盘上安装的 Ports 系统肯定不是最新的了。 2 &#8230; <a href="http://www.birdwang.com/276.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>什么是 Ports 系统</p>
<p>简单的讲，一个 port 就是一个被移植到了 FreeBSD 上的软件。所有这些软件的集合，加上 FreeBSD 处理这些软件的各种工具，就是 Ports 系统。<br />
Ports 系统有什么用</p>
<p>每一个被移植到 FreeBSD 上的软件（就是 Port），都能通过 Ports 系统中的工具方便有序的安装，升级，卸载。而且符合 FreeBSD 系统对应用软件施加的各种规范。免去了你到处寻找软件，自己编译，安装，升级的麻烦。借助这些 ports 维护者的努力，你也不用担心这些软件与系统不兼容导致无法安装升级等等。<br />
怎么安装 Ports 系统</p>
<p><span id="more-276"></span></p>
<p>有三种方法来安装 Ports 系统：<br />
1 安装系统时选择安装 Ports 系统</p>
<p>这是最简单的方法，但是也有缺点。因为 Ports 系统总是随时更新的。因此你从安装光盘上安装的 Ports 系统肯定不是最新的了。<br />
2 使用 portsnap 安装/同步 ports 系统</p>
<p>这是推荐的方法。使用portsnap不需要事先安装 ports tree，并且能够在任何时候恢复到已知的最新状态（即使手工对ports tree进行了修改）。</p>
<p>使用 portsnap 分成两个步骤：下载压缩的 portsnap 快照，和更新现有系统。下载或更新 portsnap 快照的方法是 portsnap fetch；首次安装，或希望将 ports tree 恢复到快照的样子，应使用 portsnap extract；之后更新系统中的 ports tree，则可以通过 portsnap update 来完成。对于服务器而言，推荐在 crontab 中增加在每天3点执行 portsnap cron，以减少使用时所需要的下载时间。</p>
<p>首次下载 portsnap 快照时，需要下载一个大约50MB的快照基础文件。在中国大陆，由于网络状况的原因，这可能需要较长时间。可以考虑用 portsnap fetch -s portsnap.cn.freebsd.org 做首次下载；之后的下载，还是推荐使用正常的 portsnap fetch。</p>
<p>可以使用下面步骤完成上述情况</p>
<p>1.首先设置一个比较快的portsnap服务器，如果系统默认的地址你的访问速度也很快，可以不修改</p>
<p>#vi /etc/portsnap.conf</p>
<p>设置SERVERNAME=portsnap.cn.freebsd.org ,你可以设置相对你速度快点的服务器的地址</p>
<p>2.执行下面命令</p>
<p>#portsnap fetch extract    这里直接下载ports并且解压</p>
<p>这样就完成了下载ports系统以及解压到/usr下面了</p>
<p>3.设置最快的ports镜像</p>
<p>用ports安装软件的时候，如果没有设置相对于你来说最快的ports服务器地址，那就会默认的 ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles/，这个地址对于很多地方来说是很慢的。</p>
<p>修改 /etc/make.conf 加入以下代码</p>
<p>MASTER_SITE_OVERRIDE=\<br />
ftp://ftp.freebsdchina.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}\<br />
ftp://ftp.tw.freebsd.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}</p>
<p>如果你有最快的地址，可以加到上面去，下载就会块了<br />
3 使用 csup/cvsup 安装/同步 Ports 系统</p>
<p>这种方法已经不再推荐使用。</p>
<p>不管事先你有没有安装 Ports 系统，你都可以使用 csup/cvsup （推荐使用 csup，这是基本系统中自己带的）来安装/同步最新的 Ports 系统。把 /usr/share/examples/cvsup/ports-supfile 拷贝到一个地方（比如 /home/user/tmp/ports-supfile），然后作适当的修改（比如修改要连接的服务器）。最后使用如下命令来安装/同步：</p>
<p>csup -L 2 /home/user/tmp/ports-supfile</p>
<p>Ports 树的目录结构</p>
<p>假设你的 ports 树安装在默认位置 /usr/ports。</p>
<p>文件：</p>
<p>/usr/ports/CHANGES # ports 开发者、维护者等的记录文档。<br />
/usr/ports/COPYRIGHT # ports 树的版权。<br />
/usr/ports/GIDs # 一些 port 可能用到的组名称。<br />
/usr/ports/INDEX-xxx # 每个 port 的摘要<br />
/usr/ports/KNOBS # 编译 port 时需要的一些环境变量与解释。<br />
/usr/ports/LEGAL # 某些 port 的协议限制。<br />
/usr/ports/MOVED # 被移动/删除了的 port 列表。<br />
/usr/ports/Makefile # ports 树总的 BSD Makefile。<br />
/usr/ports/README<br />
/usr/ports/UIDs # 一些 port 可能用到的用户名称。<br />
/usr/ports/UPDATING # ports 树的更新记录以及建议。</p>
<p>目录：</p>
<p>/usr/ports/Mk # 编译 port 需要的 Makefile 集合。<br />
/usr/ports/Templates # 一些模板。<br />
/usr/ports/Tools # 一些工具。</p>
<p>除开以上文件和目录，其他所有的目录都是 ports。一个 port 的目录结构：</p>
<p>/usr/ports/分类/名称</p>
<p>比如 firefox 被分类在 www。因此 firefox 在 ports 树中的位置就是：</p>
<p>/usr/ports/www/firefox</p>
<p>使用 Ports 系统<br />
1 查询</p>
<p>比如，你想知道 ports 中是否有 pidgin 这个软件，那么可以这样：</p>
<p>$cd /usr/ports<br />
$make search key=pidgin</p>
<p>同样也可以使用</p>
<p>$cd /usr/ports<br />
$make search name=pidgin</p>
<p>/usr/ports/README 中还有更多的例子可以参考。<br />
2 安装</p>
<p>非常简单。比如你要安装 firefox，那么作为超级用户 root：</p>
<p>#cd /usr/ports/www/firefox<br />
#make install clean</p>
<p>3 卸载</p>
<p>要卸载 firefox 的话：</p>
<p>#cd /usr/ports/www/firefox<br />
#make deinstall clean</p>
<p>4 升级</p>
<p>要升级 firefox：</p>
<p>#cd /usr/ports/www/firefox<br />
#make deinstall reinstall clean</p>
<p>定制 Ports 系统<br />
1 自己设定 Ports 树的位置</p>
<p>当你把 Ports 树放在非默认位置（/usr/ports）的时候，就需要修改一些环境变量让 Ports 中的工具知道你的修改。这个变量就是 PORTSDIR。比如，你把 Ports 树放在了 /opt/ports，那么 在 sh/bash 中，执行如下命令：</p>
<p>export PORTSDIR=/opt/ports</p>
<p>在 csh 中，你需要执行如下命令：</p>
<p>setenv PORTSDIR /opt/ports</p>
<p>妥贴的办法是把这个环境变量放到超级用户 root 的 dot.cshrc 文件（/root/.cshrc）里面。又或者你想让普通用户也能用到这个环境变量，可以考虑放到 /etc/profile 或者 /etc/csh.cshrc 里面。</p>
<p>注意！如果你使用 portsnap 命令来同步 Ports 树，而你的 Ports 树不在默认位置，请在 /etc/portsnap.conf 中也设定你的 Ports 树的位置。</p>
<p>注意！如果你使用 csup/cvsup 同步 Ports 树，而你的 Ports 树不在默认位置，请在你的 ports-supfile 中也设定你的 Ports 树的位置。<br />
2 自己设定 dist 文件的位置</p>
<p>所谓 dist 文件，就是 port 的源码。一般情况下，这些源码都是用 tar 打包然后用 bzip2 压缩的。默认的位置是在 $PORTSDIR/distfiles。但是，你也可以把这些 dist 文件放到另外的地方。需要设定的环境变量就是 DISTDIR。你可以根据上面的例子来设定这个环境变量。<br />
常用的 Ports 管理工具<br />
portsnap</p>
<p>这是推荐的升级 Ports 系统树的工具。<br />
portupgrade</p>
<p>相当好用的升级 Ports 中软件的 Ruby 工具。支持从源码/包升级。<br />
pkg 工具</p>
<p>FreeBSD 基本系统中自带的包管理工具。方便实用。都是 pkg_* 类型的系统命令，比如 pkg_add, pkg_delete 之类的。</p>
<div class="level3">
<p><span style="font-size: small;"><br />
</span></p>
<p><span style="font-size: small; color: #ff0000;"><strong>通过PORTS安装软件的几个常用命令</strong></span></p>
<div><span style="font-size: small;">1.怎样找到我想安装的包路径：# cd /usr/ports<br />
# make search name=mysql</span></div>
<p><span style="font-size: small;">2.仅仅下载源码包，而不安装：</p>
<p># cd /usr/ports/directory<br />
# make fetch</p>
<p>3.预先知道需要那些包，才能安装这个软件：</p>
<p># cd /usr/ports/directory<br />
# make fetch-list</p>
<p>4.把软件装到指定的目录：</p>
<p># cd /usr/ports/directory<br />
# make PREFIX=/usr install</p>
<p>5.仅仅下载包，解包，而不安装：</p>
<p># cd /usr/ports/directory<br />
# make extract</p>
<p>6.用PORTS制作一个定制二进制包：</p>
<p># cd /usr/ports/somewhere/frobble<br />
# make extract<br />
# cd work/frobble-2.8<br />
[Apply your patches]<br />
# cd ../..<br />
# make package</p>
<p>7.强制安装：</p>
<p># make install FORCE_PKG_REGISTER=yes clean</p>
<p>8.初始化一个port</p>
<p># cd /usr/ports/directory<br />
# make rmconfig<br />
# make config</p>
<p>新手必杀技ports命令<br />
cd /usr/ports<br />
make deinstall<br />
#删除所有软件，我刚用freebsd三个月的时候老使这个，删了安接着删&#8230;..费时费力哦，不推荐</p>
<p>cvsup -g -L 2 -h cvsup.tw.freebsd.org /usr/share/examples/cvsup/ports-supfile<br />
cd /usr/ports<br />
make fetchindex<br />
#别忘了使用ports安装软件前要升级ports系统啊，我现在天天用上边命令的脚本<br />
#要是你没装cvsup，那就去装cd /usr/ports/net/cvsup-without-gui/ &amp;&amp; make install</p>
<p>cd /usr/ports/sysutils/portupgrade<br />
make install<br />
#安装这个软件是新手省事而又带来新麻烦的好东西，尽管会带来一些新麻烦，但是还是推荐毕竟麻烦数量少了很多</p>
<p>rm -r /usr/ports<br />
#损招、阴招，现在想不起来当初为什么要用这个命令，不推荐啊不推荐~~<br />
#你要是用了找不到ports了，简单再用cvsup -g -L 2 -h cvsup.tw.freebsd.org /usr/share/examples/cvsup/ports-supfile命令就行了，费时费力</p>
<p>pkgdb -F<br />
portversion | grep &#8220;&lt;&#8221;<br />
portupgrade -a<br />
#安装了portupgrade套件之后可以使用的命令，好用啊推荐</p>
<p>pkg_info<br />
#看看你都装什么软件了</p>
<p>portsclean -C<br />
#不明原因就是编译不过八成因为这个，平常也请多用，能清理ports内的临时文件<br />
#安装portupgrade套件之后才能使用<br />
新手必杀技ports命令<br />
cd /usr/ports<br />
make deinstall<br />
#删除所有软件，我刚用freebsd三个月的时候老使这个，删了安接着删&#8230;..费时费力哦，不推荐</p>
<p>cvsup -g -L 2 -h cvsup.tw.freebsd.org /usr/share/examples/cvsup/ports-supfile<br />
cd /usr/ports<br />
make fetchindex<br />
#别忘了使用ports安装软件前要升级ports系统啊，我现在天天用上边命令的脚本<br />
#要是你没装cvsup，那就去装cd /usr/ports/net/cvsup-without-gui/ &amp;&amp; make install</p>
<p>cd /usr/ports/sysutils/portupgrade<br />
make install<br />
#安装这个软件是新手省事而又带来新麻烦的好东西，尽管会带来一些新麻烦，但是还是推荐毕竟麻烦数量少了很多</p>
<p>rm -r /usr/ports<br />
#损招、阴招，现在想不起来当初为什么要用这个命令，不推荐啊不推荐~~<br />
#你要是用了找不到ports了，简单再用cvsup -g -L 2 -h cvsup.tw.freebsd.org /usr/share/examples/cvsup/ports-supfile命令就行了，费时费力</p>
<p>pkgdb -F<br />
portversion | grep &#8220;&lt;&#8221;<br />
portupgrade -a<br />
#安装了portupgrade套件之后可以使用的命令，好用啊推荐</p>
<p>pkg_info<br />
#看看你都装什么软件了</p>
<div><span style="font-size: small;">portsclean -C<br />
#不明原因就是编译不过八成因为这个，平常也请多用，能清理ports内的临时文件<br />
#安装portupgrade套件之后才能使用</span></div>
<p><span style="font-size: small;"> </p>
<p></span></span> </div>
]]></content:encoded>
			<wfw:commentRss>http://www.birdwang.com/276.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>freebsd命令速记大全</title>
		<link>http://www.birdwang.com/274.html</link>
		<comments>http://www.birdwang.com/274.html#comments</comments>
		<pubDate>Wed, 24 Sep 2008 06:55:10 +0000</pubDate>
		<dc:creator>飞鸟真</dc:creator>
				<category><![CDATA[技术研究]]></category>
		<category><![CDATA[freebsd]]></category>

		<guid isPermaLink="false">http://www.birdwang.com/?p=274</guid>
		<description><![CDATA[1: man 在线查询 man ls 2: ls 查看目录与档案 ls -la 3: ln 建立链接文件 ln -fs /usr/local/apache/etc/httpd.conf /etc/httpd.conf 4: more 分页显示 more 文件名称 5: cd 切换目录 cd /usr/local/apache 6: mkdir 建立新的目录 mkdir /usr/temp 7: rmdir 删除目录 rmdir /usr/temp 8: rm 删除目录或档案 &#8230; <a href="http://www.birdwang.com/274.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>1: man 在线查询 man ls<br />
2: ls 查看目录与档案 ls -la<br />
3: ln 建立链接文件 ln -fs /usr/local/apache/etc/httpd.conf /etc/httpd.conf<br />
4: more 分页显示 more 文件名称<br />
5: cd 切换目录 cd /usr/local/apache<br />
6: mkdir 建立新的目录 mkdir /usr/temp<br />
7: rmdir 删除目录 rmdir /usr/temp</p>
<p><span id="more-274"></span><br />
8: rm 删除目录或档案 rm -f 文件名称 (如果要删除目录.需要加 -r )<br />
9: cp 复制目录或档案 cp 来源档案 目标档案<br />
10: pwd 显示目前的工作目录<br />
11: mv 目录或档案更名或搬移 mv 来源档案 目标档案<br />
12: find 寻找目录或档案 find /etc -name 文件名称<br />
13 fetch FTP取得档案 fetch ftp://ftp.center.kl.edu.tw/pub/FreeBSD/test.tgz<br />
14 chmod 变更档案使用权限 chmod -R 755 /usr/local/etc<br />
15 chown 变更档案所有者 chown -R lin.wheel /usr/local/etc<br />
16 fsck 修理档案系统 fsck -y<br />
17 gzip/tar 压缩或解压缩档案或目录 tar -czvf 压缩档名.tar.gz 目录名称<br />
18 mount 挂上档案系统或是设备 mount /cdrom<br />
19 umount 卸下档案系统或是设备 umount /cdrom<br />
20 df 查询系统的可使用档案空间 df<br />
21 du 显示目录或档案所占的磁盘空间 du -a 檔名 (du -sh 可以获取当前文件夹下的磁盘使用空间)<br />
22 ps 查询系统process状态 ps -aux|grep apach*<br />
23 kill 砍除一个process kill pid<br />
24 su 变换身份 su &#8211; root<br />
25 adduser 新增使用者<br />
26 rmuser 删除使用者<br />
27 vipw 编辑使用者账户<br />
28 passwd 变更密码<br />
29 ping 侦测计算机之联机状态 ping 210.240.6.9<br />
30 ifconfig 网络接口的设定与管理 ifconfig -a<br />
31 route 可以设定routing table　<br />
32 traceroute 列出所经过的route traceroute 210.240.8.1<br />
33 netstat 可以查询网络的使用及联机情形<br />
34 pkg_add 安装package pkg_add bash-2.04.tgz<br />
35 pkg_delete 移除已安装的package pkg_delete bash-2.04<br />
36 pkg_info 查询安装纪录<br />
37 sync 强迫系统将快取数据写回硬盘<br />
38 reboot重新启动系统<br />
39 halt 关闭系统<br />
40 shutdown 通知使用者系统将关闭<br />
41 init 0 直接关机<br />
chown chown -R 所有者.群组 档案或目录<br />
-R:表该目录下之所有档案之所有者与群组跟着便变更</p>
<p>chmod<br />
drwxrwxrwx<br />
lr–rwxr-x<br />
1 2 3 4<br />
d:表目录<br />
r:表read<br />
w:表write<br />
x:表可执行<br />
-:表关闭功能</p>
<p>l:表链接的档案<br />
2:该档案或目录所有人之读取权限<br />
3:该档案或目录所有人之相同群组的读取权限<br />
4:网络上的人的读取权限<br />
-R:表该目录下之所有档案之读取权限跟着便变更</p>
<p>gzip/tar<br />
tar czvf 压缩档名.tar.gz 目录名称<br />
z:采用gzip压缩<br />
c:建立新的压缩档<br />
v:采用verbose方式，观看压缩过程<br />
f:强制进行</p>
<p>tar zxvf 压缩档名.tar.gz<br />
z:采用gzip解压缩<br />
x:解压缩<br />
v:采用verbose方式，观看压缩过程<br />
f:强制进行</p>
<p>ifconfig<br />
查询所有网络接口的情形<br />
ifconfig -a</p>
<p>设定网络接口的参数<br />
ifconfig de0 192.168.1.10 netmask 255.255.255.0</p>
<p>停止网络接口<br />
ifconfig de0 down</p>
<p>启动网络接口<br />
ifconfig de0 up</p>
<p>route<br />
改变 routing path 之gateway<br />
route change default 192.168.1.254</p>
<p>netstat<br />
查询 routing table<br />
netstat -rn</p>
<p>查询网络接口流量统计<br />
netstat -I<br />
查询 TCP网络联机情形<br />
netstat -t<br />
查询所有网络联机情形<br />
netstat -a</p>
<p>shutdown　<br />
通知使用者多久后关机,管理者需下reboot或halt<br />
shutdown -k 时间 讯息<br />
通知使用者多久后重新启动系统<br />
shutdown -r 时间 讯息<br />
通知使用者多久后关闭系统<br />
shutdown -h 时间 讯息</p>
<p>时间:now或+3表三分钟后或yymmddhhmm<br />
讯息:用双引号括起来或用-号开头</p>
<p>一些常用的其它组合命令:<br />
shift+g 同win下的END键,让光标处在文档末尾.<br />
:/ 功能是在文档内进行文本搜索<br />
:find 这个是文件的搜索</p>
]]></content:encoded>
			<wfw:commentRss>http://www.birdwang.com/274.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>熊猫烧香杀毒全过程及专杀工具</title>
		<link>http://www.birdwang.com/191.html</link>
		<comments>http://www.birdwang.com/191.html#comments</comments>
		<pubDate>Fri, 02 Feb 2007 11:23:08 +0000</pubDate>
		<dc:creator>飞鸟真</dc:creator>
				<category><![CDATA[技术研究]]></category>

		<guid isPermaLink="false">http://www.birdwang.com/?p=191</guid>
		<description><![CDATA[中 总以为自己的系统做的好，补丁打的全就可以相安无事，没想到还是中了招，昨天老总的本本中毒了，我用u盘拷了一个卡巴过去，结果没什么作用，当u盘再次插到我的本本以后，我也英勇就义了！ 所以说任何的传播渠道都应该保持警惕性。 查 我的每个盘都不能双击打开了，右键点盘符，一看，跟老总的症状一样，多了一个auto选项并且此选项默认！更重要的是我电脑里所有的asp,htm页面都被加了一个iframe，看了看这个网址，里面包含了一个/wuhan/的路径，脑袋里第一反应：“熊猫烧香”！ 武汉人越来越厉害了，要么不做，一做就做一个轰动全球的东东，希望下次武汉的各位兄弟造毒的时候照顾一下老乡，把本地的ip从感染范围里面排除掉。 杀 下卡巴，找专杀！baidu了一下各种症状，确诊为熊猫烧香及其变种。下载了一个卡巴斯基安全套装，还没破解，先试用，如果效果好，愿意花钱买正版。更新病毒库，查出13个地方被感染，每个盘的根目录下都有个setup.exe，这个应该跟auto有关，未中毒前是双击打开磁盘，现在双击成了运行setup.exe，应该就是病毒了。每个盘的系统还原目录里面也有病毒，这招够狠，就算系统还原了也还是有病毒。 在瑞星又找了个专杀工具，这个工具不错，因为我电脑里最多的就是htm和asp，这个工具跑了两小时，把所有页面里的iframe都去掉了。 杀毒成功！ 以后不能再大意轻敌了，不要以为补丁都跟着打全就会相安无事，错误的思想，补丁总是在病毒出来以后才推出的，以后这个卡巴就长期驻留了！ 相关软件下载地址： 瑞星熊猫烧香专杀工具：http://it.rising.com.cn/Channels/Service/2006-11/1163505486d38734.shtml 卡巴斯基互联网安全套装：http://www.skycn.com/soft/29876.html]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:24pt"><strong>中</strong></span><br />
总以为自己的系统做的好，补丁打的全就可以相安无事，没想到还是中了招，昨天老总的本本中毒了，我用u盘拷了一个卡巴过去，结果没什么作用，当u盘再次插到我的本本以后，我也英勇就义了！</p>
<p><span style="color:Red">所以说任何的传播渠道都应该保持警惕性。</span></p>
<p><span style="font-size:24pt"><strong>查</strong></span><br />
我的每个盘都不能双击打开了，右键点盘符，一看，跟老总的症状一样，多了一个auto选项并且此选项默认！更重要的是我电脑里所有的asp,htm页面都被加了一个iframe，看了看这个网址，里面包含了一个/wuhan/的路径，脑袋里第一反应：“熊猫烧香”！</p>
<p><span style="color:Red">武汉人越来越厉害了，要么不做，一做就做一个轰动全球的东东，希望下次武汉的各位兄弟造毒的时候照顾一下老乡，把本地的ip从感染范围里面排除掉。</span></p>
<p><span style="font-size:24pt"><strong>杀</strong></span><br />
下卡巴，找专杀！baidu了一下各种症状，确诊为熊猫烧香及其变种。下载了一个卡巴斯基安全套装，还没破解，先试用，如果效果好，愿意花钱买正版。更新病毒库，查出13个地方被感染，每个盘的根目录下都有个setup.exe，这个应该跟auto有关，未中毒前是双击打开磁盘，现在双击成了运行setup.exe，应该就是病毒了。每个盘的系统还原目录里面也有病毒，这招够狠，就算系统还原了也还是有病毒。<br />
在瑞星又找了个专杀工具，这个工具不错，因为我电脑里最多的就是htm和asp，这个工具跑了两小时，把所有页面里的iframe都去掉了。<br />
杀毒成功！</p>
<p><span style="color:Red">以后不能再大意轻敌了，不要以为补丁都跟着打全就会相安无事，错误的思想，补丁总是在病毒出来以后才推出的，以后这个卡巴就长期驻留了！</span></p>
<p>相关软件下载地址：<br />
瑞星熊猫烧香专杀工具：http://it.rising.com.cn/Channels/Service/2006-11/1163505486d38734.shtml<br />
卡巴斯基互联网安全套装：http://www.skycn.com/soft/29876.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.birdwang.com/191.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP中有关双引号，单引号以及&amp;号的解释</title>
		<link>http://www.birdwang.com/186.html</link>
		<comments>http://www.birdwang.com/186.html#comments</comments>
		<pubDate>Wed, 10 Jan 2007 19:04:52 +0000</pubDate>
		<dc:creator>飞鸟真</dc:creator>
				<category><![CDATA[技术研究]]></category>

		<guid isPermaLink="false">http://www.birdwang.com/?p=186</guid>
		<description><![CDATA[很多ASP初学习的朋友都有可能在双引号，单引号以及&#38;号上迷失了方向。最关键的是不理解三类符号的意思，当然也就不能很好地掌握它们的用法了。以下是我对三类符号的看法，技术不精，难免有疏忽之处，肯请大家多提意见。 1，双引号&#34;&#34; ASP中处在双引号中的可以是任意的字符、字符串，HTML代码。 比如 产生的页面效果分别是：默认文字和加粗文字“cnbruce here” 下面再想想，如果我要在输出的页面文字上加一颜色效果该怎么办？ 1，一般文字颜色这样写：cnbruce 2，response.write写法是这样的：response.write(&#34;输入显示的内容&#34;) 3，如果要将上面超链接代码放到response.write中，有没有发现write方法中的双引号和color中的双引号形成嵌套效果， 势必形成response.write(&#34;cnbruce&#34;) 4，调试结果不容乐观，因为color的前引号和write的前引号形成匹配，内容为cnbruce。最终结果是：中间的 #0000ff 被孤单了。 5，所以为了结果正确，你可以将 #0000ff 当成字符串放在双引号里面，然后该字符串与前字符串cnbruce中间的连接就采用&#38;号 最后结果如下： 2，单引号&#39;&#39; 正如学习语文课一样，继续放在双引号中的引号可以采用单引号。 那么上面一条语句response.write(&#34;cnbruce&#34;)中的#0000ff就可以将其双引号变为单引号： response.write(&#34;cnbruce&#34;)，这样执行同样正确。 3，连接字符&#38;号 ASP中&#38;号的主要作用是用来连接的，包括：字符串-字符串、字符串-变量、变量-变量等混合连接。 比如下面一例题： 其中极需要注意的是：color的单引号中又采用了双引号~！你也许会糊了，慢慢看。 1，现在是自己定义了一个变量mycolor，按照原则，变量放在response.write里面是不需要加双引号的，因为加了双引就表示是字符串，而非变量啊。 2，所以response.write如果要输出变量可以直接这样写：response.write(mycolor) 3，但是，现在。我们的变量一定要是放在双引号中的（比如上面程序是放在单引中），那具体的response.write又该如何书写呢？ 4，关键写法：将ASP中的变量继续添加左右的&#34;&#38;包括，就可以放到response.write的引号中了，效果即为：response.write(&#34; &#34;&#38;mycolor&#38;&#34; &#34;) 5，分析response.write（&#34; &#34;&#38;mycolor&#38;&#34; &#34;）,其实还就是前一空字符串连接mycolor变量再连接后一字符串嘛。 6，所以，现在对于上方的ASP整个例题应该有所领悟了吧。 继续强化加深 这个里面就包含了字符串，变量以及变量在引号中的使用。相信你也就能够明白了吧。 最后，你还可以进行HTML和ASP的混合使用。 这个不难，容易理解：） &#8230; <a href="http://www.birdwang.com/186.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>很多ASP初学习的朋友都有可能在双引号，单引号以及&amp;号上迷失了方向。最关键的是不理解三类符号的意思，当然也就不能很好地掌握它们的用法了。以下是我对三类符号的看法，技术不精，难免有疏忽之处，肯请大家多提意见。</p>
<p>1，双引号&#34;&#34;</p>
<p>ASP中处在双引号中的可以是任意的字符、字符串，HTML代码。<br />
比如</p>
<p><%response.write (&#34;cnbruce here&#34;)%><br />
<hr />
<%response.write (&#34;<b>cnbruce here</a>&#34;)%></p>
<p>产生的页面效果分别是：默认文字和加粗文字“cnbruce here”</p>
<p>下面再想想，如果我要在输出的页面文字上加一颜色效果该怎么办？</p>
<p>1，一般文字颜色这样写：<font color=&#34;#0000ff&#34;>cnbruce</font></p>
<p>2，response.write写法是这样的：response.write(&#34;输入显示的内容&#34;)</p>
<p>3，如果要将上面超链接代码放到response.write中，有没有发现write方法中的双引号和color中的双引号形成嵌套效果，<br />
势必形成response.write(&#34;<font color=&#34;#0000ff&#34;>cnbruce</font>&#34;)</p>
<p>4，调试结果不容乐观，因为color的前引号和write的前引号形成匹配，内容为<font color=；同样color的后引号也就和write的后引号匹配了，内容为：>cnbruce</font>。最终结果是：中间的 #0000ff 被孤单了。</p>
<p>5，所以为了结果正确，你可以将 #0000ff 当成字符串放在双引号里面，然后该字符串与前字符串<font color=和后字符串>cnbruce</font>中间的连接就采用&amp;号</p>
<p>最后结果如下：</p>
<p><%<br />
response.write(&#34;<font color=&#34; &amp; &#34;#0000ff&#34; &amp; &#34;>cnbruce</font>&#34;)<br />
%></p>
<p>2，单引号&#39;&#39;</p>
<p>正如学习语文课一样，继续放在双引号中的引号可以采用单引号。</p>
<p>那么上面一条语句response.write(&#34;<font color=&#34;#0000ff&#34;>cnbruce</font>&#34;)中的#0000ff就可以将其双引号变为单引号：<br />
response.write(&#34;<font color=&#39;#0000ff&#39;>cnbruce</font>&#34;)，这样执行同样正确。</p>
<p>3，连接字符&amp;号</p>
<p>ASP中&amp;号的主要作用是用来连接的，包括：字符串-字符串、字符串-变量、变量-变量等混合连接。</p>
<p>比如下面一例题：</p>
<p><%<br />
mycolor=&#34;#0000ff&#34;<br />
response.write (&#34;<font color=&#39; &#34;&amp;mycolor&amp;&#34; &#39;>&#34; &amp; &#34;cnbruce&#34; &amp; &#34;</font>&#34;)<br />
%></p>
<p>其中极需要注意的是：color的单引号中又采用了双引号~！你也许会糊了，慢慢看。</p>
<p>1，现在是自己定义了一个变量mycolor，按照原则，变量放在response.write里面是不需要加双引号的，因为加了双引就表示是字符串，而非变量啊。</p>
<p>2，所以response.write如果要输出变量可以直接这样写：response.write(mycolor)</p>
<p>3，但是，现在。我们的变量一定要是放在双引号中的（比如上面程序是放在单引中），那具体的response.write又该如何书写呢？</p>
<p>4，关键写法：将ASP中的变量继续添加左右的&#34;&amp;包括，就可以放到response.write的引号中了，效果即为：response.write(&#34; &#34;&amp;mycolor&amp;&#34; &#34;)</p>
<p>5，分析response.write（&#34; &#34;&amp;mycolor&amp;&#34; &#34;）,其实还就是前一空字符串连接mycolor变量再连接后一字符串嘛。</p>
<p>6，所以，现在对于上方的ASP整个例题应该有所领悟了吧。</p>
<p>继续强化加深</p>
<p><%<br />
mycolor=&#34;#0000ff&#34;<br />
response.write (&#34;<font color=&#39; &#34;&amp;mycolor&amp;&#34; &#39;>&#34; &amp; mycolor &amp; &#34;</font>&#34;)<br />
%></p>
<p>这个里面就包含了字符串，变量以及变量在引号中的使用。相信你也就能够明白了吧。</p>
<p>最后，你还可以进行HTML和ASP的混合使用。</p>
<p><%mycolor=&#34;#0000ff&#34;%><br />
<font color=<%=mycolor%>><%=mycolor%></td>
<p>这个不难，容易理解：）<br />
这问题真的蛮头疼，有些东西简单，有些东西咋比.net还复杂咧~</p>
]]></content:encoded>
			<wfw:commentRss>http://www.birdwang.com/186.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript精华代码</title>
		<link>http://www.birdwang.com/185.html</link>
		<comments>http://www.birdwang.com/185.html#comments</comments>
		<pubDate>Wed, 10 Jan 2007 18:57:53 +0000</pubDate>
		<dc:creator>飞鸟真</dc:creator>
				<category><![CDATA[技术研究]]></category>

		<guid isPermaLink="false">http://www.birdwang.com/?p=185</guid>
		<description><![CDATA[1. oncontextmenu=&#34;window.event.returnvalue=false&#34; 将彻底屏蔽鼠标右键 no 可用于Table 2. 取消选取、防止复制 3. onpaste=&#34;return false&#34; 不准粘贴 4. oncopy=&#34;return false;&#34; oncut=&#34;return false;&#34; 防止复制 5. IE地址栏前换成自己的图标 6. 可以在收藏夹中显示出你的图标 7. 关闭输入法 8. 永远都会带着框架 9. 防止被人frame 10. 网页将不能被另存为 11. 12.删除时确认 删 除 13. 取得控件的绝对位置 //javascript function getIE(E){ var t=e.offsetTop; &#8230; <a href="http://www.birdwang.com/185.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>1. oncontextmenu=&#34;window.event.returnvalue=false&#34; 将彻底屏蔽鼠标右键</p>
<table border oncontextmenu=return(false)>
<td>no</table>
<p> 可用于Table</p>
<p>2. <body onsel&#101;ctstart=&#34;return false&#34;> 取消选取、防止复制</p>
<p>3. onpaste=&#34;return false&#34; 不准粘贴</p>
<p>4. oncopy=&#34;return false;&#34; oncut=&#34;return false;&#34; 防止复制</p>
<p>5.
<link rel=&#34;Shortcut Icon&#34; href=&#34;favicon.ico&#34;> IE地址栏前换成自己的图标</p>
<p>6.
<link rel=&#34;Bookmark&#34; href=&#34;favicon.ico&#34;> 可以在收藏夹中显示出你的图标</p>
<p>7.<br />
<input style=&#34;ime-mode:-Disabled&#34;> 关闭输入法</p>
<p>8. 永远都会带着框架<br />
<script language=&#34;javascript&#34;><!--
if (window == top)top.location.href = &#34;frames.htm&#34;; //frames.htm为框架网页
// --></script></p>
<p>9. 防止被人frame<br />
<script LANGUAGE=javascript><!--
if (top.location != self.location)top.location=self.location;
// --></script></p>
<p>10. 网页将不能被另存为<br />
<noscript><iframe src=*.html></iframe></noscript></p>
<p>11.<br />
<input type=button value=查看网页源代码<br />
onclick=&#34;window.location = `view-source:`+ http://www.51js.com/`&#34;;>
<p>12.删除时确认<br />
<a href=`javascript:if(confirm(&#34;确实要删除吗?&#34;location=&#34;boos.asp?&amp;areyou=删除&amp;page=1&#34;`>删</p>
<p>除</a></p>
<p>13. 取得控件的绝对位置<br />
//javascript<br />
<script language=&#34;javascript&#34;>
function getIE(E){
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent){
t+=e.offsetTop;
l+=e.offsetLeft;
}
alert(&#34;top=&#34;+t+&#34;/nleft=&#34;+l);
}
</script></p>
<p>//VBScript<br />
<script language=&#34;VBScript&#34;><!--
function getIE()
dim t,l,a,b
set a=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
while a.tagName<>&#34;BODY&#34;
set a = a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox &#34;top=&#34;&amp;t&amp;chr(13)&amp;&#34;left=&#34;&amp;l,64,&#34;得到控件的位置&#34;
end function
--></script></p>
<p>14. 光标是停在文本框文字的最后<br />
<script language=&#34;javascript&#34;>
function cc()
{
var e = event.srcElement;
var r =e.cr&#101;ateTextRange();
r.moveStart(`character`,e.value.length);
r.collapse(true);
r.sel&#101;ct();
}
</script></p>
<input type=text name=text1 value=&#34;123&#34; onfocus=&#34;cc()&#34;>
<p>15. 判断上一页的来源<br />
javascript:<br />
document.referrer</p>
<p>16. 最小化、最大化、关闭窗口<br />
<object id=hh1 classid=&#34;clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11&#34;><param name=&#34;Command&#34; value=&#34;Minimize&#34;></object><br />
<object id=hh2 classid=&#34;clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11&#34;><param name=&#34;Command&#34; value=&#34;Maximize&#34;></object><br />
<object id=hh3 classid=&#34;clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11&#34;><param NAME=&#34;Command&#34; value=&#34;Close&#34;></object></p>
<input type=button value=最小化 onclick=hh1.Click()>
<input type=button value=最大化 onclick=hh2.Click()>
<input type=button value=关闭 onclick=hh3.Click()>
本例适用于IE</p>
<p>17.屏蔽功能键Shift,Alt,Ctrl<br />
<script>
function look(){
if(event.shiftKey)
alert(&#34;禁止按Shift键!&#34;; //可以换成ALT　CTRL
}
document.onkeydown=look;
</script></p>
<p>18. 网页不会被缓存<br />
<meta HTTP-EQUIV=&#34;pragma&#34; CONTENT=&#34;no-cache&#34;><br />
<meta HTTP-EQUIV=&#34;Cache-Control&#34; CONTENT=&#34;no-cache, must-revalidate&#34;><br />
<meta HTTP-EQUIV=&#34;expires&#34; CONTENT=&#34;Wed, 26 Feb 1997 08:21:57 GMT&#34;><br />
或者<meta HTTP-EQUIV=&#34;expires&#34; CONTENT=&#34;0&#34;></p>
<p>19.怎样让表单没有凹凸感？</p>
<input type=text style=&#34;border:1 solid #000000&#34;>
或</p>
<input type=text style=&#34;border-left:none; border-right:none; border-top:none; border-bottom:</p>
<p>1 solid #000000&#34;></textarea></p>
<p>20.
<div><span>&amp;<layer>的区别？</p>
<div>(division)用来定义大段的页面元素，会产生转行<br />
<span>用来定义同一行内的元素，跟
<div>的唯一区别是不产生转行<br />
<layer>是ns的标记，ie不支持，相当于
<div>
<p>21.让弹出窗口总是在最上面:<br />
<body onblur=&#34;this.focus();&#34;></p>
<p>22.不要滚动条?<br />
让竖条没有:<br />
<body style=`overflow:-Scroll;overflow-y:hidden`><br />
</body><br />
让横条没有:<br />
<body style=`overflow:-Scroll;overflow-x:hidden`><br />
</body><br />
两个都去掉？更简单了<br />
<body scroll=&#34;no&#34;><br />
</body></p>
<p>23.怎样去掉图片链接点击后，图片周围的虚线？<br />
<a href=&#34;#&#34; onFocus=&#34;this.blur()&#34;><img src=&#34;logo.jpg&#34; border=0></a></p>
<p>24.电子邮件处理提交表单</p>
<form name=&#34;form1&#34; method=&#34;post&#34; action=&#34;mailto:****@***.com&#34; enctype=&#34;text/plain&#34;>
<input type=submit>
</form>
<p>25.在打开的子窗口刷新父窗口的代码里如何写？<br />
window.opener.location.reload()</p>
<p>26.如何设定打开页面的大小<br />
<body onload=&#34;top.resizeTo(300,200);&#34;><br />
打开页面的位置<body onload=&#34;top.moveBy(300,200);&#34;></p>
<p>27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动</p>
<style>
body
{background-image:url(logo.gif); background-repeat:no-repeat;</p>
<p>background-position:center;background-attachment: fixed}
</style>
<p>28. 检查一段字符串是否全由数字组成<br />
<script language=&#34;javascript&#34;><!--
function checkNum(str){return str.match(//D/)==null}
alert(checkNum(&#34;1232142141&#34;
alert(checkNum(&#34;123214214a1&#34;
// --></script></p>
<p>29. 获得一个窗口的大小<br />
document.body.clientWidth; document.body.clientHeight</p>
<p>30. 怎么判断是否是字符<br />
if (/[^/x00-/xff]/g.test(s)) alert(&#34;含有汉字&#34;;<br />
else alert(&#34;全是字符&#34;;</p>
<p>31.TEXTAREA自适应文字行数的多少<br />
<textarea rows=1 name=s1 cols=27 onpropertychange=&#34;this.style.posHeight=this.scrollHeight&#34;><br />
</textarea></p>
<p>32. 日期减去天数等于第二个日期<br />
<script language=javascript>
function cc(dd,dadd)
{
//可以加上错误处理
var a = new Date(dd)
a = a.valueOf()
a = a - dadd * 24 * 60 * 60 * 1000
a = new Date(A)
alert(a.getFullYear() + &#34;年&#34; + (a.getMonth() + 1) + &#34;月&#34; + a.getDate() + &#34;日&#34;
}
cc(&#34;12/23/2002&#34;,2)
</script></p>
<p>33. 选择了哪一个Radio<br />
<html><script language=&#34;vbscript&#34;>
function checkme()
for each ob in radio1
if ob.checked then window.alert ob.value
next
end function
</script><body></p>
<input name=&#34;radio1&#34; type=&#34;radio&#34; value=&#34;style&#34; checked>style</p>
<input name=&#34;radio1&#34; type=&#34;radio&#34; value=&#34;barcode&#34;>Barcode</p>
<input type=&#34;button&#34; value=&#34;check&#34; onclick=&#34;checkme()&#34;>
</body></html></p>
<p>34.脚本永不出错<br />
<script LANGUAGE=&#34;javascript&#34;>
<!-- Hide
function killErrors() {
return true;
}
window.onerror = killErrors;
// -->
</script></p>
<p>35.ENTER键可以让光标移到下一个输入框</p>
<input onkeydown=&#34;if(event.keyCode==13)event.keyCode=9&#34;>
<p>36. 检测某个网站的链接速度：<br />
把如下代码加入<body>区域中:<br />
<script language=javascript>
tim=1
setInterval(&#34;tim++&#34;,100)
b=1</p>
<p>var autourl=new Array()
autourl[1]=&#34;http://www.njcatv.net/&#34;;
autourl[2]=&#34;javacool.3322.net&#34;
autourl[3]=&#34;http://www.sina.com.cn/&#34;;
autourl[4]=&#34;http://www.nuaa.edu.cn/&#34;;
autourl[5]=&#34;http://www.cctv.com/&#34;;</p>
<p>function butt(){
document.write(&#34;
<form name=autof>&#34;
for(var i=1;i<autourl.length;i++)
document.write(&#34;
<input type=text name=txt&#34;+i+&#34; size=10 value=测试中……> =》
<input type=text</p>
<p>name=url&#34;+i+&#34; size=40> =》
<input type=button value=GO</p>
<p>onclick=window.open(this.form.url&#34;+i+&#34;.value)><br />&#34;
document.write(&#34;
<input type=submit value=刷新></form>
<p>&#34;
}
butt()
function auto(url){
document.forms[0][&#34;url&#34;+b].value=url
if(tim>200)
{document.forms[0][&#34;txt&#34;+b].value=&#34;链接超时&#34;}
else
{document.forms[0][&#34;txt&#34;+b].value=&#34;时间&#34;+tim/10+&#34;秒&#34;}
b++
}
function run(){for(var i=1;i<autourl.length;i++)document.write(&#34;<img</p>
<p>src=http://&#34;+autourl+&#34;/&#34;+Math.random()+&#34; width=1 height=1</p>
<p>onerror=auto(http://&#34;;+autourl+&#34;`)>&#34;}
run()</script></p>
<p>37. 各种样式的光标<br />
auto ：标准光标<br />
default ：标准箭头<br />
hand ：手形光标<br />
wait ：等待光标<br />
text ：I形光标<br />
vertical-text ：水平I形光标<br />
no-dro&#112; ：不可拖动光标<br />
not-allowed ：无效光标<br />
help ：?帮助光标<br />
all-scroll ：三角方向标<br />
move ：移动标<br />
crosshair ：十字标<br />
e-resize<br />
n-resize<br />
nw-resize<br />
w-resize<br />
s-resize<br />
se-resize<br />
sw-resize</p>
<p>38.页面进入和退出的特效<br />
进入页面<meta http-equiv=&#34;Page-Enter&#34; content=&#34;revealTrans(duration=x, transition=y)&#34;><br />
推出页面<meta http-equiv=&#34;Page-Exit&#34; content=&#34;revealTrans(duration=x, transition=y)&#34;><br />
这个是页面被载入和调出时的一些特效。Duration表示特效的持续时间，以秒为单位。Transition表示使</p>
<p>用哪种特效，取值为1-23:<br />
　　0 矩形缩小<br />
　　1 矩形扩大<br />
　　2 圆形缩小<br />
　　3 圆形扩大<br />
　　4 下到上刷新<br />
　　5 上到下刷新<br />
　　6 左到右刷新<br />
　　7 右到左刷新<br />
　　8 竖百叶窗<br />
　　9 横百叶窗<br />
　　10 错位横百叶窗<br />
　　11 错位竖百叶窗<br />
　　12 点扩散<br />
　　13 左右到中间刷新<br />
　　14 中间到左右刷新<br />
　　15 中间到上下<br />
　　16 上下到中间<br />
　　17 右下到左上<br />
　　18 右上到左下<br />
　　19 左上到右下<br />
　　20 左下到右上<br />
　　21 横条<br />
　　22 竖条<br />
　　23 以上22种随机选择一种</p>
<p>39.在规定时间内跳转<br />
<meta http-equiv=V=&#34;REFRESH&#34; content=&#34;5;URL=http://www.51js.com&#34;></p>
<p>40.网页是否被检索<br />
<meta name=&#34;ROBOTS&#34; content=&#34;属性值&#34;><br />
　　其中属性值有以下一些:<br />
　　属性值为&#34;all&#34;: 文件将被检索，且页上链接可被查询；<br />
　　属性值为&#34;none&#34;: 文件不被检索，而且不查询页上的链接；<br />
　　属性值为&#34;index&#34;: 文件将被检索；<br />
　　属性值为&#34;follow&#34;: 查询页上的链接；<br />
　　属性值为&#34;noindex&#34;: 文件不检索，但可被查询链接；<br />
　　属性值为&#34;nofollow&#34;: 文件不被检索，但可查询页上的链接。</p>
<p>41.变换网页的鼠标光标<br />
<body style=&#34;CURSOR: url(http://203.73.125.205/~liangmi2/farmfrog01.cur`)&#34;></p>
<p>42.怎样实现在任务栏显示小图标的效果？ (要使用绝对地址)<br />
有些站点，访问时会在地址栏地址前显出小图标，添加到收藏夹后也在收藏栏中显示图标，<br />
这样很好的与其它站点有了区别。<br />
要达到这个效果，先需做出这个图标文件，图像为16*16像素，不要超过16色。文件格式为ico，然后上传至你的网站。<br />
然后，在需要的页面中，加上以下html语句到文件的<head>和</head>之间（假设以上ico文件的地址http://happyisland.126.com/icon.ico）。</p>
<link REL=&#34;SHORTCUT ICON&#34;href=&#34;http:///happyisland.126.com/icon.ico&#34;;>
如果访问者的浏览器是IE5.0，就不需加任何代码，只要将图标文件上传到网站的根目录下即可。<br />
1,META标签里的代码是什么意思？<br />
<meta>是放于<head>与</head>之间的标记.以下是我总结它在网页中最常见的几种。<br />
<meta name=&#34;Keywords&#34; content=&#34;图片, 新闻, 音乐, 软件&#34;><br />
该网页的关键字，作用于搜索引擎的登录，事实上它在现在的网站中并没什么用。<br />
<meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34;><br />
<meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=iso-8859-1&#34;><br />
设定这是 HTML 文件及其编码语系，简体中文网页使用charset=gb2312，繁体中文使用charset=big5，或者不设编码也可，纯英文网页建议使用 iso-8859-1。<br />
<meta name=&#34;GENERATOR&#34; content=&#34;Microsoft FrontPage 5.0&#34;><br />
这只表示该网页由什么编辑器写的。<br />
<meta http-equiv=&#34;refresh&#34; content=&#34;10; url=http://www.hkiwc.com&#34;><br />
这行较为实用，能于预定秒数内自动转到指定网址。原代码中 10 表示 10秒。</p>
<p>2，怎么改变滚动条的颜色，只有ie5.5版本以上才能支持。<br />
这是使用CSS语言，在次说明一下，它和我的浏览器版本有一定的关系。<br />
scrollbar-arrow-color：上下按钮上三角箭头的颜色。<br />
scrollbar-base-color：滚动条的基本颜色。<br />
scrollbar-dark-shadow-color：立体滚动条强阴影的颜色<br />
scrollbar-face-color：立体滚动条凸出部分的颜色<br />
scrollbar-highlight-color：滚动条空白部分的颜色<br />
scrollbar-shadow-color立体滚动条阴影的颜色。<br />
scrollbar-track-color:#99CC33;<br />
scrollbar-3dlight-color:#A8CBF1;<br />
代码如下：</p>
<style>
<!--
BODY {
scrollbar-face-color:#99CC33;//(立体滚动条凸出部分的颜色)
scrollbar-highlight-color:#A8CBF1;//(滚动条空白部分的颜色)
scrollbar-shadow-color:#A8CBF1;//(立体滚动条阴影的颜色)
scrollbar-arrow-color:#FF9966;//(上下按钮上三角箭头的颜色)
scrollbar-base-color:#A8CBF1; //(滚动条的基本颜色)
scrollbar-darkshadow-color:#A8CBF1; //(立体滚动条强阴影的颜色)
scrollbar-track-color:#99CC33;
scrollbar-3dlight-color:#A8CBF1;
}
-->
</style>
<p>在这我补充几点：<br />
1.让浏览器窗口永远都不出现滚动条。<br />
<body style=&#34;overflow-x:hidden;overflow-y:hidden&#34;>或<body style=&#34;overflow:hidden&#34;> 或<body scroll=no><br />
2，没有水平滚动条<br />
<body style=&#34;overflow-x:hidden&#34;><br />
3，没有垂直滚动条<br />
<body style=&#34;overflow-y:hidden&#34;></p>
<p>3,如何给图片抖动怎做的.<br />
<script language=javascript1.2>
<!--
var rector=2
var stopit=0
var a=1
var count=0
function init(which){
stopit=0
shake=which
shake.style.left=0
shake.style.top=0
}
function rattleimage(){
if ((!document.all&amp;&amp;!document.getElementById)||stopit==1||count==100)
return
count++
if (a==1){
shake.style.top=parseInt(shake.style.top)+rector
}
else if (a==2){
shake.style.left=parseInt(shake.style.left)+rector
}
else if (a==3){
shake.style.top=parseInt(shake.style.top)-rector
}
else{
shake.style.left=parseInt(shake.style.left)-rector
}
if (a<4)
a++
else
a=1
setTimeout(&#34;rattleimage()&#34;,50)
}
function stoprattle(which){
stopit=1
count=0
which.style.left=0
which.style.top=0
}
//-->
</script></p>
<style>.shakeimage {POSITION: relative}
</style>
<p><img src=&#34;图片的路径&#34; onmouseout=stoprattle(this) onmouseover=init(this);rattleimage() class=shakeimage></p>
]]></content:encoded>
			<wfw:commentRss>http://www.birdwang.com/185.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>两段网站的对联广告代码</title>
		<link>http://www.birdwang.com/184.html</link>
		<comments>http://www.birdwang.com/184.html#comments</comments>
		<pubDate>Wed, 10 Jan 2007 18:25:50 +0000</pubDate>
		<dc:creator>飞鸟真</dc:creator>
				<category><![CDATA[技术研究]]></category>

		<guid isPermaLink="false">http://www.birdwang.com/?p=184</guid>
		<description><![CDATA[符合标准的对联广告代码 “原本工作正常的对联广告突然宣布罢工，为什么？标准化真的那么脆弱吗？&#34; 不符合标准的正常工作的对联广告： lastScrollY=0; function heartBeat(){ diffY=document.body.scrollTop; percent=.1*(diffY-lastScrollY); if(percent>0)percent=Math.ceil(percent); else percent=Math.floor(percent); document.getElementById(&#34;lovexin12&#34;).style.top=parseInt(document.getElementById(&#34;lovexin12&#34;).style.top)+percent+&#34;px&#34;; document.getElementById(&#34;lovexin14&#34;).style.top=parseInt(document.getElementById(&#34;lovexin12&#34;).style.top)+percent+&#34;px&#34;; lastScrollY=lastScrollY+percent; } suspendcode12=&#34; ad1 &#34; suspendcode14=&#34; ad2 &#34; document.write(suspendcode12); document.write(suspendcode14); window.setInterval(&#34;heartBeat()&#34;,1); 这个是可以正常运行的，只要你不使用文档类型声明。 但是，标准设计的网页需要进行文档类型声明以告知浏览器按照怎样的规则去解析网页。当我们使用过渡型标准声明的时候，我们发现这个原本工作正常的对联代码不再起作用。 这是符合标准的代码，和上面的区别是它加了文档类型声明： 符合标准的不能正常工作的对联广告 lastScrollY=0; function heartBeat(){ diffY=document.body.scrollTop; percent=.1*(diffY-lastScrollY); if(percent>0)percent=Math.ceil(percent); else percent=Math.floor(percent); document.getElementById(&#34;lovexin12&#34;).style.top=parseInt(document.getElementById(&#34;lovexin12&#34;).style.top)+percent+&#34;px&#34;; document.getElementById(&#34;lovexin14&#34;).style.top=parseInt(document.getElementById(&#34;lovexin12&#34;).style.top)+percent+&#34;px&#34;; lastScrollY=lastScrollY+percent; } &#8230; <a href="http://www.birdwang.com/184.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong><span style="color:Red"><span style="font-size:16pt">符合标准的对联广告代码</span></span></strong></p>
<p>“原本工作正常的对联广告突然宣布罢工，为什么？标准化真的那么脆弱吗？&#34;</p>
<p>不符合标准的正常工作的对联广告：</p>
<p><html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;><br />
<head><br />
<meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34; /></p>
<p><script language=&#34;JavaScript&#34; type=&#34;text/javascript&#34;>
lastScrollY=0;
function heartBeat(){
diffY=document.body.scrollTop;
percent=.1*(diffY-lastScrollY);
if(percent>0)percent=Math.ceil(percent);
else percent=Math.floor(percent);
document.getElementById(&#34;lovexin12&#34;).style.top=parseInt(document.getElementById(&#34;lovexin12&#34;).style.top)+percent+&#34;px&#34;;
document.getElementById(&#34;lovexin14&#34;).style.top=parseInt(document.getElementById(&#34;lovexin12&#34;).style.top)+percent+&#34;px&#34;;
lastScrollY=lastScrollY+percent;
}
suspendcode12=&#34;
<div id=\&#34;lovexin12\&#34; style=&#39;left:2px;POSITION:absolute;TOP:120px;&#39;>ad1</div>
<p>&#34;
suspendcode14=&#34;
<div id=\&#34;lovexin14\&#34; style=&#39;right:2px;POSITION:absolute;TOP:120px;&#39;>ad2</div>
<p>&#34;
document.write(suspendcode12);
document.write(suspendcode14);
window.setInterval(&#34;heartBeat()&#34;,1);
</script></p>
<style type=&#34;text/css&#34;>
<!--
#lovexin12,#lovexin14{
   width:120px;
   height:250px;
   background-color:#e5e5e5;
   border:1px solid #ddd;
}
html,body{
  height:1000px;
  }
#mm{
  height:1000px;
  }
-->
</style>
<p></head></p>
<p><body></p>
<div id=&#34;mm&#34;>
</div>
<p></body><br />
</html></p>
<p>这个是可以正常运行的，只要你不使用文档类型声明。</p>
<p>但是，标准设计的网页需要进行文档类型声明以告知浏览器按照怎样的规则去解析网页。当我们使用过渡型标准声明的时候，我们发现这个原本工作正常的对联代码不再起作用。</p>
<p>这是符合标准的代码，和上面的区别是它加了文档类型声明：</p>
<p><!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Transitional//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#34;></p>
<p>符合标准的不能正常工作的对联广告</p>
<p><!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Transitional//EN&#34; &#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#34;><br />
<html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;><br />
<head><br />
<meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34; /></p>
<p><script language=&#34;JavaScript&#34; type=&#34;text/javascript&#34;>
lastScrollY=0;
function heartBeat(){
diffY=document.body.scrollTop;
percent=.1*(diffY-lastScrollY);
if(percent>0)percent=Math.ceil(percent);
else percent=Math.floor(percent);
document.getElementById(&#34;lovexin12&#34;).style.top=parseInt(document.getElementById(&#34;lovexin12&#34;).style.top)+percent+&#34;px&#34;;
document.getElementById(&#34;lovexin14&#34;).style.top=parseInt(document.getElementById(&#34;lovexin12&#34;).style.top)+percent+&#34;px&#34;;
lastScrollY=lastScrollY+percent;
}
suspendcode12=&#34;
<div id=\&#34;lovexin12\&#34; style=&#39;left:2px;POSITION:absolute;TOP:120px;&#39;>ad1</div>
<p>&#34;
suspendcode14=&#34;
<div id=\&#34;lovexin14\&#34; style=&#39;right:2px;POSITION:absolute;TOP:120px;&#39;>ad2</div>
<p>&#34;
document.write(suspendcode12);
document.write(suspendcode14);
window.setInterval(&#34;heartBeat()&#34;,1);
</script></p>
<style type=&#34;text/css&#34;>
<!--
#lovexin12,#lovexin14{
   width:120px;
   height:250px;
   background-color:#e5e5e5;
   border:1px solid #ddd;
}
html,body{
  height:1000px;
  }
#mm{
  height:1000px;
  }
-->
</style>
<p></head></p>
<p><body></p>
<div id=&#34;mm&#34;>
</div>
<p></body><br />
</html></p>
<p>那么，为什么小小的标准声明让对联广告无法工作呢？</p>
<p>问题的根源：<br />
google了几篇文章之后，找到了真凶！哦，抱歉，没有这么夸张了。<br />
让我们回到第一段代码：<br />
注意这一句：diffY=document.body.scrollTop;<br />
当我们采用标准声明之后，你会发现无论你怎样拖动滚动条，diffY的值始终为零。见鬼了吗？不，事实上从html4/loose.dtd开始，只要你采用了相应的文档类型声明，diffY的值就会恒为零（有一种特殊情况，下面谈）。<br />
为什么会这样？<br />
因为采用标准的文档类型声明后，document.body.scrollTop已经无效，而应该用document.documentElement.scrollTop代替。<br />
不仅仅是scrollTop有这种改变，更多请参加表（一）。<br />
在表（一）中有这样一行：“Note: scrollLeft and scrollTop also work on DIV&#39;s with overflow: auto in Explorer 5+ on Windows and Mozilla 1.1”，这就是我所说的特殊情况。</p>
<p>怎么解决？<br />
将第一段代码做一些修改：</p>
<p>var diffY;<br />
if (document.documentElement &amp;&amp; document.documentElement.scrollTop)<br />
	diffY = document.documentElement.scrollTop;<br />
else if (document.body)<br />
	diffY = document.body.scrollTop<br />
else<br />
    {/*Netscape stuff*/}</p>
<p>符合标准的正常工作的对联广告：</p>
<p><!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Transitional//EN&#34;</p>
<p>&#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#34;><br />
<html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;><br />
<head><br />
<meta http-equiv=&#34;Content-Type&#34; content=&#34;text/html; charset=gb2312&#34; /></p>
<p><script language=&#34;JavaScript&#34; type=&#34;text/javascript&#34;>
lastScrollY=0;
function heartBeat(){
var diffY;
if (document.documentElement &amp;&amp; document.documentElement.scrollTop)
 diffY = document.documentElement.scrollTop;
else if (document.body)
 diffY = document.body.scrollTop
else
    {/*Netscape stuff*/}</p>
<p>//alert(diffY);
percent=.1*(diffY-lastScrollY);
if(percent>0)percent=Math.ceil(percent);
else percent=Math.floor(percent);
document.getElementById(&#34;lovexin12&#34;).style.top=parseInt(document.getElementById</p>
<p>(&#34;lovexin12&#34;).style.top)+percent+&#34;px&#34;;
document.getElementById(&#34;lovexin14&#34;).style.top=parseInt(document.getElementById</p>
<p>(&#34;lovexin12&#34;).style.top)+percent+&#34;px&#34;;</p>
<p>lastScrollY=lastScrollY+percent;
//alert(lastScrollY);
}
suspendcode12=&#34;
<div id=\&#34;lovexin12\&#34; style=&#39;left:2px;POSITION:absolute;TOP:120px;&#39;>ad1</div>
<p>&#34;
suspendcode14=&#34;
<div id=\&#34;lovexin14\&#34; style=&#39;right:2px;POSITION:absolute;TOP:120px;&#39;>ad2</div>
<p>&#34;
document.write(suspendcode12);
document.write(suspendcode14);
window.setInterval(&#34;heartBeat()&#34;,1);
</script></p>
<style type=&#34;text/css&#34;>
<!--
#lovexin12,#lovexin14{
   width:120px;
   height:250px;
   background-color:#e5e5e5;
   border:1px solid #ddd;
}
html,body{
  height:1000px;
  }
#mm{
  height:1000px;
  }
-->
</style>
<p></head></p>
<p><body></p>
<div id=&#34;mm&#34;>
</div>
<p></body><br />
</html></p>
<p>以上代码在ie6.0,firefox1.5.0.3,opera7.23下测试通过。<br />
ok,大功告成，干杯！<br />
多说一句，DOCTYPE经常被人忽略，今天看来，实在不应该。</p>
<p><strong><span style="color:Red"><span style="font-size:16pt">网站Flash对联广告源代码</span></span></strong></p>
<p>把下面这段代码保存为 adver-left.js<br />
var imgheight<br />
var imgleft<br />
document.ns = navigator.appName == &#34;Netscape&#34;<br />
window.screen.width>800 ? imgheight=100:imgheight=100<br />
window.screen.width>800 ? imgleft=15:imgleft=122<br />
function myload()<br />
{<br />
if (navigator.appName == &#34;Netscape&#34;)<br />
{document.myleft.pageY=pageYOffset+window.innerHeight-imgheight;<br />
document.myleft.pageX=imgleft;<br />
leftmove();<br />
}<br />
else<br />
{<br />
myleft.style.top=document.body.scrollTop+document.body.offsetHeight-imgheight;<br />
myleft.style.left=imgleft;<br />
leftmove();<br />
}<br />
}<br />
function leftmove()<br />
{<br />
if(document.ns)<br />
{<br />
document.myleft.top=pageYOffset+window.innerHeight-imgheight<br />
document.myleft.left=imgleft;<br />
setTimeout(&#34;leftmove();&#34;,80)<br />
}<br />
else<br />
{<br />
myleft.style.top=document.body.scrollTop+document.body.offsetHeight-imgheight;<br />
myleft.style.left=imgleft;<br />
setTimeout(&#34;leftmove();&#34;,80)<br />
}<br />
}</p>
<p>if (navigator.appName == &#34;Netscape&#34;)<br />
{<br />
document.write(&#34;<layer id=myleft top=300 width=80 height=88><embed src=&#39;swf/00001.swf&#39; quality=high WIDTH=80 HEIGHT=80 TYPE=&#39;application/x-shockwave-flash&#39; id=changhongout wmode=&#39;transparent&#39;></embed></layer>&#34;);<br />
myload()}<br />
else<br />
{<br />
document.write(&#34;
<div id=myleft style=&#39;position: absolute;width:80;top:150;left:5;visibility: visible;z-index: 1&#39;><embed src=&#39;swf/00001.swf&#39; quality=high WIDTH=80 HEIGHT=80 TYPE=&#39;application/x-shockwave-flash&#39; id=changhongout wmode=&#39;transparent&#39;></embed></div>
<p>&#34;);<br />
myload()<br />
}</p>
<p>把下面这段代码保存为 adver-right.js<br />
var imgheight<br />
document.ns = navigator.appName == &#34;Netscape&#34;<br />
window.screen.width>800 ? imgheight=100:imgheight=100<br />
function myload()<br />
{<br />
if (navigator.appName == &#34;Netscape&#34;)<br />
{document.dangdang.pageY=pageYOffset+window.innerHeight-imgheight;<br />
document.dangdang.pageX=+window.innerWidth-120;<br />
mymove();<br />
}<br />
else<br />
{<br />
dangdang.style.top=document.body.scrollTop+document.body.offsetHeight-imgheight;<br />
dangdang.style.left=document.body.offsetWidth-120;<br />
mymove();<br />
}<br />
}<br />
function mymove()<br />
{<br />
if(document.ns)<br />
{<br />
document.dangdang.top=pageYOffset+window.innerHeight-imgheight;<br />
document.dangdang.left=pageXOffset+window.innerWidth-120;<br />
setTimeout(&#34;mymove();&#34;,50)<br />
}<br />
else<br />
{<br />
dangdang.style.top=document.body.scrollTop+document.body.offsetHeight-imgheight;<br />
dangdang.style.left=document.body.scrollLeft+document.body.offsetWidth-120;<br />
setTimeout(&#34;mymove();&#34;,50)<br />
}<br />
}</p>
<p>function MM_reloadPage(init) { //reloads the window if Nav4 resized<br />
if (init==true) with (navigator) {if ((appName==&#34;Netscape&#34;)&amp;&amp;(parseInt(appVersion)==4)) {<br />
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}<br />
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();<br />
}<br />
MM_reloadPage(true)</p>
<p>if (navigator.appName == &#34;Netscape&#34;)<br />
{document.write(&#34;<layer id=dangdang top=300 width=80 height=88><embed src=&#39;swf/00001.swf&#39; quality=high WIDTH=80 HEIGHT=80 TYPE=&#39;application/x-shockwave-flash&#39;></embed></layer>&#34;);<br />
myload()}<br />
else<br />
{<br />
document.write(&#34;
<div id=dangdang style=&#39;position: absolute;width:80;top:0;left:578;visibility: visible;z-index: 1&#39;><embed src=&#39;swf/00001.swf&#39; quality=high WIDTH=80 HEIGHT=80 TYPE=&#39;application/x-shockwave-flash&#39;></embed></div>
<p>&#34;);<br />
myload()<br />
}</p>
<p>网页中是这样调用,注意修改 js 文件的路径<br />
<script src=&#34;js/adver-left.js&#34;></script><br />
<script src=&#34;js/adver-right.js&#34;></script><br />
上面两段代码中的 src=&#39;swf/00001.swf&#39; ,改为自己广告的flash的路径</p>
]]></content:encoded>
			<wfw:commentRss>http://www.birdwang.com/184.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MicroSoft.NET Framework 3.0正式发布了</title>
		<link>http://www.birdwang.com/169.html</link>
		<comments>http://www.birdwang.com/169.html#comments</comments>
		<pubDate>Wed, 08 Nov 2006 01:38:44 +0000</pubDate>
		<dc:creator>飞鸟真</dc:creator>
				<category><![CDATA[技术研究]]></category>

		<guid isPermaLink="false">http://www.birdwang.com/?p=169</guid>
		<description><![CDATA[11月6日，微软正式发布了.Net Framework 3.0，从IE7到.Net3.0，可以看到Vista时代即将到来了，Vista时代的操作系统桌面元素将更加丰富、网络性更强。你做好准备了吗？ Net 3.0原来叫做WinFX，几个月前正式做了改名。这次改名是很有意义的，也显示出了MS对未来路线的清晰规划。3.0中主要包含Work Flow Foundation(WF), Windows Communication Foundation(WCF), Windows CardSpace 以及 Windows Presentaion Foundation(WPF)。其中，WF是一个工作流框架，支持基于工作流的design和开发，而CardSpace是用来代替用户名和密码的数字验证机制。更令我期待的，是WCF和WPF。WCF把原本各式各样的应用程序通信机制统一了起来。原来有Web Service, .Net Remoting, WSE, MSMQ等等，如此多的通信机制互不兼容，带来了很多的麻烦。WCF的出现给我们带来了光明。而WPF继续将Asp.Net中的code behind发扬光大，不仅将UI Design和implement很好的解耦，还将UI元素用XAML表示出来，可以与code相互转化。此外，WPF中的XBAPs支持将WPF Application放在Browser中执行，终于将Web和桌面又拉进了一步。 .Net3.0官方网站：http://www.netfx3.com/]]></description>
			<content:encoded><![CDATA[<p><img src="attachments/month_0611/k200611813434.jpg" border="0" alt=""/></p>
<p><strong><span style="color:Brown">11月6日，微软正式发布了.Net Framework 3.0，从IE7到.Net3.0，可以看到Vista时代即将到来了，Vista时代的操作系统桌面元素将更加丰富、网络性更强。你做好准备了吗？</span></strong></p>
<p>Net 3.0原来叫做WinFX，几个月前正式做了改名。这次改名是很有意义的，也显示出了MS对未来路线的清晰规划。3.0中主要包含Work Flow Foundation(WF), Windows Communication Foundation(WCF), Windows CardSpace 以及 Windows Presentaion Foundation(WPF)。其中，WF是一个工作流框架，支持基于工作流的design和开发，而CardSpace是用来代替用户名和密码的数字验证机制。更令我期待的，是WCF和WPF。WCF把原本各式各样的应用程序通信机制统一了起来。原来有Web Service, .Net Remoting, WSE, MSMQ等等，如此多的通信机制互不兼容，带来了很多的麻烦。WCF的出现给我们带来了光明。而WPF继续将Asp.Net中的code behind发扬光大，不仅将UI Design和implement很好的解耦，还将UI元素用XAML表示出来，可以与code相互转化。此外，WPF中的XBAPs支持将WPF Application放在Browser中执行，终于将Web和桌面又拉进了一步。</p>
<p><img src="attachments/month_0611/q200611813442.jpg" border="0" alt=""/></p>
<p>.Net3.0官方网站：http://www.netfx3.com/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.birdwang.com/169.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET 2.0 参考书</title>
		<link>http://www.birdwang.com/155.html</link>
		<comments>http://www.birdwang.com/155.html#comments</comments>
		<pubDate>Tue, 10 Oct 2006 00:18:21 +0000</pubDate>
		<dc:creator>飞鸟真</dc:creator>
				<category><![CDATA[技术研究]]></category>

		<guid isPermaLink="false">http://www.birdwang.com/?p=155</guid>
		<description><![CDATA[今天去图书大世界把我最近关注的三本ASP.NET2.0的书籍仔细看了看，感觉都一般般~ 第一本： 《ASP.NET 2.0网络编程从入门到精通（珍藏版）》 这本书是三本书里我觉得唯一还有点用处的书，实例写的不错，只是有些简单，不适合高级应用以及更复杂的系统开发，比较适合初学者以及入门使用。 第二本： 《ASP.NET 2.0+SQL Server网络应用系统开发案例精解（珍藏版）》 完全是打着2.0的旗号骗钱了，里面的内容基本是用ASP.NET1.1写的，这本书跟上面那本是同一个系列，并且同时推出的。原来翻阅过几本这个《网站开发非常之旅》系列的书，以为这本会写的好点，没想到让我有些失望。如果使用1.1开发，这本书还是值得参考的，因为实例比较多，比较全，但是如果是2.0的开发者，就不推荐了，基本找不到2.0的东西。 第三本： 《ASP.NET 2.0应用开发技术》 冲着“CSDN社区 Web开发版大版主孟宪会年度奉献,作者多年经验与心得的总结”这句话去的，呵呵，翻开书看了看，满篇的原代码，还分成了C#.NET和VB.NET部分，文字说明部分比较少。实在搞不懂这本书的定位，给初学者看，满篇幅的代码容易让其看昏了头；给高级开发人员看，一些理念表达的又不太彻底，缺乏足够的文字说明与解释。如果说把C#和VB的代码从本书中删除，不知道文字部分能剩多少页~ 以上纯属个人观点，ASP.NET2.0的中文书籍现在还不多，市面上的书籍让人感觉参差不齐。如果急需ASP.NET2.0的参考资料可以去看些电子版的英文书籍，看过一些，写的很不错。毕竟ASP.NET2.0是老美弄出来的，他们接触的时间比较长，对.NET2.0也摸的比较彻底，写的东西以比较实用。 推荐一个下载英文ASP.NET2.0 PDF文档的BT网站，在里面能找到不少2.0的PDF电子书~ http://www.torrentz.com/search_asp-net]]></description>
			<content:encoded><![CDATA[<p>今天去图书大世界把我最近关注的三本ASP.NET2.0的书籍仔细看了看，感觉都一般般~</p>
<p>第一本：<br />
<img src="attachments/month_0610/c200610100190.gif" border="0" alt=""/><br />
《ASP.NET 2.0网络编程从入门到精通（珍藏版）》<br />
这本书是三本书里我觉得唯一还有点用处的书，实例写的不错，只是有些简单，不适合高级应用以及更复杂的系统开发，比较适合初学者以及入门使用。</p>
<p>第二本：<br />
<img src="attachments/month_0610/22006109234922.gif" border="0" alt=""/><br />
《ASP.NET 2.0+SQL Server网络应用系统开发案例精解（珍藏版）》<br />
完全是打着2.0的旗号骗钱了，里面的内容基本是用ASP.NET1.1写的，这本书跟上面那本是同一个系列，并且同时推出的。原来翻阅过几本这个《网站开发非常之旅》系列的书，以为这本会写的好点，没想到让我有些失望。如果使用1.1开发，这本书还是值得参考的，因为实例比较多，比较全，但是如果是2.0的开发者，就不推荐了，基本找不到2.0的东西。</p>
<p>第三本：<br />
<img src="attachments/month_0610/v2006109234931.gif" border="0" alt=""/><br />
《ASP.NET 2.0应用开发技术》<br />
冲着“CSDN社区 Web开发版大版主孟宪会年度奉献,作者多年经验与心得的总结”这句话去的，呵呵，翻开书看了看，满篇的原代码，还分成了C#.NET和VB.NET部分，文字说明部分比较少。实在搞不懂这本书的定位，给初学者看，满篇幅的代码容易让其看昏了头；给高级开发人员看，一些理念表达的又不太彻底，缺乏足够的文字说明与解释。如果说把C#和VB的代码从本书中删除，不知道文字部分能剩多少页~</p>
<p>以上纯属个人观点，ASP.NET2.0的中文书籍现在还不多，市面上的书籍让人感觉参差不齐。如果急需ASP.NET2.0的参考资料可以去看些电子版的英文书籍，看过一些，写的很不错。毕竟ASP.NET2.0是老美弄出来的，他们接触的时间比较长，对.NET2.0也摸的比较彻底，写的东西以比较实用。</p>
<p>推荐一个下载英文ASP.NET2.0 PDF文档的BT网站，在里面能找到不少2.0的PDF电子书~</p>
<p>http://www.torrentz.com/search_asp-net</p>
]]></content:encoded>
			<wfw:commentRss>http://www.birdwang.com/155.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>asp.net 2的文件上传</title>
		<link>http://www.birdwang.com/145.html</link>
		<comments>http://www.birdwang.com/145.html#comments</comments>
		<pubDate>Sat, 30 Sep 2006 00:59:44 +0000</pubDate>
		<dc:creator>飞鸟真</dc:creator>
				<category><![CDATA[技术研究]]></category>

		<guid isPermaLink="false">http://www.birdwang.com/?p=145</guid>
		<description><![CDATA[在asp.net 2.0中，上传文件时变的比较方便了，因为有了fileupload控件，使用十分简单，if (FileUpload1.HasFile)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; try&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; FileUpload1.SaveAs(&#34;d:\\luceneData\\&#34; + FileUpload1.FileName);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Label1.Text = &#34;File name: &#34; +&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; FileUpload1.PostedFile.FileName + &#34;&#60;br&#62;&#34; +&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; FileUpload1.PostedFile.ContentLength + &#34; kb&#60;br&#62;&#34; +&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#34;Content type: &#34; +&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; FileUpload1.PostedFile.ContentType;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; catch (Exception ex)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Label1.Text = &#34;ERROR: &#34; + ex.Message.ToString();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8230; <a href="http://www.birdwang.com/145.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class="postText">
<p>在asp.net 2.0中，上传文件时变的比较方便了，因为有了fileupload控件，使用十分简单，<br />if (FileUpload1.HasFile)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />&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;&nbsp;&nbsp; FileUpload1.SaveAs(&quot;d:\\luceneData\\&quot; + FileUpload1.FileName);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label1.Text = &quot;File name: &quot; +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileUpload1.PostedFile.FileName + &quot;&lt;br&gt;&quot; +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileUpload1.PostedFile.ContentLength + &quot; kb&lt;br&gt;&quot; +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Content type: &quot; +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileUpload1.PostedFile.ContentType;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception ex)<br />&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;&nbsp;&nbsp; Label1.Text = &quot;ERROR: &quot; + ex.Message.ToString();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label1.Text = &quot;You have not specified a file.&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />还可以在web.config文件中，突破默认上传限制的4MB，比如<br />&lt;httpRuntime<br />executionTimeout=&quot;110&quot;<br />maxRequestLength=&quot;11000&quot;<br />requestLengthDiskThreshold=&quot;80&quot;<br />useFullyQualifiedRedirectUrl=&quot;false&quot;<br />minFreeThreads=&quot;8&quot;<br />minLocalRequestFreeThreads=&quot;4&quot;<br />appRequestQueueLimit=&quot;5000&quot;<br />enableKernelOutputCache=&quot;true&quot;<br />enableVersionHeader=&quot;true&quot;<br />requireRootedSaveAsPath=&quot;true&quot;<br />enable=&quot;true&quot;<br />shutdownTimeout=&quot;90&quot;<br />delayNotificationTimeout=&quot;5&quot;<br />waitChangeNotification=&quot;0&quot;<br />maxWaitChangeNotification=&quot;0&quot;<br />enableHeaderChecking=&quot;true&quot;<br />sendCacheControlHeader=&quot;true&quot;<br />apartmentThreading=&quot;false&quot; /&gt;</p>
<p>设置maxRequestLenth属性，这里为11000KB，即11MB。</p>
<p>而对于多文件上传，也很简单，比如一个例子<br />string filepath = &quot;d:\\luceneData\\&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpFileCollection uploadedFiles = Request.Files;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; uploadedFiles.Count; i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpPostedFile userPostedFile = uploadedFiles[i];</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />&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;&nbsp;&nbsp; if (userPostedFile.ContentLength &gt; 0)<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label1.Text += &quot;&lt;u&gt;File #&quot; + (i + 1) +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&lt;/u&gt;&lt;br&gt;&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label1.Text += &quot;File Content Type: &quot; +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userPostedFile.ContentType + &quot;&lt;br&gt;&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label1.Text += &quot;File Size: &quot; +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userPostedFile.ContentLength + &quot;kb&lt;br&gt;&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label1.Text += &quot;File Name: &quot; +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userPostedFile.FileName + &quot;&lt;br&gt;&quot;;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userPostedFile.SaveAs(filepath + &quot;\\&quot; +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.IO.Path.GetFileName(userPostedFile.FileName));</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label1.Text += &quot;Location wh&#101;re saved: &quot; +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filepath + &quot;\\&quot; +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.IO.Path.GetFileName(userPostedFile.FileName) +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&lt;p&gt;&quot;;<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; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception Ex)<br />&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;&nbsp;&nbsp; Label1.Text += &quot;Error: &lt;br&gt;&quot; + Ex.Message;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; }</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.birdwang.com/145.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为ASP.NET 2.0配置数据源</title>
		<link>http://www.birdwang.com/144.html</link>
		<comments>http://www.birdwang.com/144.html#comments</comments>
		<pubDate>Sat, 30 Sep 2006 00:55:21 +0000</pubDate>
		<dc:creator>飞鸟真</dc:creator>
				<category><![CDATA[技术研究]]></category>

		<guid isPermaLink="false">http://www.birdwang.com/?p=144</guid>
		<description><![CDATA[在ASP.NET 2.0中提供了大量的Provider，以及Master Page、Theme/Skin等新技术，而这些技术都需要有一个数据库的支持。而ASP.NET 2.0默认的是采用SQL Express，在实际开发中我们用的最多的还是Sql Server，因为我们要进行一定的配置。下面简要叙述在ASP.NET 2.0中使用SQL Server 2K/2K5做支持数据库的步骤： 在Visuaol Studio 2005的命令行环境中执行命令：aspnet_regsql。该工具可以为ASP.NET 2.0在指定的SQL Server上建立或指定一个支持数据库，默认名字为aspnetdb 接下来需要修改配置文件，可以在通过修改$:WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config来实现，但修改machine.config文件并不是一个好的方法，好在ASP.NET 2.0提供了在Web.Config文件中修改的办法。 打开一个Web应用程序的Web.Config文件，添加如下配置节： &#60;connectionStrings&#62;&#160;&#160;&#160;&#160;&#60;remove&#160;name=&#34;LocalSqlServer&#34;&#160;/&#62;&#160;&#160;&#160;&#160;&#60;add&#160;name=&#34;LocalSqlServer&#34;&#160;connectionString=&#34;server=(local);trusted_connection=false;user&#160;id=sa;pwd=8848;database=aspnetdb&#34;&#160;providerName=&#34;System.Data.SqlClient&#34;&#160;/&#62;&#60;/connectionStrings&#62; 首先用remove去掉在machine.config中定义的LocalSqlSever连接配置，那个连接是指向本地安装的Sql Express的；然后再重新添加一个LocalSqlServer数据库连接指向想要设定的Sql Server服务器数据库。 然后在&#60;system.web&#62;节点中去配置一个默认的使用LocalSqlServer数据连接的Provider，如下： &#60;system.web&#62;&#160;&#160;&#160;&#160;&#60;membership&#160;defaultProvider=&#34;SqlMembershipProvider&#34;&#62;&#160;&#160;&#160;&#160;&#160;&#160;&#60;providers&#62;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#60;add&#160;connectionStringName=&#34;LocalSqlServer&#34;&#160;name=&#34;SqlMembershipProvider&#34;&#160;type=&#34;System.Web.Security.SqlMembershipProvider,&#160;System.Web,&#160;Version=2.0.0.0,&#160;Culture=neutral,&#160;PublicKeyToken=b03f5f7f11d50a3a&#34;/&#62;&#160;&#160;&#160;&#160;&#160;&#160;&#60;/providers&#62;&#160;&#160;&#160;&#160;&#60;/membership&#62;&#60;/system.web&#62; 这样配置文件就OK了。可以通过在VS中点击Web Site菜单下的ASP.NET配置来进行测试是否已经成功。]]></description>
			<content:encoded><![CDATA[<p>在ASP.NET 2.0中提供了大量的Provider，以及Master Page、Theme/Skin等新技术，而这些技术都需要有一个数据库的支持。而ASP.NET 2.0默认的是采用SQL Express，在实际开发中我们用的最多的还是Sql Server，因为我们要进行一定的配置。<br />下面简要叙述在ASP.NET 2.0中使用SQL Server 2K/2K5做支持数据库的步骤：</p>
<ol>
<li>在Visuaol Studio 2005的命令行环境中执行命令：aspnet_regsql。该工具可以为ASP.NET 2.0在指定的SQL Server上建立或指定一个支持数据库，默认名字为aspnetdb</li>
<li>接下来需要修改配置文件，可以在通过修改$:WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config来实现，但修改machine.config文件并不是一个好的方法，好在ASP.NET 2.0提供了在Web.Config文件中修改的办法。</li>
<li>打开一个Web应用程序的Web.Config文件，添加如下配置节：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://xrinehart.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">connectionStrings</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://xrinehart.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">remove&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">=&quot;LocalSqlServer&quot;</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://xrinehart.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">add&nbsp;</span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">=&quot;LocalSqlServer&quot;</span><span style="COLOR: #ff0000">&nbsp;connectionString</span><span style="COLOR: #0000ff">=&quot;server=(local);trusted_connection=false;user&nbsp;id=sa;pwd=8848;database=aspnetdb&quot;</span><span style="COLOR: #ff0000">&nbsp;providerName</span><span style="COLOR: #0000ff">=&quot;System.Data.SqlClient&quot;</span><span style="COLOR: #ff0000">&nbsp;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://xrinehart.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">connectionStrings</span><span style="COLOR: #0000ff">&gt;</span></div>
<p>首先用remove去掉在machine.config中定义的LocalSqlSever连接配置，那个连接是指向本地安装的Sql Express的；然后再重新添加一个LocalSqlServer数据库连接指向想要设定的Sql Server服务器数据库。</li>
<li>然后在&lt;system.web&gt;节点中去配置一个默认的使用LocalSqlServer数据连接的Provider，如下：
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://xrinehart.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">system</span><span style="COLOR: #ff0000">.web</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://xrinehart.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">membership&nbsp;</span><span style="COLOR: #ff0000">defaultProvider</span><span style="COLOR: #0000ff">=&quot;SqlMembershipProvider&quot;</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://xrinehart.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">providers</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://xrinehart.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">add&nbsp;</span><span style="COLOR: #ff0000">connectionStringName</span><span style="COLOR: #0000ff">=&quot;LocalSqlServer&quot;</span><span style="COLOR: #ff0000">&nbsp;name</span><span style="COLOR: #0000ff">=&quot;SqlMembershipProvider&quot;</span><span style="COLOR: #ff0000">&nbsp;type</span><span style="COLOR: #0000ff">=&quot;System.Web.Security.SqlMembershipProvider,&nbsp;System.Web,&nbsp;Version=2.0.0.0,&nbsp;Culture=neutral,&nbsp;PublicKeyToken=b03f5f7f11d50a3a&quot;</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://xrinehart.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">providers</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://xrinehart.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">membership</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://xrinehart.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" alt="" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">system.web</span><span style="COLOR: #0000ff">&gt;</span></div>
<p></li>
<li>这样配置文件就OK了。可以通过在VS中点击Web Site菜单下的ASP.NET配置来进行测试是否已经成功。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.birdwang.com/144.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
