绿色软件制作教程——实战篇
精简拼音加加3.10——去掉F10互联网搜索工具
拼音加加是拼音输入法中的经典作品之一,但其最新的3.10版本捆绑了名字为F10的互联网搜索工具,并且是强制安装,那么,如何才能删除这个讨厌的F10呢?下面将就如果删除F10搜索工具来简单说明软件精简的方法:
1、下载拼音加加的3.10 正式版,下载地址:http://family.chinaok.com/down/200516/jjetup.rar
2、分析下载得到8.8M的JJSetup3.10.zip文件,解压缩到jj目录,文件列表如下:
InstMsiA.Exe
InstMsiW.Exe
JJPack.msi
JJSetup.Exe
JJSetup.Ini
InstMsiA.Exe和InstMsiW.Exe用于在没有windows installer2.0的机器上安装该服务的,目前绝大多数正常使用的机器都已经有了这个服务,完全可以不考虑这2个文件。JJSetup.Ini是文本文件,JJSetup.Exe仅仅才110k,而JJPack.msi有5.5M大小,很明显这是一个基于windows installer 的安装程序包,所以只要研究JJPack.msi这个文件就可以了,
3、准备精简工具。
这里我主要是用orca 和msidb2个工具来修改msi文件,MSI文件编辑器orca工具在微软提供的windows xp的sdk中,在sdk安装目录下寻找orca.msi,再安装这个orca.msi就可以了。msidb在windows xp的sdk的安装后的bin目录,文件名字为msidb.exe。sdk下载地址:http://www.microsoft.com/msdownload/platformsdk/sdkupdate
4、运行orca.exe,选择file→open打开JJPack.msi文件,执行tools菜单的options命令,切换到database面板,勾选“Generate a unique Package Code each time a database is saved”,然后执行file菜单的Save as命令,把JJPack.msi文件另存为JJPackNoF10.msi文件,以后我们将要对这个JJPackNoF10.msi文件进行修改,而不影响原来的JJPack.msi文件。
5、寻找F10.exe
在orca的左侧栏选择File,执行CTRL+F命令查找F10.exe,记住Orca右边栏目中的File的值是_B7B624BDC2BD497F826470059753178F的字符串,而Component的值是C__B7B624BDC2BD497F826470059753178F的字符串。
6、禁止msi文件安装f10.exe
在orca的左侧栏选择FeatureComponents,执行CTRL+F命令查找刚才记录下来的Component的值“C__B7B624BDC2BD497F826470059753178F”,选中orca右侧栏中刚刚找到数据,点右键,执行Drop Row命令,然后执行File菜单的Save命令,保存刚才做的修改。
7、获取拼音加加的安装文件并删除F10.exe文件
在orca的左侧栏选择Media,记录右边的Cabinet的值“#_ED8F65B50BD54F4B6AEE1178B56AD1D3”,关闭orca。把msidb.exe复制到jj目录,然后在jj目录建立一个批处理文件getcabfiles.cmd,内容如下:
msidb.exe -x _ED8F65B50BD54F4B6AEE1178B56AD1D3 -d JJPack.msi
md files
expand _ED8F65B50BD54F4B6AEE1178B56AD1D3 -F:* files
move /Y files\_B7B624BDC2BD497F826470059753178F .\
第一行的命令表示从JJPack.msi中提取出_ED8F65B50BD54F4B6AEE1178B56AD1D3这个cab文件。其中_ED8F65B50BD54F4B6AEE1178B56AD1D3”是前面记录下来的Media 表中的Cabinet的值,不包括前面的#,JJPack.msi是未修改过的的拼音加加的msi安装包。
第二行表示建立一个子目录叫做files
第三行命令表示把拼音加加的“_ED8F65B50BD54F4B6AEE1178B56AD1D3”压缩包中的文件解压缩到了files子目录中。
第四行命令表示把files目录中的“_B7B624BDC2BD497F826470059753178F”文件移动到jj目录下面,其中“_B7B624BDC2BD497F826470059753178F”是在第5步中寻找F10.exe时记录下的F10.exe的名字。如图2,很明显这个“_B7B624BDC2BD497F826470059753178F”就是F10.exe文件。
8 把剩下的拼音加加的安装文件重新打包到Msi文件中
打包安装文件可以使用软件出品的cabarc工具(下载地址:http://family.chinaok.com/down/200516/cabsdk.exe),把cabarc.exe解压缩到jj目录,然后在这个目录新建一个批处理文件mknoF10msi.cmd,输入命令:
del _ED8F65B50BD54F4B6AEE1178B56AD1D3
cabarc.exe -m LZX:21 -r N _ED8F65B50BD54F4B6AEE1178B56AD1D3 "files\*"
msidb.exe -a _ED8F65B50BD54F4B6AEE1178B56AD1D3 -d JJPackNoF10.msi
第一行命令表示删除从JJPack.msi中提取出_ED8F65B50BD54F4B6AEE1178B56AD1D3这个cab文件。
第二行表示把目录files中的所有文件压缩到_ED8F65B50BD54F4B6AEE1178B56AD1D3这个文件中。
第三行的命令表示把_ED8F65B50BD54F4B6AEE1178B56AD1D3这个cab文件加入到JJPackNoF10.msi文件中。
9 安装测试
精简后的软件已经不再包含F10工具且功能正常。这样就得到了原来的8.8M的拼音加加的精简版JJPackNoF10.msi(5.2M大小),这里面的精简主要是避免安装F10搜索工具,F10搜索工具仅仅几百k,减小的3M大小的主要是不再保留InstMsiA.Exe和InstMsiW.Exe。
绿化vnn——让vnn彻底隐身
绿化软件的同时也是对软件重新打包的过程,我们可以修改软件的文件,使之具有原版软件所不一样的表现。
笔者单位和家里的PC都处在内网,没有公网的IP地址,所以笔者安装了VNN(Virtual Native Network),其可以为接入因特网的任意两台机器提供连通服务。VNN连通了的机器就像处于同一个局域网中一样,即使这些机器都不拥有公网地址,而都是处于私网内。通过VNN就可以借助互联网直接构建属于自己的“本地”网络。但vnn不运行的时候,vnn虚拟出来的网卡就会在系统托盘处显示一个小的图标说“网线没有接好”,占用了本来就很拥挤的系统托盘空间,并且更重要的是我不想要别人知道我在使用vnn,所以想要vnn的界面彻底从桌面上消失。因此我做了一个绿色版的vnn,同时使得网卡隐形。
下面我就来讲述如何制作绿色版本的vnn,同时用类似windows本身的隐藏设备的方法来让vnn彻底隐身,又不影响正常的功能。
1、下载vnn3.0(下载地址:http://family.chinaok.com/down/200516/vnn.zip)并安装。
2、找出vnn虚拟网卡的驱动程序,打开设备管理器,在vnn的网卡设备上点击右键,选择属性,显示vnn虚拟网卡的属性对话框,察看驱动程序的详细信息,了解到vnn的驱动程序文件是vnnvnic.sys。在windows目录下的inf目录的所有inf文件中,查找包含“vnnvnic.sys”字符串的inf文件,找到了包含vnnvnic.sys的oem5.inf文件,这就是vnn虚拟网卡驱动的inf文件。
3、把program file目录下的vnn目录复制到其它地方,例如I:\VNN,在vnn目录中建立driver子目录,将oem5.inf和vnnvnic.sys复制到这个子目录中,把oem5.inf改名为netVDev.inf,用文本编辑器打开netVDev.inf,搜索字符串“characteristics”,把“Characteristics = 0x1” 修改为“Characteristics = 0x9”,09就表示要隐藏网卡。
4、从控制面板的添加删除程序处卸载vnn Client 3.0
5、下载devcon.exe小工具(下载地址:http://family.chinaok.com/down/200516/devcon.exe),把devcon.exe复制到driver目录,在driver目录新建一个批处理文件install.cmd用来安装vnn的虚拟网卡驱动,内容如下:
devcon install netVDev.inf *VNN_VNIC
同时生成一个用于卸载vnn驱动批处理文件removevnn.cmd,内容如下:
devcon remove *VNN_VNIC
运行driver目录的install.cmd,这样就安装了一个隐藏的vnn网卡驱动,同时右下角的托盘里面也没有vnn虚拟网卡断线的图标了。
6、运行I:\VNN目录的VNNClientC.exe,填入申请的vnn的帐号,并且把帐号下面3个选项都选中。这时候右下角的托盘的vnn的运行状态的图标,表示vnn网络已经联通。
7、让vnn以服务模式在后台运行。关闭运行的VNNClientC.exe,在I:\VNN目录建立批处理文件instsrv.cmd,内容如下:
VNNClientC.exe -install
执行这个批处理文件显示服务安装成功,然后在“我的电脑”右键选“管理”,在“服务和应用程序”选“服务”,双击其中的“VNN Client Service”,把“常规”选项的“启动类型”修改为“自动”,把“登陆”选项的“登陆身份”选“本地系统帐户”,并取消“允许服务与桌面交互”这个选项,最后点击“应用”和“确定”,重启即可。(可以用VNNClientC.exe -remove来删除vnn服务)
现在vnn就不会有“网线没有接好”提示了,所有的网络传输都在后台进行。通过这个例子,我们可以看到,绿化不仅仅可以使得软件的安装更加便捷,并且可以挖掘出新的功能。
全民动员软件绿化!做自己的绿色软件
许多人深有感触,重装系统的麻烦之处往往不仅仅在于Windows的安装过程,还有大量实用软件的安装和配置过程:周而复始的“运行Setup→选择目标路径→选择安装组件”过程,让人不胜其烦,如何删繁就减,让安装从此轻松起来呢?这次我们就来一个软件绿化大行动,了解什么是绿色软件,如何制作绿色软件,如何让系统重装后,大量的实用软件不需要安装或者只需要简单的操作,就能直接使用。
小知识 深入认识绿色软件
在DOS下装软件,程序只要直接拷贝或者解压缩就能够使用,不喜欢删掉就是。现在Windows下的程序必须经常安装才能使用,而且在安装时,可能往Windows注册表等种种你想都想不到的地方,塞进越来越多的“私货”。于是,人们开始怀念起以前“简单”的岁月,给那些安装时不用修改Windows注册表等任何内容,也不往Windows文件夹中拷任何文件,甚至是简单拷来就能用的软件就是“绿色软件”。
绿色软件可分为狭义和广义两种。狭义的绿色也称为纯绿色软件,是指软件对系统几乎没有任何改变,除了软件的安装目录,不往注册表、系统文件夹等任何地方写入任何信息(或只在开始菜单中添加简单的快捷方式),卸载软件只需要直接删除安装目录即可,类似于以前的大多数DOS程序。
广义的绿色软件则不需要专门的安装程序,对系统的改变比较少,手工就可以完成操作,比如拷贝几个动态库、导入注册表或者可以借助于批处理等脚本即可直接完成。狭义的绿色软件最为理想,但现在完全符合这种定义的软件已经越来越少了,好在相当多的软件还是可以制作成广义的绿色软件。
制作为绿色软件有何好处
1.省略或简化程序的安装过程
绿色软件可以放置在硬盘的任何目录中,重装系统后,这些软件不用安装或只需要简单的安装就可运行。比如通过复制安装文件夹的方法可以制作QQ、Foxmail的绿色软件,无论如何重装系统,也不管复制到任何目录中,只需要双击里的可执行程序即可运行。即使不是这样的绿色软件,也仅仅只需要执行批处理文件、安装脚本或REG文件即可,大大简单了程序的安装。
2.省略或简化程序的配置
大量的软件将配置和数据保存在安装文件夹或注册表中,在制作绿色软件的时候,这些都被很好地保存下来。如QQ的聊天记录、好友信息,Foxmail的邮件、帐号等,都会毫发无损地保留下来,而如果是重新安装,这些信息的重新配置都将是一个很大的工作量,对于不懂电脑的人来说,更是麻烦。
3.可迁移性强
理论上讲,绿色软件可以放置在电脑的任何一个地方,也可以通过移动硬盘携带到其他的电脑中不需安装直接运行,这给我们的工作带来很大的便利(如QQ聊天记录、电子邮件、地址簿、自定义的输入法等)。
如何“绿化”软件
下面我们就来探讨一下绿色软件的制作方法(简称为“绿化”),绿化的过程实际上就是我们自己完成安装程序的工作。没有什么固定的方法,需要猜测、分析和不断的试验、测试,在实际操作过程中,有以下一些由易到难的方法将有助于你的绿化行动。
1.解压缩
先安装WinRAR,右击扩展名为EXE的安装文件试一试,如果有解压缩的选项(或有“用WinRAR打开”,如图1),那该软件多半是属于绿色安装的软件(也有例外,如EmEditor),试着把压缩包中的文件直接解压到目标路径,双击运行可执行文件,就可以测试软件的功能是否正常,如果功能正常,那么“绿化”成功;如果不正常,就得动用下面的方法。
2.安装后卸载
先安装软件,然后复制程序的安装文件夹到另一目录下,接着卸载此软件,再到目标文件夹中双击可执行文件,看是否能正常运行。如果功能正常,那么“绿化”就成功了(前面提到的QQ和Foxmail就是此类型的典型代表软件)。
3.反编译安装程序
这个方法需要费一点力气了,需要根据安装程序所用的制作工具,选择相应的反编译程序,然后阅读反编译出的安装脚本,制作绿色软件。目前的软件大多使用专门的安装工具制作,如InstallShield,Wise,Inno Setup,Windows Installer,NSIS(Nullsoft),Installer VISE,其中Windows Installer格式的安装文件(就是MSI,MST为后缀的文件),可以通过微软的免费工具Orca打开查看,InstallShield格式的安装文件也有很多免费的工具可以解压缩和查看脚本。如果没有相应的反编译程序,就无法使用这个方法了。
4.观察安装和反安装文件
一般软件安装后都会在安装文件夹中生成安装文件(如Install.log)和卸载文件(如Unins000.dat)。里面记载着创建的目录、复制的文件、在注册表中创建的键值等信息,可以用纯文本编辑器打开、查看这些文件(如图2)。查看这些文件可以理解反安装过程,最后根据反安装的信息制作绿色软件。个别情况下这个文件完全不包含可读信息,就只好换用其他方法了。
5.比较系统快照
当前面的方法都失败的时候,可以试一试这个方法。具体思路就是在安装软件之前,把系统的状态记录下来,主要包括注册表和系统目录的所有文件状态。接下来就是安装软件,安装完成后,再一次记录系统状态。最后就是比较前后两个系统状态的不同,即可得知安装程序所做的工作。
这些工作可以由专门的软件完成,如免费工具Regshot(比较注册表变化),免费工具InCtrl5(监视软件安装会对系统造成的影响,包括注册表、INI文件、指定文件、指定文件夹、驱动器等),微软的Sysdiff工具(包含在Windows 2000的Resource Kit中,用来查看安装应用程序前后注册表和硬盘上文件的变化),或者WinInstall LE(在Windows 2000 Server安装光盘Valueadd\3rdparty\Mgmt\Winstle\中)。
系统前后的差异分为文件部分和注册表部分。文件部分指的是向系统目录拷贝的文件,以及作为COM组件注册的文件,还有与这些文件相关的注册表部分,注册表部分单单指其余的注册表的变化。对于文件部分,可以进一步区分出必须要往系统目录拷贝的文件(这种情况是少数)和放在软件安装目录的文件。对于注册表部分,区分出由这个软件的安装程序本身所作出的注册表操作和注册COM组件时候的注册表操作。
6.直接导出注册表 寻找自注册的COM组件
这个方法是方法5的简化版,现在软件的配置大多写在注册表中的“HKEY_LOCLAL_MACHINE\SOFTWARE\软件公司名字”和“HKEY_CURRENT_USER\SOFTWARE\软件公司名字”这2个键下面,直接对把这2个注册表键导出到REG文件中。自注册的COM组件都需要导出如下4个函数llCanUnloadNow,DllGetClassObject,DllRegisterServer,DllUnregisterServer,可以用VC自带的Depend.exe找出哪一个动态链接库是自注册的COM组件。最后写一个批处理文件用Regsvr32.exe注册COM组件和用Regedit.exe导入注册表。
通过上面分析安装程序的动作,把安装程序的工作分解为复制文件、注册COM组件、安装服务驱动、注册表配置等几个部分,虽然注册表配置可以覆盖注册COM组件、安装服务驱动等操作步骤,但是把这些步骤明显分割出来有助于制作绿色安装的软件。
以上所列绿化软件的六种方法,由易到难,有时可能需要几个方法联合使用。绿化软件没有一条终南捷径,需要不断地分析和测试,测试时,最好能到全新的系统中或别的电脑中跨平台进行。这里需要说明的是,无论使用什么方法,都是模拟软件的安装过程,所以原作者最容易给出该软件的绿色版本。
绿化实例
1.WinZip和WinRAR巧绿化
WinRAR和WinZip可以采用方法1直接解压缩安装文件,先下载安装文件到一个安装了WinRAR的系统上,右击选择“解压文件”,在弹出窗口中选择目标路径即可,然后双击目标文件夹中的可执行文件即可直接运行。不过,第一次运行时,需要对软件进行设置。
2.FlashGet的绿化
第一步:解压安装程序
FlashGet是大家用得比较多的一个软件,要制作它的绿化版本,需要方法3和方法6配合使用。下载并运行FlashGet的安装程序,然后取消安装。从如图3上可以看出FlashGet是使用Wise制作的安装程序,下载安装Wungui软件,可以非常容易地把安装程序解压缩到一个目录中(如图4)。
第二步:注册DLL
观察Maindir目录,其中有两个DLL文件Jccatch.dll和Fgiebar.dll,进一步察看这两个动态库文件的导出函数,可以知道这两个DLL文件都是自注册的COM组件,写一个批处理文件install.bat来注册这两个DLL。
REGSVR32 Jccatch.dll /s
REGSVR32 Fgiebar.dll /s
经过测试,功能正常,并且可以从浏览器IE中用鼠标的右键菜单激活FlashGet,功能完全,下面考虑卸载过程。
第三步:制作反安装程序
运行Regedit.exe,发现FlashGet在注册表中的路径是[HKEY_CURRENT_USER\Software\JetCar\JetCar],写一个注册表文件unflashget.reg删除这个路径,如下:
REGEDIT4
; FlashGet
[-HKEY_CURRENT_USER\Software\JetCar\JetCar]
同时写一个批处理文件uninstall.bat来卸载这两个DLL文件并导入unflashget.reg。
Regedit /s unflashget.reg
REGSVR32 /s /U Jccatch.dll
REGSVR32 /s /U Fgiebar.dll
第四步:删除不必要文件
随后删除我们用不到的文件,比如Language目录下大量欧洲的语言文件,这个绿色版本就做好了。把制作好的绿色的FlashGet拷贝到U盘上,需要用的时候,直接执行里面的Install.bat文件就可以了(注意,要在Flashget的目录运行批处理文件),不需要任何文件拷贝,不再使用时,直接双击uninstall.bat卸载。
小提示
有人用优化大师提取FlashGet的注册表,然后直接导入注册表来制作绿色的FlashGet,这样做是不行的。从前面的步骤来看,注册两个DLL文件必然在注册表中引入绝对路径,如果直接提取注册表的话,就必须根据当前的路径来修改注册表中的路径,否则制作的绿色版的FlashGet只能在固定的目录运行。
3.更多软件的绿化
除了以上提到的一些软件,CuteFTP、MyIE2、FlashFXP、QQ、GreenBrowser、Foxmail、Foobar、Winamp、Acrobat、FinalData、金山词霸、ZoomPlayer、WinISO、ISOBuster、Total Commander、网易泡泡都可以使用方法2来绿化。
VisualC++、RealPlayer、RealMedia的解码器包,大部分解码器如MPEG2、AC3、OGG、DivX、XviD可以使用方法5来绿化。
Netants、FlashGet、Offline Explorer、ACDSee、UltraEdit、the Bat、CyberArticle、PartitionMagic都可以使用方法6来完成绿化。
不适合“绿化”的有DirectX、Windows Media Player 9、IE 6.0、微软的补丁程序、Office、反病毒工具NAV、Java虚拟机、虚拟机VMware等。有些是“绿化”起来比较困难,如Office,因为注册表文件中有大量的绝对路径存在,而且Office的组件之间有比较复杂的联系,所以难以“绿化”;另有一些是“绿化”没有意义,如IE 6.0、微软的补丁程序、DirectX等。
对于大部分软件来说,通过以上的绿化方法能解决全部的问题。但还有另一部分软件,需要做进一步的处理或采取别的方式,比如注册表文件只能保存绝对路径,那通过导出注册表的方式制作的绿色软件其路径必须是固定的,或者移动位置后需要修改注册表文件中的绝对路径后再导入。
结合Universal Extractor进行简单软件的绿化制作
这个世界软件无数,由于一些软件的绿化特性,一些夸张的作者们不但加了壳,还编译了安装脚本,让它的软件可以确保“万无一失”。
但是,早在前几年出现的一些可调整、输出安装包的工具、命令行使那些软件的安装包成为了摆设,从此,绿色软件便诞生了。
为了应付这些工具、命令行,软件作者们使用了各种版本的脚本编译器,不断对脚本进行复杂化操作,想继续杀猫。
但是他们万万没想到的是,某个软件已经彻底破解了这些软件的编译技术,在集成了各种解包工具、命令行的同时,它又提供了简便的界面与傻瓜化的操作,这让“通杀”成为了现实。
这个软件的名字,就叫“Universal Extractor”(以下简称“UE”)。
这款号称“通吃所有安装包”的软件(实际上并不是,对于一些特殊或没被破解的安装技术来说,它还是个摆设),实际上是集成了所有已知的解包工具、命令行的综合,也就是说它根本是一个傻瓜化的前台程序。在它简洁的操作界面的背后,还是由命令行、工具包进行的解包操作。只要稍微懂点软件绿化技术的朋友一定可以看出BIN目录下的文件到底是干什么用的。可惜的是就目前来说,它对于国内的一些安装包编译器(比如“Tiger Installer”、“肥猫安装制作”跟“小颖安装程序制作专家”这几款深有名气的安装包编译器)以及国外的一些特殊安装包(比如WINDOWS下的MSI格式、LINUX下的RPM)根本不起作用,这实在是一大缺陷。
本文就是要大家可以结合Universal Extractor进行简单软件的绿化制作,让大家知道绿色软件的制作其实并不难,难就难在你肯不肯细心学而已。
以下,我将举出我绿化的一些软件的绿化过程,希望对大家有所帮助。
一、RealMedia DirectShow splitter 1.0.1.1的分解安装
说明:这是RealMedia的DirectShow分离器,也就是所谓的解码器。装上这个后,可以让原本不支持RM、RMVB的播放器支持这几个文件的播放,当然前提是目标播放器必须支持DirectShow层播放,否则就没意义了。不过就目前来说,似乎所有的播放器都支持的样子(部分专用格式播放器与音频播放器除外),所以大家可以自己动手制作这个软件的绿色安装版本,或者用编译器进行属于自己的版本的制作。
步骤:
1、用UE把安装包解包(个人推荐用CODEC PACK作为解码包样本进行解码器的剥离,K-LITE的话没有一定实力是绝对脱不出来的),如果可以识别的话就可以看到安装包目录下有个与安装包同名的文件夹(可以在UE里设置,默认是在安装包同目录下生成同名文件夹目录,里面存放的是该安装包的)。进入该文件夹,可以看到一个install_script.iss文件与{sys}、embedded目录,说明该安装包是采用INNO进行编译的,这样绿化也容易的多。
2、用记事本工具打开install_script.iss文件,可以看到以下内容(不包括后边的标记内容):
[Setup] ——安装脚本开始标记
AppName=RealMedia DirectShow splitter 1.0.1.1 BY 龙梦秋 ——安装包的标题
AppVerName=RealMedia DirectShow splitter ——安装包在系统安装后的标题
DefaultDirName={pf}\RealMedia ——安装包的安装位置,{pf}代表系统Program Files目录
WizardImageFile=embedded\WizardImage.bmp ——安装包左边的图案,embedded是临时目录
WizardSmallImageFile=embedded\WizardSmallImage.bmp ——安装包上边的图案,embedded是临时目录
[Files] ——描述安装包的文件以及该文件的目录、安装位置等。
Source: "{sys}\atrc.dll"; DestDir: "{sys}"; Tasks: "RealMedia"; Flags: overwritereadonly ignoreversion ——要复制的文件的目录与文件,前一个{sys}代表安装包临时目录下的目录,后一个{sys}代表系统目录下的system32目录;Tasks: "RealMedia"代表该操作是在选定了RealMedia项后进行的操作,如果在后面没有选定则不进行该操作;Flags: overwritereadonly ignoreversion代表强制覆盖只读文件并忽略提示,下同。
Source: "{sys}\cook.dll"; DestDir: "{sys}"; Tasks: "RealMedia"; Flags: overwritereadonly ignoreversion
Source: "{sys}\drv1.dll"; DestDir: "{sys}"; Tasks: "RealMedia"; Flags: overwritereadonly ignoreversion
Source: "{sys}\drv2.dll"; DestDir: "{sys}"; Tasks: "RealMedia"; Flags: overwritereadonly ignoreversion
Source: "{sys}\drvc.dll"; DestDir: "{sys}"; Tasks: "RealMedia"; Flags: overwritereadonly ignoreversion
Source: "{sys}\hxltcolor.dll"; DestDir: "{sys}"; Tasks: "RealMedia"; Flags: overwritereadonly ignoreversion
Source: "{sys}\pncrt.dll"; DestDir: "{sys}"; Tasks: "RealMedia"; Flags: overwritereadonly ignoreversion
Source: "{sys}\rv10.dll"; DestDir: "{sys}"; Tasks: "RealMedia"; Flags: overwritereadonly ignoreversion
Source: "{sys}\rv20.dll"; DestDir: "{sys}"; Tasks: "RealMedia"; Flags: overwritereadonly ignoreversion
Source: "{sys}\rv30.dll"; DestDir: "{sys}"; Tasks: "RealMedia"; Flags: overwritereadonly ignoreversion
Source: "{sys}\rv40.dll"; DestDir: "{sys}"; Tasks: "RealMedia"; Flags: overwritereadonly ignoreversion
Source: "{sys}\sipr.dll"; DestDir: "{sys}"; Tasks: "RealMedia"; Flags: overwritereadonly ignoreversion
Source: "{sys}\RealMediaSplitter.ax"; DestDir: "{sys}"; Tasks: "RealMedia"; Flags: overwritereadonly ignoreversion
Source: "embedded\WizardImage.bmp"; DestDir: "embedded"; ——复制到临时目录下的文件,DestDir: "embedded"是代表在用户的TEMP目录下建立一个带TEMP名的目录(其他字节则是随机的)并将embedded目录下的该文件复制进去作为安装包向导模式的图案。下同。
Source: "embedded\uninstall.exe"; DestDir: "embedded"; ——INNO安装包特有的卸载程序。
Source: "embedded\WizardSmallImage.bmp"; DestDir: "embedded";
Source: "embedded\decompressor.dll"; DestDir: "embedded"; ——INNO安装包特有的解包插件,在解包后自动注册到当前系统,安装完毕后自动解除注册并删除自身。
[Run] ——安装完毕后要执行的操作
Filename: "{sys}\regsvr32.exe"; Parameters: "/s {sys}\RealMediaSplitter.ax"; Tasks: "RealMedia"; ——该安装脚本在这里进行了RealMediaSplitter.ax插件的注册,并指明了是选定了RealMedia项后进行的操作。/s是指不在注册后出现操作信息。
[UninstallRun] ——卸载时要执行的首要操作
Filename: "{sys}\regsvr32.exe"; Parameters: "/s /u {sys}\RealMediaSplitter.ax"; Tasks: "RealMedia"; ——与Run段相反,这里进行了RealMediaSplitter.ax插件的反注册,卸载完毕后以上文件都将被从系统中删除。
[Tasks] ——安装脚本里的操作项目
Name: "RealMedia"; Description: "RealMedia DirectShow splitter 1.0.1.1"; ——指定了RealMedia DirectShow splitter 1.0.1.1的操作项为RealMedia,也就是只有选定了RealMedia DirectShow splitter 1.0.1.1才会进行RealMedia项的操作。
至此,该软件的安装过程已经非常明显了:把{sys}目录下的文件复制进system32目录后再用regsvr32命令把RealMediaSplitter.ax插件注册进系统就算完成安装。
那么,既然已经知道了它的安装过程,我们该如何进行软件的绿化呢?这时候当然要请出我们万能的BAT啦~~
说明:BAT文件在微软官方定义里为MS-DOS批处理文件,里面存放的可以是需要批量操作的命令行,也可以是一些提示信息,或者两者都有。我最近经常利用它的信息显示功能进行一些绿色软件的“安装”脚本的编写,使原本几乎是不可能完成的事情成为了现实,并可以写出完美的安装脚本。
但由于本篇只用来介绍简单的绿化制作,所以将不会涉及到高级代码知识。
由于仅仅是把文件复制进系统并进行插件的注册,所以安装部分代码可以写成下面这样(不包括后面的注释):
copy {sys}\*.* %windir%\system32\*.* ——把{sys}目录下的所有文件都复制进system32目录
regsvr32 /s RealMediaSplitter.ax ——注册RealMediaSplitter.ax插件
相对的卸载脚本则可以写成如下样式(不包括后面的注释):
regsvr32 /u /s RealMediaSplitter.ax ——反注册RealMediaSplitter.ax插件
del %windir%\system32\atrc.dll ——删除system32目录下的atrc.dll文件,下同。
del %windir%\system32\cook.dll
del %windir%\system32\drv1.dll ——这里可用通配符“*”来代表数字,也就是说可以跟下边的drv2.dll写成一行,名字当然就成了drv*.dll,这样可以省下一行。下边的rv10.dll到rv40.dll一样可以写成rv*0.dll,省掉3行。
del %windir%\system32\drv2.dll
del %windir%\system32\drvc.dll
del %windir%\system32\hxltcolor.dll
del %windir%\system32\pncrt.dll
del %windir%\system32\rv10.dll
del %windir%\system32\rv20.dll
del %windir%\system32\rv30.dll
del %windir%\system32\rv40.dll
del %windir%\system32\sipr.dll
del %windir%\system32\RealMediaSplitter.ax
3、将以上两部分分别保存成“安装.BAT”与“卸载.BAT”两个文件(别跟偶说你不知道怎么保存成BAT格式……),放到刚才脱出的目录里,然后把embedded文件夹跟install_script.iss文件删除,然后把该目录下的文件全部打包后就成了属于你的绿色版咯~~
二、AviSynth 2.5.5的分解安装
说明:经常做视频相关工作的人一定认识这个东西(否则就不合格哦~~),它可是视频剪接、切换、整合的极品哦!不过默认是要安装的,虽然不会污染系统,不过不做成绿色版实在不舒服呢~~所以,这次拿它开刀。
步骤:
1、用UE脱出脚本,发现是NSIS编译器所编译的安装包(这个有点麻烦呢)。解包后的文件目录下出现几个目录,分别是$0、$PLUGINSDIR、$SYSDIR、Docs、Examples目录,以及[NSIS].nsi、gpl.TXT文件。由于我们只需要主要的文件,所以将Docs、Examples、$PLUGINSDIR目录以及脚本中相关部分删除(为了省点篇幅,因为一长起来看了人会头晕的……)。
2、读取[NSIS].nsi文件,内容如下(精简后的只包括插件注册部分的脚本,删除了所有多余代码,不包括后面的注释):
SetOutPath $SYSDIR ——提示以下文件将复制进system32目录
File avisynth.dll ——复制进system32目录的文件,下同。
File devil.dll
IfFileExists $SYSDIR\msvcp60.dll 178 0 ——这里指明了如果系统没有在使用msvcp60.dll,那么直接覆盖
File msvcp60.dll
StrCmp "$0" "" 184 186 0 ——输出$0目录到临时目录
SetOutPath $INSTDIR\plugins ——在安装目录下建立plugins目录
StrCpy $0 "$INSTDIR\plugins" ——将$0目录里的文件全部复制到安装目录下的plugins目录
SetOutPath $0
File DirectShowSource.dll ——原$0目录里的文件,下同。
File TCPDeliver.dll
File colors_rgb.avsi
另外,由于采用了注册表编写,而注册表部分在NSIS脚本里却是以数字方式表示,实在是无法判断到底写了哪些键值,所以只能手动寻找。以下是安装时输入到注册表里的内容(安装/卸载信息除外):
[HKEY_LOCAL_MACHINE\SOFTWARE\AviSynth]
@="C:\\Program Files\\AviSynth 2.5"
"plugindir2_5"="C:\\Program Files\\AviSynth 2.5\\plugins"
[HKEY_CLASSES_ROOT\avsfile]
@="AviSynth Script"
[HKEY_CLASSES_ROOT\avsfile\DefaultIcon]
@="C:\\WINDOWS\\System32\\AviSynth.dll,0"
[HKEY_CLASSES_ROOT\CLSID\{E6D6B700-124D-11D4-86F3-DB80AFD98778}]
@="AviSynth"
[HKEY_CLASSES_ROOT\CLSID\{E6D6B700-124D-11D4-86F3-DB80AFD98778}\InProcServer32]
@="AviSynth.dll"
"ThreadingModel"="Apartment"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\avs]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\avsfile]
@="AviSynth Script"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\avsfile\DefaultIcon]
@="C:\\WINDOWS\\System32\\AviSynth.dll,0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{E6D6B700-124D-11D4-86F3-DB80AFD98778}\InProcServer32]
@="AviSynth.dll"
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Management\ARPCache\AviSynth]
"SlowInfoCache"=hex:28,02,00,00,00,00,00,00,00,20,05,00,00,00,00,00,00,00,00,\
00,00,00,00,00,ff,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00
"Changed"=dword:00000000
[HKEY_USERS\S-1-5-21-1757981266-1844823847-725345543-1003\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\avs]
从以上键数可以看出,该软件并未注册到系统里,而是采用了修改注册表的方法实现了自身的加载,那么我们也可以省去注册插件的步骤,直接进行复制、注册表导入的操作就可以了。
3、虽然可以通过编写BAT文件实现注册表的改写,但考虑到一些键值的危险性,我推荐采用注册表文件导入的方式进行注册表的改写。
完整的注册文件内容如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\AviSynth]
@="C:\\Program Files\\AviSynth 2.5"
"plugindir2_5"="C:\\Program Files\\AviSynth 2.5\\plugins"
[HKEY_CLASSES_ROOT\avsfile]
@="AviSynth Script"
[HKEY_CLASSES_ROOT\avsfile\DefaultIcon]
@="C:\\WINDOWS\\System32\\AviSynth.dll,0"
[HKEY_CLASSES_ROOT\CLSID\{E6D6B700-124D-11D4-86F3-DB80AFD98778}]
@="AviSynth"
[HKEY_CLASSES_ROOT\CLSID\{E6D6B700-124D-11D4-86F3-DB80AFD98778}\InProcServer32]
@="AviSynth.dll"
"ThreadingModel"="Apartment"
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\avs]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\avsfile]
@="AviSynth Script"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\avsfile\DefaultIcon]
@="C:\\WINDOWS\\System32\\AviSynth.dll,0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{E6D6B700-124D-11D4-86F3-DB80AFD98778}\InProcServer32]
@="AviSynth.dll"
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Management\ARPCache\AviSynth]
"SlowInfoCache"=hex:28,02,00,00,00,00,00,00,00,20,05,00,00,00,00,00,00,00,00,\
00,00,00,00,00,ff,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00
"Changed"=dword:00000000
[HKEY_USERS\S-1-5-21-1757981266-1844823847-725345543-1003\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\avs]
将以上内容保存成install.reg文件后(文件名随意,只要等下在BAT脚本里改写一下就可以了),开始编写BAT文件的安装部分,内容如下(不包括后面的注释):
copy $SYSDIR\*.* %windir%\system32\*.* ——复制$SYSDIR目录下的所有文件到system32目录
md %programfiles%\AviSynth 2.5\plugins ——在programfiles目录下建立AviSynth 2.5目录,并在该目录下再建立一个plugins目录
xcopy $0 %programfiles%\AviSynth 2.5\plugins /S /Q ——把$0目录下的文件全部复制到上边的plugins目录
Regedit /s install.reg ——将刚才保存的注册表项导入到注册表中,并不显示任何提示
要卸载的话就又要编写个卸载专用的注册表项,内容如下:
Windows Registry Editor Version 5.00
[-HKEY_LOCAL_MACHINE\SOFTWARE\AviSynth]
[-HKEY_CLASSES_ROOT\avsfile]
[-HKEY_CLASSES_ROOT\CLSID\{E6D6B700-124D-11D4-86F3-DB80AFD98778}]
[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\avs]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\avsfile]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{E6D6B700-124D-11D4-86F3-DB80AFD98778}]
[-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Management\ARPCache\AviSynth]
[-HKEY_USERS\S-1-5-21-1757981266-1844823847-725345543-1003\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSaveMRU\avs]
将以上内容保存成uninstall.reg,开始编写卸载用的BAT文件,内容如下(不包括后面的注释):
Regedit /s uninstall.reg
rd %programfiles%\AviSynth 2.5
del avisynth.dll
del devil.dll
4、将安装跟卸载用的那4个文件放进AviSynth 2.5.5目录下,打包即可。
三、右键菜单背景替换 BY 龙梦秋的分解安装
说明:这是我当初从VISTA风格包里解出来的一个小插件,其他插件的注册跟这个差不多,具体可以参考解包后的BAT安装脚本。这里所写的是我的脚本的源代码,希望对大家有点作用哈~~
1、用UE脱出VISTA风格包里的ContextBG.dll文件。
2、编写安装脚本并保存成“安装.BAT”文件(不包括后面的注释):
copy ContextBG.dll %windir%\System32\ContextBG.dll ——因为怕有的人把文件删除后损坏右键的背景,所以这里先把文件复制到System32目录里,确保了文件的安全性。
regsvr32 /s %windir%\System32\ContextBG.dll ——直接注册该文件到系统里
3、编写卸载脚本并保存成“卸载.BAT”文件(不包括后面的注释):
regsvr32 /u /s %windir%\System32\ContextBG.dll ——反注册该文件并不提示任何信息
del %windir%\System32\ContextBG.dll ——删除该文件
4、将两个BAT文件与ContextBG.dll放一个目录下,打包即可。
四、智能ABC输入法 5.0 重封装版 BY 龙梦秋的分解安装
说明:这是我为了一些习惯5.0的用户所DUMP的版本,没什么意义,但是里面的脚本可以当作参考。由于部分代码涉及到一些比较复杂的操作,所以这里只拆出带有自动备份输入法以及恢复到原来版本的智能ABC的部分代码。
另外,这里虽然是使用了别的命令,但是对于一些更新版本的安装包也是一样的步骤,仅仅是第一步修改了一下而已。
步骤:
1、从官方XP安装光盘里用EXPAND命令把5.0版需要的WINABC.CWD、WINABC.IME、WINABC.OVL、WINABC.hlp文件解压到一个临时目录中备用,然后到绿站下载imetool,把里面的imetool.exe一并放入该目录。
2、编写带自动备份功能的安装脚本并保存成“安装.BAT”文件(不包括后面的注释):
copy %windir%\System32\WINABC.CWD %windir%\System32\WINABC.CWD-old ——备份老版本的智能ABC,下同。
copy %windir%\System32\WINABC.IME %windir%\System32\WINABC.IME-old
copy %windir%\System32\WINABC.OVL %windir%\System32\WINABC.OVL-old
copy %windir%\System32\WINABC.hlp %windir%\System32\WINABC.hlp-old
copy imetool.exe %windir%\System32\imetool.exe ——将imetool.exe复制到System32目录
imetool.exe /del3:WINABC.IME ——用imetool的命令行把当前系统里的智能ABC删除
copy WINABC.CWD %windir%\System32\WINABC.CWD ——复制5.0版的智能ABC文件,下同
copy WINABC.IME %windir%\System32\WINABC.IME
copy WINABC.OVL %windir%\System32\WINABC.OVL
copy WINABC.hlp %windir%\System32\WINABC.hlp
%windir%\System32\imetool.exe /install:智能ABC输入法 5.0,WINABC.IME ——将5.0版以“智能ABC输入法 5.0”命名安装到系统中
del %windir%\System32\imetool.exe ——删除残留在系统中的imetool.exe
3、编写恢复到原先系统里的智能ABC版本的脚本并保存成“卸载.BAT”文件(不包括后面的注释):
imetool.exe /del3:WINABC.IME ——删除当前系统里的智能ABC版本,
DEL %windir%\System32\WINABC.CWD ——删除当前系统里的智能ABC文件,下同。
《绿色软件制作教程——实战篇》相关文档:
绿色软件制作教程——实战篇01-16