最好的软件结构就是以自然界的规律为标准 搜索引擎索引网页,我索引搜索引擎
( Thu, 28 Jul 2011 17:22:46 +0800 )
Description:
( Thu, 28 Jul 2011 17:22:32 +0800 )
Description:
( Thu, 28 Jul 2011 17:22:26 +0800 )
Description:
( Thu, 28 Jul 2011 17:22:18 +0800 )
Description:
dddddddd
( Tue, 26 Jul 2011 06:29:04 +0800 )
Description:
( Tue, 26 Jul 2011 06:24:43 +0800 )
Description:
( Mon, 25 Jul 2011 07:58:41 +0800 )
Description:
( Mon, 25 Jul 2011 07:55:47 +0800 )
Description:
( Sun, 24 Jul 2011 09:18:11 +0800 )
Description:
dmjg.tpwmjad
( Sat, 23 Jul 2011 23:10:33 +0800 )
Description:
时代的幅度是许多是
( Sat, 23 Jul 2011 09:46:54 +0800 )
Description:
GDBGDSHH
( Sat, 23 Jul 2011 09:18:53 +0800 )
Description:
bgdfnxd
( Sat, 23 Jul 2011 09:15:49 +0800 )
Description:
( Sat, 23 Jul 2011 09:06:38 +0800 )
Description:
gdjmgagd.m
( Sat, 23 Jul 2011 09:05:37 +0800 )
Description:
gmj.mgj
( Tue, 12 Jul 2011 12:30:01 +0800 )
Description:
腐败问题估计短期治不了,不信大家调查一下zg的官员都是为什么而当官(不用调查大家都知道)。想杜绝腐败,必须把为官作为一种精神享受,而 物资享受 是 精神享受 的基础,所以必须先解决“温饱”才能杜绝腐败。
“温饱”是相对的,除了最基本的吃饭问题外,取决于人对物资的贪婪程度。
当然,我这里的“温饱”指的是多数人的需求程度,而不是少数人的贪婪程度。
( Tue, 5 Jul 2011 10:32:11 +0800 )
Description:
中国食品 最大的毒枭
( Tue, 5 Jul 2011 10:27:30 +0800 )
Description:
( Tue, 5 Jul 2011 09:32:53 +0800 )
Description:
为什么“光脚的不怕穿鞋的”?
1,破罐子破摔;
2,光脚的背后有“人”撑着;
怎么把“光脚的不怕穿鞋的”这种扭曲的事实,再扭曲过来?
修改法律:光脚的 和 穿鞋的 发生矛盾的时候
0,假设光脚的有前科,判过10年,还有未揭发的也就是未判决的“潜在”罪行的累计应该是3年
1,如果光脚的杀了穿鞋的,严惩不贷;
2,如果穿鞋的杀了光脚的,在应有的判决上 减去光脚的曾有的罪行(10+3=13)13年
这样才能扭转过来。
( Wed, 29 Jun 2011 09:47:48 +0800 )
Description:
由于公司的产品在新的版本中,需要考虑一些新的部署方式,所以又抽空关注了一下.NET跨平台的一些解决方案。虽然
对基于.NET开发的人来说都不陌生,不过由于Mono是比较狭义的跨平台(因为它是OS级别的)概念。而从广义的角度来说,使用不同的Web Server也可以算是一种垮平台。 缘起是由于IIS的口碑实在太滥,以至于不少的关键应用场景明文禁止***和使用IIS。而从ASP.NET的执行原理来看,它是通过一个Web Server处理tcp请求,然后把对ASPX执行和呈现交于使用.NET实现一个托管环境来进行的。所以使用Apache是目前最经济的IIS替代品,而同时在Apache的sub-project正好有一个支持ASP.NET的模块,并且已经开发到了2.0版本。我所配合使用的版本是
。***非常的简单,两个程序都是msi***包,一路next就搞定了。完了再在***目录/htdocs下建一个目录,如:active。 不过其中有两个小问题需要注意: 一是:在***Apache HTTP Server的时候,如果我们机器上的80端口已被占用,需要选使用8080端口来***那个选项,当然这个端口是可以在httpd.conf文件里修改的。只是使用这种***方式***好以后需要手动的启动apache2服务,使用cmd命令并进入apache***目录,如:D:\Program Files\Apache Group\Apache2\bin,运行:apache -k i tall。 二是:在配置a dotnet_module的时候,我们需要在httpd.conf文件中追加以下清单:
#a .net
LoadModule a dotnet_module "modules/mod_a dotnet.so"
AddHandler a .net asax ascx ashx asmx a x axd config c c roj licx rem resource resx oa v v roj vsdisco webinfo
IfModule mod_a dotnet.c
# Mount the ASP.NET example a lication
A NetMount /active "J:/Working/BIVSS"
# Ma all request for /active to the a licatio files
Alia /active "J:/Working/BIVSS"
# Allow a .net cript to e executed i the active example
Directory "J:/Working/BIVSS"
Optio FollowSymlink ExecCGI
Order allow,deny
Allow from all
DirectoryIndex Default.htm Default.a x
Directory
# For all virtual ASP.NET we , we eed the a et_client files
# to erve the client-side helper cripts.
AliasMatch /a et_client/system_web/(\d+)_(\d+)_(\d+)_(\d+)/(.*) "C:/Windows/Microsoft.NET/Framework/v$1.$2.$3/ASP.NETClientFiles/$4"
Directory "C:/Windows/Microsoft.NET/Framework/v*/ASP.NETClientFiles"
Optio FollowSymlinks
Order allow,deny
Allow from all
Directory
IfModule
本来这个配置文件很简单,还有详细的注释。不过一定要注意上面的命令(非#开头的行),都需要写在一行上,如果是从网页上copy要特别的小心,特别是AddHandler和AliasMatch这两句容易被断成两行,那样启动apache服务就会失败,并且提示非常简单,根本不会告诉你配置文件加载错误
。 目前,这个mod_a dotnet模块最大的问题是在认证支持上的不足,比如windows和form都还不能支持,不过开源的东西更新还是很快的。由于使用Microsoft .NET Framework作为CLR,开发更新的压力和Mono不在一个数量级上,相信很快就能有对页面认证的较好支持。 ***成功后可以运行探针来检查效果,比如使用迈克老猫同志的
。 服务器基本信息 服务器名称: birdshome 服务器IP地址: 127.0.0.1 .NET Framework语言种类: English (United States) .NET Framework 版本: 2.050727.29 服务器端口: 80 服务器域名: localhost 服务器时间: 11/18/2005 12:11:39 AM 服务器操作系统: Microsoft Windows XP 服务器空间占用: .13 站点物理路径: D:\Program Files\Apache Group\Apache2\htdocs\active\ 服务器IE浏览器版本: 6.0000 服务器IIS版本: Apache/2.0.55 (Win32) 服务器上次启动到现在已运行: 12883秒 脚本超时: 30000000秒 虚拟目录绝对路径: D:\Program Files\Apache Group\Apache2\htdocs\active\ 执行文件绝对路径: D:\Program Files\Apache Group\Apache2\htdocs\active\SiteInfo.a x 服务器操作系统***目录: C:\WINDOWS 服务器应用程序***目录: C:\Program Files CPU个数: 本计算机中有1个CPU CPU类型: x86 Family 15 Model 3 Ste ing 3 CPU等级: CPU等级为50528271 CPU OEM ID: CPU的OEM ID为0 CPU页面大小: CPU中的页面大小为4096 75%的内存正在使用 物理内存共有510MB 可使用的物理内存有126MB 交换文件总大小为1245MB 尚可交换文件大小为750MB 总虚拟内存有2047MB 未用虚拟内存有1817MB 逻辑驱动器: A: ||C: ||D: ||E: ||F: ||G: ||H: ||J: ||K: ||L: ||M: 最后一定要注意:
由于apache本身对于url的目录和文件名是大小写敏感的,所以a .net的虚拟目录必须要注意大小写,否则访问的时候不会出错,不过将会找不到任何的文件,就像访问一个空的目录一样。除了虚拟目录名外,由于其它的a x文件是mod_a dotnet模块载入的,所以又仍然是非大小写敏感的。
( Mon, 27 Jun 2011 14:16:06 +0800 )
Description:
元首的忠告
“不需要让青少年有判断力和批判力。只要给他们汽车、摩托车、美丽的明星、刺激的音乐、流行的服饰,以及对同伴的竞争意识就行了。剥夺青少年的思考力,根植他们服从指导者命令的服从心才是上策。让他们对批判国家、社会和指导者抱持着一种动物般原始的憎恶。让他们深信那是少数派和异端者的罪恶。让他们都有同样的想法。让他们认为想法和大家不同的人就是国家的敌人……”
――阿道夫希特勒
( Mon, 27 Jun 2011 12:18:29 +0800 )
Description:
领导发短信给女秘:想死你了,在国际大酒店1203号房,快来!却不小心按了群发键。片刻,回复纷至。
女秘书:德性,干嘛猴急!
女友:昨晚刚做,现在又要?
女科长:领导,今天不行,大姨妈来了!
男副主任:我咋不知道你也是同志啊?!
女部下:马上到!
对门王姐:今天老公在家,明天行吗?
女副主任:你才想起我呀?
离异女同事:早不说,我离异都半年了!
女副科长:在外面办事,要两小时后才到!
女上司:去那么远干吗,到我办公室来!
老婆:花那冤枉干嘛,回来!
中秋来临,祝愿论坛里的每位朋友中秋快乐!
男性同胞们,别玩太多高科技,小心群发
( Mon, 27 Jun 2011 09:33:12 +0800 )
Description:
1、免费与收费
windows
和Linux都是免费的,至少对个人用户是如此,如果那天国内windows真的严打盗版了,那linux的春天就到了!但现在linux依然是任重道远,前路漫漫。
与支持
windows下可以运行绝大部分软件、玩99.999%的
厂商近乎100%的支持。linux下可直接运行的软件数量和win下比起来就是1和99的区别,而且目前选择linux的人基本不会考虑玩游戏(虽然有能在linux下运行的游戏,但实在太少。),同时linux正期待更多硬件厂商的支持。
3、安全性
很多人说linux安全性高,仁者见仁智者见智了。其实我觉得这个根本没必要讨论,当linux普及程度达到现在windows的程度,那么linux的漏洞、病毒、木马、后门什么的绝对会如雨后春笋般纷纷冒出,虽不敢说比windows严重,但绝对不会比win少,说白了就是因为现在linux的用户量太少,受关注也太少,做病毒者当然希望自己的作品流传越广越好(现在的病毒更倾向于获取非法利益,比如账号密码什么的),所以,病毒目前不会考虑少数派的linuxer。
世上没有攻不破的
、没有穿不透的防火墙,一件事你做不到,只能说明你水平不够,这里适用一句话:道高一尺,魔高一丈。
但就目前来说,如果你对windows下层出不穷的病毒、木马、垃圾感到极度厌恶,那的确可以尝试一下linux噢。
4、开源
开源就是指对外部开放软件源代码。
如果一个小程序员写了个软件,里面有他独创的新
,他想靠这个赚钱,甚至还为此申请了专利,这时某些团体以安全为由,要求他公开源代码(这样就可以仿制了嘛。),并且最好免费给大家使用,身边一群眼红程序员赚钱的人也在跟着起哄。一个独立商业团体的合法知识产权、资产权益遭受政治强权的公开侵占、迫害,这就是
在欧洲所面临的开源问题(至于微软是否是奸商,这是另一码事,并不能成为打砸抢、吃大户的理由)
开源与否,软件厂商有选择的权力;是否购买使用这个产品,这才是用户的权利。
其实想深一点,如果linux不开源,它还能有现在这个市场吗?因为很多人就是冲着开源才使用linux的。
5、使用习惯
一样的地方:桌面、图标、鼠标点击,有区别吗?不一样的是,windows放弃了dos的字符模式,主攻图形界面,让桌面系统更易用。linux字符模式运行的更好,图形界面还只是附带品,可有可无。根据他们的上市时间来看,只能说linux把windows扔掉的东西又捡回来并且发扬光大。
6、技术支持
如果你不熟悉或从来没接触过
学windows --那身边随便一个上过网的人都可以指点你两下。学linux--呵呵,买书或上网查吧,深度的linux版块就不错,至于用什么上网,你说呢?
如果你熟悉电脑和上网,那w和l其实没什么区别,网上都有海量的资料给你查。但是找修windows电脑的人远比找一个修linux电脑的人容易得多,没办法,这是现实。
7、易用性
有人认为windows简单易用;有人认为没有区别而只是使用习惯的问题;也有少数人认为linux更易用,人们喜欢简单实用的东西,那么来看看市场、看看身边人用什么吧!windows和linux都不是什么刚刚推出的新系统。
另外,还是要提一下,安全性与易用性方便性是相对的,越安全就越难用,越易用就越不安全,这也算是一个铁律,就像我们的银行密码一样(128位密码肯定安全,但普通人谁会这么麻烦?)
8、定制和编译
和臃肿的windows比起来,定制才是linux的最大优势!虽然windows也有嵌入系统,但和linux比起来还是远远不如。因为源码开放,所以可以自己编译linux,肯定有其好的方面,很多人都喜欢这一点,但是,怎么说呢,就这个特点举例吧:
如果说windows是一个包装好的mp3播放器,买回来就可以用的话,那么linux就是一堆mp3播放器的零件,买回来后还要自己进行拼装调试,然后才能使用(你别说,淘宝上还真有这类自己拼装的mp3卖,买的人还不少)。
如果是你,你会选择那样?或许你动手能力强,好奇心重,但如果买给mm、父母、朋友他人呢?
9、服务器市场
看来似乎到了让linux fa 们激动的时候了。
Linux是一个与UNIX相像的
操作系统
,它拥有了UNIX的安全性和稳定性,当然还有
支持能力,它比UNIX更加优秀的是它的有好界面,对于IT网络管理人员来说它比UNIX更易部署和管理,对于开发人员来说是一个可以随心所欲改变的操作系统。Linux因为类UNIX的架构的关系,比Windows Server更稳定,而且对于Windows Server价格来看,Linux价格低廉,按理来说,服务器操作系统市场Linux占有率应该比Windows要高,但是,事实并非如此。
Windows Server的服务器市场占有率非常的高,但主要集中在中低端服务器市场,高端市场也有(高端是unix和linux的天下),但因为服务器市场主要以中低端为主(金字塔结构,这个大家都明白吧),所以Windows Server占有率很高,在高端领域也有所成就。
优秀的Linux服务器市场占有率的比Windows Server低,个人认为因素主要有三个:
a、人力资源要求过高。是的,linux服务器便宜,但是培训或招募linux专家的费用却远比windows的高(呵呵,大家可以考虑去学linux,高端人才噢),而windows服务器系统,相对来说都成傻瓜系统了。
b、幕后软件支持体系。Windows有着其他服务器操作系统不能媲美的服务器软件支持体系,有微软本身,还有无数第三方软件厂商。而Linux虽然也有很多软件制造商支持,但因为Linux开发的混乱,所以兼容性就成了一个问题,还有协作能力上也有问题。
c、部分企业对于Linux仍然不太信任。虽然Linux开发及技术支持开始企业化运作已经多年了,很多企业敢于将自己的业务放在Linux上处理,但是仍然有不少企业不敢尝试这种低廉,甚至免费的操作系统平台,因为他们担心开源软件的支持体系和相关
方案不够成熟。
以上三点成为Linux服务器发展的障碍,这也是免费开源软件的通病。
其实不能说谁打败谁,windows有windows的优点,linux也有linux的好处,有竞争才有发展,总之它们之间的竞争将会给我们更多的选择。
1、免费与收费
windows
和Linux都是免费的,至少对个人用户是如此,如果那天国内windows真的严打盗版了,那linux的春天就到了!但现在linux依然是任重道远,前路漫漫。
与支持
windows下可以运行绝大部分软件、玩99.999%的
厂商近乎100%的支持。linux下可直接运行的软件数量和win下比起来就是1和99的区别,而且目前选择linux的人基本不会考虑玩游戏(虽然有能在linux下运行的游戏,但实在太少。),同时linux正期待更多硬件厂商的支持。
3、安全性
很多人说linux安全性高,仁者见仁智者见智了。其实我觉得这个根本没必要讨论,当linux普及程度达到现在windows的程度,那么linux的漏洞、病毒、木马、后门什么的绝对会如雨后春笋般纷纷冒出,虽不敢说比windows严重,但绝对不会比win少,说白了就是因为现在linux的用户量太少,受关注也太少,做病毒者当然希望自己的作品流传越广越好(现在的病毒更倾向于获取非法利益,比如账号密码什么的),所以,病毒目前不会考虑少数派的linuxer。
世上没有攻不破的
、没有穿不透的防火墙,一件事你做不到,只能说明你水平不够,这里适用一句话:道高一尺,魔高一丈。
但就目前来说,如果你对windows下层出不穷的病毒、木马、垃圾感到极度厌恶,那的确可以尝试一下linux噢。
4、开源
开源就是指对外部开放软件源代码。
如果一个小程序员写了个软件,里面有他独创的新
,他想靠这个赚钱,甚至还为此申请了专利,这时某些团体以安全为由,要求他公开源代码(这样就可以仿制了嘛。),并且最好免费给大家使用,身边一群眼红程序员赚钱的人也在跟着起哄。一个独立商业团体的合法知识产权、资产权益遭受政治强权的公开侵占、迫害,这就是
在欧洲所面临的开源问题(至于微软是否是奸商,这是另一码事,并不能成为打砸抢、吃大户的理由)
开源与否,软件厂商有选择的权力;是否购买使用这个产品,这才是用户的权利。
其实想深一点,如果linux不开源,它还能有现在这个市场吗?因为很多人就是冲着开源才使用linux的。
5、使用习惯
一样的地方:桌面、图标、鼠标点击,有区别吗?不一样的是,windows放弃了dos的字符模式,主攻图形界面,让桌面系统更易用。linux字符模式运行的更好,图形界面还只是附带品,可有可无。根据他们的上市时间来看,只能说linux把windows扔掉的东西又捡回来并且发扬光大。
6、技术支持
如果你不熟悉或从来没接触过
学windows --那身边随便一个上过网的人都可以指点你两下。学linux--呵呵,买书或上网查吧,深度的linux版块就不错,至于用什么上网,你说呢?
如果你熟悉电脑和上网,那w和l其实没什么区别,网上都有海量的资料给你查。但是找修windows电脑的人远比找一个修linux电脑的人容易得多,没办法,这是现实。
7、易用性
有人认为windows简单易用;有人认为没有区别而只是使用习惯的问题;也有少数人认为linux更易用,人们喜欢简单实用的东西,那么来看看市场、看看身边人用什么吧!windows和linux都不是什么刚刚推出的新系统。
另外,还是要提一下,安全性与易用性方便性是相对的,越安全就越难用,越易用就越不安全,这也算是一个铁律,就像我们的银行密码一样(128位密码肯定安全,但普通人谁会这么麻烦?)
8、定制和编译
和臃肿的windows比起来,定制才是linux的最大优势!虽然windows也有嵌入系统,但和linux比起来还是远远不如。因为源码开放,所以可以自己编译linux,肯定有其好的方面,很多人都喜欢这一点,但是,怎么说呢,就这个特点举例吧:
如果说windows是一个包装好的mp3播放器,买回来就可以用的话,那么linux就是一堆mp3播放器的零件,买回来后还要自己进行拼装调试,然后才能使用(你别说,淘宝上还真有这类自己拼装的mp3卖,买的人还不少)。
如果是你,你会选择那样?或许你动手能力强,好奇心重,但如果买给mm、父母、朋友他人呢?
9、服务器市场
看来似乎到了让linux fa 们激动的时候了。
Linux是一个与UNIX相像的
操作系统
,它拥有了UNIX的安全性和稳定性,当然还有
支持能力,它比UNIX更加优秀的是它的有好界面,对于IT网络管理人员来说它比UNIX更易部署和管理,对于开发人员来说是一个可以随心所欲改变的操作系统。Linux因为类UNIX的架构的关系,比Windows Server更稳定,而且对于Windows Server价格来看,Linux价格低廉,按理来说,服务器操作系统市场Linux占有率应该比Windows要高,但是,事实并非如此。
Windows Server的服务器市场占有率非常的高,但主要集中在中低端服务器市场,高端市场也有(高端是unix和linux的天下),但因为服务器市场主要以中低端为主(金字塔结构,这个大家都明白吧),所以Windows Server占有率很高,在高端领域也有所成就。
优秀的Linux服务器市场占有率的比Windows Server低,个人认为因素主要有三个:
a、人力资源要求过高。是的,linux服务器便宜,但是培训或招募linux专家的费用却远比windows的高(呵呵,大家可以考虑去学linux,高端人才噢),而windows服务器系统,相对来说都成傻瓜系统了。
b、幕后软件支持体系。Windows有着其他服务器操作系统不能媲美的服务器软件支持体系,有微软本身,还有无数第三方软件厂商。而Linux虽然也有很多软件制造商支持,但因为Linux开发的混乱,所以兼容性就成了一个问题,还有协作能力上也有问题。
c、部分企业对于Linux仍然不太信任。虽然Linux开发及技术支持开始企业化运作已经多年了,很多企业敢于将自己的业务放在Linux上处理,但是仍然有不少企业不敢尝试这种低廉,甚至免费的操作系统平台,因为他们担心开源软件的支持体系和相关
方案不够成熟。
以上三点成为Linux服务器发展的障碍,这也是免费开源软件的通病。
其实不能说谁打败谁,windows有windows的优点,linux也有linux的好处,有竞争才有发展,总之它们之间的竞争将会给我们更多的选择。
1、免费与收费
windows
和Linux都是免费的,至少对个人用户是如此,如果那天国内windows真的严打盗版了,那linux的春天就到了!但现在linux依然是任重道远,前路漫漫。
与支持
windows下可以运行绝大部分软件、玩99.999%的
厂商近乎100%的支持。linux下可直接运行的软件数量和win下比起来就是1和99的区别,而且目前选择linux的人基本不会考虑玩游戏(虽然有能在linux下运行的游戏,但实在太少。),同时linux正期待更多硬件厂商的支持。
3、安全性
很多人说linux安全性高,仁者见仁智者见智了。其实我觉得这个根本没必要讨论,当linux普及程度达到现在windows的程度,那么linux的漏洞、病毒、木马、后门什么的绝对会如雨后春笋般纷纷冒出,虽不敢说比windows严重,但绝对不会比win少,说白了就是因为现在linux的用户量太少,受关注也太少,做病毒者当然希望自己的作品流传越广越好(现在的病毒更倾向于获取非法利益,比如账号密码什么的),所以,病毒目前不会考虑少数派的linuxer。
世上没有攻不破的
、没有穿不透的防火墙,一件事你做不到,只能说明你水平不够,这里适用一句话:道高一尺,魔高一丈。
但就目前来说,如果你对windows下层出不穷的病毒、木马、垃圾感到极度厌恶,那的确可以尝试一下linux噢。
4、开源
开源就是指对外部开放软件源代码。
如果一个小程序员写了个软件,里面有他独创的新
,他想靠这个赚钱,甚至还为此申请了专利,这时某些团体以安全为由,要求他公开源代码(这样就可以仿制了嘛。),并且最好免费给大家使用,身边一群眼红程序员赚钱的人也在跟着起哄。一个独立商业团体的合法知识产权、资产权益遭受政治强权的公开侵占、迫害,这就是
在欧洲所面临的开源问题(至于微软是否是奸商,这是另一码事,并不能成为打砸抢、吃大户的理由)
开源与否,软件厂商有选择的权力;是否购买使用这个产品,这才是用户的权利。
其实想深一点,如果linux不开源,它还能有现在这个市场吗?因为很多人就是冲着开源才使用linux的。
5、使用习惯
一样的地方:桌面、图标、鼠标点击,有区别吗?不一样的是,windows放弃了dos的字符模式,主攻图形界面,让桌面系统更易用。linux字符模式运行的更好,图形界面还只是附带品,可有可无。根据他们的上市时间来看,只能说linux把windows扔掉的东西又捡回来并且发扬光大。
6、技术支持
如果你不熟悉或从来没接触过
学windows --那身边随便一个上过网的人都可以指点你两下。学linux--呵呵,买书或上网查吧,深度的linux版块就不错,至于用什么上网,你说呢?
如果你熟悉电脑和上网,那w和l其实没什么区别,网上都有海量的资料给你查。但是找修windows电脑的人远比找一个修linux电脑的人容易得多,没办法,这是现实。
7、易用性
有人认为windows简单易用;有人认为没有区别而只是使用习惯的问题;也有少数人认为linux更易用,人们喜欢简单实用的东西,那么来看看市场、看看身边人用什么吧!windows和linux都不是什么刚刚推出的新系统。
另外,还是要提一下,安全性与易用性方便性是相对的,越安全就越难用,越易用就越不安全,这也算是一个铁律,就像我们的银行密码一样(128位密码肯定安全,但普通人谁会这么麻烦?)
8、定制和编译
和臃肿的windows比起来,定制才是linux的最大优势!虽然windows也有嵌入系统,但和linux比起来还是远远不如。因为源码开放,所以可以自己编译linux,肯定有其好的方面,很多人都喜欢这一点,但是,怎么说呢,就这个特点举例吧:
如果说windows是一个包装好的mp3播放器,买回来就可以用的话,那么linux就是一堆mp3播放器的零件,买回来后还要自己进行拼装调试,然后才能使用(你别说,淘宝上还真有这类自己拼装的mp3卖,买的人还不少)。
如果是你,你会选择那样?或许你动手能力强,好奇心重,但如果买给mm、父母、朋友他人呢?
9、服务器市场
看来似乎到了让linux fa 们激动的时候了。
Linux是一个与UNIX相像的
操作系统
,它拥有了UNIX的安全性和稳定性,当然还有
支持能力,它比UNIX更加优秀的是它的有好界面,对于IT网络管理人员来说它比UNIX更易部署和管理,对于开发人员来说是一个可以随心所欲改变的操作系统。Linux因为类UNIX的架构的关系,比Windows Server更稳定,而且对于Windows Server价格来看,Linux价格低廉,按理来说,服务器操作系统市场Linux占有率应该比Windows要高,但是,事实并非如此。
Windows Server的服务器市场占有率非常的高,但主要集中在中低端服务器市场,高端市场也有(高端是unix和linux的天下),但因为服务器市场主要以中低端为主(金字塔结构,这个大家都明白吧),所以Windows Server占有率很高,在高端领域也有所成就。
优秀的Linux服务器市场占有率的比Windows Server低,个人认为因素主要有三个:
a、人力资源要求过高。是的,linux服务器便宜,但是培训或招募linux专家的费用却远比windows的高(呵呵,大家可以考虑去学linux,高端人才噢),而windows服务器系统,相对来说都成傻瓜系统了。
b、幕后软件支持体系。Windows有着其他服务器操作系统不能媲美的服务器软件支持体系,有微软本身,还有无数第三方软件厂商。而Linux虽然也有很多软件制造商支持,但因为Linux开发的混乱,所以兼容性就成了一个问题,还有协作能力上也有问题。
c、部分企业对于Linux仍然不太信任。虽然Linux开发及技术支持开始企业化运作已经多年了,很多企业敢于将自己的业务放在Linux上处理,但是仍然有不少企业不敢尝试这种低廉,甚至免费的操作系统平台,因为他们担心开源软件的支持体系和相关
方案不够成熟。
以上三点成为Linux服务器发展的障碍,这也是免费开源软件的通病。
其实不能说谁打败谁,windows有windows的优点,linux也有linux的好处,有竞争才有发展,总之它们之间的竞争将会给我们更多的选择。
1、免费与收费
windows
和Linux都是免费的,至少对个人用户是如此,如果那天国内windows真的严打盗版了,那linux的春天就到了!但现在linux依然是任重道远,前路漫漫。
与支持
windows下可以运行绝大部分软件、玩99.999%的
厂商近乎100%的支持。linux下可直接运行的软件数量和win下比起来就是1和99的区别,而且目前选择linux的人基本不会考虑玩游戏(虽然有能在linux下运行的游戏,但实在太少。),同时linux正期待更多硬件厂商的支持。
3、安全性
很多人说linux安全性高,仁者见仁智者见智了。其实我觉得这个根本没必要讨论,当linux普及程度达到现在windows的程度,那么linux的漏洞、病毒、木马、后门什么的绝对会如雨后春笋般纷纷冒出,虽不敢说比windows严重,但绝对不会比win少,说白了就是因为现在linux的用户量太少,受关注也太少,做病毒者当然希望自己的作品流传越广越好(现在的病毒更倾向于获取非法利益,比如账号密码什么的),所以,病毒目前不会考虑少数派的linuxer。
世上没有攻不破的
、没有穿不透的防火墙,一件事你做不到,只能说明你水平不够,这里适用一句话:道高一尺,魔高一丈。
但就目前来说,如果你对windows下层出不穷的病毒、木马、垃圾感到极度厌恶,那的确可以尝试一下linux噢。
4、开源
开源就是指对外部开放软件源代码。
如果一个小程序员写了个软件,里面有他独创的新
,他想靠这个赚钱,甚至还为此申请了专利,这时某些团体以安全为由,要求他公开源代码(这样就可以仿制了嘛。),并且最好免费给大家使用,身边一群眼红程序员赚钱的人也在跟着起哄。一个独立商业团体的合法知识产权、资产权益遭受政治强权的公开侵占、迫害,这就是
在欧洲所面临的开源问题(至于微软是否是奸商,这是另一码事,并不能成为打砸抢、吃大户的理由)
开源与否,软件厂商有选择的权力;是否购买使用这个产品,这才是用户的权利。
其实想深一点,如果linux不开源,它还能有现在这个市场吗?因为很多人就是冲着开源才使用linux的。
5、使用习惯
一样的地方:桌面、图标、鼠标点击,有区别吗?不一样的是,windows放弃了dos的字符模式,主攻图形界面,让桌面系统更易用。linux字符模式运行的更好,图形界面还只是附带品,可有可无。根据他们的上市时间来看,只能说linux把windows扔掉的东西又捡回来并且发扬光大。
6、技术支持
如果你不熟悉或从来没接触过
学windows --那身边随便一个上过网的人都可以指点你两下。学linux--呵呵,买书或上网查吧,深度的linux版块就不错,至于用什么上网,你说呢?
如果你熟悉电脑和上网,那w和l其实没什么区别,网上都有海量的资料给你查。但是找修windows电脑的人远比找一个修linux电脑的人容易得多,没办法,这是现实。
7、易用性
有人认为windows简单易用;有人认为没有区别而只是使用习惯的问题;也有少数人认为linux更易用,人们喜欢简单实用的东西,那么来看看市场、看看身边人用什么吧!windows和linux都不是什么刚刚推出的新系统。
另外,还是要提一下,安全性与易用性方便性是相对的,越安全就越难用,越易用就越不安全,这也算是一个铁律,就像我们的银行密码一样(128位密码肯定安全,但普通人谁会这么麻烦?)
8、定制和编译
和臃肿的windows比起来,定制才是linux的最大优势!虽然windows也有嵌入系统,但和linux比起来还是远远不如。因为源码开放,所以可以自己编译linux,肯定有其好的方面,很多人都喜欢这一点,但是,怎么说呢,就这个特点举例吧:
如果说windows是一个包装好的mp3播放器,买回来就可以用的话,那么linux就是一堆mp3播放器的零件,买回来后还要自己进行拼装调试,然后才能使用(你别说,淘宝上还真有这类自己拼装的mp3卖,买的人还不少)。
如果是你,你会选择那样?或许你动手能力强,好奇心重,但如果买给mm、父母、朋友他人呢?
9、服务器市场
看来似乎到了让linux fa 们激动的时候了。
Linux是一个与UNIX相像的
操作系统
,它拥有了UNIX的安全性和稳定性,当然还有
支持能力,它比UNIX更加优秀的是它的有好界面,对于IT网络管理人员来说它比UNIX更易部署和管理,对于开发人员来说是一个可以随心所欲改变的操作系统。Linux因为类UNIX的架构的关系,比Windows Server更稳定,而且对于Windows Server价格来看,Linux价格低廉,按理来说,服务器操作系统市场Linux占有率应该比Windows要高,但是,事实并非如此。
Windows Server的服务器市场占有率非常的高,但主要集中在中低端服务器市场,高端市场也有(高端是unix和linux的天下),但因为服务器市场主要以中低端为主(金字塔结构,这个大家都明白吧),所以Windows Server占有率很高,在高端领域也有所成就。
优秀的Linux服务器市场占有率的比Windows Server低,个人认为因素主要有三个:
a、人力资源要求过高。是的,linux服务器便宜,但是培训或招募linux专家的费用却远比windows的高(呵呵,大家可以考虑去学linux,高端人才噢),而windows服务器系统,相对来说都成傻瓜系统了。
b、幕后软件支持体系。Windows有着其他服务器操作系统不能媲美的服务器软件支持体系,有微软本身,还有无数第三方软件厂商。而Linux虽然也有很多软件制造商支持,但因为Linux开发的混乱,所以兼容性就成了一个问题,还有协作能力上也有问题。
c、部分企业对于Linux仍然不太信任。虽然Linux开发及技术支持开始企业化运作已经多年了,很多企业敢于将自己的业务放在Linux上处理,但是仍然有不少企业不敢尝试这种低廉,甚至免费的操作系统平台,因为他们担心开源软件的支持体系和相关
方案不够成熟。
以上三点成为Linux服务器发展的障碍,这也是免费开源软件的通病。
其实不能说谁打败谁,windows有windows的优点,linux也有linux的好处,有竞争才有发展,总之它们之间的竞争将会给我们更多的选择。
1、免费与收费
windows
和Linux都是免费的,至少对个人用户是如此,如果那天国内windows真的严打盗版了,那linux的春天就到了!但现在linux依然是任重道远,前路漫漫。
与支持
windows下可以运行绝大部分软件、玩99.999%的
厂商近乎100%的支持。linux下可直接运行的软件数量和win下比起来就是1和99的区别,而且目前选择linux的人基本不会考虑玩游戏(虽然有能在linux下运行的游戏,但实在太少。),同时linux正期待更多硬件厂商的支持。
3、安全性
很多人说linux安全性高,仁者见仁智者见智了。其实我觉得这个根本没必要讨论,当linux普及程度达到现在windows的程度,那么linux的漏洞、病毒、木马、后门什么的绝对会如雨后春笋般纷纷冒出,虽不敢说比windows严重,但绝对不会比win少,说白了就是因为现在linux的用户量太少,受关注也太少,做病毒者当然希望自己的作品流传越广越好(现在的病毒更倾向于获取非法利益,比如账号密码什么的),所以,病毒目前不会考虑少数派的linuxer。
世上没有攻不破的
、没有穿不透的防火墙,一件事你做不到,只能说明你水平不够,这里适用一句话:道高一尺,魔高一丈。
但就目前来说,如果你对windows下层出不穷的病毒、木马、垃圾感到极度厌恶,那的确可以尝试一下linux噢。
4、开源
开源就是指对外部开放软件源代码。
如果一个小程序员写了个软件,里面有他独创的新
,他想靠这个赚钱,甚至还为此申请了专利,这时某些团体以安全为由,要求他公开源代码(这样就可以仿制了嘛。),并且最好免费给大家使用,身边一群眼红程序员赚钱的人也在跟着起哄。一个独立商业团体的合法知识产权、资产权益遭受政治强权的公开侵占、迫害,这就是
在欧洲所面临的开源问题(至于微软是否是奸商,这是另一码事,并不能成为打砸抢、吃大户的理由)
开源与否,软件厂商有选择的权力;是否购买使用这个产品,这才是用户的权利。
其实想深一点,如果linux不开源,它还能有现在这个市场吗?因为很多人就是冲着开源才使用linux的。
5、使用习惯
一样的地方:桌面、图标、鼠标点击,有区别吗?不一样的是,windows放弃了dos的字符模式,主攻图形界面,让桌面系统更易用。linux字符模式运行的更好,图形界面还只是附带品,可有可无。根据他们的上市时间来看,只能说linux把windows扔掉的东西又捡回来并且发扬光大。
6、技术支持
如果你不熟悉或从来没接触过
学windows --那身边随便一个上过网的人都可以指点你两下。学linux--呵呵,买书或上网查吧,深度的linux版块就不错,至于用什么上网,你说呢?
如果你熟悉电脑和上网,那w和l其实没什么区别,网上都有海量的资料给你查。但是找修windows电脑的人远比找一个修linux电脑的人容易得多,没办法,这是现实。
7、易用性
有人认为windows简单易用;有人认为没有区别而只是使用习惯的问题;也有少数人认为linux更易用,人们喜欢简单实用的东西,那么来看看市场、看看身边人用什么吧!windows和linux都不是什么刚刚推出的新系统。
另外,还是要提一下,安全性与易用性方便性是相对的,越安全就越难用,越易用就越不安全,这也算是一个铁律,就像我们的银行密码一样(128位密码肯定安全,但普通人谁会这么麻烦?)
8、定制和编译
和臃肿的windows比起来,定制才是linux的最大优势!虽然windows也有嵌入系统,但和linux比起来还是远远不如。因为源码开放,所以可以自己编译linux,肯定有其好的方面,很多人都喜欢这一点,但是,怎么说呢,就这个特点举例吧:
如果说windows是一个包装好的mp3播放器,买回来就可以用的话,那么linux就是一堆mp3播放器的零件,买回来后还要自己进行拼装调试,然后才能使用(你别说,淘宝上还真有这类自己拼装的mp3卖,买的人还不少)。
如果是你,你会选择那样?或许你动手能力强,好奇心重,但如果买给mm、父母、朋友他人呢?
9、服务器市场
看来似乎到了让linux fa 们激动的时候了。
Linux是一个与UNIX相像的
操作系统
,它拥有了UNIX的安全性和稳定性,当然还有
支持能力,它比UNIX更加优秀的是它的有好界面,对于IT网络管理人员来说它比UNIX更易部署和管理,对于开发人员来说是一个可以随心所欲改变的操作系统。Linux因为类UNIX的架构的关系,比Windows Server更稳定,而且对于Windows Server价格来看,Linux价格低廉,按理来说,服务器操作系统市场Linux占有率应该比Windows要高,但是,事实并非如此。
Windows Server的服务器市场占有率非常的高,但主要集中在中低端服务器市场,高端市场也有(高端是unix和linux的天下),但因为服务器市场主要以中低端为主(金字塔结构,这个大家都明白吧),所以Windows Server占有率很高,在高端领域也有所成就。
优秀的Linux服务器市场占有率的比Windows Server低,个人认为因素主要有三个:
a、人力资源要求过高。是的,linux服务器便宜,但是培训或招募linux专家的费用却远比windows的高(呵呵,大家可以考虑去学linux,高端人才噢),而windows服务器系统,相对来说都成傻瓜系统了。
b、幕后软件支持体系。Windows有着其他服务器操作系统不能媲美的服务器软件支持体系,有微软本身,还有无数第三方软件厂商。而Linux虽然也有很多软件制造商支持,但因为Linux开发的混乱,所以兼容性就成了一个问题,还有协作能力上也有问题。
c、部分企业对于Linux仍然不太信任。虽然Linux开发及技术支持开始企业化运作已经多年了,很多企业敢于将自己的业务放在Linux上处理,但是仍然有不少企业不敢尝试这种低廉,甚至免费的操作系统平台,因为他们担心开源软件的支持体系和相关
方案不够成熟。
以上三点成为Linux服务器发展的障碍,这也是免费开源软件的通病。
其实不能说谁打败谁,windows有windows的优点,linux也有linux的好处,有竞争才有发展,总之它们之间的竞争将会给我们更多的选择。
( Mon, 27 Jun 2011 09:16:54 +0800 )
Description:
得花钱下载iwork才可以。 在苹果商店里有的。不便宜。。(换算***民币来说啊。)
( Mon, 27 Jun 2011 09:03:07 +0800 )
Description:
“平板电脑”这个概念是由比尔盖茨提出来的,必须能够***X86版本的Windows系统、Linux系统或Mac OS系统,即平板电脑最少应该是X86架构。而iPad系统是基于ARM架构的,根本都不能做PC,乔布斯也声称iPad不是平板电脑。
平板电脑是介于掌上电脑和笔记本电脑的一种PC产品。很多人认为张的像iPad的都是平板电脑,这是错误的!很多平板电脑的造型往往和智能手机差不多像。
所以判断一个东西是不是平板电脑,外观绝对不是考虑因素。借此纠正那些“外貌协会”的错误。
那么iPad到底应该划入哪个类别呢?***:手本。
( Sun, 26 Jun 2011 12:15:04 +0800 )
Description:
什么搜狗浏览器,遨游浏览器,腾讯浏览器,光看看表面还勉强,对COOKIE的维护简直就是TMD胡扯,同时运行多个IE 和 二次开发的浏览器 ,多个IE之间COOKIE就能同步,包括内存中的COOKIE,而二次开发的浏览器,简直就是TMD胡扯!难道你们开发的人自己都不测吗?胡闹,简直就是胡闹!儿戏,简直就是儿戏。
( Fri, 24 Jun 2011 15:10:18 +0800 )
Description:
今天测试东西,HTTP通信的东西,用socket测试 怎么都不行,用socket同样的报文发送给自己的服务器,取值正常,用浏览器使用FORM提交给侧目标服务器,还是不行,我天,纳闷了
看示例代码,用的httpwebrequest 查看报文头,多了个 "Expect: 100-continue ” 就tmd纳闷了,研究这个参数东西,没效果啊,就是在返回主体中多了报文头信息,走了弯路
最后对方提示我 key 的大小写,我靠,解决了。
总结:如果在WEB服务器端直接用request取值,KEY是不区分大小写的,估计对方从 "I utStream”读取的。
( Fri, 24 Jun 2011 09:07:13 +0800 )
Description:
23日下午,苹果园南路苹果园办事处东五十米左右,一辆汽车因路面积水熄火,两名推车的青年男子不慎掉进排水井被冲走。至记者发稿时,这两名男子仍未被找到。
下午5点30分左右,事发路段因暴雨积水。据附近居民称,积水有30厘米深,一辆黑色轿车在路面熄火,车上人员从附近叫来两名男子推车,结果一男子不慎掉进排水井,另一名男子想去施救,结果也掉了进去,两人瞬间被冲得无影无踪。
据记者了解,这两名青年男子均20多岁,河北南皮县人,在附近一家名为“吕氏建业”的装饰工程公司打工已有两年。事发车辆就是该公司的车,因为单位离事发地不远,所以车上人员才将他们喊了过来一起推车。
事发后,市政人员和***都来到现场,并将事发路段小范围封锁,由于井深约有8米,流水很急,无法下井查找。
23日晚10点半,记者赶到现场,市政工作人员表示,现场在半小时前已勘查完毕,而且还派出人员到最近河道的出水口查找失踪的两名青年。
到昨晚11点半,市政工作人员表示仍未找到失踪青年。此时井下已无水,吕氏建业装饰工程公司工作人员打着手电往井下四处查看,也未看到人。公司方面也表示暂未通知其家属。
井盖是被水冲走,还是有人搬开未盖上?记者从现场市政工作人员处未获明确说法。不过,据吕氏建业装饰工程公司人员说,井盖就在排水井不远处,事发时没有盖上。
北京张浩然律师事务所张浩然律师表示,道路产权管理部门对此事负主要责任。因为根据天气预报可以预见将要迎来大雨,管理部门应该提前做好管理防范工作,如果因管理部门没有做好相关工作,而导致后果的产生,应负主要责任。如果井盖是被人挪走未盖上,那么如果能找到挪走井盖的人,也应该承担责任。
( Wed, 22 Jun 2011 09:37:29 +0800 )
Description: 16升双涡轮增压V8发动机,最大输出功率可达1,000马力; 重约6.5吨,百公里加速仅需5秒; 巨大的引擎声在半公里外仍清晰可闻; 敞篷设计,透明驾驶室地板,有“最时尚卡车”之称 ?斯堪尼亚“红珍珠”R 999是一款在斯堪尼亚T164LA4X2NA重型卡车基础上改装而成的敞篷卡车,由著名瑞典斯堪尼亚改装专家Svempa Bergendahl倾力打造,有全球“最时尚卡车”之称。自2007年问世以来,即作为重卡改装文化的杰出代表备受世界各地卡车爱好者的推崇。 ?2005年底, Svempa从斯堪尼亚测试实验室购买了一辆T164重型卡车,并与设计师Jan Richter一道对该车进行了颠覆性的个性化改装。 o 车顶被削除,挡风玻璃降低了350 mm,并舍弃了车门。 o 前部装配了一个较低的巴士车桥,离地间隙降低至100 mm。 o 原装的16升V8发动机(500马力)经过调谐,最大输出功率可达1,000马力。 o 压缩机的位置调低,更换了凸轮轴和燃料喷射系统,并***了双涡轮增压器;配备Allison自动变速箱,可提供最高的后桥速比;采用四点气囊悬浮结构。 o 前脸采用了斯堪尼亚R系列格栅,从而令卡车外观更具现代感;仪表盘和方向盘均用碳纤维材料制成,透明的驾驶室地板能让驾驶员对变速箱的运行状况一目了然;另配备了镀铬车门后视镜、镀铬减震器和圆形镀铬美式柴油箱。 o 车身经过三层喷涂,底层为银色,中间层为透明的红色涂料,外层则为大量透明的清漆;车门上的数字“39”代表着1939年,以纪念这个对Svempa夫妇有着特殊意义的年份。 附:斯堪尼亚"Red Pearl"技术规格一览 驾驶室类型: CT19 R999敞篷驾驶室 颜色: 3c珠光红金属漆,带金箔图案 底盘类型: T164LA4X2NA改装版底盘 发动机: 带双涡轮增压的16.2升斯堪尼亚V8发动机 功率: 在转速达到2300转/分时,输出功率为999马力; 在转速达到1660转/分时,输出功率为3580牛米 变速箱: Allison六速自动变速箱 轴距: 4300毫米 重量: 6470千克 长: 6500毫米 宽: 2600毫米 高: 2670毫米 轮胎: 前轮:米其林 385/55-22.5 轮胎宽度385毫米,扁平比55%,轮辋直径22.5英寸 后轮:米其林 385/65-22.5 轮胎宽度385毫米,扁平比65%,轮辋直径22.5英寸 ( Thu, 16 Jun 2011 10:20:17 +0800 )
Description:
概念:
(一)DotNet中的版本组成
DotNet中的版本由4个物理号码组成,如图(一) 图(一)
在程序集里面,我们可以通过加上A emblyVersion特性来设置它,
如[a embly: A emblyVersion("2.0.2.11")]
(二) GAC:
计算机范围内的代码缓存,它存储专门***的程序集,这些程序集由计算机上的许多应用程序共享。在全局程序集缓存中部署的应用程序必须具有强名称,一个程序集如果注册到了GAC里,被其他程序集合引用的时候,将不会拷贝副本到引用的程序目录中。 (本文只讨论注册到GAC中的程序集)
--------------------------------------------------------------------------------
正文:
(1) 我们现在开始写第一个组件
它的版本号为 1.0.0.0 有一个类,包含一个简单的方法,该方法返回一个字符串
代码如下,我都做了注解
//首先生成强名称到文件中 –k c:\Version. k
//写类文件 v1.cs
using System;
using System.Reflectio [a embly: A emblyKeyFile(
c:Version. k
因为注册到GAC,所以使用强名称签名
[a embly: A emblyVersion(
1.0.0.0
设置版本号
name ace V1
{ public cla V1 { public V1() { } public string GetVersion() { return "
你好,我是版本1
编译成组件 V1.dll
拷贝这个V1.dll到 文件夹c:\V1
把V1.dll注册到GAC
Gacutil –I c:\V1\V1.dll
系统显示注册成功
(2) 然后我们编写一个控制台程序测试这个组件
TestVersion.cs ///
请添加对V1.dll(c:V1V1.dll)的引用,因为是在Gac里面,所以V1.dll不会在本地目录存在
using System;
name ace TestVersion
{ cla TestVersion { static void Main(
[] args) { V1.V1 v1
new V1.V1(); Co ole.WriteLine(v1.GetVersion()); Co ole.Read(); } }
编译后运行(TestVersion.exe)
屏幕输出的结果是 :
"你好,我是版本1"
(3) 好了,一切很美好,过了几年了,我们得升级程序了
现在来编写V1.dll升级版本,版本号为2.0.0.0 v1.cs
using System;
using System.Reflectio [a embly: A emblyKeyFile(
c:Version. k
使用上面的强名称
[a embly: A emblyVersion(
2.0.0.0
注意,这里已经改了主版本号
name ace V1
{ public cla V1 { public V1() { } public string GetVersion() { return "
你好,我是版本2
修改了输出的结果,这样我们才知道到底是运行了那个 } }
编译 成组件 V1.dll
拷贝这个V1.dll到 文件夹c:\V2
把V1.dll注册到GAC
Gacutil –I c:\V2\V1.dll
(4) .现在来看看再次运行TestVersion.exe输出了什么东西
是的,和原来的没有变化还是
"你好,我是版本1"
为什么不是"你好,我是版本2"?
我们用ildasm.exe打开程序集TestVersion.exe 看看
是的,它目前就是使用了版本1.0.0.0
(5) 我们开始进行版本升级
把TestVersion.exe使用的版本由1.0.0.0替换成版本2.0.0.0
其实很简单的,给我们的 TestVersion.exe
加个配置文件 TestVersion.exe.config里面打入
xml version
configuration
runtime
a emblyBinding xml =
urn:schemas-microsoft-com:asm.v1
dependentA embly
a emblyIdentity name
" publicKeyToken
" 758fe4e9db9d8251
bindingRedirect oldVersion
1.0.0.0
" newVersion
2.0.0.0
dependentA embly
a emblyBinding
runtime
configuration
简单说明:
a emblyIdentity 主要进行程序集合的标识
其中 name是程序集的名称 publicKeyToken是公匙的标记;如何获得这些信息呢?很简单,打开%SystemDir%\a embly (我的是C:\WINNT\a embly)
可以看到这些信息(如下图,你的机器上可能和我不一样)
可以看到有两个V1(正确,我们确实注册了两个进去,版本也对) 我们开始用的是1.0.0.0的,记下公匙Token 写到publicKeyToken
bindingRedirect 节点主要配置版本如何跳转
oldVersion="1.0.0.0" newVersion="2.0.0.0" 很清楚的,就是如果TestVersion.exe使用的V1.dll是旧版本的,程序集版本号为1.0.0.0,那么就使用新的,版本号为2.0.0.0的程序集
需要注意的是,oldVersion 可以使用范围来界定,如 oldVersion="1.0-1.9" 但是如果没有使用范围表示法的话,一定要写全版本号
newVersion 不可以使用范围表示法,请写全版本号
好了,现在再次运行TestVersion.exe
输出的是: "你好,我是版本2",掌声!!!
就是怎么简单!
(6) 如果现在我们用ildasm.exe打开程序集TestVersion.exe,看到的内容将没有变化
确实,是配置文件起了作用,整个过程没有对调用程序TestVersion.exe的代码做半点改动!
(7) 配置错了会怎么样?:
有可能的错误,比如newVersion写错了,根本没这个升级版本,将会抛出异常System.IO.FileNotFoundException,请注意处理
( Thu, 16 Jun 2011 09:45:15 +0800 )
Description:
背景: 1、标题的好像有点长; 2、这个工具是干什么用的?能看明白标题的人估计能用得上,看懂的估计也不需要。 3、可以根据签名文件更改、也可以根据程序集文件更改。 4、欢迎交流,尽请留言。
原始代码: 代码 1 using System; 2 using System.Linq; 3 using System.Windows.Form 4 using System.IO; 5 using Mono.Cecil; 6 using System.Diagnostic 7 using System.Runtime.InteropService 8 using System.Reflectio 9 name ace A emblyResign 10 { 11 public partial cla FormMai : Form 12 { 13 public FormMain() 14 { 15 InitializeComponent(); 16 } 17 18 private void tnReSign_Click(
object ender, EventArg e) 19 { 20 if (tBoxSourceAse.Text == "" &am am tBoxSourceSign.Text == ""
) 21 { 22 Me ageBox.Show(
Please elect a ource a embly or ignfile!
); 23 return
; 24 } 25 if (lBoxObjectAse.Items.Count == 0
) 26 { 27 Me ageBox.Show(
Please elect object a embly!
); 28 return
; 29 } 30 A emblyInfo[] a emblyInfoList = new A emblyInfo[lBoxObjectAse.Items.Count]; 31 for (
int i = 0 i lBoxObjectAse.Items.Count i
) 32 { 33 a emblyInfoList[i] = new A emblyInfo { FileName = lBoxObjectAse.Items[i].ToString() }; 34 } 35 try 36 { 37 if (tBoxSourceSign.Text != ""
) 38 { 39 ReSignByKeyFile(a emblyInfoList, tBoxSourceSign.Text.Trim()); 40 Me ageBox.Show(
Resig y ignfile ucceed!
Information
); 41 } 42 else 43 { 44 ReSignByA embly(a emblyInfoList, tBoxSourceAse.Text.Trim()); 45 Me ageBox.Show(
Resig y a embly ucceed!
Information
); 46 } 47 } 48 catch
(Exceptio ex) 49 { 50 Me ageBox.Show(
Resig error,Detail Infor:
" + ex.ToString(), "
Information
); 51 } 52 53 } 54 private void tnRelink_Click(
object ender, EventArg e) 55 { 56 A emblyInfo[] a emblyInfoList = new A emblyInfo[lBoxObjectAse.Items.Count]; 57 for (
int i = 0 i lBoxObjectAse.Items.Count i
) 58 { 59 a emblyInfoList[i] = new A emblyInfo { FileName = lBoxObjectAse.Items[i].ToString() }; 60 } 61 try 62 { 63 ReSignature r = new ReSignature(); 64 rs.ReLink(a emblyInfoList, tBoxSourceSign.Text.Trim()); 65 Me ageBox.Show(
Relink y ingfile ucceed!
Information
); 66 } 67 catch (Exceptio ex) 68 { 69 Me ageBox.Show(
Relink error,Detail Infor:
" + ex.ToString(), "
); 70 } 71 } 72 private void tnSourceAse_Click(
object ender, EventArg e) 73 { 74 OpenFileDialog ofd = new OpenFileDialog(); 75 ofd.Filter = "
A embly(*.exe,*.dll)|*.exe;*.dll
; 76 ofd.ShowDialog(); 77 if (ofd.FileName != ""
) 78 tBoxSourceAse.Text = ofd.FileName; 79 } 80 private void tnSourceSign_Click(
object ender, EventArg e) 81 { 82 OpenFileDialog ofd = new OpenFileDialog(); 83 ofd.Filter = "
签名文件(*. k)|*. k
; 84 ofd.ShowDialog(); 85 if (ofd.FileName != ""
) 86 tBoxSourceSign.Text = ofd.FileName; 87 } 88 private void tnObjectAse_Click(
object ender, EventArg e) 89 { 90 OpenFileDialog ofd = new OpenFileDialog(); 91 ofd.Multiselect = true
; 92 ofd.Filter = "
应用程序集(*.exe,*.dll)|*.exe;*.dll
; 93 ofd.ShowDialog(); 94 if (ofd.FileNames.Length 0
) 95 { 96 lBoxObjectAse.Items.Clear(); 97 foreach
string trFileName in ofd.FileNames) 98 { 99 lBoxObjectAse.Items.Add(strFileName);
103 104 private void ReSignByA embly(A emblyInfo[] a emblyInfoList, string a emblyFileName)
106 byte
[] ublicKey = null
107 byte
[] ublicKeyToke = null
108 A embly a embly = A embly.LoadFile(a emblyFileName);
109 ublicKey = a embly.GetName().GetPublicKey();
110 ublicKeyToke = a embly.GetName().GetPublicKeyToken();
111 112 foreach (A emblyInfo a emblyInfo in a emblyInfoList)
114 A emblyDefinitio a = A emblyFactory.GetA embly(a emblyInfo.FileName);
115 a .Name.PublicKey = ublicKey;
116 a .Name.PublicKeyToke = ublicKeyToke 117 A emblyFactory.SaveA embly(a , a emblyInfo.FileName);
120 private void ReSignByKeyFile(A emblyInfo[] a emblyInfoList, string keyFileName)
122 ReSignature r = new ReSignature();
123 rs.ReSign(a emblyInfoList, keyFileName);
125 126 }
127 128 #region 重新签名
129 public cla ReSignature
131 [DllImport(
mscoree.dll
, EntryPoint = "
StrongNameKeyDelete
, CharSet = CharSet.Auto)]
132 public static extern bool StrongNameKeyDelete(
string wszKeyContainer);
133 [DllImport(
mscoree.dll
, EntryPoint = "
StrongNameKeyI tall
, CharSet = CharSet.Auto)]
134 public static extern bool StrongNameKeyI tall([MarshalAs(UnmanagedType.LPWStr)] string wszKeyContainer, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2
, SizeCo t = 0
)] byte
[] KeyBlob, int arg0);
135 [DllImport(
mscoree.dll
, EntryPoint = "
StrongNameSignatureGeneration
, CharSet = CharSet.Auto)]
136 public static extern bool StrongNameSignatureGeneration(
string wszFilePath, string wszKeyContainer, IntPtr KeyBlob, int cbKeyBlob, int SignatureBlob, int cbSignatureBlob);
137 [DllImport(
mscoree.dll
, EntryPoint = "
StrongNameErrorInfo
, CharSet = CharSet.Auto)]
138 public static extern uint StrongNameErrorInfo();
139 [DllImport(
mscoree.dll
, EntryPoint = "
StrongNameTokenFromPublicKey
, CharSet = CharSet.Auto)]
140 public static extern bool StrongNameTokenFromPublicKey(
[] PublicKeyBlob, int cbPublicKeyBlob, out IntPtr StrongNameToken, out int cbStrongNameToken);
141 [DllImport(
mscoree.dll
, EntryPoint = "
StrongNameFreeBuffer
, CharSet = CharSet.Auto)]
142 public static extern void StrongNameFreeBuffer(IntPtr Memory);
143 144 private byte
[] GetNewKey(
string keyFileName)
146 using (FileStream keyPairStream = File.OpenRead(keyFileName))
148 return new StrongNameKeyPair(keyPairStream).PublicKey;
151 private byte
[] GetPublicKeyToken(
string keyFileName)
153 try
155 byte
[] ewPublicKey;
156 using (FileStream keyPairStream = File.OpenRead(keyFileName))
158 ewPublicKey = new StrongNameKeyPair(keyPairStream).PublicKey;
160 int cbStrongNameToke 161 IntPtr StrongNameToke 162 StrongNameTokenFromPublicKey(newPublicKey, ewPublicKey.Length, out StrongNameToken, out cbStrongNameToken);
163 var toke = new byte
[pcbStrongNameToken];
164 Marshal.Copy( StrongNameToken, token, 0
, cbStrongNameToken);
165 StrongNameFreeBuffer( StrongNameToken);
166 return toke 167 }
168 catch (Exception)
170 return null
173 public void RunSnTool(
string a emblyName, string keyFileName)
SN工具进程 176 Proce Proce = new Proce 177 {
178 StartInfo =
180 FileName = "
181 Argument = string
.Format(
/Ra {0} {1}
, a emblyName, keyFileName)
184 Proce .Start();
185 Proce .WaitForExit();
187 public void ReSign(A emblyInfo[] a emblyInfoList, string keyFileName)
用KEY文件建立密钥容器 190 string wszKeyContainer = Guid.NewGuid().ToString();
191 byte
[] KeyBlo = File.ReadAllBytes(keyFileName);
192 StrongNameKeyI tall(wszKeyContainer, KeyBlob, KeyBlob.Length);
193 byte
[] ublicKey = GetNewKey(keyFileName);
194 195 foreach (A emblyInfo a emblyInfo in a emblyInfoList)
197 string a emblyName = a emblyInfo.FileName;
198 A emblyDefinitio asm = A emblyFactory.GetA embly(a emblyName);
199 asm.Name.PublicKey = ublicKey;
200 A emblyFactory.SaveA embly(asm, a emblyName);
201 StrongNameSignatureGeneration(a emblyName, wszKeyContainer, IntPtr.Zero, 0
删除新建的密钥容器 204 StrongNameKeyDelete(wszKeyContainer);
206 public void ReLink(A emblyInfo[] a emblyInfoList, string keyFileName)
208 byte
[] ublicKeyToke = GetPublicKeyToken(keyFileName);
209 210 if (publicKeyToke == null
212 return
213 } //
初始化一个要重新签名的程序信息列表 214 //
获得每个程序集的名称 215 foreach (A emblyInfo a emblyInfo in a emblyInfoList)
217 a emblyInfo.FullName = A emblyFactory.GetA embly(a emblyInfo.FileName).Name.FullName;
检查是否被引用,是的话,就替换PublicKeyToke 220 foreach (A emblyInfo a emblyInfo in a emblyInfoList)
222 A emblyDefinitio a embly = A emblyFactory.GetA embly(a emblyInfo.FileName);
223 foreach (ModuleDefinitio module in a embly.Modules)
224 225 foreach (A emblyNameReference reference in module.A emblyReferences)
227 if (a emblyInfoList.Any(a = a.FullName == reference.FullName))
229 reference.PublicKeyToke = ublicKeyToke 230 A emblyFactory.SaveA embly(a embly, a emblyInfo.FileName);
236 #endregion
237 238 public cla A emblyInfo
240 public string FileName { get set }
241 public string FullName { get set }
244 ( Wed, 15 Jun 2011 15:00:51 +0800 )
Description: DataTable Example_Table(int p_ROWS, int p_COLS) { string[] t_COLS = new string[p_COLS]; for (int i = 0; i t_COLS.Length; i++) { t_COLS[i] = "列" + i; } DataTable t_Table = Example_Table(p_ROWS, p_COLS, t_COLS); return t_Table; } DataTable Example_Table(int p_ROWS, int p_COLS, string[] p_COLS_NAME) { if (p_COLS_NAME.Length != p_COLS) { throw new Exception("p_COLS_NAME.Length != p_COLS"); } DataTable t_Table = new DataTable(); for (int i = 0; i p_COLS_NAME.Length; i++) { t_Table.Colum .Add(p_COLS_NAME[i]); } for (int i = 0; i p_ROWS; i++) { DataRow t_Row = t_Table.NewRow(); for (int j = 0; j p_COLS; j++) { t_Row[j] = p_COLS_NAME[j] + ",行" + j; } t_Table.Rows.Add(t_Row); } return t_Table; }
( Tue, 14 Jun 2011 17:15:27 +0800 )
Description:
5LiL6L6I5a2Q5YaN5Lmf5LiN5YGa5Lit5Zu95Lq6CuS6jOKXi+KXi+WFreW5tOS5neaciOWbm+aXpe+8jOS4reWbveS4ieWkp+mXqOaIt+e9kSDnq5nkuYvkuIDnmoTnvZHmmJPml5fkuIvnmoTnvZHmmJPmlofljJblnKjnvZHkuIrlvIDlp4vkuobkuIDpo kuK3lhbHnu5/msrvkupTljYHlpJrlubTmnaXmnIDkuLrmlY/mhJ/nmoTosIPmn6XvvIzpopjnm67mmK/vvJrigJzlpoLm zmnInmnaXnlJ/vvIzkvaDmhL/kuI3mhL/mhI/lho3lgZrkuK3lm73kurrvvJ/igJ3miKroh7PkuZ3mnIjljYHkupTml6XkuIvljYjlha3ml7 moTmipX ajnu5Pm zmmK/vvIzlnKjkuIDkuIfkuIDljYPkuoznmb7kuIPljYHkuIDlkI3mipX ajogIXkuK3vvIznq5/nhLbmnI q5jovr7nmb7liIbkuYvlha3ljYHkupT 7DmnaXnlJ/kuI3mhL/mhI/lho3lgZrkuK3lm73kurrvvIHpgInmi6nmnaXkuJblho3lgZrkuK3lm73kurrnmoTlj6rnuqbmnI mb7liIbkuYvkuInljYHkupTvvIHov5nkuKrliJ3mrrXmipX ajnu5Pm zljbPml7blvJXlj5Hova hLblpKfms6LvvIzmipX ajljp/lrprkuo7ljYHmnIjljYHkuIDml6Xnu5PmnZ/vvIzkvYbmipX ajov57lkIz Z7luLjng63ng4jnmoTnvZHlj4vorqjorrrpmo/ljbPkuo7kuZ3mnIjljYHkupTml6XooqvlvLrooYznu4jmraLvvIzogIzkuJTmnInlhbPnvZHpobXkuZ/ooqvliKDpmaTjgILkuZ3mnIjljYHlha3ml6XvvIznvZHmmJPmlrDpl7vpopHpgZPkuLvnvJbllJDlsqnlj4ror4TorrrpopHpgZPkuLvnvJbliJjmuZjmmZblkIzooqvop6Ppm4fjgIIKCuiwg+afpeWFsee7meWHuuWNgeS4qumAiemhue+8jOKAnOS4jeaEv+aEj+KAneWSjOKAnOaEv+aEj+KAneWQhOS6lOS4quOAguWcqOmCo+eZvuWIhuS5i+WFreWNgeS6lOe OadpeeUn+S4jeaEv+aEj+WGjeWBmuS4reWbveS6uueahOaKleelqOiAheS4re+8jOacieeZvuWIhuS5i+S4ieWNgeS4g+eCueWFreaYr+WboOS4uuKAnOWBmuS4gOS4quS4reWbveS6uue8uuS5j+S6uueahOWwiuS4peKAne+8jOacieeZvuWIhuS5i+WNgeS4g+eCueS4gOaYr+WboOS4uuKAnOWcqOS4reWbveS5sOS4jei1t+aIv+WtkO+8jOW5uOemj+emu+aIkeW+iOmBpei/nOKAne+8jOacieeZvuWIhuS5i+S4g+eCueWFq+e OWwseaYr+S4jeaEv+aEj++8jOayoeaciee7meWHuueQhueUse+8jOacieeZvuWIhuS5i+mbtueCueS4g+aYr+WboOS4uuKAnOWcqOS4reWbveS4jeiDveaBtuaQnuKAne+8jOacieeZvuWIhuS5i+mbtueCueWbm+aYr+WboOS4uuKAnOWcqOS4reWbveeci+S4jeWIsOWlveeahOWKqOeUu+eJh+KAneOAguiHs+S6juWcqOmCo+e6puWPquacieeZvuWIhuS5i+S4ieWNgeS6lOe OadpeeUn+aEv+aEj+WGjeWBmuS4reWbveS6uueahOaKleelqOiAheS4re+8jOacieeZvuWIhuS5i+WNgeWFq+aYr+WboOS4uuKAnOaIkeeIseaIkeeahOelluWbve+8jOayoeacieWIq+eahOWOn+WboOKAne+8jOacieeZvuWIhuS5i+WFreeCueWFreaYr+WboOS4uuKAnOS4reWbveaCoOS5heeahOWOhuWPsuWSjOWNmuWkp+eahOaWh+WMlue7meaIkeiHquixquaEn+KAne+8jOacieeZvuWIhuS5i+WFreeCueS6jOaYr+WboOS4uuKAnOaIkeimgeWBmum+meeahOS8oOS6uuKAne+8jOacieeZvuWIhuS5i+S6jOeCueS4g+aYr+WboOS4uuKAnOaIkeeOsOWcqOi/h+W+l+W+iOW5uOemj++8jOebuOS/oeadpeeUn+S5n+S8mui/meagt+KAne+8jOacieeZvuWIhuS5i+WFreaYr+WboOS4uuKAnOS4reWbvee7j+a1juWPkeWxleW+iOW/q++8jOWJjeaZr+eci+WlveKAneOAggoK6KKr6JmQ54uC55eF5oKj6ICF5LiK5Lq/6K6hCgrlnKjkuIDkuKroh6rkv6Hlj6/ku6X aX ajlhajnkIPjgIHlj7f 7DmmK/oi7HmmI7pooblr7zniLHmsJHlpoLlrZDnmoTmiYDosJPlhbHkuqfkuLvkuYnlpKnloILvvZzvvZzkuK3lm73vvIzlsYXnhLbmnI mb7liIbkuYvlha3ljYH 7DmnaXnlJ/kuI3mhL/mhI/lho3lgZrkuK3lm73kurrvvIzov5nml6DorrrlpoLkvZXpg73mmK/kuKrlpKfnrJHor53jgIHlpKfkuJHpl7vvvIzmnoHlpKfnmoTlm73lrrbmnLrlr4bjgILni liKvmmK/vvIzlsL3nrqHkuK3lhbHlh6DljYHlubTmnaXlgL7lhajlm73kuYvlipvlvLrliLblhajmsJHmtJfohJHlkozlsIHplIHotYTorq/vvIzkvYbkvp3nhLbmnI mb7liIbkuYvlha3ljYHnmoTkurr 7DmnaXnlJ/kuI3mhL/mhI/lho3lgZrkuK3lm73kurrvvIzlu mt7Hmt7HmhJ/lj5fliLDigJzlgZrkuIDkuKrkuK3lm73kurrnvLrkuY/kurrnmoTlsIrkuKXigJ3vvIzov5 oa7mmK/ku6TmiJHpoofmhJ/mhI/lpJbvvIzkuZ/ogq/lrprku6TkuK3lhbHpooblr7zkurrmm7TmhJ/mhI/lpJbvvIzogIzkuJT aLnm67ml6DlhYnjgILmnaXoh6rljJfkuqznmoTkuIDkuKrkuIrlsYLmnIvlj4vor7TvvIzku5blr7nmipX ajnu5Pm zkuI3mhJ/mhI/lpJbvvIzlj6rlr7nmnInkurrmnInog4 h4/lgZrov5nkuKrosIPmn6XmhJ/liLDmg4rlpYfjgILmiJHlsLHluIzmnJvkuI3mmK/lm6DkuLrku5bku6zlpK J/lnLDku6XkuLrkuK3lhbHpooblr7zlj6rmg7PmjqfliLbkurrmsJHnmoTku4rnlJ/vvIzkuI3nrqHmnaXkuJbjgIIKCuW9k+eEtu+8jOivtOeZvuWIhuS5i+WFreWNgeeahOavlOeOh+mrmO+8jOS5n+WPquaYr+S7peS4reWbveS6uueahOeJueacieagh+WHhuiAjOiogOOAguiLpeaMieS4gOiIrOaWh+aYjuS6uueahOagh+WHhu+8jOS7peS4reWbveWkp+mZhuawkeS8l+iiq+WltOW9ueeahOaCsuaDqOeoi+W6pu+8jOaMieeQhui1t+eggeacieeZvuWIhuS5i+S5neWNgeS5neivtOadpeeUn+S4jeaEv+aEj+WGjeWBmuS4reWbveS6uuaJjeeul+WQiOeQhuOAgui/meS5n+aPkOmGkuaIkeS7rO+8jOWcqOS4reWbve+8jOaXoOiNr+WPr+aVkeeahOiiq+iZkOeLgueXheaCo+iAheW3suS4iuS6v+iuoeOAggoK5aaC5p6c5YaN55yL55yL6L+Z5Lqb572R5rCR55qE55WZ6KiA77yM5L2g5bCx55yL5Yiw6L+Z5Lqb5p2l55Sf5LiN5oS/5oSP5YaN5YGa5Lit5Zu95Lq655qE5Lq65bm26Z2e5oiP6KiA77yM6ICM5piv5oCB5bqm55u45b2T6K6k55yf77yM5LuW5Lus5a+55Lit5Zu95Lq66L+Z5Liq6Lqr5Lu95oSf5Yiw5peg6ZmQ6K6o5Y6M44CB5peg5aWI44CB6Ium5rap77yM5a+55Lit5YWx6aKG5a+85pyJ5ZKs54mZ5YiH6b2/55qE5oSk5oGo44CCCgror7fnu4bor7vvvJrigJzmiJHmmK/kuIrovojlrZDlgZrkuoblnY/kuovmiY3ooqvnvZrlgZrkuK3lm73kurrnmoTvvIznvZrlgZrlj5dYWFjnmoTmhJrlvITlkozmrLrpqpfnmoQg4oCm4oCmIOWTrSDigKbigKYg4oCdCgrigJzkuI3nlKjmnaXnlJ/vvIzlpoLm znjrDlnKjmnInmnLrkvJrmiJHnjrDlnKjlsLHkuI3mhL/mhI/lgZrkuK3lm73kurrvvIzmiJHniLHkuK3lm73vvIzkvYbmmK/miJHml6Dms5Xnu6fnu63ljrvniLHvvIzov5nkuKr L7kvJrmraPlnKjotbDlkJHkuIDkuKrmnoHnq6/jgILigJ0KCuKAnOS4reWbveeahOi0quWumOavlOWTqumDveWkmu+8jOS4pOe6p+WIhuWMluWkquS4pemHjeS6hu+8jOWmguaenOacieWPr+iDve+8jOeOsOWcqOWwseS4jeaEv+WBmuS4reWbveS6uu+8ge+8ge+8geKAnQoK4oCc5p2l5LiW5YGa54yq77yM6YO95LiN5YGa5Lit5Zu95Lq677yBIOKAnQoK4oCc5Yi25bqm5LiN5aW977yM5L2G5oS/5p2l5LiW55qE5pe25YCZ77yM5Lit5Zu95piv5rCR5Li75Yi25bqm77yM5oiR5rex54ix55Sf5oiR5YW75oiR55qE5Zyw5pa544CC5L2G5oS/6YKj5Lqb5oiQ5aSp6K+06LCO6KiA55qE5Lq677yM5Lul5Lq65rCR5Li65pWM55qE5Lq677yM5pep5pel5q275Y6744CC4oCdCgrigJzlgZrkuK3lm73kurrmhJ/op4nmtLv YDlvojmhovlsYjjgILigJ0KCuKAnOeUn+S4uuS4reWbveS6uu+8jOaIkeayoeacieWwiuS4peaIkeaEn+WIsOaCsuWTgO+8geS4reWbveeahOaWh+WMlumDveaYr+iZmuS8queahOaWh+WMlu+8geaIkei/nuacgOWfuuacrOeahOeUn+WtmOadg+mDveS4jeWtmOWcqO+8jOabtOS4jeimgeivtOWPkeWxleadg+S6hu+8ge+8ge+8geKAnQoK4oCc5oiR5om+5LiN5Yiw54ix6L+Z5Liq5Lit5Zu955qE55CG55Sx77yB6K+35oyH5pWZ44CC4oCdCgrigJzmhL/mhI/kuI3mhL/mhI/miJHov5jmmK/kuK3lm73kurrvvIzkvYbmiJHkvJrlj6vmiJHnmoTkuIvkuIDku6PkuI3opoHlgZrov5nkuKrlm73lrr moTkurrjgILigJ0KCuKAnOadpeeUn+aIkeWGs+S4jeWBmuS4reWbveS6uu+8jOi/meS4quWbveWutuS4jeeIseiHquW3seeahOS6uuawke+8jOS9oOacieayoeacieeQhueUseimgeaxguiHquW3seeahOS6uuawkeeIsei/meS4quWbveWutuOAguKAnQoK4oCc5Li65LuA5LmI5LiN5oS/5oSP5p2l55Sf5L2c5Lit5Zu95Lq677yM5Zug5Li65LiN5oS/5oSP6KKr5aW05b255piv5Lq655qE5pys5oCn44CC4oCdCgrigJzmiJHnl5vmgajmiJHkuLrku4DkuYjmmK/kuKrkuK3lm73kurrjgILkuLrku4DkuYjnlJ/miJHnmoTlnJ/lnLDljbTopoHmiJHlip7mmoLkvY/or4HvvJ/igJ0KCuKAnOWkmuWwkeS6uumDveaYr+i/meagt++8jOi/meaYr+aXoOWPr+WliOS9le+8jOWRveS4reazqOWumuOAguKAnQoK4oCc5Zyo5oiR5Lus5omA5L2P55qE6L+Z5Liq6Iu55p6c6YeM77yM5Y+R6KGo6KiA6K666K+05YW25LuW6Iu55p6c5q+U5oiR5Lus55qE56S+5Lya5Li75LmJ6Iu55p6c6KaB5aW977yM5bGe5LqO6Z2e5rOV6KGM5Li644CC5qC55o2u6L+Z5Liq5LqL5a6e77yM6K+36Zeu5YW25LuW6Iu55p6c5piv5pu05aW955qE5Y+v6IO95oCn5aSn77yM6L+Y5piv5pu05Z2P55qE5Y+v6IO95oCn5aSn77yf4oCdCgrigJzmiJHpg73lv6vkuInljYHkuobvvIzmsqHmnI krHvvIzmsqHmnInmiL/lrZDvvIzmsqHmnInl Plj4vvvIzkuIDlpKnliLDmmZrlnKjlt6XkvZzljovlipvkuK3purvmnKjluqbml6XvvIzliLDlhazlj7jlv6vkuInlubTkuobvvIzogIHm /msqHmnI u5nmiJHku6zliqDov4fkuIDmrKHlt6XotYTvvIznianku7fljbTlnKjpo57mtqjvvIzmiJHlt7Lnu4/msqHmnInkuoblubTovbvml7 moTpgqPkupvkuI3liIflrp7pmYXnmoTmoqbmg7PvvIzlpoLm zmiJHov5jmnInmoqbkuZ/orrjlsLHlj6rliankuIvmnJ/mnJvkuIvovojlrZDkuI3lho3nlJ/lnKjkuK3lm73vvIHigJ0KCuKAnOaDs+aDs+iHquW3seWcqOS4reWbvemZjeeUn+WQjuaJgOi1sOi/h+eahOS6lOWNgeWkmuW5tOeahOS6uueUn+WOhueoi++8jOaIkeaJgOe7j+WOhueahOS4jeW5uO+8jOaJgOacieWQjOm+hOS6uumDveiDveWkn+S4gOWQrOWwseaYjueZve+8muWImuWImuWtpuS8muivtOivneWwseWkqeWkqeWWiuKAmOmlv+KAmeWWiuS6huS4ieW5tO+8jOWImuWImuaHguW+l+KAmOWlveWlveWtpuS5oOWkqeWkqeWQkeS4iuKAmeeahOaEj+aAne+8jOWwseWkqeWkqeWWiuKAmOS4h+WygeKAmeWWiuS6huWNgeWkmuW5tOOAguWGjeWQjuadpe+8jOaIkei1tuS4iuS6huS8n+Wkp+eahOKAmOaUuemdqeW8gOaUvuKAmeaWsOaXtuS7o++8jOWNtOS4iumUmeS6hui9puiAjOiiq+i9veWIsOS4gOS4quWPiOS4gOS4quayoeacieadg+WKv+eahOWwj+ihmemXqOmHjO+8jOWmguS7iuaIkOS6huS4gOS4quagh+WHhueahOept+S6uiDigKbigKYg5bm45aW977yM5Lit5Zu95Lmf5pyJ5LqG5LqS6IGU572R77yM5oiR5LiN5b+F5YOP5YmN6L6I6Zm25Y6/5Luk6YKj5qC35raI5aSx5Zyo6I2S6YeO77yM6ICM6IO95aSf5L2c5Li65LiA5Liq546w5a6e5LiW55WM55qE5aSx6LSl6ICF77yM6ZqQ6YGB5Yiw6Jma5ouf5LiW55WM5Y675omT5Y+R6Ieq5bex5L2Z5LiL55qE5Z6D5Zy+5Lq655Sf44CC6K+05p2l5Luk5Lq65Y+v56yR55qE5piv77yM5oiR5Zyo5peg5pyb55qE546w5a6e5Lq655Sf5Lit5LiA6LSl5raC5Zyw77yM5Y205Zyo6Jma5ouf55qE5LiW55WM6YeM5om+5Yiw5LqG6Ieq6K6k5Li65pyJ5oSP5LmJ55qE55Sf5a2Y5pa55byP77yM5omA5Lul77yMIOaIkeecn+eahOW+iOaEn+iwouWPkeaYjuS6kuiBlOe9keeahOe+juWbveS6uuOAguS9huS5n+S7heatpOiAjOW3siDigKbigKYg4oCd44CCCgrlrp7lnKjmmK/lrZflrZflkKvmgrLlh53mgajjgILlpoLmraTlvbvlupXnu53mnJvnmoTmgrLlj7flnKjkuIDkuKrmsJHml4/miJbmlofmmI7lvZPkuK3mraTotbflvbzkvI/vvIzov5nmoLfnmoTkuIDkuKrmsJHml4/miJbmlofmmI7noa7noa7lrp7lrp7mmK/lvbvlupXlpLHotKXjgIHljp/mmK/kuI3or6XlrZjkuo7kuJbkuIrvvIzmtoLngq3nlJ/ngbXnmoTkuobvvIzlsLHlg4/lh ku5blpJrkuKrogIHmnL3kuI3loKrnmoTmiYDosJPlj6TmlofmmI7msLjov5zmtojpgJ3pgqPmoLfjgILkvYbkuK3lm73ljbTlpKfmirXmmK/ aD YDmg4rkurrnmoTnuYHmr mrLLlkoznuYHmr lipvvvIzlkozplb/mnJ/igJzml6DogLvlvZPpgZPigJ3lkozkuI3mi6nmiYvmrrXogIzlvpfku6Xmrbvmi5bmtLvmi4 moToi5/lu7bmrovllpjkuIvmnaXjgILov5nmoLfkuIDkuKror6XmrbvogIzkuI3mrbvjgIHkurrlpJrlir/kvJfjgIHorrrph4/ogIzkuI3orrrotKjnmoTpopPotKXmnKvot6/mlofmmI7vvIzmmK/lvojpmr7lho3mnInku7vkvZXlh7rot6/nmoTjgILmm7TlnY/nmoTmmK/vvIzov5nmoLfnmoTpopPotKXmnKvot6/mlofmmI7vvIzkuIDmlr aLpgJrov4fotLjmmJPlhajnkIPljJbmibDkubHlhajnkIPnmoTnu4/mtY7 6nluo/vvIzopoHlhajnkIPml6DpmZDph4/liIbmi4XkuK3lm73kurrnmoTlpKfmr5LnmKTvvIzlu ku6XkuI3lkIjop4TmoLznmoTkuK3lm73lvI/liqPotKfmrovlrrPlhajnkIPmsJHkvJflgaXlurfvvIzogIzkuJTnlLHkuo7lhajlm73msJHkvJfpg73ljozmg lho3lgZrkuK3lm73kurrvvIzpg73lj6rluIzmnJvpgIPliLDoh6rnlLHmlofmmI7nmoTlnLDmlr h43mlrDlgZrkurrjgILplb/mraTkuIvljrvvvIznjo 7Pkv7HnhJrmgJXkvJrml6nkuo7lkozlubPmvJTlj5jnmoTlrp7njrDjgIIKCueci+adpe+8jOS4gOWIh+mDveW3suWkqui/nwoK6L+Z5Lqb572R5Y+L55qE55qE5oKy5oSk5LmL5oOF77yM5Luk5oiR5oOz6LW36aaZ5riv5q2M5omL5Y2i5ben6Z+z55qE5ZCN5puy44CK5aW95b+D5YiG5omL44CL6YeM55qE57uP5YW45q2M6K+N77yaCgrigJzmm77nu5nkvaDpqa/mnI3liLDlsLHlg4/nu7XnvorvvIzkvZXop6PkvJrlj43lkqzkvaDkuIDkuIvvvIzkvaD 6XlkJfvvJ/lm57lpLTmnJvvvIzkvLTkvaDotbDvvIzku47mnaXmnKrmm77lubj o/ov4fjgIIg6LW06L+H5rGk77yM6LmI6L+H54Gr77yM5rK/6YCU5Li65L2V5rKh54ix5rKz44CC5LiL5Y2K55Sf77yM6Zmq5L2P5L2g77yM5oCA55aR5b+r5LmQ5Lmf5LiN5aSa44CC5rKh5pyJ5b+D77yM5Yir5YaN5ouW77yM5aW95b+D5LiA5pep5pS+5byA5oiR77yMIOS7juWktOWKquWKm+S5n+WdjuWdt+OAguKAnQoK546w5Zyo77yM55u45L+h6LaK5p2l6LaK5aSa5Lit5Zu95rCR5LyX55qE5qKm5oOz77yM5YaN5LiN5Lya5biM5pyb6aKG5a+85Lq65pS56YKq5b2S5q2j77yM5oiW5biM5pyb5Zu95Lq66YeN5ou+5aSx6JC95bey5LmF55qE5Lq65oCn77yM5Zug5Li66L+Z5piv5rKh5pyJ5Y+v6IO955qE77yM6ICM5LiU55yL5p2l5LiA5YiH6YO95bey5aSq6L+f5LqG44CC5LuW5Lus55qE5qKm5oOz5bCx5aaC6L+Z6LCD5p+l5Lit55qE5Y+m5LiA5Lqb572R5rCR6K+055qE6YKj5qC377yaCgrigJznlJ/lnKjlpoLnkZ7lhbjjgIHnkZ7lo6vjgIHlpaXlnLDliKnjgIHms5Xlm73jgIHmhI/lpKfliKnjgIHojbflhbDnrY rYnmrKfmtLLlroH Z moTlsI/lm73vvIzlu kuJTmnInkuIDkuKroiJLpgILnmoTnmb3pooblt6XkvZzjgILnhLblkI7kuIDnm7TlkozlrrbkurrmnIvlj4vku6zlubj o/lnLDnlJ/mtLvliLDogIHvvIEg4oCd5YW25a6e77yM6L+Z5Lqb5Zyw5pa55LiN5YOP5Lit5Zu977yM5Y2z5L2/6JOd6aKG5bel5L2c5Lmf5piv6IiS6YCC55qE44CCCgrigJzmiJHkuIvljYrovojlrZDlvojmg7Pmib7kuKrlro ZnmnInkurrmgKfnmoTlsI/lnLDmlr lJ/mtLvvvIwg55yL5Yiw5Lqy5YiH55qE56yR6IS477yMIOi/h+S4iuiHqueEtueahOeUn+a0u++8jCDlkozkuI3lkIzkurr 43ogqToibLnmoTkurrmiZPkuqTpgZPvvIzmnInlpJrlhYPljJ moTmlofljJ lJ/mtLvjgILmiJHmgajpgI/kuobmiJHnjrDlnKjkuI3lvpflt7LnlJ/mtLvlnKjkuK3lm73mna3lt57vvIzmiJHljrvkuoblm73lpJblm57mnaXlkI7vvIzlsLHotormnaXotor IvkuI3pobr Lzov5 h4zkuobjgILigJ3kuK3lm73kurrog73lpJ/nu4jkuo7mkYbohLHlgZrigJzlpKflm73l TmiY3igJ3nmoTomZrojaPvvIzogIzlroHmhL/kvZzkuKrolZ7lsJTlsI/pgq moToh6rnlLHmsJHvvIzpmr7og73lj6/otLXjgIIKCuKAnOaIkeeIseaIkeeahOelluWbve+8jOeIseWlueWNmuWkp+eyvua3seeahOaWh+WMlu+8jOeIseWlueeahOWOhuWPsuOAguS9huaYr+WmguaenOacieadpeeUn+aIkeS4jeaDs+WGjeWBmuS4gOS4quS4reWbveS6uu+8jOWboOS4uueOsOWcqOeahOS4reWbveS6uumDveW4puedgOiZmuS8queahOmdouWFt++8jOmrmOWwmueahOWkluihqOS4i+WNtOaYr+iCruiEj+eahOeBtemtgu+8jOaIkeimgeWtpuedgOi+qOiupOavj+S4qumdouWFt+WQjumdoueahOWYtOiEuO+8jOS7pemYsuiiq+aal+WJkeaJgOS8pO+8jOWcqOi/meagt+S4gOenjeekvuS8muawm+WbtOS4i++8jOS6uua0u+W+l+Wkque0r+OAguWmguaenOacieadpeeUn+aIkeaDs+WBmuS4gOS4qua+s+Wkp+WIqeS6muS6uu+8jOWIsOS4gOS4quWdpueOh+eahOOAgeWFhea7oeeIseW/g+eahOWbveW6pua4oei/h+W5uOemj+a1qua8q+eahOS4gOeUn+OAguKAneW+iOaKseatie+8jOWPquimgeS9oOi/mOaYr+i/t+S/oeS4reWbveeahOaWh+WMluKAnOWNmuWkp+eyvua3seKAne+8jOS9oOi/mOaYr+S4jeWPr+iDvea3seWIu+WPjeecge+8jOS9oOeahOeBtemtgui/mOaYr+imgeWcqOiLpua1t+mjmOmbtueahOOAgg==
( Tue, 14 Jun 2011 17:09:50 +0800 )
Description:
cn从政的人是为了金钱(物资追求),us从政是为了荣誉(精神追求)
可见还不在一个层次。
( Tue, 14 Jun 2011 16:23:22 +0800 )
Description:
( Tue, 14 Jun 2011 16:23:00 +0800 )
Description:
昨天在网上看到了微软发布了.NET 3.5框架下的图表控件,第一时间抓下来看了一下,发觉功能很强劲,基本上能想到的图表都可以使用它绘制出来,给图形统计和报表图形显示提供了很好的解决办法,同时支持Web和WinForm两种方式,不过缺点也比较明显,只能在最新的开发环境中使用,需要.Net 3.5 Sp1以及VS 2008的开发环境。
下面是下载地址: )–
包含英文版,中文版。上面提供的链接是中文版的,可以更改为英文版。
Microsoft .NET Framework 3.5 的Microsoft 图表控件 的语言包,包含23中语言。 –
这个只有英文的,没找到中文的。
这个只有英文的,没找到中文的。
的例子(Samples Environment for Microsoft Chart Controls) –
这个只有英文的,没找到英文的。
Demo 下载:
下了它的示例程序后,运行了一下,非常的强大,可以支持各种各样的图形显示,常见的:点状图、饼图、柱状图、曲线图、面积图、排列图等等,同时也支持3D样式的图表显示,不过我觉得最有用的功能还是
支持图形上各个点的属性操作,它可以定义图形上各个点、标签、图形的提示信息(Tooltip)以及超级链接、Javascript动作等
,而不是像其它图形类库仅生成一幅图片而已,通过这些,加上微软自己的Ajax框架,可以建立一个可以互动的图形统计报表了。
一。*** 控件的***相对比较简单,下载完后,先执行“MSChart.exe”程序,它会自动检测你的环境,***到系统目录中去,如果要在VS 2008环境中直接使用,那么需要***For Vs2008的插件,MSChart_VisualStudioAddOn.exe,还有一个中文语言包MSChartLP_chs.exe。***完后,打开Vs2008,在建立项目的时候,你就能在工具栏中看到有一个Chart的控件了,如下图:
二。使用 ***好后,建立一个.NET3.5的Web项目,像使用普通控件一样拖放到要使用的Web界面即可。初步研究了一下,整个图形控件主要由以下几个部份组成:
1.A otatio --图形注解集合
2.ChartArea --图表区域集合
3.Legend --图例集合
4.Series --图表序列集合(即图表数据对象集合)
5.Titles --图标的标题集合
A otatio 注解集合 A otatio 是一个对图形的一些注解对象的集合,所谓注解对象,类似于对某个点的详细或者批注的说明,比如,在图片上实现各个节点的关键信息,如下图方框和***的小方框: 一个图形上可以拥有多个注解对象,可以添加十多种图形样式的注解对象,包括常见的箭头、云朵、矩行、图片等等注解符号,通过各个注解对象的属性,可以方便的设置注解对象的放置位置、呈现的颜色、大小、文字内容样式等常见的属性。
ChartAreas图表区域集合 ChartAreas可以理解为是一个图表的绘图区,例如,你想在一幅图上呈现两个不同属性的内容,一个是用户流量,另一个则是系统资源占用情况,那么你要在一个图形上绘制这两种情况,明显是不合理的,对于这种情况,可以建立两个ChartArea,一个用于呈现用户流量,另一个则用于呈现系统资源的占用情况。 当然了,图表控件并不限制你添加多少个绘图区域,你可以根据你的需要进行添加。对于每一个绘图区域,你可以设置各自的属性,如:X,Y轴属性、背景等。 需要注意的是,绘图区域只是一个可以作图的区域范围,它本身并不包含要作图形的各种属性数据。 多绘图区效果图如下,分为上下两个绘图区域,分别表示不同的绘图数据: Legends图例集合 Legends是一个图例的集合,即标注图形中各个线条或颜色的含义,同样,一个图片也可以包含多个图例说明,比如像上面说的多个图表区域的方式,则可以建立多个图例,每别说明各个绘图区域的信息,具体的图例配置说明此处就不详细说明了,可以参考一下官网的例子,写得丰富的详细了:)也上一张图例的效果图吧~
Series图表序列 图表序列,应该是整个绘图中最关键的内容了,通俗点说,即是实际的绘图数据区域,实际呈现的图形形状,就是由此集合中的每一个图表来构成的,可以往集合里面添加多个图表,每一个图表可以有自己的绘制形状、样式、独立的数据等。 需要注意的是,每一个图表,你可以指定它的绘制区域(见ChartAreas的说明),让此图表呈现在某个绘图区域,也可以让几个图表在同一个绘图区域叠加,如下图:
上面两幅图,分别表示了把图表放在不同的绘制区域和放在同一个绘制区域的情况。 继续回到ChartAreas章节举的例子,同时要显示用户的流量还要显示系统的占用情况,对于这种时候,应该建立两个Series,一个用于呈现用户的流量,另一个则用于呈现系统的占用情况。它们分别属于各自的绘图区域。
Titles标题合集 根据字面含义即可以理解,是图表的标题配置,同样可以添加多个标题,以及设置标题的样式及文字、位置等属性。多看一下它的属性即能明白各自的含义。
三。其它属性 相对来说,我觉得比较有用的属性有三个,分别是:Label、Tooltip以及Url链接。 Label即标签的含义,可以在图片的关键位置进行一些关键数字或文字的描述,如下图:
像上图:X轴和Y轴的文字便是标签,以及图表曲线中的红点上的文字,也是标签,添加了标签,可以让人更容易的对内容进行理解。 Tooltip即提示的含义,用于在各个关键点,如:标签、图形关键点、标题等当鼠标移动上去的时候,提示用户一些相关的详细或说明信息,例如上图,可以给曲线中的每一个点增加Tooltip的属性,写上需要详细说明的内容,比如:详细的销售明细,那么,在鼠标移动到这个点的时候,会自动弹出提示信息。 Tooltip可以支持简单方式以及自定义的方式,简单方式即像平时Html页面设置的title之类的属性效果,而自定义的方式,则可以实现图形、文本等各种复杂的提示信息显示。详细的方式请参考官方例子的:
Interactivity and AJAX/
Toolti 以及
Interactivity and AJAX/
Client Side Scripts下面的相关例子。 Url链接,图表控件中,有一大半的控件都有Url及Tooltip的属性,你可以设置此属性,在鼠标点击的时候,代到其它相应的页面去。 建议大家看看官方例子中的
Interactivity and AJAX部份
,很精彩:)
例子:建立一个Cpu信息和内存使用的实时统计表 下面写一个小例子,建立一个系统的内存实时统计图表,使用到了Ajax的方法,以及Windows Api取得系统内存的方法。 首先,建立一个A x页面,拖动一个图表控件到页面,设置图表控件的属性如下: 其中,MEMORY_INFO,ComputerInfo是一个定义的结构体及调用Win32 API接口的一个访问类。程序分别取得每一个图表对象,每次加载的时候,都重新取得当前的内存和Cpu信息,再在图表上添加一个点,需要注意的是,一定要设置图表控件的EnableViewState属性为True,否则无法记录状态。
a :Chart ID
="ChartMemory" runat
="server" BackColor
="LightSteelBlue" BackGradientStyle
="TopBottom" BackSecondaryColor
="White" EnableTheming
="False" EnableViewState
="True" Height
="363px" Width
="415px"
Legends
a :Legend Alignment
="Center" Docking
="Bottom" Name
="Legend1" Title
="图例"
a :Legend
Legends
a :Title Font
="微软雅黑, 16pt" Name
="Title1" Text
="系统内存监控图表"
a :Title
a :Series BorderColor
="White" BorderWidth
="3" ChartArea
="ChartArea1" ChartType
="Spline" Legend
="Legend1" Name
="已使用物理内存" XValueType
="Double" YValueType
="Double"
a :Series
a :Series BorderWidth
="3" ChartArea
="ChartArea1" ChartType
="Spline" Legend
="Legend1" Name
="全部占用内存"
a :Series
a :Series ChartArea
="ChartArea2" ChartType
="StackedArea" Legend
="Legend1" Name
a :Series
ChartAreas
a :ChartArea BackColor
="224, 224, 224"