【教学】微软集成光盘教学系列(2)MOVIE MAKER 1.0替换为2.0
上一次讲了WMP8替换为WMP9的详细过程。今天就讲Movie maker 1.0替换为2.0的教程吧,原理其实和WMP8替换为WMP9差不多,不同的是我自己对微软官方出品的Movie maker 2.0做了精简和优化:
详细过程如下:
1、首先还是打开\i386\syssetup.inf,在里面可以发现moviemk.inf这一个Movie maker 1.0的调用。
2、接着打开原版的\i386\moviemk.inf,:
[version]
signature="$Windows NT$"
ClassGUID={00000000-0000-0000-0000-000000000000}
LayoutFile=layout.inf
[DefaultInstall]
CopyFiles=SetupFiles,Help
AddReg=MediaPadReg
ProfileItems=MovieInstallItems
[DestinationDirs]
SetupFiles=16422,%MEDIAPAD_DIR_LFN%
Help=16422,%MEDIAPAD_DIR_LFN%\MUI\%LCID%
[SetupFiles]
moviemk.exe,,,32
wmmres.dll,,,32
wmmutil.dll,,,32
wmmfilt.dll,,,32
sample.asf,,,32
[Help]
moviemk.chm,,,32
可以发现它实际复制了以下几个这些蓝色字的文件。先记录下来。
3、解压缩网上下载的Movie maker 2.0安装程序mmsetup.exe(8483kb)
如下:
ADVPACK.DLL
mm20.inf
blank.txt
Empty.txt
mm20ex.EXE
MovieMk.chm
news.png
paint.png
sample.wmv
Sample1.jpg
Sample2.jpg
W95INF16.DLL
W95INF32.DLL
WMFDist.exe
WMM2AE.dll
wmm2eres.dll
wmm2ext.dll
WMM2FILT.dll
WMM2FXA.dll
WMM2FXB.dll
WMM2RES.dll
mm20.inf;这个就是mm2.0的主安装文件,实际上mmsetup.exe就是打包了的,执行的时候通过调用setupapi.dll和ADVPACK.DLL来执行。
分析里面的mm20.inf的代码:
[DefaultInstall]
RequiredEngine=SETUPAPI,%BadSetupEngineVer%
CopyFiles=SetupFiles,Help,Shared,Profiles,INF
AddReg=MM2Reg
RegisterOCXs=RegisterOCXSection
RunPreSetupCommands=RunPre ;安装前执行的代码
ProfileItems=MovieUnInstallBetaItems,MovieUnInstallItems,MovieUnInstallEntItems,MovieInstallItems,MovieInstallEntItems
RunPostSetupCommands=RunPost;安装后执行的代码
和Movie maker 1.0差不多,不同的就是复制的文件不一样,写入注册表里的键值也不一样,而且里面还调用了两个外部程序:
[RunPre];安装前执行的代码
wmfdist.exe /Q:A /T:C:\TEMP
[RunPost];安装后执行的代码
mm20ex.exe /Q:A /T:C:\TEMP
OK,看看这两个程序是干什么的?分别把这两个程序解压缩:
wmfdist.exe 解压缩后如下:
blackbox.dll
control.xml
drm.cat
drm.inf
DRMClien.dll
DrmStor.dll
drmv2clt.dll
fhg.inf
l3codeca.acm
LAPRXY.DLL
logagent.exe
MP43DMOD.DLL
MP4SDMOD.DLL
MPG4DMOD.DLL
msdmo.dll
msnetobj.dll
npdrmv2.dll
npdrmv2.zip
NPWMSDrm.dll
qasf.dll
setup_wm.exe
WMADMOD.DLL
WMADMOE.DLL
WMASF.DLL
WMFSDK.cat
WMFSDK.inf
wmidx.dll
WMNetMgr.dll
WMSDMOD.DLL
WMSDMOE2.DLL
mm20ex.exe 解压缩后如下:
mm20ex.cat
mm20ex.inf
moviemk.exe
msoobci.dll
setup.exe
哈哈,原来movirmaker 2.0的安装过程是:
先帮你升级WMP9(wmfdist.exe 的作用);
然后复制相关文件,写入注册表,进行OLE控件注册(mm20.inf);并加载数字签名文件mm20ex.cat和替换moviemk.exe主程序(mm20.exe)
4、通过以上分析,我可以开始进行替换了。由于我已经替换了WMP9,所以wmfdist.exe 就不需要了,至于mm20ex.cat,我可以在SVCPACK.inf里面再加载.也就是说我只需要在原来的mm20.inf里加上复制moviemk.exe的代码就可以了,在
[SetupFiles]后加上moviemk.exe.为了节省空间,我就删除了没用的wmfdist.exe和mm20.exe,然后把 mm20ex.cat和moviemk.exe复制到mmsetup目录下,然后打包成mm20.cab.
5、那么如何让安装程序自己执行mm20的安装呢?
首先,我们需要把原来的 moviemk.in_删除,然后修改mm20.inf的内容,先把原来的这段定义:
[version]
signature="$Windows NT$"
ClassGUID={00000000-0000-0000-0000-000000000000}
AdvancedINF=2.5,%BadAdvpackVer%
删除
然后在开头加上以下代码:
[version]
signature="$Windows NT$"
ClassGUID={00000000-0000-0000-0000-000000000000}
LayoutFile=layout.inf
Class = "Microsoft Windows Movie Maker 2.0"
Provider = "Microsoft Corporation"
CatalogFile = mm20ex.cat
DriverVer=09-10-2002, 2.0.0.3312
[SourceDisksNames.x86]
32="Movie maker 2.0","mm20.cab",,"i386"
[SourceDisksFiles]
moviemk.exe=32,,,,
wmm2filt.dll=32,,,,
wmm2fxa.dll=32,,,,
wmm2fxb.dll=32,,,,
wmm2ae.dll=32,,,,
sample.wmv=32,,,,
wmm2ext.dll=32,,,,
moviemk.chm=32,,,,
wmm2res.dll=32,,,,
wmm2eres.dll=32,,,,
blank.txt=32,,,,
empty.txt=32,,,,
news.png=32,,,,
paint.png=32,,,,
sample1.jpg=32,,,,
sample2.jpg=32,,,,
为什么呢?因为我刚才把所有必须文件打包了成MM20.CAB了,只有这样,mm20.inf才可以识别源文件,否则,就会出错啦!
接着修改\i386\下的dosnet.inf,加上一句:d1,mm20.cab,
在txtsetup.sif里加上一句:mm20.cab = 1,,,,,,_x,,3,3
"_x"的意思是解压缩,是因为这是个压缩包。
OK,现在把原来MOVIEMAKER的旧文件删除,在dosnet.inf和txtsetup.sif也要删除相关的语句。然后把mm20.inf保存为moviemk.inf(这是为了与syssetup.inf的调用一致),压缩后与mm20.cab一起复制\i386目录下,就可以了。
6、似乎很完美了不是。呵呵,但当你这样执行安装后,\windows\setuperr.log就会错误提示:wmmfilt.dll无法注册OLE控件,原因:找不到指定的程序,啊,为什么呢?看回syssetup.inf,搜索wmmfilt.dll。哦,原来里面在注册OLE控件的段内[OleControlDlls]
有这样的一行:
16422,"Movie Maker",wmmfilt.dll,1
(16422等同于%systemdrive%\program files)
因为我们刚才把"movie maker 1.0 的旧文件wmmfilt.dll去掉了,所以就会有这样的提示,尽管这个提示不会影响系统的运行,呵呵,不过,有些人看了会不舒服,怎么解决呢?
7、先把wmmfilt.dll添加到mm20.cab的压缩包里,然后修改刚才的moviemk.inf,在[setupfiles]和[SourceDisksFiles]两段里添加相应的设置:
[SourceDisksFiles]
moviemk.exe=32,,,,
wmmfilt.dll=32,,,,
......
[SetupFiles]
moviemk.exe,,,32
wmmfilt.dll,,,32
......
保存压缩后覆盖到\i386下就可以了。
8、比较一下这样的替换方法和普通集成方法的优劣性
普通方法:文件多,占用光盘容量(2.0+1.0差不多10M),安装时间长,因为安装程序先安装moviemk1.0然后又安装moviemk2.0,重复了。
替换方法:文件少,可节省光盘容量(压缩后的mm20.cab不到3M),安装时间短,因为直接就安装了 2.0版本.