如果你也想把自己的网站变灰,那么可以参考以下的方法。
搜索结果 分类目录: 未分类
2010年08月15日
2010年08月14日
2010年07月24日
从DLL文件导出对应的LIB文件
一、VisualStudio中使用的.lib文件:
(1)使用pexports或VC自带的dumpbin.exe导出dll的def文件:
pexports dll-file > def-file
dumpbin /EXPORTS dll-file > def-file
通过dumpbin产生的def文件,需要手工修改成符合def格式,如:
LIBRARY sample.dll
EXPORTS
??0IAccessContrl@@QAE@ABV0@@Z
推荐使用pexports,它产生的def文件不需要修改
(2)使用VC自带的lib程序:
lib /def:def-file /machine:i386 /out:lib-file
二、MingW使用的.a文件:
(1)使用pexports或是微软自带的dumpbin导出dll的def文件,推荐使用pexports,可以直接导出不需要修改的def文件.
(2)使用MingW自带的dlltool工具来生成.a文件
dlltool -D sample.dll -d sample.def -l sample.a
pexports的网址是:http://www.emmestech.com/software/cygwin/pexports-0.43/download_pexports.html
2010年03月1日
超长续航独显笔记本归纳
- 宏基: TravelMate 8371G-732G32N 酷睿2双核Intel SU7300、LED13寸1366×768、ATI Mobility Radeon HD 4330、蓝牙、无光驱、双显卡切换技术、9小时
- 惠普: DM3-1034TX(VZ479PA) 酷睿2双核Intel SU7300、Intel GS45+ICH9MS、nVidia Geforce G105M、LED13寸1366×768、蓝牙、无光驱、8小时、http://www.360buy.com/product/185289.html
- 联想: IdeaPad U450A-SSE 酷睿2双核Intel SU7300、Intel GS45+ICH9M、LED14寸1366×768、Intel GMA X4500、ATI Mobility Radeon HD 4330、蓝牙、无光驱、双显卡切换技术、8芯10小时
- 联想: IdeaPad U460A-ITH i3-350M、LED14寸1366*768、nVIDIA Geforce G 305M、蓝牙2.1、802.11/b/g/n、无光驱、8芯6小时、http://www.360buy.com/product/248165.html
- 华硕: UL80E73V-SL 酷睿2双核Intel SU7300、Intel GS45+ICH9MS、nVIDIA GeForce G 210M、Intel GMA X4500、LED14寸1366×768、蓝牙、DVD刻录、双显卡切换技术
- 戴尔: Inspiron 13Z(S510914CN) 酷睿2双核Intel SU7300、nVIDIA GeForce G 105M、LED13寸1366×768、蓝牙、DVD刻录、4芯5小时
目前发现华硕的UL30K73VT很不错啊,8芯12小时,呵呵~~http://www.360buy.com/product/198564.html
2010年02月19日
[转]投资方和网游研发团队的那些事
团队的诚信。我们认为团队缺乏诚信很难有大造化,尽管这个行业有一些人通过投机取巧活得蛮滋润。我们不建议创业团队提供很花哨的计划书,把主要核心人员吹的天花乱坠——这些都是不明智的做法,投资人会认真审查核心成员背景,一旦审查结果偏离了创业团队的介绍,就会有一个巨大问号被打上。
产品要公开。遇到不肯拿出产品给投资人看的团队时,笔者很是疑惑。大多情况下,投资人会提供很多有价值的意见。要知道几乎所有投资人都是在行业里摔打很多年,经验很丰富教训也不少,既然能大把的银子掏出来给创业团队,没点道行谁敢轻易碰这个行当?笔者认为,一个能够频繁与投资人接触的团队,成长一定是很快的,即使没有拿到投资,投资人的经验和教训也能学去不少。所以,创业团队们,大大方方把你们的产品拿出来,让有经验的人来评判指点,成长就是从害羞和被批判开始的。
跳槽不能多。有那么一个案例,创业团队成员各个优秀,业绩辉煌,但几年来团队整体跳槽n次,甚至不到1年就有一次跳槽。对于这样的团队,笔者很是担忧,要知道,一个产品研发出来至少需要12~18个月,运营前期筹备和运营检验,还要12~18个月,频繁跳槽的结果,必然会让团队停留在某个历史水平。网络游戏这个行业是瞬息万变,团队停留在历史水平上很容易被淘汰,收购价值会严重缩水。对于跳槽问题,投资人会认真考虑团队承载压力能力和责任心两个问题,如果团队承载不了压力而放弃对投资人应担负的责任时,投资人不会自己偷偷哭,而是会提醒其他投资人这个团队做过不适当的事情。
节约也是财富累积的途径之一。去年有个投资人跟笔者抱怨,他投资一个创业团队,创业团队核心人员薪水高的让人无法相信,两千万资金不到两年被当薪水发完了,产品还没出来,还需要至少一千万的追加投资才能完成产品,急啊。创业者拿到别人的投资时,投资人希望创业者继续以创业的心态对待,节约行事,如果创业者做的好,即使将来遇到困境,投资人也愿意帮助创业者继续融资。
【第二个问题:浪费了太多的钱和时间在美术上?】
美术是玩家第一感受,也是投资人第一感受。在游戏研发中,美术成本占据很大一块,工作量大、周期长、返工多。很多团队创业伊始美术不过关,千奇百怪的问题都有可能出现,所有问题都应该在产品初期解决,否则到产品后期,会浪费很多钱,也会浪费很多时间,不排除有些创业团队由此倒下。也许有些创业团队认为美术是见智见仁的事情,其实不然。好的美术效果,绝大多数玩家都能接受,而差的美术效果,很难被玩家接受。那是不是美术效果一定要去追求极致?笔者认为未必,一来成本太高,二来玩家玩游戏玩的并非是美术。创业者只要把握一个“度”就可以了,这个“度”就是玩家不感觉别扭能接受。如果创业者很有钱的话,笔者坚决支持创业者去创造令人心旷神怡的美术效果。即使不做美丑评判,笔者依旧遇到过一些美术问题,分享如下:
画面要合理。如果一棵椰子树长在了华山,很多人会笑……实际上笔者看到了太多这样的情况,画面很漂亮,色彩搭配也很好,就是看上去总觉得不对劲儿——大片椰子树长在华山地图里,违背常理。虽然是常识性的错误,不仔细还真发现不了,这种情况往往会制造笑话,玩家如果玩这样的游戏会在同伴面前抬不起头。画面的合理性大部分玩家说不出来,但是内心里能感受到别扭,别扭的结果就是玩家选择离开。
定位别迷茫。产品做给谁,就要选择适合这个人群的风格,如果一款Q版的全视角3D游戏上市,玩家会很郁闷。一般情况下,我们会认为Q版游戏更吸引女生,实际上绝大多数女生因为生理上原因不能适应全视角游戏,她们会头晕。这样,Q版本3D全视角游戏就吸引不了女生,男生自然也不会来,况且大多男生不喜欢Q版,男生玩Q版原本就是冲女生去的。可能大家有注意到,女生玩布娃娃跳橡皮筋时,男生在舞枪弄棒,后来女生开始喜欢漂亮衣服学习化妆时,男生还是舞枪弄棒,男生喜欢的东西和女生喜欢的东西肯定不一样,产品做给谁,美术就要依照谁的喜好来定位。定位的错误,必然会注定游戏无法火起来。
精细的悲哀。研发者总是希望把事情做到极致,一个怪物模型三千个面,一个主角模型五千个面,看上去确实精致,倘若是2D产品倒也不错,可偏偏是3D的产品,据说还有国战。笔者当时问主程,你们的游戏需要什么的计算机才能玩?有多少玩家会买这么好的计算机?常规的3D游戏,主角1200~1500面已经很不错了,面数太多,普通的计算跑不动,如果再有国战,同屏能支持多少人呢?现在的图形运算技术水平能做到3D游戏同屏支持几十人已经很不错了,对于三、五千面的主角模型,真的很担忧国战如何去打起来。等到发现因为美术太精细导致产品无法上市,修改起来可就麻烦大了。
花钱买壁垒。对于2D游戏,表现力自然是要差一些,如果非要加上换装系统和很炫丽的技能表现,那无疑是花钱买壁垒。笔者有见过超过4G的2D游戏客户端,完成度才60%。研发者很自豪地宣称他们的产品是最炫的2D游戏,已经投入两千多万,研发了三年多,一定会有非常好的卖相。笔者很担忧,几乎所有的研发商都在想尽一切办法让客户端变小,一个4G甚至更大的2D客户端,玩家凭什么去下载呢?大陆网络状况不好,业内普遍认为客户端越大,吸引玩家的成本就越高,所以,游戏千万不能为了刻意追求换装和炫丽技能表现而把客户端弄的太大。
【第三个问题:程序是地基,够结实么?】
创业团队见到投资人时,首先介绍主程和引擎稳定性吧,即使首先介绍了主策划,投资人往往听不到什么的,他们最关心策划这个美丽的大厦会建设什么样的地基上,地基不稳,稍有风吹草动就会酿成海地那样的巨大灾难。前两年,业内大佬会说,一款游戏只要不宕机回档就能赚钱。随着行业逐渐成熟,很多团队已经能够把握程序底层的稳定性,运营商更看重产品的其他元素,但还是经常有创业团队无法把握程序底层稳定性而重复错误,让人看了心痛。程序稳定性问题相对复杂,笔者挑选几个常见的来谈谈。
注释、备档必须做。这个是程序员的基本素养,可是那么多团队偏偏就忽略这个问题呢?注释没有做,产品快做完发现BUG,看不懂自己写的代码,连续几天不睡,熬出兔子眼依旧解决不了问题。要是中途换程序员,接手者死的心都有,唯一的办法就是重新来过。关于备档,笔者是知道有主程因为没备档自己把自己的电脑砸了的,他重新设计了架构,做了两个多月后发现这个架构不可行,必须放弃,可原来的代码呢,没备档!无注释、不备档是低级得不能再低级的错误,直到现在,每天都有人在继续演绎。千万别宕机!再好的程序员都不是神,所以每几千行代码产生一个BUG是可接受的。一款游戏产品,哪怕去解决上万个BUG都可以,但绝对不能允许运营中出现宕机回档,一次回档会流失10%的玩家,几次以后一个服就废了。
支持多少在线?这个问题是投资人肯定会问的,机器人测试数据仅仅作为参考。项目初期,程序出来之后不要着急上美术、上系统,先放出去做两次真人压力测试具有绝对的必要性。等一切都做完了,准备上市了,做个真人压力测试,一组服务器只能支持百把人在线,那死的才冤,老天要给美术和策划下雪的。我们不建议一组服务器承载太多人,1000~2000就合适了。有团队介绍服务器承载能力时说一组三台服务器可以承载上万人在线,当时就把笔者吓傻了。承载上万人在线这好像不可能,即使可能,运营时就等外挂来挣你的钱吧。
数据交换要合理。客户端和服务器数据交换量的多少是一个游戏程序质量的重要指标,我们不推荐太多或太少的数据交换量,太多,服务器承载能力会下降,带宽占用过多导致成本上升,交换量太少,大量关键数据在客户端运算,外挂会横行。即使数据交换量适中,随着同屏玩家数量增加,交换数据量也会呈现级数上升。有一次问创业团队主程玩家同步范围有多大,回答是整个地图同步,这个显然就是常识性错误了,假如一个地图有10个玩家,那么每个玩家传输数据量就是10次方,如果有100个玩家就是100次方,那得需要多少带宽啊。通常,我们建议同步范围有两个屏幕那么大就足够了。至于服务器验证数据,有金钱、等级、属性点、技能点、装备属性点、伤害演算、红蓝、坐标、状态、背包物品、出生、死亡等一些重要数据验证就差不多了。
创新的悲哀。也许是因为职业缘由吧,大多主程是比较低调务实的,很少有人宣称自己有什么多么得意的创举,常见的反而是主策要求实现这个功能那个功能。前几年很多团队都渴望做大世界,几年过去,实现者寥寥,可眼下仍旧有团队不惜代价去攀登尸山,对此,业内并不十分看好。程序上的创新,风险很多,我们不建议创业团队投入太多精力去做哗众取宠的事情,几个人数月的工作换来一个亮点,这个亮点未必能在推广和运营中起到什么作用,大多会沦为牵绊。绝大情况下,创新的主意来自策划,这个自然也是策划程序交火的阵地,两个字“好难”。
DB要够大。很多开发者没有注意到这个问题,总认为有很多数据了,足够了吧。实际上,一个产品运营时,运营者要分析大量的数据,有些运营商甚至要分析聊天记录。笔者曾遇到一些数据缺失导致的被动,例如玩家平均在线时长、道具交易记录、平均在线、玩家流失等级、在线和挂机数量、账号角色等级数据……等等,这些重要数据缺失会给运营带来很大的困难,即使运营高手也很难把这样的产品运营的多么好。笔者建议一款产品数据库构架伊始,请有运营经验的人对存储数据做个评估,对于运营者来说,数据越全面越详细越准确越好。
【第四个问题 产品好玩么?】
众多玩家在一个游戏里长时间呆下去的原因是游戏好玩,“好玩”二字是一款游戏产品精华所在,一个游戏产品的精华毋庸置疑是主策带领下创造出来的。当一个创业团队的主策仅仅是个配角时,投资人会很担心团队的未来。美术是游戏外在表现,策划内容是游戏内涵,程序作为基础承托起游戏的外在表现和丰厚内涵。主策划不仅仅是创意制造者面对所有的玩家,还要懂美术和程序甚至要懂运营,作为一个产品研发的核心协调者面对内部团队,实际上,主策划的水平往往可以决定一个游戏产品的品质。相对于美术和研发,策划表现张扬一些投资人是可以接受的,不过投资人害怕策划表现出文人相轻的心态。作为投资人,笔者不奢望遇到无可挑剔的主策划,毕竟天外有天。和不同的团队接触中遇到过不少策划方面相对致命的问题,列出几个重要的,以求探讨:
山寨不可怕,可怕的是不会山寨。天下文章一大抄,好文章大多是参考很多人看法汇总起来并提出自己鲜明的观点,更多的平庸文章同样抄来抄去却没有自己的东西而湮没在别人的观点里,可见,并不是每个作者都是好作者。网络游戏发展史也是不断汇总和创新的过程,抄来抄去无可厚非,怕最怕没有主见的策划,看人家有结婚系统,自己也上个结婚系统,看人家有自动寻径系统自己也赶紧上一个……你说,一个只有男生和人妖的游戏里,结婚系统有什么意义?看到一个游戏火了,一分析,这个系统好,那个系统好,统统弄来放自己游戏里,等产品上市才发现根本不是那回事儿。游戏产品里应该有哪些系统,不应该有哪些系统是很有学问的事情,如果我们知其然不知其所以然,只能抄到没有精髓的皮毛,这样去抄,不抄也罢。成功的游戏产品都是触动了玩家内心最痒的那块儿肉的,各种系统只是到达那块儿“肉”的途径和工具。山寨,首先要山寨到那块儿“肉”,否则必然是山寨失败。
那块儿“肉”啊。03年有位同事运营一款3D产品,主管老总很怀疑地问做游戏能赚钱么?同事给他一套极品装备(现在想来这种行为是多么愚蠢!),他玩了不到一周同意给部门增加宣传费用,他说“太爽了,只要我上去身后就跟一群人,这个说‘老大,你背包太重了,小弟帮你背点东西吧’,那个说‘老大,衣服真漂亮,借小弟穿一会儿吧’,还有说‘老大,小弟穷疯了,手指缝漏几个铜板给小弟吧’,我现在都有几十个徒弟了……”。现在大家知道,游戏就是童话,玩家现实生活中不能获得的愿望、不能得到情感都转移到游戏里了(如今房价很高,有谁做款给女性打扮房间的游戏,说不准会火——纯属玩笑,姑妄听之)。笔者见过一款产品,一个服里规划了20个国度,先申请者先得,20个国度满了,后面的玩家只能加入某个国度做臣民,笔者听完后问为什么不设计2000个国度?回答是地图没那么大,只能有20个。这样的游戏不会火的,玩家在真实生活里就是在屋檐下的,来你游戏里还得在屋檐下,谁会来?
山寨版范进中举带来的启示。范进54岁中举(一说54岁中秀才,未考),山寨说法是范先生文章很不错的,只因开头太差考官根本看不下去导致次次落榜,中举原因是考官如厕恰好拿了他的卷子当手纸,考官便秘,厕间无聊读其文章没想到越读越妙,终于选中。有些产品,玩家进去做一大堆任务,忙活了几个小时没感觉,那这个产品就惨了。游戏开头的任务引导是很重要,但不要试图一开始就把所有的游戏功能、游戏玩法都告诉玩家,这样是逼玩家走人。我们认为,玩家应该在进入游戏后前5~10分钟内获得第一次快感,然后应该在半个小时左右获得第二次快感,两个小时内获得第三次快感……随着游戏快感的不断出现,玩家就会玩进游戏,不会在早期流失。好的开始是成功的一半,至于玩家的快感如何设计,策划们更专业,只是千万别做成范先生的文章那样。
职业平衡设计误区。有见过一款设计了18个职业的游戏,头都大了,职业平衡如何去计算?数值策划就算是一群数学博士后,恐怕也难平衡18个职业的属性点和装备带来的攻击和防御。常规的三、四个职业几乎到达了平衡计算的极限,所以笔者不建议游戏设计时设计太多职业,如果策划者要增加五行阴阳之类的属性,那职业设计就越少越好。设计者不可能去验证所有可能的组合数据(这个组合可是天文数字),只能验证极限状态组合平衡性,玩家不会买你的账,他们会很容易寻找到平衡性的漏洞破坏游戏平衡导致运营失败。
交互性是网游的真谛。05年有大佬说过,其实网游就是一个大聊天室,一语道破网游交互性实质。成功的网游都具有良好的交互性,也正是因为交互,玩家才聚集在一起,才有友谊和仇恨,才有玩家肯送钱来,友谊和仇恨是社交愉悦感的来源。很多策划天马行空地为玩家设计各种各样的交互,但玩家根本不买账。其实,只要一种交互方式被广泛接受,游戏就很容易成功,但被广泛接受的交互方式往往又是出人意料的。投资人会认真考察游戏的交互性,最简单的判断原则是:够不够多,够不够方便。
怎么挣钱不是主策划考虑的事儿。“第一款游戏,根本没考虑怎么赚钱,却赚了很多钱;第二款游戏,考虑游戏性的同时也考虑了如何赚钱,赚钱不多;第三款游戏,时刻在考虑如何赚钱,结果没赚到什么钱。”这是一个非常资深的主策划对自己制作的三款产品感慨。主策划最重要的工作是保证一款游戏产品的可玩性,没有可玩性,一切都是白搭。笔者甚至有极端的观点,主策划只考虑游戏产品的可玩性就够了,至于如何收费怎么收费让运营者去考虑。这个极端的观点是被反驳过的,不过还是愿意拿出来供大家批判,一款产品丧失了可玩性,无论如何都不能赚钱的,可玩性是游戏产品的根本。
2010年01月29日
研究SU2300/SU2700/SU4100/SU3500/SU7300区别
大家看最近很多便宜货的CULV笔记本电脑在卖,配置的CPU型号五花八门。为了了解这些CPU之间的猫腻,特地研究了一下。
SU9600/SU9400/SU9300因为价格贵,大多在8000RMB以上,目前没什么笔记本搭配在销售,故就不去提它们了。
SU7300:属于酷睿2双核/1.30G/3MB二级缓存/FSB800/10瓦功耗,性能和T2050、T2080差不多,就是功耗低很多,使用时间333分钟。
SU4100:属于奔腾双核/1.30G/2MB二级缓存/FSB800/10瓦功耗,性能和T2050 T5250差不多,其实这些处理器性能都半斤八两,只是对于功耗不大一样,使用时间为266分钟。播放高清1080P不卡,720P就是毛毛雨了。因为13寸笔记本分辨率一般就是1366*768像素,很适合看电影上网。
SU2700:属于奔腾单核(谷歌搜索发现很多媒体都是说双核,经过电话咨询的确是单核,差点被忽悠了,至于SU2300的确是双核)/1.30G/2MB二级缓存/FSB800/10瓦功耗,电池使用时间为272分钟,性能也和SU4100几乎一样。
SU2300:属于赛扬双核/1.20G/1MB二级缓存/FSB800/10瓦功耗,电池使用时间为292分钟,性能为T2060五分之三,适合上网、看看DVD、播放高清不流畅。
SU3500:叫赛扬SOLO(酷睿2框架)/1.40G/3MB二级缓存/FSB800/5.5瓦功耗,电池使用时间388分钟。
CM743:赛扬单核/1.30G/1MB二级缓存/FSB800/功耗10瓦,使用时间为252分钟,性能与ATOM N280差不多。
CM723:赛扬单核/1.20G/1MB二级缓存/FSB800/功耗10瓦,使用时间为269分钟,性能与ATOM N280差不多。
最后简单分析下这些处理器在Vista下评分情况(摘自网络仅供参考):
SU7300 4.5
SU3500 3.6
SU4100 4.4
SU2700 3.7
SU2300 3.6
CM743 3.4
CM742 3.3
总分5.9分
SU7300 3500
性能与4系列几乎一样
SU4100 2600
虽然是奔腾双核但是性能不错,在宏基1810TZ测试下来播放高清不卡很完美,玩魔兽也凑合
SU3500 2200
SU2700 2300
单核的性能不足播放高清,不推荐
SU2300 2100
赛扬双核不好意思拿出去和朋友说,也不推荐
CM743 2000
赛扬的不喜好实在没面子了
SU9300 3700
差价高没什么人会吸引啊
2009年12月6日
[转]网游创业失败全攻略
经历太多次创业,发现创业实在太难,一开始我认为是我的运气稍微差了一点,每一次创业失败的原因都不尽相同,使我经历了各种各样的创业痛苦,不过后来看看我周围跟我一起创业的弟兄们,发现创业的人生就是如此。在此不乏调侃地写下网游创业失败全攻略给各位共享,各位有过创业失败经历的人可能会有“心有戚戚焉”的感觉,至今还没有经历过失败的朋友们,你们也可能也会产生类似的感觉,那就要小心了,希望你们能够引以为鉴。另外请各位清醒地记住:你们每天看到的那几个创业成功的案例仅仅是无数创业者当中的沧海一粟,那无数被大海淹没的99.9%的创业失败案例是没有机会通过各种媒体进入到你的视线的,如果你仅仅看到一些看似简单的成功就认为创业如此简单的话,我可以很负责任的说:你错了。
融资的问题
风险投资只有锦上添花的,没有雪中送炭的。如果你没有现成的产品并且已经在市场上运营并产生盈利,或者你的团队非常有名气,以前创造过很辉煌的成功案例,风险投资基本不会考虑给你投资,请不要浪费时间了。如果你的团队遇到问题了想去找VC要钱,那也请你不要浪费时间了,VC这时候是不会来帮你的。这次金融危机出现的情况你们应该已经看到了,很多VC正在把遇到困难的公司强制关闭套现走人,别忘了他们多数都是无限合伙制的,基金赔了钱,合伙人要自己掏腰包的!
针对游戏产业的特殊情况,风险投资通常不喜欢投资纯研发公司,因为研发时间长,风险大,收益比例远比运营商低。而开发商转型成为运营商的难度非常大,需要的资金和经验远远超越单纯的开发商,所以运营商真正获得投资的几率也很低。
市场上有很多所谓的“天使投资人”,可能会愿意投资比较早期的研发团队,但他们往往不是游戏行业的人,资金也不是很充裕。因为他们对游戏一知半解,对于不懂的行业投资就会比较谨慎,所以即使资金很充裕,也不会真的全力投入(当然表面上肯定总是显得很有信心的样子),他们给你的第一笔钱是绝对不会够你安稳稳把游戏开发完的,一遇到困难就会立即撤退,到时候你骑虎难下,没有钱就是死,再融资就会大大稀释团队股份,而且新的VC不愿意见到有一个不懂游戏的天使占大股,也不喜欢遇到困难的团队。我下面还会提到,这种天使资本即使一开始拿到了,往往在日后的合作中也会产生非常多的矛盾,导致项目失败概率几乎达到100%。所以虽然我自己也做天使,但我还是我强烈建议:天使的钱不要随便拿,他们与魔鬼之间只有一步之遥!
投资者的问题
管理冲突
多数早期的天使投资者,即使是游戏业内的投资者,往往都是不够专业的,他们往往对游戏一知半解,却自认为很了解,他们会过多地亲自参与产品的管理和设计决策,或者盲目相信某个自称为专家的“亲信”,把他安插到团队里面负责日常的管理或者监控,这些人经常犯的错误有:
提出令人啼笑皆非的所谓游戏创意,自认为是所谓的游戏特色,其实成了导致项目失败的罪魁祸首。
过分重视某些没意义的细节而忽略了更重要的大方向,让团队精力分配失衡,开发周期拖长。
投资者安插的“探子”往往是能说会道,会讨领导喜欢的那种类型,或者干脆就是投资人的某个亲戚,典型的情况是一个就知道成天玩游戏,其实根本不懂事的孩子,他们的真实的工作能力和管理能力非常差,他们一味迎合投资者的非专业想法,经常与团队发生严重的管理冲突,再加上每个新招聘的人他们都要过目,往往引发很大的团队内部矛盾。
投资者无法承受挫折而撤退
每个人才和团队都有他的成长过程,即使是有成功经验的天才团队,也难免在游戏设计或者开发中出现失误。而绝大多数投资者,包括很多业内的投资者对团队都没有足够的耐心,在产品开发遭遇困难的时候,或者在产品上线运营之后发现情况不够理想就会立即放弃投资。
其实投资者一般都会同时投资多个项目,当其中一个项目遇到困难的时候就立即停止,把资源留给其他的项目。这其实是最常见的投资策略,因为对投资者来说,这样可以分散风险,避免损失单方面扩大,但是对你来讲,你没有机会分散风险,出了问题就只有死路一条。
由于投资者自身原因撤资
投资者往往有他自己的主业,也就是所谓的现金牛,没有这些现金牛,也就无所谓那些“闲钱”来做投资。但是当他们的主业遇到困难的时候,他们会毫不犹豫地把非主业的投资砍掉,甚至其实有些投资者做投资的钱根本就是他在金融市场上“借”来,市场一旦不景气,保命还来不及呢,你的团队再好,产品无论开发有多顺利,他都会采取丢车保帅的策略,忍痛把你卖掉或者直接关门儿了事儿。能卖掉也别高兴,愿意在这时候接盘的新东家没有不趁机狠狠砍价的,未来也未必不会再卖你。有人可能会说:“有合同在呢!他怎么能随便撤资呢?”请允许我说句很令人伤心的话:合同到这时候就是一张废纸,当你到了连工资都没的领了的时候,你还有钱有闲去打官司吗?就算你能抗住,你团队里其他人也抗不住呀,早就一哄而散各自去找工作了!
团队自身的问题
管理经验不足
有创业热情的各位,你们都是懂得怎么做游戏的精英吧?所以你们多数都有一些设计制作游戏的特殊技能,所以你通常并不一定是一个很好的管理人才。但是一旦你开始创业,你的痛苦就随之而来了,你发现你每天80%以上的时间并不是在做游戏,而是在处理一些跟具体游戏设计制作毫无关系的事情:
通过各种途径找找投资,每天写大量的给外行看的可以说毫无用处的资料,并且不得不面对各种假行家与真外行,假朋友与真骗子,假投资与真中介,假有钱与真没钱的投资人等等。
通过各种途径找人,为了说服一些能够帮助你团队更上一层楼的高手加盟而使尽浑身解数,上班的时候偷偷在公司内拉帮结派,下班后工作到深夜;其实高手们都各怀心腹事,说不定同时准备着好几个创业计划,谁拿到钱就跟谁走,表面上跟你说好了,你苦苦地为未来画饼,许诺未来的高薪,给股份,给期权,什么好条件都给他们了,自己反而剩的很少,结果别人给的条件更好,人家最后决定跟别人走了。
好容易成立了团队,有一点点钱先给大家发着,自己苦着点不拿钱或者拿得最少以鼓舞士气。结果你的手下还耍大牌,工作干得不够好还一天到晚抱怨太累拿得少,结果虽然名义上你是总经理,你给他钱,其实他跟你领导一样,比领导还难伺候。
好容易关键的几个人都凑齐了,大家都是牛人,谁也瞧不起谁,加上策划和程序美术本来就是天生的死对头,以前没合作过的基本上一定会打起来,以前合作过的,比较愉快的,可能因为以前是公司老板给大家发工资,大家互相之间没那么多利益纠葛,现在都一起过苦日子了,利益捆绑在一起了,发生一点小矛盾就容易转化成对人不对事的大矛盾。
好容易找到点启动资金了,可以成立公司了,头疼的事情还在后面呢!租房子,买机器,为了图便宜跟各种小商小贩砍价。办理公司注册手续,如果是海外投资,要设立离岸公司,为了怕上当,投资者请律师做的文件还要找懂法律的熟人帮忙审,可全都是英文的,上百页,随便找个人也看不懂。还要再搞国内公司,换美金,弄注册资金,办国税、地税,为了避税还要申请高新技术企业,双软认证… 全都弄完了大半年都过去了,整个人掉一层皮。什么?请个行政出纳之类的,让他们去跑不就搞定了?请问,哪件事不是需要你老大批的重要事情?一个文件做错了你身家性命就没了,随便找一个月薪1000多的人搞你就放心了?
好容易大家磨合好了,劲儿往一处使,干了多半年,发现其中一个核心成员水平不够,唉,都怪当初没看准,可是没办法,不干一段时间怎么发现得了?股份都已经给了,一大堆文件上都有他的签名呢,你让他把股份让出来容易吗?股东名单里留一个去了竞争对手公司的人你以后怎么再找投资?而且现在找人代替,他前面的工作基本上就都费了,新来的人还得跟团队重新磨合,哪有那么多时间和资金呀?
技术经验不足
因为技术死的产品太多了,80%的产品刚出来都有技术问题,即使是有经验的人,你敢说你做的游戏跟他以前作过的完全一样?那你也真够山寨的,难怪有没脑子的投资商愿意投你呢!就算是纯粹的山寨,你敢说得你程序亲自作过一个网游所需要的全部技术?知道所有的坎儿和雷?整个游戏是一根链条,有一个环坏了,链子上其他的环再强都没用,还得断。
你不是山寨,有创新?好,那就是风险,创新的思路往往创造了新的技术挑战,带来了各种技术上的不确定性,造成最后无法克服的技术障碍。最烦的是,最后发现其实这些想法很多以前失败过的团队早就尝试过了,当然了,人家都不是傻子,这个行业那么赚钱,精英全都在这儿呢,你能想出来的创新人家也早就想到过了,而且你的绝大多数所谓创新其实也是参考了国外的单机游戏而已,难道不是吗?人家都没做,就你做了,你还洋洋得意呢,可实际不是因为人家没想到,是因为人家试验不成功,技术上走不通,尸骨都堆成山了,你不知道而已。
经常有人跟我说,无论如何要搏一回嘛,毕竟还年轻,失败的教训也是有益的。请问,如果是这样的死法,你获得什么有价值的经验和教训了吗?你能保证未来的创新不遇到新的技术风险吗?
策划经验不足
连山寨都不会的策划咱就不说了,他们不该拿到投资对吧?你是有能力的,你做创新的,这样的你能够因为策划死的还算是幸运的呢,因为毕竟你的技术和美术走过来了,你出了那么多创新的想法人家都给你实现了,多不容易呀。可是玩家真的能认可你的新设计吗?你的新设计真的天衣无缝吗?没上线之前你就知道玩家会怎么玩你的游戏吗?很多人一起玩儿会发生什么你真的已经算得清清楚楚了吗?你自认为比玩家聪明,可实际上线运营后往往发现玩家比你聪明得多。发现错了,改吧,玩家给你机会改吗?玩家中那些受你迫害的人已经走了,留下来的既得利益者由于你改后被剥夺了利益也拜拜了,现在怎么办?再投一笔推广费用拉新玩家吧?这回可要更多的钱了,因为你已经有不好的口碑了,对吧?可是你的投资者,你的运营商们有那么大的忍耐力吗?
美术水平不够
因为美术死的听到的倒是不多,不过也不可掉以轻心呀。你团队里的美术都是很有理想抱负的人,否则人家好好的呆在公司里领工资不好吗,为什么要跟你出来创业?但是美术肯定希望视觉效果好看的,否则他的价值体现在哪儿呀?(顺便提一句,投资人往往喜欢看图片的,因为他们看不懂代码和数值策划)
为了把美术效果做好,你的技术和策划会背上很大的包袱,客户端规格一升再升,最后连最高档的机器都跑不动。你的技术会跟你说:没关系,现在是开发阶段,以实现功能为主,还没优化呢,等做完了一起优化,优化完了能好很多呢;或者说:这些特效我们都能给它加上开关,在低档的机器上我们就关掉,保证跑得动。你就信了。可最后结果呢?他根本没做过优化,哪有那么多美丽的优化空间呀?他们会说:“这些模型做的面数太多了嘛!”“我哪想到他在怪物和场景上用这么多贴图呀!”,等开发完了做测试的时候,你兴冲冲的找了台低档的机器,把特效开关都关了一看,啊?你的美术哭了:这是我做的游戏吗?你也哭了:好像也没跑得很快的样子呀?原来程序开发的时候都是用的好机器,也根本就没试过同屏很多人的情况,现在怎么办?美术重做?程序换人?…
人员招聘困难
光有你们几个核心的高手齐心合力也不够呀,一个网游3~5个人就能做吗?你得招聘吧?猎头是肯定用不起了,招聘网站上又都是些新手,哎,就在原来的公司里搜罗得了。可是你走了原来的公司人家不防着你?而且凡是有创业情结的牛人都已经被扫荡过N遍了,还有你的份儿吗?普通员工为的是稳定的工作,要不就是钱,你是新成立的小公司,你不稳定,所以要给高薪吧?左一个高薪,又一个高薪,该交的几险几金都得交着,他们比你们拿得都多,你忍了投资人不跟你急?干的活儿很普通,该下班又正常下班,该请假又正常请假,想开掉?新劳动法看过吗?那么多打官司的你见过公司赢的吗?我好几个朋友跟我说过同样的话:“看了新版劳动法之后,我直接把公司给关了,我打工去!”。不开除,做得不好你教他,可是你的时间花了不说,他学习的时间和学会了让他重做的那些活儿的时间你还得照付工资。整来整去就觉得自己干最快,又好又便宜,可就算你浑身是铁,能捻几颗钉子?
资源不足造成折衷过多
初创团队往往因为资金或团队人数、能力等原因,在设计产品的时候不得不做很多折衷,真正制作的产品跟你的理想有很大的差距,原本很有潜力的好想法并没有机会发挥。可是一个折衷到几乎已经平庸的游戏能够在当今这个竞争这么激烈的市场上脱颖而出吗?大公司花上百人做几年的产品都不一定做成呢,你这种小公司做了那么多折衷的设计… 往往辛辛苦苦做了1年半了,回头看看自己当初的想法,再看看自己现在的半成品,已经完全搞不清楚自己在干什么了,不光是你,你团队的其他成员也泄气了。
与运营商有关的问题
找不到合适的代理商造成资金连断裂
费尽千辛万苦产品终于做完了(当然这年头往往对玩家交互和付费最重要的帮会战之类的功能还没做呢就说做完了,因为实在没钱也没士气再做下去了),你的投资人不错,一切困难都坚持下来了,没有做那么多折衷,产品看上去还不错,这时候你要开始找运营商了。可是当今市场上每一个运营商都在自己开发游戏, 拿我的话讲,他们自己开发的产品都是“亲儿子”,你要想让他们代理你的产品,要当“干儿子”,跟他们的亲儿子抢饭吃,不但要有突出的特色,还要跟他的“亲儿子”不冲突才行。即使各方面条件都符合了,他也要狠狠的压你价儿的,有时候甚至干脆直接把你的想法学过去给亲儿子用了。
代理商的实力差
算了,有人愿意运营总比签不出去好,找到个新成立没什么经验的运营公司,或者以前都做败了的口碑不怎么好的公司也凑合了,毕竟人家说要当亲儿子一样重点做我的产品嘛。可是往往这种公司心有余而力不足,由于资金实力、管理能力差,运营经验有限等原因,根本没有能力把运营做好,运营失败的时候或者你们两个抱在一起痛哭而死,或者他早早跑去找别人给他生另一个儿子去了,最后失败的责任肯定是你的,说不定合同也不毁,产品继续拿着,服务器继续开着,多少挣了点钱肯定也不给你,你想再转手签给别人都没戏了 — 当然了,你要拿回去得先把版权金还了呀!还得弥补他的损失呢!都这时候了你还有钱吗?
代理商拖延或不作为重点造成运营失败
终于签给大公司了,也别高兴太早,也许你的痛苦才刚刚开始呢!大公司有那么多亲儿子呢,你只是个干儿子而已,就算在干儿子里你也不一定排得上号儿,因为他们还有会说外语的干儿子呢,人家生下来身价就比你贵(虽然你自己知道他其实就是垃圾)。人家会对你的产品左挑毛病右挑刺儿,你不是说了要全力配合运营吗?运营商有经验呀,人家说要你改你敢不改吗?其实你心里知道他们派过来的产品经理就是一个刚出道的小毛孩子,经常今天说要这么改,明天就改主意说还要原来那样儿。可是你还得把他当爷爷一样供者,为什么?大半的版权金要正式上线运营之后才付呢,都到这时候了,你也没多少钱糊口了,为了钱你能不低头吗?
可是偏偏就在你一切都准备好了的时候,你跟人家另外一个儿子的上线时间冲突了,没办法,人家重要呀,只好你让位,再等等吧,不是有很多地方还要改呢吗?甚至有些公司比较坏,知道你资金周转不灵了,故意在这时候拖延,找各种理由不给你上线(别跟我提合同啊,都到最后一哆嗦了你去法院告你的运营商,你还怕死的晚呀?)。资金告急了怎么办?你来找运营商商量:要不您给俺们投点资吧?好,正等你呢,合同重新签,比例重新分,公司股份都拿过来吧,这时候你有谈判筹码吗?嘿嘿,乖乖就范…
自己强行转型成为运营商而失败
咱都信不过他们,要不咱自己运营吧!你的投资商有胆识,再拿出2千万来咱转型,正好不是那些VC们都喜欢自己拥有产品的运营商吗?一举两得!先问一句,你懂运营吗?要找运营总监了吧?要给股份的吧?投资者又追加投资要给股份的吧?请问你还剩多少股份?公司里的发言权还剩多少?你同样是把你的命,你辛辛苦苦做了两年的宝贝儿产品交给了一个群陌生人吧?他们能把产品运营好吗?史玉柱的地推团队有什么了不起的,咱也可以招3000人做地推… 运营有几种死法… (此处略去三千字)。
利益兑现的问题
假设以上一切一切的枪林弹雨你都走过来了。产品上线运营成功,也赚钱了,这时候该松口气了吧?可是让我来我帮你算一笔帐:作为独立的开发公司,产品签给运营商之后往往只能得到20%左右的分成,作为核心的创业团队,往往在产品最终上市之后,只能在开发公司中占小部分股份,大部分股份已经被投资者所拥有,按照股份比例,只能分配到不到10%的收益了。而且投资者都是资本家,他们往往要不择手段追求自己的利益最大化,记住:毕竟你们的工资都是他发的,他强势,你弱势,他想压榨你只是天然的反应而已。他们经常会采用各种手段掠夺你应得的财富,使你最后很难甚至根本无法拿到实际的利益,具体手段我不是很专业,请恕我没办法一一列举,至少以下手段是很常见的:
投资者有权利不分红,不上市也不出售,也有能力通过各种复杂的做帐方式把利润转移走,最后公司其实没利润,呵呵。
上市或出售过程中签署各种复杂的协议,投资者套现走人,但创业者应得的利益遭受长期捆绑,造成创业者实际上很长时间都得不到实际的收益。你想想,光开发就2~3年,谈代理到上线又要1年左右,等公司上市或出售,至少还要2~3年,还要捆绑你们继续干3年才能陆续得到实际的利益,这期间还不知道要发生多少变故,到时候你还有成功的快乐吗?什么,你学过法律、金融、财务、会计、税务…?
2009年09月8日
一些常用的WebService
天气预报Web服务,数据来源于中国气象局
Endpoint
Disco
WSDL
IP地址来源搜索 WEB 服务(是目前最完整的IP地址数据)
Endpoint
Disco
WSDL
随机英文、数字和中文简体字 WEB 服务
Endpoint
Disco
WSDL
中国邮政编码 <-> 地址信息双向查询/搜索 WEB 服务
Endpoint
Disco
WSDL
验证码图片 WEB 服务 支持中文、字母、数字 图像和多媒体
Endpoint
Disco
WSDL
Email 电子邮件地址验证 WEB 服务
Endpoint
Disco
WSDL
中文简体字 <->繁体字转换 WEB 服务
Endpoint
Disco
WSDL
中文 <-> 英文双向翻译 WEB 服务
Endpoint
Disco
WSDL
火车时刻表 WEB 服务 (第六次提速最新列车时刻表)
Endpoint
Disco
WSDL
中国股票行情数据 WEB 服务(支持深圳和上海股市的基金、债券和股票)
Endpoint
Disco
WSDL
即时外汇汇率数据 WEB 服务
Endpoint
Disco
WSDL
腾讯QQ在线状态 WEB 服务
Endpoint
Disco
WSDL
中国电视节目预告(电视节目表) WEB 服务
Endpoint
Disco
WSDL
外汇-人民币即时报价 WEB 服务
Endpoint
Disco
WSDL
中国股票行情分时走势预览缩略图 WEB 服务
Endpoint
Disco
WSDL
国内飞机航班时刻表 WEB 服务
Endpoint
Disco
WSDL
中国开放式基金数据 WEB 服务
Endpoint
Disco
WSDL
股票行情数据 WEB 服务(支持香港、深圳、上海基金、债券和股票;支持多股票同时查询)
Endpoint
Disco
WSDL
2008年07月17日
一段有用的NSIS安装程序制作脚本
; NSIS Modern User Interface version 1.62
;
; NSIS 多语言脚本写作密技
;
; 这是 KA 实地用于 MDaemon 4.05 中文化的多语言安装,
; 环境: NSIS 2.0b1, Modern UI 1.62
;
; 为便于阅读,标明 (* 进阶) 者,较为困难,可先略过。
; 几乎是想办法用上 Modern UI 1.62 新版的所有技巧了。
; 如果注解写得太多,损害你的智商,请赶快写信骂我。
;
; 简体描述部分,因为在 BIG5 编码之下使用 GB2312 ,故
; 必定有乱码,还请见谅。如果需要在网页取得正确编码,
; 请储存为 BIG5 plain text ,再来处理。我会另外以
; attach file 的方式附在板上。
;
; 我没有使用任何类似 GUI 的工具。如果你之前已经有用
; 于 2.0a7 的 NSI 脚本,跨越版本时在 Modern UI 的写
; 法,会花一些工夫。比如新世纪精华板有人用的
; magiclime ,现在只能用 advsplash 以外挂程式方式载入。
; 不用怕,我在里面都写了。如果还嫌太麻烦,Joost 的英
; 文版HTML 入门,只有一页,建议先看。
;
; 记得,没人强迫你要使用多语言,没人强迫你要 Modern
; UI ,没人强迫你要欢迎对话方块。你一样可以做出一点也
; 不花俏的,很传统的安装程式。不要在那里废话什么 NSIS
; 愈做愈肥大。
;
; 这些都是自己决定的。
;
;=======================================================
; ■1.定义变数、安装目录、输出档案、图示
;=======================================================
; 只要在这里写好,其他的都按照定义的变数下去跑,就省力多了。
;
;==============================
; 1.1 版本号码/名称
;
!define VER_1 4 ;软体版本号码 1 ,如 Eudora 4.3.1.2 四位版本号码
!define VER_2 05 ;软体版本号码 2
;!define VER_3 xxx ;软体版本号码 3 (* 进阶)
;!define VER_4 yyy ;软体版本号码 4 (* 进阶)
;!define VER_R zzz ;中文化同版本第几更版 (* 进阶)
!define MUI_PRODUCT “MDaemon” ;程式名称 (可使用大小写)
!define PROGFNHEADER “mdaemon” ;中文化档案名称的主要部分 (全部小写)
!define PROGMAINEXE “mdaemon.exe” ;主程式执行档案名称 (含.exe)
;
;==============================
; 1.2 读我档案/输出档案
;
; 读我显示,包括 CHS/CHT/ENU 三个版本。如果你不需要制作
; 多语言中文化版本,只要考虑一个“读我”即可。这个读我,
; 通常拿来放“此中文化的描述档案”,而非一般软体的 readme 。
;
; 档案命名: (全部小写)。
; (cpatch) c + ${PROGFNHEADER} + 版本号码 _(底线) 第几中文化版本 . 副档名
; (hanzify) ha _(底线) ${PROGFNHEADER} + 版本号码 _(底线) 作者名 . 扩展名
;
;!define README “c${PROGFNHEADER}${VER_1}${VER_2}.txt”
!define README_CHS “c${PROGFNHEADER}${VER_1}${VER_2}_gb.txt”
!define README_CHT “c${PROGFNHEADER}${VER_1}${VER_2}.txt”
!define README_ENU “c${PROGFNHEADER}${VER_1}${VER_2}.txt”
OUTFILE “c${PROGFNHEADER}${VER_1}${VER_2}.exe”
;==============================
; 1.3 预设安装目录 (尾端不加 \)
;
; 通常会出现在 “C:\Program Files\xxxx ” 这种目录。
; 也可以使用 ${AppPath} 在注册表寻找旧版安装目录。
; 如果注册表的安装目录 (尾端 \) 出现,不要使用,以免发生错误。
;InstallDir “$PROGRAMFILES\${MUI_PRODUCT}”
;InstallDir “${AppPath}”
InstallDir “C:\MDaemon”
;==============================
; 1.4 版权影像
;
; 只需要一个就够 (一定要 bmp 格式),第二个是拿来花俏用的。
; 可以只使用一个,或完全不使用。
!define SPLASH1 “mdaeomon4_cht.bmp”
!define SPLASH2 “mdaeomon4_chs.bmp”
;==============================
; 1.5 安装程式型态
;
; 中文化/直接安装版/还是补缀补丁?安装时出现在 caption 部分。
; 解除安装时,也会出现在注册表。
!define PATCHTYPE_ENU “(CN+TW) localized”
!define PATCHTYPE_CHT “(CN+TW) 中文化”
!define PATCHTYPE_CHS “(CN+TW) 笢恅赵”
;=======================================================
; ■2.使用者介面
;=======================================================
; 这一段的用途,在于强制覆写 system.nsh 的英文预设设定值,
; 通常只有变更 “字型”“图示”
;==============================
; 2.1 字型
; 安装介面的字型预设大小 8,一定要改掉,否则在 win98 中文不好看。
; 如下。双语言中文化,使用 “Tahoma” 即可。
; 不需要特别指定“新宋体”或“宋体”。
;!define MUI_FONT “MS Shell Dlg”
;!define MUI_FONTSIZE “8″
;!define MUI_FONT_HEADER “MS Sans Serif”
;!define MUI_FONTSIZE_HEADER “8″
;
; 上列: NSIS 字型“预设值”,下列: 字型“建议修改值”。
;
!define MUI_FONT “Tahoma”
!define MUI_FONTSIZE “9″
!define MUI_FONT_HEADER “Tahoma”
!define MUI_FONTSIZE_HEADER “9″
;==============================
; 2.2 图示
; 安装程式图示: 通常我使用主程式的图示,另外用 VC 抽取出来。
; 解除安装图示: 为了让 [控制台 | 新增/移除程式] 出现正确图示,还是用同一个图示。
; 有时候则使用它附的图示 (因为看起来不错)。
;!define MUI_ICON “${NSISDIR}\Contrib\Icons\modern-install.ico”
;!define MUI_UNICON “${NSISDIR}\Contrib\Icons\modern-uninstall.ico”
;
; 上列: NSIS 图示“预设值”,风格有点像 InstallShield 6 ,也不错。
; 下列: 自订图示,请指定正确名称
!define MUI_ICON “mdaemon4.ico”
!define MUI_UNICON “mdaemon4.ico”
;==============================
; 2.3 其他 (* 进阶)
!define MUI_UI “${NSISDIR}\Contrib\UIs\modern2.exe”
!define MUI_CHECKBITMAP “${NSISDIR}\Contrib\Icons\modern.bmp”
!define MUI_FONTstyle_HEADER “700″
!define MUI_FONT_TITLE “Verdana”
!define MUI_FONTSIZE_TITLE “12″
!define MUI_FONTstyle_TITLE “700″
!define MUI_INSTALLCOLORS “/windows”
!define MUI_PROGRESSBAR “smooth”
!define MUI_SPECIALINI “${NSISDIR}\Contrib\Modern UI\ioSpecial.ini”
!define MUI_SPECIALBITMAP “${NSISDIR}\Contrib\Icons\modern-wizard.bmp”
!define MUI_BGCOLOR “0xFFFFFF”
;=======================================================
; ■3.多语言系统
;=======================================================
; 载入 Modern UI\System.nsh 之用。
;==========================
; 3.1 前置相同变数,视需要而定。
;
; 通常出现在更换版本时,原脚本的变数校正。
!define MUI_VERSION “${VER_1}.${VER_2}”
;!define NAME “${MUI_PRODUCT}”
;显示中文化标题,依 ENU/CHT/CHS 语言的不同。
CAPTION /LANG=1033 “${MUI_PRODUCT} ${MUI_VERSION} ${PATCHTYPE_ENU}”
CAPTION /LANG=1028 “${MUI_PRODUCT} ${MUI_VERSION} ${PATCHTYPE_CHT}”
CAPTION /LANG=2052 “${MUI_PRODUCT} ${MUI_VERSION} ${PATCHTYPE_CHS}”
;==========================
; 3.2 载入 Modern UI 系统
!include “${NSISDIR}\Contrib\Modern UI\System.nsh”
;==========================
; 3.3 使用者介面
;
; 如果不要这些对话方块,不做 define ,就不会出现。
!define MUI_WELCOMEPAGE ;欢迎页面
!define MUI_LICENSEPAGE ;授权页面
!define MUI_COMPONENTSPAGE ;元件页面
!define MUI_DIRECTORYPAGE ;目录选择
!define MUI_ABORTWARNING ;中止警告
!define MUI_UNINSTALLER ;解除安装程式
!define MUI_UNCONFIRMPAGE ;不做确认页面
; !define MUI_STARTMENUPAGE ;选择开始功能表
!define MUI_FINISHPAGE ;出现完成页面,执行程式和读我。
!define MUI_FINISHPAGE_RUN “$INSTDIR\app\${PROGMAINEXE}”
!define MUI_FINISHPAGE_SHOWREADME “$INSTDIR\${README_CHT}”
; !define MUI_FINISHPAGE_SHOWREADME “$INSTDIR\$(README)”
; LangString README ${LANG_ENGLISH} “${README_ENU}”
; LangString README ${LANG_TRADCHINESE} “${README_CHT}”
; LangString README ${LANG_SIMPCHINESE} “${README_CHS}”
; 上面这段 LangString 并不能套用在 SHOWREADME ,真奇怪。
!insertmacro MUI_SYSTEM ;使用者介面系统
;==============================
; 3.4 各国语言
!insertmacro MUI_LANGUAGE “English”
!insertmacro MUI_LANGUAGE “SimpChinese”
!insertmacro MUI_LANGUAGE “TradChinese”
;==============================
; 3.5 授权文字 (* 进阶)
;
; 这些档案没有出现在 NSIS 预设包内。如果你手上没有 license 档案,
; 请直接 remark 掉。
; 这些东西会先被解压缩出来。保留这几行在任何 File 指令之前!)
; 只能用于 BZIP2 压缩
LicenseData /LANG=${LANG_ENGLISH} “${NSISDIR}\Examples\Modern UI\license_enu.rtf”
LicenseData /LANG=${LANG_SIMPCHINESE} “${NSISDIR}\Examples\Modern UI\license_chs.rtf”
LicenseData /LANG=${LANG_TRADCHINESE} “${NSISDIR}\Examples\Modern UI\license_cht.rtf”
!insertmacro MUI_RESERVEFILE_LANGDLL
;=======================================================
; ■4.安装程式,安装开始的前置动作 (* 进阶)
;=======================================================
; 如果不需要,你可以全部 remark。
Function .onInit
;==============================
; 4.1 显示版权影像
;
; 旧版可使用 magiclime 做淡入淡出。不过这一版没了,改成
; advsplash ,外挂方式。解压缩到临时目录,显示 splash ,然后删掉。
; 注意: nsis 2.0a0 有 magicsplash 档案。不过 2.0b1 居然又不见了。
SetOutPath $TEMP
File /oname=splash1.bmp ${SPLASH1}
File /oname=splash2.bmp ${SPLASH2}
; File /oname=spltmp.exe “${NSISDIR}\bin\magiclime.exe”
; ExecWait ‘”$TEMP\spltmp.exe” splash1.bmp’
; ExecWait ‘”$TEMP\spltmp.exe” splash2.bmp’
advsplash::show 1000 600 400 -1 $TEMP\splash1
advsplash::show 1000 600 400 -1 $TEMP\splash2
Pop $0 ; $0 has ‘1′ if the user closed the splash screen early,
; ‘0′ if everything closed normal, and ‘-1′ if some error occured.
Delete $TEMP\spltmp.exe
Delete $TEMP\splash1.bmp
Delete $TEMP\splash2.bmp
;==============================
; 4.2 字型选择 (* 进阶)
;
; 只影响安装程式的语言选择 dialog ,因此不要使用中文字型名称。
Push Verdana
Push 9
;==============================
; 4.3 语言 (* 进阶)
;
; 塞了 ENU/CHT/CHS 三个语言。你要 18 个语言全塞,也不反对。大小大概增加 20 kb 左右。
; 如果不是多语言中文化安装,你可以全部 remark 掉。
!insertmacro MUI_LANGDLL_PUSH “English”
!insertmacro MUI_LANGDLL_PUSH “SimpChinese”
!insertmacro MUI_LANGDLL_PUSH “TradChinese”
Push 3F ;3 = 语言数目, F = 变更字型
LangDLL::LangDialog “Installer Language” “Please select a language.”
; 上面这一句,不要中文化。除非你想让老外看到乱码。
Pop $LANGUAGE
StrCmp $LANGUAGE “cancel” 0 +2
Abort
;==============================
; 4.4 安装前置动作 (修改注册表) (* 进阶)
;
; 视你需要,可以偷偷做一些动作。
; DeleteRegKey HKLM “SOFTWARE\Classes\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}\InProcServer32″
; DeleteRegKey HKLM “SOFTWARE\Classes\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}”
;==============================
; 4.5 寻找旧版已安装的目录。 (* 进阶)
;
; 如果 AppPath 读出的尾端有 \ 符号,请不要直接使用于 INSTDIR 指令,以免发生错误。
; ReadRegStr $AppPath HKLM “SOFTWARE\Alt-N Technologies\MDaemon” “AppPath”
FunctionEnd
;=======================================================
; ■5.安装程式,安装完成后置动作 (* 进阶)
;=======================================================
; 如果不需要,你可以全部 remark。
;==============================
; 5.1 函式定义开始
Function .onInstSuccess
;==============================
; 5.2 安装完成后,执行 ExecShell
;
; 视个人需要而定,我只用在 Eudora 安装而已。
; ;——————————————
; !macro MUI_INSTSUCCESS1 LANGID TEXT
;
; StrCmp $LANGUAGE ${LANGID} “” +3
; MessageBox MB_YESNO|MB_ICONQUESTION “${TEXT}” IDNO Nomapi
; ExecShell open ‘$INSTDIR\SWMAPI.EXE’
; !macroend
; ;——————————————;
; 下列是 ENU/CHT/CHS 三个语言的动作。
;
; !insertmacro MUI_INSTSUCCESS1 1033 “Do you want to install ${NAME} as a default mailer? It will excute MAPI installer.”
; !insertmacro MUI_INSTSUCCESS1 1028 “你想要安装 ${NAME} 做为预设信件程式吗?将执行外部 MAPI 安装程式。”
; !insertmacro MUI_INSTSUCCESS1 2052 “斓砑猁假蚾 ${NAME} 酕峈苏?;蛔璃最唗镉ˋ蔚堍俴俋窒 MAPI 假蚾最唗﹝”
; Nomapi:
;==============================
; 5.3 安装后,要求使用者读取 README 档案
; ;——————————————
; !macro MUI_INSTSUCCESS2 LANGID TEXT README
; StrCmp $LANGUAGE ${LANGID} “” +3
; MessageBox MB_YESNO|MB_ICONQUESTION “${TEXT}” IDNO NoReadme
; ExecShell open notepad ‘$INSTDIR\${README}’
; !macroend
; ;——————————————
; 下列是 ENU/CHT/CHS 三个语言的动作。
; !insertmacro MUI_INSTSUCCESS2 1033 “Setup has been completed successfully . Press [Yes] to continue README file.” “${README_ENU}”
; !insertmacro MUI_INSTSUCCESS2 1028 “安装已成功地完成。按下 [Yes] 继续读取 README 档案。” “${README_CHT}”
; !insertmacro MUI_INSTSUCCESS2 2052 “假蚾眒伧髡华俇伧﹝偌狟 [Yes] 樟哿黍?; README 恅璃﹝” “${README_CHS}”
; NoReadme:
;==============================
; 5.4 函式定义结束
FunctionEnd
;=======================================================
; ■6.安装的所有档案
;=======================================================
;==============================
; 6.1 安装类型
; 两种应该很够了。
InstType “Minimum”
InstType “Standard”
SetOverwrite on
;==============================
; 6.3 安装的各个节段
Section “MDaemon” SecMDaemon
SectionIn 1 2
; 6.3.1 中文化的读我
; 通常塞在安装的主目录。
SetOutPath $INSTDIR
File “${README_CHT}”
File “${README_CHS}”
; 6.3.2 中文化的程式档案
; 通常不使用 *.* 型态,而个别指定,以免包装错误。
; 常常是 *.DLL *.EXE *.AX 等类型。我都把这类放在 cht 为首的工作目录。
SetOutPath $INSTDIR\app
File “cht\AccountPrune.exe”
File “cht\CFILTER.EXE”
File “cht\IMPORTNT.EXE”
File “cht\ListPrune.exe”
File “cht\MD3CONV.EXE”
File “cht\MDAEMON.EXE”
File “cht\MDCONFIG.EXE”
File “cht\MDLAUNCH.EXE”
File “cht\MDSTATS.EXE”
File “cht\MDUSER.DLL”
File “cht\MDUserLdap.dll”
File “cht\MigrateUsers.exe”
File “cht\ROBOEX32.DLL”
File “cht\UninstallSurvey.exe”
File “cht\UNWISE.EXE”
File “cht\WCIMPORT.EXE”
File “cht\XCEEDZIP.DLL”
; 6.3.3 中文化的文字档案
;
; 通常是 (*.cnt, *.txt *.dat *.ini) 类型。
; 无语言区分者,仍放在 pack 为首的工作目录。
; 有语言区分者,放在 text/cht 与 text/chs 为首的工作目录。
; 6.3.3.1 如果有旧版,会有一些“一定”要删除的旧版档案。然后再由安装程式补上新版。
SetOutPath $INSTDIR\app
Delete “$INSTDIR\app\HELP.DAT”
Delete “$INSTDIR\app\MDAEMON.CNT”
Delete “$INSTDIR\app\acctinfo.dat”
File “pack405\app\CFILTER.INI”
File “pack405\app\MDSTATS.INI”
; 6.3.3.2 如果有旧版,也会有一些“不能删除”的旧版档案。
; 这段是使用在 UltraEdit ,把 windows 目录的 INI 移动过来。MDaemon 不用这一段。
;
; IfFileExists “$WINDIR\UEdit32.ini” DO1 DO2
; DO1: ;把 $WINDIR 的移动到安装目录
; Rename “$WINDIR\UEdit32.ini” “$INSTDIR\Uedit32.ini”
; DO2: ;如果没有,则写入一个假的 INI,以修正 HTMLTIDY 的功能。如果安装目录已有,则不盖掉。
SetOverwrite off ;停用强制覆写
File “pack405\app\MDAEMON.INI”
SetOverwrite on ;判断完毕之后,启用强制覆写
; 6.3.3.3 搞一些好玩的,比如塞入自动使软体注册的资料
; 正式版本就不要这样做,以免太嚣张,反而不好。
;
; WriteINIStr “$INSTDIR\app\mdaemon.ini” “Registration” “Name” “My_reg_Name”
; WriteINIStr “$INSTDIR\app\mdaemon.ini” “Registration” “Company” “My_reg_Company”
; WriteINIStr “$INSTDIR\app\mdaemon.ini” “Registration” “4XKey” “GDPFFMF-QAWLYFJ-XQDIYAO”
; 6.3.3.4 补上新版档案
;
; 依照各种语言,自动执行,分配正确的档案。使用者不必再选择。
; 先写一个巨集,自动判断作业系统语言。 1033 enu, 1028 cht, 2052 chs
;——————————————
!macro MUI_COPYTEXTFILE LANGID ACTION_COPYTEXTFILE
StrCmp $LANGUAGE ${LANGID} “” +3
${ACTION_COPYTEXTFILE}
!macroend
; !insertmacro MUI_COPYTEXTFILE 1033 ‘File “text405\enu\Help.dat”‘
; !insertmacro MUI_COPYTEXTFILE 1033 ‘File “text405\enu\MDaemon.cnt”‘
;
; 英文的不动,只做为对照组。注意单引号和双引号。
; 这种脚本写法其实蛮笨的,应该有更好的方法。
!insertmacro MUI_COPYTEXTFILE 1028 ‘File “text405\cht\Help.dat”‘
!insertmacro MUI_COPYTEXTFILE 1028 ‘File “text405\cht\MDaemon.cnt”‘
!insertmacro MUI_COPYTEXTFILE 2052 ‘File “text405\chs\Help.dat”‘
!insertmacro MUI_COPYTEXTFILE 2052 ‘File “text405\chs\MDaemon.cnt”‘
; 6.3.4 非中文化档案 (不用修改的部分)
; 可使用 *.* 这种型态。 我都把这类放在 pack 为首的工作目录。
SetOutPath $INSTDIR\app
File “pack405\app\AccountPrune.txt”
File “pack405\app\bwcc32.dll”
File “pack405\app\ADDUSER.SMP”
File “pack405\app\CFAPP.ICO”
File “pack405\app\CFILTER.DLL”
File “pack405\app\DEDUPE.EXE”
File “pack405\app\DIRREORG.EXE”
File “pack405\app\DomainPOP.dsc”
File “pack405\app\EDITUSER.SMP”
File “pack405\app\FILELIST.DAT”
File “pack405\app\INETWH32.DLL”
File “pack405\app\INSTALL.LOG”
File “pack405\app\MailboxSize.exe”
File “pack405\app\MailboxSize.txt”
File “pack405\app\MDAEMON.DSC”
File “pack405\app\MDAEMON.HLP”
File “pack405\app\NTUTIL.DLL”
File “pack405\app\ULREPAIR.EXE”
File “pack405\app\WISECHCK.EXE”
File “pack405\app\WISEUPDT.EXE”
File “pack405\app\WP2WC.EXE”
File “pack405\app\XCDSFX32.BIN”
SetOutPath $INSTDIR\cgi
File “pack405\cgi\*.*”
SectionEnd
Section “MDaemon Docs” SecMDaemonDocs
SectionIn 2
SetOutPath $INSTDIR\docs
File “pack405\docs\*.*”
SetOutPath $INSTDIR\docs\api
File “pack405\docs\api\*.*”
SectionEnd
Section “World Client” SecWorldClient
SectionIn 2
SetOutPath $INSTDIR\wcstandard
File “pack405\wcstandard\*.*”
; 底下为需要中文化的部分
File “cht\wcstandard\WCStandard.exe”
File “cht\wcstandard\WorldClient.dll”
File “cht\wcstandard\XceedZip.dll”
SetOutPath $INSTDIR\wcstandard\html
File “pack405\wcstandard\html\*.*”
SetOutPath $INSTDIR\wcstandard\html\help
File “pack405\wcstandard\html\help\*.*”
SetOutPath $INSTDIR\wcstandard\templates
File “pack405\wcstandard\templates\*.*”
SectionEnd
Section “Web Config” SecWebConfig
SectionIn 2
SetOutPath $INSTDIR\webconfig
File “pack405\webconfig\*.*”
; 底下为需要中文化的部分
File “cht\webconfig\WebConfig.exe”
SetOutPath $INSTDIR\webconfig\html
File “pack405\webconfig\html\*.*”
SetOutPath $INSTDIR\webconfig\templates
File “pack405\webconfig\templates\*.*”
SectionEnd
;==============================
; 6.4 加入到“开始选单”
;
Section “Add shortcut to Start Menu” SecStartMenu
SectionIn 1 2
SetOutPath “$INSTDIR”
CreateDirectory “$SMPROGRAMS\${MUI_PRODUCT}”
; 有时候 CreateShortCut 会出问题,不如用这个动作
; 直接强制 installer 建立目录。这样比较贱。
CreateShortCut “$SMPROGRAMS\${MUI_PRODUCT}\MDaemon.lnk” \
“$INSTDIR\app\mdaemon.exe”
CreateShortCut “$SMPROGRAMS\${MUI_PRODUCT}\MDConfig.lnk” \
“$INSTDIR\app\MDConfig.exe”
CreateShortCut “$SMPROGRAMS\${MUI_PRODUCT}\Uninstall ${MUI_PRODUCT}.lnk” \
“$INSTDIR\Uninstall.exe”
SectionEnd
;==============================
; 6.5 加入到“快速启动”
;
; 不是每个程式都要加入“快速启动”列,视需要而定。
;
;Section “Add shortcut to Quicklaunch” SecQuicklaunch
; SectionIn 1 2
; CreateShortCut “$QUICKLAUNCH\${MUI_PRODUCT}.lnk” \
; “$INSTDIR\app\${PROGMAINEXE}”
;SectionEnd
;==============================
; 6.6 加入到“桌面”
;
Section “Add shortcut to Desktop” SecDesktop
SectionIn 1 2
CreateShortCut “$DESKTOP\${MUI_PRODUCT}.lnk” \
“$INSTDIR\app\${PROGMAINEXE}”
SectionEnd
;==============================
; 6.6 加入到“滑鼠右键” (* 进阶)
;
; 只用在 UltraEdit
;Section “Add to Right mouse button” SecRightMouse
; SectionIn 1 2
; WriteRegStr HKLM “SOFTWARE\Classes\*\shellex\ContextMenuHandlers\UltraEdit-32″ “” “{b5eedee0-c06e-11cf-8c56-444553540000}”
; WriteRegStr HKLM “SOFTWARE\Classes\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}” “” “UltraEdit-32″
; WriteRegStr HKLM “SOFTWARE\Classes\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}\InProcServer32″ “” “$INSTDIR\ue32ctmn.dll”
; WriteRegStr HKLM “SOFTWARE\Classes\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}\InProcServer32″ “ThreadingModel” “Apartment”
;SectionEnd
;=======================================================
; ■7.写入解除安装程式
;=======================================================
; 如果你嫌太难,可以不写解除安装程式,全部 remark 掉。
;==============================
; 7.1 节段开始
Section “Create Uninstaller” SecCreateUninst
SectionIn 1 2
;==============================
; 7.2 写入到“注册表”(基础)
;
; 一般只有写下面这一段,指定安装目录。
WriteRegStr HKLM “SOFTWARE\${MUI_PRODUCT}” “Install_Dir” “$INSTDIR”
WriteRegStr HKLM “SOFTWARE\${MUI_PRODUCT}” “Installer Language” $LANGUAGE
;==============================
; 7.3 写入到“注册表” (* 进阶)
;
; 下面这段注册表值,只是在 {控制台 | 新增移除程式] 花俏用的。
; 如果看不懂,可以全部不使用。
; 参考 http://leoboard.cpatch.org/cgi-bin/topic.cgi?forum=2&topic=24&show=0
;
WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” \
“DisplayIcon” “$INSTDIR\app\${PROGMAINEXE}”
; “DisplayIcon” “$INSTDIR\${PROGMAINEXE}” ; 一般使用这个型态。只有 MDaemon 例外。
WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” \
“DisplayName” “${MUI_PRODUCT} ${VER_1}.${VER_2} ${PATCHTYPE_ENU}”
WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” \
“DisplayVersion” “${VER_1}.${VER_2}”
WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” \
“UninstallString” “$INSTDIR\uninstall.exe”
WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” \
“URLInfoAbout” “http://www.altn.com/Products/Default.asp?product_id=MDaemon”
WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” \
“Contact” “kiiali@cpatch.org”
WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” \
“HelpLink” “http://www.altn.com/Support/Default.asp?product_id=MDaemon”
WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” \
“URLUpdateInfo” “http://www.altn.com/Download/Default.asp”
WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” \
“Readme” “$INSTDIR\${README_CHT}”
WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” \
“Comments” “Chinese (P.R.C.) and Chinese (Taiwan) ${MUI_PRODUCT} localized version by Kii Ali, for Mailer Daemon with win32 plateform.”
WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” \
“Publisher” “Copyright (c) 2002, Alt-N Technology.”
;==============================
; 7.4 依照各种语言,自动写入不同的注册表值 (* 进阶)
; 包括 ENU/CHT/CHS
;——————————————
!macro MUI_REGMUI1 LANGID TEXT
StrCmp $LANGUAGE ${LANGID} “” +3
${TEXT}
!macroend
!insertmacro MUI_REGMUI1 1033 ‘WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” “Comments” “Chinese (P.R.C.) and Chinese (Taiwan) ${MUI_PRODUCT} localized version by Kii Ali, for Mailer Daemon with win32 plateform.” ‘
!insertmacro MUI_REGMUI1 1028 ‘WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” “Comments” “中文 (中国大陆) 与 中文 (台湾) ${MUI_PRODUCT} 本地化版本,由 Kii Ali 制作,用于 win32 平台架设个人或公司的信件伺服器。” ‘
!insertmacro MUI_REGMUI1 2052 ‘WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” “Comments” “笢恅 (笢弊湮翻) 迵 笢恅 (怢俜) ${MUI_PRODUCT} 挂华赵唳挂ㄛ蚕 Kii Ali 秶钎ㄛ蚚衾 win32 Ⅸ;怢殇扢跺?;么鼠侗腔蛔璃督昢け;﹝” ‘
;==============================
; 7.5 依照各种语言,自动写入不同的注册表值 (* 进阶)
; 包括 ENU/CHT/CHS
;——————————————
!macro MUI_REGMUI2 LANGID TEXT
StrCmp $LANGUAGE ${LANGID} “” +3
${TEXT}
!macroend
!insertmacro MUI_REGMUI2 1033 ‘WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” “Publisher” “Copyright (c) 2002, Alt-N Technology.” ‘
!insertmacro MUI_REGMUI2 1028 ‘WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” “Publisher” “版权所有 (c) 2002, Alt-N Technology. ” ‘
!insertmacro MUI_REGMUI2 2052 ‘WriteRegStr HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}” “Publisher” “唳?;垀衄 (c) 2002, Alt-N Technology.” ‘
;——————————————
;==============================
; 7.6 现在写入“解除安装程式”
; 写入语言名称到注册表 (用于解除安装程式)
WriteRegStr HKLM “Software\${MUI_PRODUCT}” “Installer Language” $LANGUAGE
WriteUninstaller “$INSTDIR\Uninstall.exe”
SectionEnd
;==============================
; 7.8 显示“完成”标头
;如果不想使用“完成”页面,在这个巨集之后插入。
!insertmacro MUI_SECTIONS_FINISHHEADER
;=======================================================
; ■8.描述功能
;=======================================================
;==============================
; 8.1 描述功能的巨集 (* 进阶)
;
; 如果有描述,最好一个一个加入巨集。
; 这一段要在所有的 section 之后,否则会出现“变数名称没有找到”。
; 如果 MUI_FUNCTIONS_DESCRIPTION_BEGIN 拆成两段,会变成重覆呼叫,而导致错误。
!insertmacro MUI_FUNCTIONS_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${SecMDaemon} $(DESC_SecMDaemon)
!insertmacro MUI_DESCRIPTION_TEXT ${SecMDaemonDocs} $(DESC_SecMDaemonDocs)
!insertmacro MUI_DESCRIPTION_TEXT ${SecWorldClient} $(DESC_SecWorldClient)
!insertmacro MUI_DESCRIPTION_TEXT ${SecWebConfig} $(DESC_SecWebConfig)
!insertmacro MUI_DESCRIPTION_TEXT ${SecStartMenu} $(DESC_SecStartMenu)
; !insertmacro MUI_DESCRIPTION_TEXT ${SecQuicklaunch} $(DESC_SecQuicklaunch)
!insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} $(DESC_SecDesktop)
!insertmacro MUI_DESCRIPTION_TEXT ${SecCreateUninst} $(DESC_SecCreateUninst)
; !insertmacro MUI_DESCRIPTION_TEXT ${SecRightMouse} $(DESC_SecRightMouse)
!insertmacro MUI_FUNCTIONS_DESCRIPTION_END
;
;==============================
; 8.2 每个节段的描述文字,直接使用各国语言 (* 进阶)
;
; 这是让滑鼠移动到安装项目上时,自动出现的描述功能。
; 我使用 ENU/CHT/CHS 三个语言。如果嫌麻烦,可以只使用一个语言,甚至不使用描述。
LangString DESC_SecMDaemon ${LANG_ENGLISH} “MDaemon Server Main Prog”
LangString DESC_SecMDaemonDocs ${LANG_ENGLISH} “Related Documents, manuals”
LangString DESC_SecWorldClient ${LANG_ENGLISH} “Server: reading your emails on browser”
LangString DESC_SecWebConfig ${LANG_ENGLISH} “config server on browser”
LangString DESC_SecStartMenu ${LANG_ENGLISH} “Add icon to Start Menu”
LangString DESC_SecQuicklaunch ${LANG_ENGLISH} “Add icon to QuickLaunch”
LangString DESC_SecDesktop ${LANG_ENGLISH} “Add icon to Desktop”
LangString DESC_SecRightMouse ${LANG_ENGLISH} “Add function of mouse right-click”
LangString DESC_SecCreateUninst ${LANG_ENGLISH} “Create Uninstaller”
LangString DESC_SecMDaemon ${LANG_TRADCHINESE} “MDaemon 伺服器主程式”
LangString DESC_SecMDaemonDocs ${LANG_TRADCHINESE} “相关的文件、手册”
LangString DESC_SecWorldClient ${LANG_TRADCHINESE} “浏览器网页读取信件的伺服器”
LangString DESC_SecWebConfig ${LANG_TRADCHINESE} “在浏览器组态伺服器”
LangString DESC_SecStartMenu ${LANG_TRADCHINESE} “加入图示到开始功能表”
LangString DESC_SecQuicklaunch ${LANG_TRADCHINESE} “加入图示到快速启动列”
LangString DESC_SecDesktop ${LANG_TRADCHINESE} “加入图示到桌面”
LangString DESC_SecRightMouse ${LANG_TRADCHINESE} “加入滑鼠右键功能”
LangString DESC_SecCreateUninst ${LANG_TRADCHINESE} “建立解除安装程式”
LangString DESC_SecMDaemon ${LANG_SIMPCHINESE} “MDaemon 督昢け;翋最唗”
LangString DESC_SecMDaemonDocs ${LANG_SIMPCHINESE} “眈寿腔恅璃﹜忒聊”
LangString DESC_SecWorldClient ${LANG_SIMPCHINESE} “銡拟け;厍珜黍?;蛔璃腔督昢け;”
LangString DESC_SecWebConfig ${LANG_SIMPCHINESE} “婓銡拟け;餍离督昢け;”
LangString DESC_SecStartMenu ${LANG_SIMPCHINESE} “氖楼芞梓善※羲宎§粕等”
LangString DESC_SecQuicklaunch ${LANG_SIMPCHINESE} “氖楼芞梓善办厒ぎ;雄蹈”
LangString DESC_SecDesktop ${LANG_SIMPCHINESE} “氖楼芞梓善袤拨”
LangString DESC_SecRightMouse ${LANG_SIMPCHINESE} “氖楼扷梓衵莹髡夔”
LangString DESC_SecCreateUninst ${LANG_SIMPCHINESE} “斐膘贱壶假蚾最唗”
;=======================================================
; ■9.解除安装程式,真正的动作
;=======================================================
; 这个部分,和前面的建立 CreateUninst ,意味不一样喔。
; 前者: 把 uninstaller 程式做出来。
; 后者: 指定这个程式,要删除那些档案/目录/注册表项。
;==============================
; 9.1 节段开始
Section “Uninstall”
; 要移除掉解除安装程式
Delete “$INSTDIR\Uninstall.exe”
; 移除档案
Delete “$INSTDIR\App\*.*”
Delete “$INSTDIR\Logs\*.*”
Delete “$INSTDIR\docs\api\CreateUser\*.*”
Delete “$INSTDIR\docs\api\IterateUsers\*.*”
Delete “$INSTDIR\docs\api\Sample COM\MDUserEdit\*.*”
Delete “$INSTDIR\docs\api\Sample COM\*.*”
Delete “$INSTDIR\docs\api\*.*”
Delete “$INSTDIR\docs\*.*”
Delete “$INSTDIR\cgi\*.*”
Delete “$INSTDIR\ARCHIVES\*.*”
Delete “$INSTDIR\BACKUP\*.*”
Delete “$INSTDIR\BADMSGS\*.*”
Delete “$INSTDIR\CFILTER\*.*”
Delete “$INSTDIR\DIGESTS\*.*”
Delete “$INSTDIR\GATEWAYS\*.*”
Delete “$INSTDIR\LOCALQ\LNDOMAIN\*.*”
Delete “$INSTDIR\LOCALQ\*.*”
Delete “$INSTDIR\LOGS\*.*”
Delete “$INSTDIR\PUBLIC~1\*.*”
Delete “$INSTDIR\RAWFILES\*.*”
Delete “$INSTDIR\REMOTEQ\RETRY\*.*”
Delete “$INSTDIR\REMOTEQ\*.*”
Delete “$INSTDIR\SMTPIN\*.*”
Delete “$INSTDIR\WCstandard\HTML\help\*.*”
Delete “$INSTDIR\WCstandard\HTML\*.*”
Delete “$INSTDIR\WCstandard\Temp\*.*”
Delete “$INSTDIR\WCstandard\Templates\*.*”
Delete “$INSTDIR\WCstandard\*.*”
Delete “$INSTDIR\webconfig\HTML\*.*”
Delete “$INSTDIR\webconfig\Temp\*.*”
Delete “$INSTDIR\webconfig\Templates\*.*”
Delete “$INSTDIR\webconfig\*.*”
Delete “$INSTDIR\*.*”
; 移除开始功能表、桌面、快递启动等捷径。
Delete “$SMPROGRAMS\${MUI_PRODUCT}\*.*”
Delete “$DESKTOP\${MUI_PRODUCT}.lnk”
Delete “$QUICKLAUNCH\${MUI_PRODUCT}.lnk”
RMDir “$SMPROGRAMS\${MUI_PRODUCT}”
; 移除使用过的目录。
RMDir “$INSTDIR\App”
RMDir “$INSTDIR\Logs”
RMDir “$INSTDIR\docs\api\CreateUser”
RMDir “$INSTDIR\docs\api\IterateUsers”
RMDir “$INSTDIR\docs\api\Sample COM\MDUserEdit”
RMDir “$INSTDIR\docs\api\Sample COM”
RMDir “$INSTDIR\docs\api”
RMDir “$INSTDIR\docs”
RMDir “$INSTDIR\cgi”
RMDir “$INSTDIR\ARCHIVES”
RMDir “$INSTDIR\BACKUP”
RMDir “$INSTDIR\BADMSGS”
RMDir “$INSTDIR\CFILTER”
RMDir “$INSTDIR\DIGESTS”
RMDir “$INSTDIR\GATEWAYS”
RMDir “$INSTDIR\LOCALQ\LNDOMAIN”
RMDir “$INSTDIR\LOCALQ”
RMDir “$INSTDIR\LOGS”
RMDir “$INSTDIR\PUBLIC~1″
RMDir “$INSTDIR\RAWFILES”
RMDir “$INSTDIR\REMOTEQ\RETRY”
RMDir “$INSTDIR\REMOTEQ”
RMDir “$INSTDIR\SMTPIN”
RMDir “$INSTDIR\WCstandard\HTML\help”
RMDir “$INSTDIR\WCstandard\HTML”
RMDir “$INSTDIR\WCstandard\Temp”
RMDir “$INSTDIR\WCstandard\Templates”
RMDir “$INSTDIR\WCstandard”
RMDir “$INSTDIR\webconfig\HTML”
RMDir “$INSTDIR\webconfig\Temp”
RMDir “$INSTDIR\webconfig\Templates”
RMDir “$INSTDIR\webconfig”
RMDir “$INSTDIR”
; 删除 windows 注册表之中的安装路径
DeleteRegKey HKLM SOFTWARE\${MUI_PRODUCT}
; 删除 windows 注册表的解除安装
DeleteRegKey HKLM “Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}”
; 删除 uninstaller 使用的语言名称 (* 进阶)
DeleteRegvalue HKLM “Software\${MUI_PRODUCT}” “Installer Language”
;显示“完成”标头 (* 进阶)
!insertmacro MUI_UNFINISHHEADER
SectionEnd
;==============================
; 9.2 解除安装程式,初始化函式动作 (* 进阶)
Function un.onInit
;从注册表取得语言名称
ReadRegStr $LANGUAGE HKLM “Software\${MUI_PRODUCT}” “Installer Language”
FunctionEnd
;=======================================================
; ■eof 档案结尾

