CentOS 6.2 安装OpenSSH Server
安装好了CentOS 6.2,我想让它作为一个服务器,可以让我的Windows 7电脑远程登录。 安装OpenSSH Server 首先,我们搜索一下CentOS的软件库里面有没有已经定义好的SSH服务器包:
1 |
$ yum search <span style="color:#0000FF;">ssh<br />... ...</span><span style="color:#000000;">openssh.x86_64 : An open source implementation of SSH protocol versions </span><span style="color:#800080;">1</span> and <span style="color:#800080;">2</span><span style="color:#000000;">openssh</span>-askpass.x86_64 : A passphrase <span style="color:#0000FF;">dialog</span><span style="color:#0000FF;">for</span><span style="color:#000000;"> OpenSSH and Xopenssh</span>-<span style="color:#000000;">clients.x86_64 : An open source SSH client applicationsopenssh</span>-ldap.x86_64 : A LDAP support <span style="color:#0000FF;">for</span><span style="color:#000000;"> open source SSH server daemonopenssh</span>-server.x86_64 : An open source SSH server daemon<br />... ... |
OpenSSH是Secure Shell的一个开源实现。从上面的搜索结果可以看到,CentOS的软件库里面已经有了OpenSSH的服务器包(openssh-server)和客户端包(openssh-clients),用yum install可以直接安装。
1 |
$ yum <span style="color:#0000FF;">install</span> openssh-server |
OpenSSH Server安装完成后在/etc/init.d目录下应该会增加一个名为sshd的服务。可以参考《CentOS设置服务开机自动启动》的方式配置sshd服务开机自动启动。
1 |
$ chkconfig --<span style="color:#000000;">list sshdsshd </span><span style="color:#800080;">0</span>:off <span style="color:#800080;">1</span>:off <span style="color:#800080;">2</span>:on <span style="color:#800080;">3</span>:on <span style="color:#800080;">4</span>:on <span style="color:#800080;">5</span>:on <span style="color:#800080;">6</span>:off |
手动启动sshd服务,方便后面客户端的连接:
1 |
$ /etc/init.d/sshd start |
用密码方式登录远程服务器 WIndows 7里面的SSH客户端软件我用的是XShell。打开XShell,新建连接,选择Password验证方式,输入用户名和密码,这样就可以连接到服务器了。 登录成功后的画面: 用RSA密钥登录远程服务器 OpenSSH允许使用RSA的方式登录服务器。RSA加密方式会有两个文件:一个是公钥文件,放在服务器$HOME/.ssh/authorized_keys文件里面;另外一个是私钥文件,放在客户端电脑上。 产生RSA密钥对,可以在服务器产生,也可以在客户端产生:
1 |
$ <span style="color:#0000FF;">ssh-keygen</span> |
执行完毕后,会在$HOME/.ssh目录下多出来两个文件:id_rsa.pub(公钥文件)和id_rsa(私钥文件)。 将公钥文件追加到$HOME/.ssh/authorized_keys文件后面:
1 |
$ <span style="color:#0000FF;">cat</span> id_rsa.pub >> authorized_keys |
将私钥文件下载到客户端电脑(可以使用SFTP方式,例如XFtp,WinSCP等很多软件),然后新建XShell连接,选择Public Key验证方式: 配置完毕,现在我们可以不用输入密码也能够连接到服务器了。 OpenSSH相关目录和文件 所有配置信息保存的目录:/etc/ssh sshd服务配置文件:/etc/ssh/sshd_config OpenSSH相关链接 《用OpenSSH构建SSH服务器》:安装O盆SSH服务器。 《用SSH客户端软件登录到服务器》:如何用PUTTY+RSA登陆远程服务器。 《CentOS Wiki – 保卫 OpenSSH》:OpenSSH的安全设置。 《Top 20 OpenSSH Server Best Security Practices》:20个需要遵守的SSH安全建议。 转自:http://www.cnblogs.com/eastson/archive/2012/06/29/2570163.html
View Details解读玛雅历法:2012.12.21确有特殊天文现象
玛雅文明遗址素描。 新闻背景 2012终于来了。两年前好莱坞大片《2012》的热播,已经让这个原本普通的年份具有了某种符号意义。 玛雅预言、太阳风暴、地磁反转,这些令人闻之色变的名词,注定会在2012真正到来的时候又被人提起,而国家天文台研究员李竞先生对此有着深入的科普解读。 玛雅预言从未提过世界末日 电影《2012》的故事围绕一个玛雅预言展开——2012年12月21日,是第五个太阳纪结束的时候,那个时候世界末日会到来。 李竞介绍说,所谓玛雅预言是有依据的。在中美洲的危地马拉曾出土一块与此有关的石碑。这个石碑的文字是古代玛雅文。玛雅文明在13世纪已经被西班牙的侵略者消灭了,语言、文字都消失了。出土石碑的年代是在公元8世纪,相当于我们中国的盛唐时代。 石碑上的文字后来被破译,那是关于玛雅人的历法。石碑上说,我们现在生活在一个很长的时间周期之中,有近千万天之多。现代天文学家把这样长的一个周期叫做太阳纪,换算成为现在的年,是25800年。这个石碑上说,我们现在生活在第五个太阳纪,第五个太阳纪将要在某某天结束。这个结束日期换算成为今天的历法,就是2012年12月21日。 事实上,这个石碑上就只说了这些。它没有讲第一太阳纪、第二太阳纪、第三太阳纪、第四太阳纪,也没有说第五个太阳纪结束以后,是不是就是第六个太阳纪。 李竞认为,世界末日概念是基督教文明独有的一个重要特征,而世界其他很多文明往往并没有这个概念。比如我们中华文明只讲循环往复。因此,所谓玛雅人预测的世界末日,很可能是西方人强加给玛雅人的。 值得一提的是,25800年这个周期的确不是凭空臆定的,这个数字对现代天文学家来说是太熟悉了。我们地球除了公转、自转之外还有第三个运动,就是自转轴会像陀螺一样旋转,而旋转一周的周期恰恰就是25800年! 公元8世纪的玛雅人怎么会知道这个数字?其实也并不奇怪,古代天文学家都要编历,不管是中国、古埃及、古希腊、还是玛雅天文学家,都知道要加一个改正量,这个改正量很小,但必须加,否则若干年后,就会春天变夏天,夏天变秋天了。中国天文学家把这个修正量叫“岁差”。中国晋代大天文学家祖冲之,就明确提出了岁差的概念。 当然,古代天文学家并不知道岁差的真正含义是地球自转轴的旋转,但这并不影响他们在天文观测中得到25800年的周期数字。 2012年12月21日确有特殊天文现象 李竞说,当所谓玛雅人预言的说法传开后,天文学家们一研究也很吃惊,因为2012年12月21日确实有很特别的天象。 每年的12月21日前后一两天都是冬至,而在2012年12月21日冬至日那个时刻,从地球上看过去,太阳的背后正好是银河系中心的方向。 银河系中心的那一点上有什么呢?这个事情在上个世纪90年代还都不清楚,只有到了21世纪初,通过哈勃空间望远镜,才确定知道银河系中心那点上有一个黑洞,它的质量是400万个太阳质量。电影《2012》的编导就借题发挥,说在那个时刻,这个黑洞的引力发威就影响了太阳,使得太阳爆炸,大量发出一种叫做中微子的粒子射到地球这里,地球受不了,内部的热量达到一定程度,就失去平衡,全球出现山崩地裂的大灾难。 这种说法的荒谬首先在于,说在2012年12月21日那个时刻,银河系中心黑洞、太阳、地球三者成为一条直线,后面黑洞的威力影响着太阳,使太阳如何如何,这本身是似是而非的。太阳离银河系中心黑洞的距离大约有三万光年,也就是说,当三者在一条直线的时候,我们看见银河系中心的光其实是三万年前发出来的,而三万年前我们的位置究竟在哪里?根本不知道,完全不在一条直线上。其实,银河系中心黑洞的引力一直在影响着我们,2012年12月21日并不会有任何特别之处。 而所谓中微子是什么?李竞解释说,上世纪物理学家曾预言,宇宙中应该有一种质量非常小的不带电的粒子。1933年,一个大物理学家给它起名字叫中微子。上世纪50年代证明了中微子确实存在。中微子是在热核聚变中产生的,太阳时时刻刻发生着热核聚变,也不断产生出大量的中微子。中微子有一个非常大的特征,它几乎跟任何物质都不起作用,谁也拦不住它。每时每刻不知道有多少太阳中微子从我们身上穿过,再从地球穿出去。这个宇宙中充满了大量的中微子,只是我们感觉不到。 中微子的产生是热核反应的产物,和黑洞引力无关,它也不会把地球搅热,更不可能把地球搞得山崩地裂。 地磁反转是几万年的过程 在《2012》这个电影里,还说在2012年会出现突然的地磁反向,从而给地球带来灾难。 李竞说,所谓地磁反转,就是地磁内部的某种机制使得南极变北极、北极变南极。地磁会不会反转?回答是肯定的。关于地磁反转,我们有一个专门的学科来研究,就是古地磁学。地球上的岩石里面就存储了磁的信息,根据古地磁学,至少在侏罗纪、白垩纪,恐龙生活的一亿六千万年之间,曾经有过三次地磁反向,所以恐龙很不简单,它们在那三次反向中都扛过来了。 究竟在地磁反转中会发生什么样的改变,人类不知道,人类还没有经历过地磁反转。而地磁反转是一个比较漫长的过程,很可能要经过几万年。地磁反转一般的过程是这样:地磁的磁力强度逐渐减弱,减到非常弱的时候再变强,而到再变强的时候地磁已经反向了。这个过程可能要几万年,绝不像电影《2012》所说的,几分钟内地磁就要反向了。因为岩石中储存的地磁信息已经告诉我们,这是一个漫长的过程,甚至现在我们的地磁可能就正在反向中。 地磁为什么要转向?现在的科学还不知道。地磁反向一定会出现灾难,究竟会出现什么样的灾难?我们也不知道。但是这个灾难至少没有让恐龙灭绝。 来源:中国日报网
View Details2012来自宇宙重要讯息——给地球上的人类全体
《我是外星人》摘录 作者:林显宗 我想,我已经从外星人的角度、宇宙的角度,跟各位探讨很多不同的星球的想法或讯息。我知道过去人类一直对外星人的存在,抱持着一种存疑的态度,由于你们封闭的心、二元对立的想法,导致你们无法承认我们的存在,很难接受到我们的讯息。所幸,现在已经有少数人能够慢慢懂得我们的讯息、懂得接受我们了。然而我要表达的是,我们绝对没有恶意,也没有任何侵犯的意图。我们了解人类的心态、封闭的心灵。了解你们二元对立的想法,也因为如此,我们完全尊重人类自己的选择跟体验。可是,我必须透露一个很重要的讯息给地球上的人类。 由于时间逼近了,我不得不透过这本书,告诉目前地球上的人类以及所有有形众生们,你们即将遇到一个非常大的蜕变。但是,这在我们外星人来看,将是一件非常美妙的事情。因为这个蜕变,会让你们打到一个前所未有的跃进及提升。在玛雅文明的历法中就曾经预言,在地球2012年冬至那一天,地球将会遇到一个很重大的变革,有人把它解读成世界末日,有些预言家也有相同的预言。但是,我们要很严正的向各位说明,绝非世界末日,也不是地球毁灭。虽然目前地球确实几乎被人类破坏殆尽,人类也制造了极大的污染,酿成环境生态的巨变,导致全球快速暖化、粮食危机等问题,确实都是人类咎由自取,但是,这还不足以摧毁整个地球。 就宇宙的角度来看,地球所存在的位置,只是太阳系中的一颗行星而已,而太阳系又是整个银河系之中,几千亿万个太阳系中的一个,而银河系也不是你所想象的就是这么一个银河系而已,事实上,想这么大的一个银河星系,在浩瀚的宇宙之中,就有数千亿万个!而地球仅只是太阳系中的一个星球,整个地球都绕着太阳在公转,而太阳系也绕着银河系在转,甚至,整个银河系也绕着织女星系在转,从没有不动的星球或星系存在。各位可以想象,在宇宙之中地球是多么的渺小。但是并不是因为它渺小,我们就轻视他,相反的,它正是我们所有外星人被送到这里来实验或训练的一个重要场所,所有我们确实也有很多星球的族人,来到你们地球、成为人类,成为不同的物种。 也因为如此,未来的太阳系在它运转的过程中,将会慢慢的穿越宇宙中一个很特别的区域,这个区域就是你们人类目前所称的“光子带”。这个光子带确实会造成地球上所有物种巨大的变革。原因是这些光子带的光粒子,它的震动频率与目前地球上所有物质的震动频率完全不同,目前地球上物质的震动频率,有它特定的频率存在,而这些光子带的光粒子,它的震动频率非常高,可能远超过各位的想象,在这个高频率的震荡之下,你们的物质现象跟过往是完全不同的。在不久的未来,整个太阳系即将穿越这个光子带。一旦进入光子带,地球的震动频率会慢慢的被调整,包括人类自己的肉体以及所有物种,都回进入不同的震动频率的调整状态。也因为如此,地球目前的灾难、地震、海啸、台风等,以及很多的气候变化,越来越激烈,频率也越来越高,这是很正常的现象,你们无需惊慌,那不过是宇宙天文的自然想象而已。 可是比较令人担心的是,当整个太阳系要穿过这个光子带的初期,由于那些光粒子的密度太密了,那些高密度的光粒子会笼罩整个地球,会遮蔽掉你们的阳光,然后形成暗无天日的日子。 但是,我要强调的是,你们并不需要恐慌那个日子的到来!你们只要能够安下心来,让自己的心是光亮的、稳定的,就可以度过这段黑暗的日子。等度过这段黑暗的日子之后,你们就会发现,很多的物质现象不一样了,例如:人类的肉体会不同,你们的皮肤也会变得非常有光泽,呈半透明状,全身透着光。而且,也因为粒子的震动频率不一样,地球的重力也会改变,所以会让人有种轻飘飘的感觉。也就是说,人类目前所生活的三度空间模式,未来必定会蜕变成存在于四度空间的模式。对于蜕变成功的人,他存在于四度空间之中,用自己的意念就可以移动身体,来去自如,完全不需要你们现在使用的飞机轮船,等交通工具。假如有一个人,从中国要到美国,他只要一个意念,就可以到达了。甚至未来的你们,也可以随时做星际旅行,随时互相沟通往来。就像我们宇宙中很多的星球一样。这也代表,地球的未来即将蜕变到一个非常美妙的境界。 可是,密实的光粒子所形成的暗无天日的那几天,对人类而言,可能会是一个比较可怕的过程。宇宙中很多星球希望将这些讯息传达给人类,因此,我们必须借由这本书的因缘,告诉人类千万不要惊慌!因为这真的是一件极其美妙的事情,全宇宙都为了这件事情在期待、在喝彩、在欢庆着。 但是因为人类确实很难理解这个概念,所有我们必须用另外一个角度来说明,你们就会比较容易理解了。在你们人类生活的大自然环境里,应该很容易去观察到一些物种的蜕变,其中最明显的就是毛毛虫了。我们常常可以看到毛毛虫在一棵树上爬高爬低的,对于这只毛毛虫而言,它的视野永远是平面的,没有立体的概念,如果毛毛虫有立体的概念,那它爬到树顶上就可能会掉下来,或得了恐高症,不晓得怎么走下去了。很显然,毛毛虫是一个二度平面空间的存在者。 因为毛毛虫是一种二度平面空间的物种,它永远无法离开树的庇荫下生活,如果离开树的庇荫,它很可能会被阳光晒死。所以它的世界永远只能认识到这棵树而已,其他的它无法想象。可是毛毛虫的生命是走到了某一个尽头的时候,因为它的生命形态必须蜕变,于是它为自己制造了一个蛹,让自己躲在蛹里面,过着暗无天日的日子。而在这些暗无天日漫长的日子里,它将让自己的身体不断的蜕变,当它蜕变成功,破茧而出,就会成为一只非常美丽的蝴蝶。这只蝴蝶有着一双非常美丽的翅膀,身体形态跟过去毛毛虫截然不同。这只美丽的蝴蝶,它可以飞高飞低,飞过这棵树,在草丛中在花朵里肆意穿梭飞跃,甚至飞过整片的树林,飞到另一个国度。它所能看到的视野,跟过去毛毛虫期待所看到的完全不同。它已经由二度平面空间进入到三度立体空间的存在体了。 经历过蜕变的这只蝴蝶,它已经了解所有蜕变的过程,就算它再回到原来的二度空间的树上,去告诉其他的毛毛虫们,未来的你们也可以跟我一样,你们只要耐心的度过,在蛹里面那些暗无天日的日子之后,你们就可以变得跟我一样到处去飞翔! 可是对毛毛虫来讲,有翅膀的蝴蝶,简直像毛毛虫天使一样,当它们看到这个天使,忽然的出现、突然又不见,让它们感到既敬畏又害怕,心想到底他们是谁呢?当蝴蝶跟他们说,其实你们不用怕我,我会忽然出现有忽然不见,那是因为我存在的空间跟你们不一样,只是你们无法用二度空间来理解三度空间而已。可是无论蝴蝶怎么告诉它,毛毛虫始终无法接受跟相信。对它而言,它的视野、它的世界永远只是那个样子,它完全不能理解蝴蝶所说的那个境界! 而当今的人类就是三度空间的存在体,未来你们也即将蜕变成四度空间的存在。所有对于人类来讲,我们外星人无论如何透过不同的方式示现给你们,你们始终无法承认,也不能面对,更无法相信会有这样的结果。有时候我们就像这只蝴蝶一样,不断的飞回来告诉你们,你们是可以做到的,只要你们用对了方法,绝对没有问题。当然,我们可以了解,对人类而言,确实很困难,因为人类太执着目前的物质空间的存在,执着这些科技文明,执着自己的肉体,很难想象有这样的存在。 所以,未来人类势必遇到这样蜕变的日子,而这个日子确实即将到来,你们将会进入到一个暗无天日的光里。但是,就地球日子来讲,那不过是几天的时间而已。因为,光粒子的震荡频率太强烈,遮蔽掉阳光,地球将陷入一个比较阴冷的日子。你们伸手不见五指,也会觉得很冷,因为光粒子会破坏所有的电子通讯系统,连一只手电筒,都无法打开。所以在又冷又黑的日子里,确实会让很多人产生恐慌,也因为恐慌,可能会有人想不开,以为世界末日到了;严重的,甚至还可能有集体自杀或发狂的情形。也许你的家人,你的朋友,他们可能会惊恐、害怕,会因为这样而抓狂或自杀都有可能。 不过,在那几天黑暗的日子里,如果你的家人慌乱了、恐慌了,劝你不如就唱一首歌吧!你们人类有一首歌,叫作《当我们同在一起》。这首歌很多人可以朗朗上口,很多小朋友都会唱,你们就会带着家人唱这首歌。那个时候,透过你们歌声的传导,会让附近的人听到歌声,会让他们因此而感到安定,他们只要能感受到还有人存在着,有人陪伴着,他们并不孤单,他们就会有力量支撑过去,这首歌,也是我们所能给你们最好的建议了。 但是,对于一个明白的人,他们知道,只要能够安然度过这几天就没问题了!有些修行人,或者得道的高僧,他们确实已经领悟到这个道理,所以,他们也透过各种方式,来劝导他们的信徒也好,民众也好,让他们相信这个原理。可是真正懂得的人,还是太少太少。也有很多心灵老师,或是宗教大师,他们甚至用他们自己的方式来体现这些现象或原理,但是人们真正懂得还是不多。 在这几天里,你们也将找不到任何事物,所以也没用任何的热能,身体会有饥饿的感觉;但也不用担心,这几天也饿不死人;只要准备大量的饮用水,水将是未来救命的东西,只要有洁净的饮用水,未来就可以度过了。 度过之后,你们会发现整个地球不一样了,整个物质界的现象也不同了。当然,你们原来的房子还是可以住,原来的家人彼此还是认识的;所以度不过的并不是你的肉体,肉体会蜕变也会有一些现象产生,但不用担心,你只要全然信任就好,信任肉体的转变,你必须完全放松、完全信任、不要害怕、不要恐惧、心魔才是最可怕的,你自己的心魔会导致你毁灭自己、毁灭别人。 我要再次强调,无论如何,当这样的日子到来时,请务必记住这句话:“持住你心中的光,观想光给自己。”不管你要静坐、冥想、睡觉都可以,就是不要慌、不要乱,按住在自己家里,饮用大量的水、持住自己、稳定自己,你就可以度过,你的家人也可以一起安然的度过。 当然有的人会度过不,而度不过的人,他们将根据他们的业再继续轮回,而且投胎到一个业更重的星球去了!其实宇宙很贴心,已经为这些人准备好另一个这样的空间了。所以,无法蜕变的人,必须重来,不断的再轮回。能够蜕变的人呢,未来你们的寿命你们自己可以决定,你的身体要活多久就活多久!就像衣服穿多久、旧了、脏了、不要了,你想换另一件衣服,你可以自己决定。未来你们心里想要什么,就真的可以有什么了,这将会是一个何等美妙的未来!! 你可以了解,宇宙正在为地球庆贺,准备着吗?当然你们也不用担心,只要你的心是亮的,纯正的,我们很多外星伙伴会在这个时候来协助大家,让你们尽可能的度过。可是,我们不能过度的介入跟干涉,只能尊重你们自己的业。因为人类有很珍贵的东西,就是“自我意志”。所以,我们只能告诉你们,这个日子即将到来,当然,未必如玛雅文明所讲的一定就在2012年的冬至,也许会提前、也许会延后,就看人类全体的心灵准备好了没有。 事实上,地球在几万年前,就曾经经历过这个光子带了!当时的玛雅文明也是这样而消失的。对于玛雅文明来讲他们其实并没有消失,他们现在只是存在四度空间里而已,只因为人类看不到他们,就以为玛雅文明已经消失了。 当提升到四度空间之后,未来人类还可以跃进到五度空间。整个地球处在光子带的时间,约达2000年的时间。这段时间将是一个非常光辉的日子,我们引颈期盼大多数的人类能够穿越这个过程,能够蜕变!所以,在这数十年来,我们这些外星伙伴,不断、不断的透过各种讯息,来传导给人类知道。你们现在网络上不也流传着这些2012年的传说吗?当然,网路上有的传说未必正确,有些也真的讲的太过火了,甚至隐喻这是世界末日的到来或地球毁灭,其实并非如此。 对我们而言,这是地球人类众生的大蜕变而已!所以我们可以理解到,过去人类社会、宗教、科学、或心灵的灵修团体,他们所强调的各种静坐、内观、冥想、脉轮、气功、瑜伽或者是修拙火、静心、祈祷等待,这一切的一切都是有意义的。即便你是一位佛教徒,只是安心念佛、持咒,在那几天也是有意义的。所以回顾人类过往这些心灵大师们,他们所教导的方法,只要你认真的用,都可以协助你读过;就算你没有任何信仰,能够静心内观自己也好!重要的是你自己的心,够不够稳定。 人类以目前这种形态的存在模式,真的已经太久太久了,必须要蜕变。当然我也要这么讲,未来是测不准的,以量子物理的角度来讲,你们的未来永远测不准。所以有机缘看到这本书的人,你们就提早准备吧!当然,你们还是一样过着你们自己的日子没有改变!我们也祝福人类,有更多的人能度过这个蜕变,就像毛毛虫蜕变成蝴蝶,那是一件再自然不过的事情了!就让我们共同迎接这段光辉灿烂的未来! 我们只能言尽于此。但是,我们绝不愿意传达给人类的讯息是恐惧的,如果你看了这本书的内容,你真的看得懂,真的够明白,你将会以正面而且乐观的态度来面对它,并且也传达正确的概念,那你将会帮助很多人。但是,假如你看不懂或误解了,而用负面的概念或恐惧的想法来传导这个讯息,你将不止害了别人也会害了自己!所以,请务必务必用正面的角度,来参与这个事件,看待这个事件! 就算这个美妙的蜕变,最好结果并没有发生,也没关系,你们依旧过原来的日子而已,当然没什么影响;但如果这个蜕变,依照预期发生了,那更好,因为你们真的会面临一个很大跃进跟提升,将会进入一个更美妙的国度。我们能讲的就这么多了,只能说祝福人类真的蜕变成功,让地球迈入更美秒的未来!很高兴借由这本书的因缘,让我们把这个重要的讯息传导给你们,就看你是不是有缘人了! 对我们而言,这是地球人类人生的蜕变而已!所以我们可以理解到,过去人类社会、宗教、科学、或心灵的灵修团体,他们所强调的各种静坐、内观、冥想、脉轮、气功、瑜伽或者是修拙火、静心、祈祷等待,这一切的一切都是有意义的。即便你是一位佛教徒,只是安心念佛、持咒,在那几天也是有意义的。所以回顾人类过往这些心灵大师们,他们所教导的方法,只要你认真的用,都可以协助你度过;就算你没有任何信仰,能够静心内观自己也好!重要的是你自己的心够不够稳定。 我要再次强调,无论如何,当这样的日子到来时,请务必记住这句话:“持住你心中的光,观想光给自己。”不管你要静坐、冥想、睡觉都可以,就是不要慌、不要乱,按住在自己家里,饮用大量的水,持住自己、稳定自己,你就可以度过,你的家人也可以一起安然的度过。
View Details[星云大师] 忙,就是营养
有一段时期,一连有好几位徒众因身体有病而住在如意寮中静养。为我开车多年,曾经担任人事监院的永均法师问我:「那些人看起来身体很好,但每天又无所事事,为什么那么多病?我们每天忙碌不已,身兼数职,为什么反而身体健康不生病呢?」我随口回答他:「因为忙,就是有营养啊!」不料这句话在徒众间流传起来,成为一句法语。回想起来,我的一生的确是因为「忙」,才少病少恼,身健心安。 童年时代,我就很喜欢忙。每天鸡鸣而起,忙着帮大人插秧、除草、放牛、养鸡,忙着和同伴捉泥鳅、找蟋蟀、玩纸牌、说故事。甚至连吃饭、睡觉都是在忙中度过。即使生病,也是在忙的里面,似有似无地打发过去。忙,不但强健我的体魄,也长养我的耐力。 及至我十二岁出家之后,虽然生活方式有所改变,但是忙碌依旧,所以我从来没有适应上的困难。记得那时我忙着早晚课诵、上课读书,忙着出坡作务、挑柴担水,忙着看守林园、捉拿山林小偷、护卫山门,甚至忙着立菩提愿、发增上心,忙着念佛号,忙着打腹稿……,几乎到了无事不忙,无处不忙的地步。这样从早到晚,忙此忙彼,不但于己丝毫无损,反倒强化我的身心,增加我的人缘。 由于我经常自动自发帮忙菜园工作,所以园头不时送我两棵白菜、几粒番薯姜,让我带回去烧汤煮面,与同学共享,彼此皆大欢喜。尤其在隆冬的夜晚,三五好友蹲踞厨房一角,一面忙着偷吃面条,一面忙着闪躲纠察老师,既刺激,又温馨。如今回味起来,依然乐趣无穷。 每个月常住创办的《中流杂志》出刊时,我也总是义务地前往协助包装寄发。一天忙碌下来,不但赢得师长的赞美,而且还能获赠一份杂志做为酬劳,使我能免费阅读,先睹为快。这对于嗜书如命,却阮囊羞涩的我而言,真是无上的珍宝。 就读佛学院期间,我不但每天发心煮放参(晚饭)供养大众,也时常到常住的织布工厂里帮忙。虽不曾多吃一粥一饭,也未尝得到一丝一缕的赐赠,但在忙的同时,我深深了解物力的艰难与缘起的妙用,一生受用无穷。 所以,在「忙」中,有数不尽的乐趣;在「忙」中,有无限的喜悦;在「忙」中,能安身立命;在「忙」中,能多所体悟。「忙」的生活实在太美妙了!在「忙」中,我感觉到懒惰懈怠实在就是罪恶。 为了照顾一窝刚生下来的小老鼠,我将它们偷偷藏在抽屉里,每天咬破饭粒慢慢喂食。看着它们从全身无毛到一身乌亮,从未睁双眼到活蹦乱跳,我感受到生命之可贵在于跃动不息,身为万物之灵的人类焉能不将自己「忙」起来呢? 为了同学赠送的几条蚕宝宝,我在读书作务之余,跑全山,摘桑叶,一面注意它们的温饱情况,一面还要避免被老师发现,一直养到它们长大成蛾,破茧而出。这些点滴体验,让我及早深入「虽忙犹闲」的三昧,对于我未来的弘法事业具有莫大的帮助。 在佛学院图书馆兼任管理员期间,我除了夜以继日整理「活页文选」之外,还经常忙里偷闲,翻看《水浒传》、《三国演义》、《基度山恩仇记》等中外名著。甚至在开大静之后,点着线香躲在棉被里偷偷阅读,直至天亮。就这样数年之间,拜忙中自修之赐,我不但得以遍览群书,更激发对文学的深厚兴趣。 老师的一声令下,我忙着奔走油印,供给教材;同学的一句要求,我忙着整理讲义,装订成本。忙,使我得到师长的肯定;忙,使我得到同侪的友谊;忙,使我意识到集体创作的重要;忙,使我感受到同心协力的意义。在闭塞的深山丛林里,虽不曾阅读「青年守则」,但我早已体会「助人为快乐之本」的真谛。观世音菩萨因为二六时中忙着寻声救苦,地藏王菩萨由于时时刻刻忙着地狱度生,所以赢得佛子们的顶礼赞叹。因此,忙是善举,忙是利行,忙是情义,忙是功德。忙,才是佛法的真谛。 一九三七年,卢沟桥事变点燃中日间的战火;八年后,艰苦的抗战终于结束,未曾休养生息,又遇国共之争。十余年间,我与一般苦难的中国人一样,忙着逃难,忙着流亡,忙着防空袭,忙着躲战火,忙着救济伤亡,忙着收容孤老。忙,给我机会,让我从扬州乡下来到南京栖霞,让我由童蒙无知直至出家求学,让我从山林僻野走向社会群众,让我从徐蚌会战来到台湾施展弘法利生的抱负。 刚开始时,为着一个开示,我往往忙了几个通宵,准备讲稿;为了一篇文章,我经常忙了几个夜晚,搜索枯肠。虽然未曾领过任何钟点费,亦未曾得到任何稿酬,但是看着台下的群众由少而多,由点头会意到拍手鼓掌,看着自己的一笔一画印成方方正正的铅字,刊在每期的《菩提树》、《人生》、《觉生》、《自由青年》等报章杂志上,一股强烈的成就感不禁油然而生,充塞胸怀,实非锦衣玉食、华厦美屋之乐所能比拟。在忙中,我充分领略服务奉献,不求报偿的法喜。所以,我能有能无,能苦能乐,能大能小,能进能退。 为了让一本书及早付梓,我曾经守在深山草棚里达一个月之久,趴在尘泥地上,以大地为桌案,奋笔疾书,写出我对人间佛教的理想。为了让一本杂志如期出刊,我时时饿着肚子,从台北大理街走到万华火车站,坐火车到老北投,再转公车到新北投,摸黑步行至山顶,将一本新印的刊物交到老法师手上,才松了一口气。每次完稿,望着鱼肚白的天色,再看看表,往往已是凌晨时分。虽然我整天忙得无人无我,无日无夜,但在我不仅未曾减少什么,反而增进了信心道念。 一九五一年,我担任佛教讲习会教务主任,每天起早睡晚,忙着带领学生做早晚课诵、出坡劳动,忙着准备授课及批改作业。此外,还得忙着圈点八十余本的学生日记及辅导学生的生活。一个月下来,整整瘦了五公斤。尽管如此,我的心灵却在忙碌中逐渐提升,我的视野也在忙碌中逐渐开阔。忙,开启人人本具的潜能;忙,发掘方寸自有的宝藏。所以,我喜欢忙。借着忙,我精进奋发,自强不息。 古人说:「书中自有黄金屋,书中自有颜如玉。」四、五十年前,正是民生困乏的时代,有人又说:「教书自有香菇面,教书自有好供养。」但我觉得,教书之乐不在丰衣美食,而在灌输大家正确的观念。所以每次收到些微稿费或嚫钱时,我总是拿去购买佛书,与佛子们结缘。忙着做一些有意义的事,实在比黄金屋、颜如玉、香菇面、好供养更有价值。记得那时我常常为了一场讲座,从宜兰坐上一天的火车到高雄,演说完毕,又从高雄乘夜车回到宜兰。在北宜线、纵贯线上,我虽然耗费了无数光阴,但生命的力量却随着滋长,怎不叫人欢喜?除了定期的讲演之外,我马不停蹄,忙着到工厂为劳工开示,到码头为渔民布教,到监狱为受刑人皈依,到军营为官兵们说法。有人说时间难捱,我却觉得一天二十四小时瞬息即过,恨不得一天能有四十八小时可以使用。 那时,台湾的出租车刚刚开始营业,我偶尔为了赶路,不得不以出租车协助自己奔忙。每当里程表跳动一次,我的心脏也随之起伏跳动。又要忙碌,又想省钱的滋味固然颇不好受,但是每当望着台下听众心开意解的表情,看着身边的工作能够完成,心中的喜悦真是无与伦比。 民国五十年以后,各个大学纷纷成立佛学社团,广播电台也增辟佛教节目,一向喜爱文教的我益形忙碌起来。我不但为寺院服务,为信徒讲经,还要为学生授课,为电台供稿,整天像个陀螺一样转个不停。虽然如此,我仍感到忙得不亦乐乎。 为了寺院的落成开光、住持晋山,我经常南北奔跑,亲往参加;为了信众的婚丧喜庆,我往往毫不犹豫,前去致意。渐渐地,应酬日增,但因深恐人情不够,所以只有自己忙碌,不愿对别人失礼。虽说凡事已克尽己心,无奈仍有未如人意之处。我深深感到,未成名时,忙,是一种快乐的修行;成名之后,忙,有时却成为一种艰难的负担。俗谓「人为名累」,其实,再忙再苦,我也不累,人情难却才是累人最甚。所谓「鱼与熊掌不能兼得」,我还是欢喜忙,所以仍然继续地忙下去。 随着佛教的发展,五十岁以后,我又忙出另一片天地。在建寺安僧、办理学院、成立养老育幼事业、从事出版文化工作等方面,我都写下了「忙」的历史。但有谁知道,我常常为了开导一个顽皮的小孩,忙着想尽办法;我往往为了疏通一位固执的老人,忙得舌干唇燥。时间在忙碌地思考,忙碌地做事中飞逝而过。佛经上说:「常做佛事,永不休息。」在忙碌的度众工作中,我学习到谦虚耐烦的美德,也长养了慈悲包容的雅量,真是人生一大收获。 佛光山开山之初,我忙着带领弟子们披荆斩棘,启建山林;平日里,我忙着在全山扫除各地落叶;假日时,我忙着进厨房供应香客素斋;山洪爆发时,我忙着以身挡水,保卫道场,事后还要忙着做好水土保持工作;台风来袭,我忙着巡视各地,灾后还要忙着修补摇摇欲坠的草寮。经云:「一沙一世界,一叶一如来。」在「忙」的生活中,我对于这句话有很深的体会,因为佛光山的一沙一叶中,有我全部生命的虔诚供养。 近十年来,我的弘法脚步拓展到国际舞台。我曾六去印度朝圣,八赴欧洲弘法;我曾七往澳洲、纽西兰大洋洲地区巡视寺务,三到巴西、阿根廷等南美国家视察佛光山的别分院。为了将大乘佛法传入西方世界,我去过北美洲的美加一带三十次以上;为了每年为期三天的佛学讲座,香港地区我来往不下十五次。在马来西亚的莎亚南体育馆,我主持过八万人的集会;在印度的拉达克,我爬上海拔四千公尺的高地,向当地信众弘法。联合国大厦曾有我过往的足迹,印度总统府、泰国皇宫、美国白宫也留下我和各国领导人会谈的历史。中国的长江三峡,我曾亲炙过它的风采;世界的七大奇观,我也曾一一伫足观赏。在倥偬的弘法行程中,我浏览过莫斯科的红场风光;在繁忙的北欧之旅中,我见识到瑞典和平幸福的社会主义。走访得克萨斯州的美国太空总署,使我对尖端科技的成果有了进一步的了解;参观加利福尼亚州的环球影城,让我对声光化电的功用有了深一层的认知。我忙着做一个地球人,将欢喜遍撒十方世界,将自己融入万物之中,每天过着既充实又幸福的忙碌生活。 滚石不生苔,流水不生蠹。忙,才能发挥生命的力量;忙,才能使我们身心灵活起来。经云:「若行者之心数数懈废,譬如钻火,未热而息,虽欲得火,火难可得。」又说:「人所欲为,譬如穿池,凿之不止,必得泉水。」借着忙,将自己动员起来,才能一鼓作气,先驰得点。如果能善于忙碌,「忙」就是一帖人生康乐的最佳营养剂。
View Details星云大师语录
提起乐观的性格。 想通事理的原委。 放开闲情的愁绪。 没有疑虑的性格。 扩大积极的服务。 明朗坦白地处世。 呈现微笑的面孔。 散播欢喜的情怀。 做事可以失败, 但不能做人失败; 过去可以失败, 但不能未来失败。 凡事深思熟虑,有计划,则事半功倍; 凡事轻慢草率,没计划,则事倍功半。 “幸福配方” 每天说一些欢喜的话,激励自己不要悲伤。 每天做一些利人的事,激励自己融入群众。 每天谈一些益智的事,激励自己增长智慧。 每天审视圣者的慈像,激励自己增加内心的善美。 人生中,感动是一时的,感恩是一世的; 荣耀是一时的,影响是一世的; 委屈是一时的,成就是一世的。 相伴唠叨自有缘,唠叨半世意缠绵; 劝君休厌唠叨苦,宁愿唠叨到百年。 当对方无理时容忍。 当流言中伤时不理。 当别人受难时体恤。 当接受任务时奋起。 当不幸来临时勇敢。 要学习吃亏、退让、忍辱。要做到“心甘情愿”。 谨记惜福之法: 一、只字必惜,贵之根也。 二、粒米必珍,富之源也。 三、片言必谨,福之基也。 四、微命必护,寿之本也。 人生可以淡,但是不能无味。 例如不读书,言语无味;无味就是贫乏。 人生要像青橄榄,愈嚼愈有味, 淡中有味,才是真味。 人,要求获得别人的尊重,希望获得别人的恭维赞美,就是人情的定律。 人,希望获得食衣住行的富有,就是生活的定律; 人,莫不希望获得功名富贵,就是金钱的定律; 人,都希望获得健康长寿,就是人生自我的定律。 宇宙给每一个人的报酬—— 假如你欢笑,周遭的人也会跟着笑; 假如你悲愁,左右的人也会跟着愁; 假如你歌咏,旁边的人就会跟着唱; 假如你幽默,听到的人就会欢喜你; 假如你拥有戒定慧,温馨一定靠拢着你; 假如你追求真善美,朋友都会包围着你。
View Details开除员工的五个理由
本文作者Matthew Bellows,Yesware软件公司创始人。 我一辈子被开除过两次,深知被开后心情是非常不爽的。年轻的时候喜欢闯荡,第一次被开除觉得是对自我的释放,但是渐渐发现,这是对自己的不负责,顺带失业6个月。 现在我自己开了一家公司,要为团队的发展担忧。招聘,算是我最喜欢的一个环节,可以跟许多有能力的人交流,并邀请有识之士进入团队。当然,开除员工也在所难免,当员工与团队或者公司的发展无法保持同步之时,我们就会考虑开除他。 在我的公司,在开除员工之前,我们会从5个品质以及一个关键因素出发对员工进行分析,最后得出是否开除的决定。 这五个品质是开除员工之前首先要考虑的不分,如果员工已经缺少了其中几个或者全部品质,我们会以最可气最尊重的方式将其“请出公司”: 1.高效率:公司不是一个大家庭,而是一个高效率的团队。每个企业都想研发出世界级的产品,这就需要所有员工都能保持高效率。如果员工做不到这一点,照Netflix首席执行官Reed Hastings的话说就是:“赶紧地,打包走人。” 2.积极性:所有进入公司的员工工作之初都是非常积极的,但因为产品研发需要一定的周期,这可能会抹杀许多人的积极性,但是这种积极性需要维持下去或者 得到提升。同时也需要勇气。如果我们发现员工没有了积极性,工作不再积极,我们就会考虑换人。当然我们更欣赏那些工作积极,充满热情的员工。 3.成长:对于一个快速发展的企业来说,改变是不可避免的,所以就要求提高适应变化的能力,提高技术水平。在我的企业中,我非常看重员工在经过一段时间的工作之后能不能得到成长,如果没法成长,抱歉! 4.诚实与自律:这两点是做人的基本原则,如果员工连诚实、自律都做不到,除了祸害团队其他成员,我还找不出别的功能。公司尊重员工,员工也应该尊重企业。 5.宽容:在一个快速发展的企业中,员工都处在高压状态下。企业工作多,客户需求也多。即便有压力,我们要对自己宽容,也要对客户宽容。宽容的意义还要更宽,比如不歧视,无性别和种族主义,不侮辱他人等。 所以说,如果有员工出现了不符合以上品质的情况,我们开除他的几率就会变得非常大。但是在任何一家公司,不能说开除就开除,得有一个正式的理由,我个人认为最有用的也是最关键的就是“企业资金预算不够”。 另外对于一家企业来说,开除人也就意味着要继续招聘人,不能让零和游戏出现负数。另外也要在用人过程中严禁出现“员工排序”的情况,因为这种制度已经导致微软等大企业停滞不前。 开除员工,并不是一个轻松的话题,对于员工和企业来说都非常重要。任何加入创业企业的员工都要清楚地认清他们未来几年的工作状况,创业者也要对他们所处 的和所打造的环境诚实、负责。在不符合公司发展规划的员工没有打乱这个环境之前,最好还是以相互尊重的方式将其“开除”。 转自:http://www.oschina.net/news/34457/dismissed-employees-reasons
View Details不容错过的 window8 metro UI 风格的 web 资源
最近微软已经正式发布了windows 8操作系统,window操作系统的风格已经完全改变成了瓦片状的Metro UI。 对于微软来说这是一个巨大的改变,而且所有微软的平台包括,桌面,平板,移动及其网站都使用这个UI风格。 Metro UI包含了所有的现代web设计的特点,包括了,简化,基于网格的界面,并且富有连续性。 大家如果有兴趣可以看看这个界面设计说明 (http://msdn.microsoft.com/en-us/library/windows/apps/hh465424.aspx)。 如果你也喜欢Metro风格的话,这里我们收集了很多windows 8的Metro UI风格布局资源,希望大家喜欢! Metro风格的网站框架和模板 Metro UI CSS Metro UI CSS是一个非常完整的创建Metro风格的网站的框架。使用LESS创建,并且拥有网格系统,排版样式,表格,按钮和图片。 同时也拥有内建的javascript组件,帮助你生成片状,菜单,边栏,进度条,提示等等 etro UI CSS BootMetro BootMetro是一个Twitter Bootstrap的Metro风格主题。你可以创建Metro风格的样式。例如,片状UI,工具栏,其它组件。 metro-bootstrap 类似上面的BootMetro,这是另外一个Twitter Bootstrap主题,拥有所有的漂亮组件,并且包含了LESS。 Metro UI Template 这是一个网站的框架和模板,用来创建windows 8 Metro UI风格的界面。拥有平滑的过渡效果和tiles(包括,RSS,Twitter,weather等等) 这个模板支持模板并且拥有jQuery UI主题。 Droptiles – Metro-Style Web Dashboard 一个开源的windows 8开始界面dashboard(类似igoogle)。 使用tiles来展示信息,每一个tiles是独立的应用可以用来获取数据。这个项目基于ASP.NET可以移植到其它语言。 PHP Image Gallery In Metro UI 一个PHP的图片画廊可以自动生成缩略图,并且可以使用lightbox来显示图片。支持HTML5和CSS3。 Motown 一个用来创建Metro风格应用的类库,使用很少代码即可实现。不依赖其它javascript类库。 Metro风格jQuery插件资源 jq-metro 一个jQuery插件用来创建Metro风格的界面。目前,panorama,privot,进度条,列表选择,切换,按钮等。 Metro JS 这个jQuery Metro UI插件可以用来创建tiles,应用条,并且支持主题。功能和设计完全可定制。 jQuery Metro UI Plugin 这个插件可以简单的创建tiles视图并且支持聚焦。 jQuery Mobile Metro Theme 一个免费jQuery移动Metro UI主题,完全支持自定义。使用不同插件来处理应用栏,进度条,按钮和日期选择器。 Metro UI Theme Builder For jQuery UI 拥有themeroller风格的jQuery UI主题创建,帮助你创建Metro UI风格样式 TileJS (non-jQuery) 一个标准的javascript代码来创建tiles并且拥有完整tiles的onclick效果。 免费Metro UI图标 Modern UI Icons 一套简单手绘的Metro […]
View DetailsWPF:在异步操作中使用CommandManager手动更新Command执行状态(转载)
WPF判断命令(Command)是否能够执行是通过ICommand.CanExecute事件,在实际程序中路由命令一般是通过CommandBinding来使命令得到实际操作代码,但是这个CanExecute事件的调用是由WPF控制的,有些时候,比如命令执行后进行一些异步耗时操作,操作完成后会影响CanExecute事件结果,但是WPF不会立即做出反应,那么这个时侯就需要手动调用CommandManager.InvalidateRequerySuggested对命令系统进行一次刷新。 比如下面这个小程序 <Window.CommandBindings> <CommandBinding Command="New" CanExecute="CommandBinding_CanExecute" Executed="CommandBinding_Executed" /> </Window.CommandBindings> <StackPanel> <Button Command="New">执行工作</Button> <TextBlock Name="tbl" Text="等待执行"></TextBlock> </StackPanel> // // 事件执行代码 // privatevoid CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e) { e.CanExecute =!finished; } privatevoid CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) { System.Threading.ThreadPool.QueueUserWorkItem(dowork); } bool finished =false; void dowork(object obj) { updateUI("开始工作"); System.Threading.Thread.Sleep(1000); updateUI("工作结束"); finished =true; } void updateUI(string msg) { Dispatcher.BeginInvoke((Action)(() => tbl.Text = msg)); } 程序按钮点击后下面文字显示“工作结束”,这时按钮理应是禁用的(因为此时CanExecute结果是false),但实际上按钮没有被禁用,只有界面发生改变后(如焦点,按键变化,或者按钮再次被点击),按钮才会被禁用,因为此时WPF才调用相应的CanExecute事件。 手动调用CommandManager.InvalidateRequerySuggested就可以解决问题,注意这个函数只有在UI主线程下调用才会起作用。 void dowork(object obj) { updateUI("开始工作"); System.Threading.Thread.Sleep(1000); updateUI("工作结束"); finished =true; //手动更新 updateCommand(); } void updateCommand() { Dispatcher.BeginInvoke((Action)(() […]
View DetailsWPF Timer替代者
做过WinForm开发的都会郁闷WPF竟然没有Timer。 今天想在WPF中用Timer可是发现WPF没有Timer类,找了半天发现新增了一个 DispatcherTimer确实好用和WinForm中Timer用法相似。 —————————————————————————————————————————-- 引:银光中国 在 WPF 中不再有类似 WinForm 中的 Timer 控件,因此,需要使用 DispatcherTimer 类来实现类似 Timer 的定时执行事件,该事件使用委托方式实现。DispatcherTimer 类 在 System.Windows.Threading 下,需要 using System.Windows.Threading 命名空间。 MSDN事例: 创建了名为 dispatcherTimer 的 DispatcherTimer 对象。 事件处理程序 dispatcherTimer_Tick 被添加到 dispatcherTimer 的 Tick 事件中。 使用 TimeSpan 对象将 Interval 设置为 1 秒,并启动了计时器。
1 |
<ol class="dp-c"><li class="alt"><span><span class="comment">// DispatcherTimer setup</span><span> </span></span></li><li><span>dispatcherTimer = <span class="keyword">new</span><span> System.Windows.Threading.DispatcherTimer(); </span></span></li><li class="alt"><span>dispatcherTimer.Tick += <span class="keyword">new</span><span> EventHandler(dispatcherTimer_Tick); </span></span></li><li><span>dispatcherTimer.Interval = <span class="keyword">new</span><span> TimeSpan(0,0,1); </span></span></li><li class="alt"><span>dispatcherTimer.Start(); </span></li></ol> |
Tick 事件处理程序将更新显示当前秒数的 Label,并且它将对 CommandManager 调用 InvalidateRequerySuggested。
1 |
<ol class="dp-c"><li class="alt"><span><span class="comment">// System.Windows.Threading.DispatcherTimer.Tick handler</span><span> </span></span></li><li><span> <span class="comment">//</span><span> </span></span></li><li class="alt"><span> <span class="comment">// Updates the current seconds display and calls</span><span> </span></span></li><li><span> <span class="comment">// InvalidateRequerySuggested on the CommandManager to force </span><span> </span></span></li><li class="alt"><span> <span class="comment">// the Command to raise the CanExecuteChanged event.</span><span> </span></span></li><li><span> <span class="keyword">private</span><span> </span><span class="keyword">void</span><span> dispatcherTimer_Tick(</span><span class="keyword">object</span><span> sender, EventArgs e) </span></span></li><li class="alt"><span> { </span></li><li><span> <span class="comment">// Updating the Label which displays the current second</span><span> </span></span></li><li class="alt"><span> lblSeconds.Content = DateTime.Now.Second; </span></li><li><span> </span></li><li class="alt"><span> <span class="comment">// Forcing the CommandManager to raise the RequerySuggested event</span><span> </span></span></li><li><span> CommandManager.InvalidateRequerySuggested(); </span></li><li class="alt"><span> } </span></li></ol> |
转自:http://www.cnblogs.com/midcn/archive/2011/03/18/1987928.html
View DetailsC#操作注册服务卸载服务启动服务停止服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 |
using System; using System.Configuration.Install; using System.Collections; using System.Collections.Specialized; IDictionary stateSaver = new Hashtable(); 一、安装服务: private void InstallService(IDictionary stateSaver, string filepath) { try { System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController("ServiceName"); if(!ServiceIsExisted("ServiceName")) { //Install Service AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path =filepath; myAssemblyInstaller.Install(stateSaver); myAssemblyInstaller.Commit(stateSaver); myAssemblyInstaller.Dispose(); //--Start Service service.Start(); } else { if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending) { service.Start(); } } } catch (Exception ex) { throw new Exception("installServiceError\n" + ex.Message); } } 或者 /// <summary> /// 安装服务 /// </summary> /// <param name="p_Path">指定服务文件路径</param> /// <param name="p_ServiceName">返回安装完成后的服务名</param> /// <returns>安装信息 正确安装返回""</returns> public static string InsertService(string p_Path, ref string p_ServiceName) { if (!File.Exists(p_Path)) return "文件不存在!"; p_ServiceName = ""; FileInfo _InsertFile = new FileInfo(p_Path); IDictionary _SavedState = new Hashtable(); try { //加载一个程序集,并运行其中的所有安装程序。 AssemblyInstaller _AssemblyInstaller = new AssemblyInstaller(p_Path, new string[] { "/LogFile=" + _InsertFile.DirectoryName + "\\" + _InsertFile.Name.Substring(0, _InsertFile.Name.Length - _InsertFile.Extension.Length) + ".log" }); _AssemblyInstaller.UseNewContext = true; _AssemblyInstaller.Install(_SavedState); _AssemblyInstaller.Commit(_SavedState); Type[] _TypeList = _AssemblyInstaller.Assembly.GetTypes();//获取安装程序集类型集合 for (int i = 0; i != _TypeList.Length; i++) { if (_TypeList[i].BaseType.FullName == "System.Configuration.Install.Installer") { //找到System.Configuration.Install.Installer 类型 object _InsertObject = System.Activator.CreateInstance(_TypeList[i]);//创建类型实列 FieldInfo[] _FieldList = _TypeList[i].GetFields(BindingFlags.NonPublic | BindingFlags.Instance); for (int z = 0; z != _FieldList.Length; z++) { if (_FieldList[z].FieldType.FullName == "System.ServiceProcess.ServiceInstaller") { object _ServiceInsert = _FieldList[z].GetValue(_InsertObject); if (_ServiceInsert != null) { p_ServiceName = ((ServiceInstaller)_ServiceInsert).ServiceName; return ""; } } } } } return ""; } catch (Exception ex) { return ex.Message; } } 二、卸载windows服务: private void UnInstallService(string filepath) { try { if (ServiceIsExisted("ServiceName")) { //UnInstall Service AssemblyInstaller myAssemblyInstaller = new AssemblyInstaller(); myAssemblyInstaller.UseNewContext = true; myAssemblyInstaller.Path = filepath; myAssemblyInstaller.Uninstall(null); myAssemblyInstaller.Dispose(); } } catch (Exception ex) { throw new Exception("unInstallServiceError\n" + ex.Message); } } 三、判断window服务是否存在: private bool ServiceIsExisted(string serviceName) { ServiceController[] services = ServiceController.GetServices(); foreach (ServiceController s in services) { if (s.ServiceName == serviceName) { return true; } } return false; } 四、启动服务: private void StartService(string serviceName) { if (ServiceIsExisted(serviceName)) { System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName); if (service.Status != System.ServiceProcess.ServiceControllerStatus.Running && service.Status != System.ServiceProcess.ServiceControllerStatus.StartPending) { service.Start(); for (int i = 0; i < 60; i++) { service.Refresh(); System.Threading.Thread.Sleep(1000); if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running) { break; } if (i == 59) { throw new Exception(startServiceError.Replace("$s$", serviceName)); } } } } } 另外方法 /// <summary> /// 启动服务 /// </summary> /// <param name="serviceName"></param> /// <returns></returns> public static bool ServiceStart(string serviceName) { try { ServiceController service = new ServiceController(serviceName); if (service.Status == ServiceControllerStatus.Running) { return true; } else { TimeSpan timeout = TimeSpan.FromMilliseconds(1000 * 10); service.Start(); service.WaitForStatus(ServiceControllerStatus.Running, timeout); } } catch { return false; } return true; } 五、停止服务: private void StopService(string serviceName) { if (ServiceIsExisted(serviceName)) { System.ServiceProcess.ServiceController service = new System.ServiceProcess.ServiceController(serviceName); if (service.Status == System.ServiceProcess.ServiceControllerStatus.Running) { service.Stop(); for (int i = 0; i < 60; i++) { service.Refresh(); System.Threading.Thread.Sleep(1000); if (service.Status == System.ServiceProcess.ServiceControllerStatus.Stopped) { break; } if (i == 59) { throw new Exception(stopServiceError.Replace("$s$", serviceName)); } } } } } 另外一方法: /// <summary> /// 停止服务 /// </summary> /// <param name="serviseName"></param> /// <returns></returns> public static bool ServiceStop(string serviseName) { try { ServiceController service = new ServiceController(serviseName); if (service.Status == ServiceControllerStatus.Stopped) { return true; } else { TimeSpan timeout = TimeSpan.FromMilliseconds(1000 * 10); service.Stop(); service.WaitForStatus(ServiceControllerStatus.Running, timeout); } } catch { return false; } return true; } 六 修改服务的启动项 /// <summary> /// 修改服务的启动项 2为自动,3为手动 /// </summary> /// <param name="startType"></param> /// <param name="serviceName"></param> /// <returns></returns> public static bool ChangeServiceStartType(int startType, string serviceName) { try { RegistryKey regist = Registry.LocalMachine; RegistryKey sysReg = regist.OpenSubKey("SYSTEM"); RegistryKey currentControlSet = sysReg.OpenSubKey("CurrentControlSet"); RegistryKey services = currentControlSet.OpenSubKey("Services"); RegistryKey servicesName = services.OpenSubKey(serviceName, true); servicesName.SetValue("Start", startType); } catch (Exception ex) { return false; } return true; } 七 获取服务启动类型 /// <summary> /// 获取服务启动类型 2为自动 3为手动 4 为禁用 /// </summary> /// <param name="serviceName"></param> /// <returns></returns> public static string GetServiceStartType(string serviceName) { try { RegistryKey regist = Registry.LocalMachine; RegistryKey sysReg = regist.OpenSubKey("SYSTEM"); RegistryKey currentControlSet = sysReg.OpenSubKey("CurrentControlSet"); RegistryKey services = currentControlSet.OpenSubKey("Services"); RegistryKey servicesName = services.OpenSubKey(serviceName, true); return servicesName.GetValue("Start").ToString(); } catch (Exception ex) { return string.Empty; } } 八 验证服务是否启动 服务是否存在 /// <summary> /// 验证服务是否启动 /// </summary> /// <returns></returns> public static bool ServiceIsRunning(string serviceName) { ServiceController service = new ServiceController(serviceName); if (service.Status == ServiceControllerStatus.Running) { return true; } else { return false; } } /// <summary> /// 服务是否存在 /// </summary> /// <param name="serviceName"></param> /// <returns></returns> public static bool ServiceExist(string serviceName) { try { string m_ServiceName = serviceName; ServiceController[] services = ServiceController.GetServices(); foreach (ServiceController s in services) { if (s.ServiceName.ToLower() == m_ServiceName.ToLower()) { return true; } } return false; } catch (Exception ex) { return false; } } 注:手动安装window服务的方法: 在“Visual Studio 2005 命令提示”窗口中,运行: 安装服务:installutil servicepath 卸除服务:installutil /u servicepath |
View Details