CHM打不开

来源:网络 作者:jiss007  时间:2009年04月11日

        今天去上SSD8的课程,课中,一个同学叫我过去,说:“老师,你做的那个课件在桌面上打不开,是怎么回事呢?”我打了一下,提示:“mk:@MSITStore:C:/Documents and Settings/tinylee/桌面/SSD8教程。chm”,这样的问题我以前遇到过,是在小松的机子上。当时我论定是他的机子中病毒了,没有去解决,今天遇到这样的问题,这样解释显然是不行的啊。
 
  那个课件的制作一直是我引以为傲的事情,今天居然打不开了,挺郁闷的,我说:“你先去Carnegie上面吧,我研究一下。”
 
  正说着,又有两个男生发生了同样的事情,我开始怀疑是不是他们从FTP下载的时候,文档被破坏了,我在教师机上重新下了一个,打开没有问题。
 
  这一下挑起了我的兴趣,开始在网上找资料,找了好久,试了很多办法,有一个方法好像有效:在打开chm的路径上,不能出现汉字。也就是说:把那个chm的路径变成:d:/ssd8.chm,打开就没有问题了。
 
  可是这显然没有解决问题的根本,我继续在网上找找啊……终于找到一篇 :) 
 
  ----------------------------------------------------------------------
 
  不能打开CHM文件的原因分析及解决方法
 
  这次重装了Windows系统,心想不应该再有什么问题,没想到居然碰上了CHM打不开的情况。双击一个中文命名的CHM文件例如“全唐诗。CHM”,弹出一个对话框:“不能打开文件:mk:@MSITStore:F:/全唐诗。chm”
 
  记得以前这种情况也发生过,当时因为事情多,没有功夫理它,只是把文件名改成英文了事。现在又发生这种情况,一定要把它了结掉。
 
  我本来想打开的CHM文件应该是“F:/全唐诗。chm”,为什么错误报告中提到的文件名前面多了一串乱七八糟的“mk:@MSITStore:”?难道系统把我本来的文件名擅自篡改了吗?必须观察一下系统打开文件的过程。我使用了工具filemon(http://www.sysinternals.com/ntw2k/source/filemon.shtml)
 
  来监视系统打开文件的过程,结果发现系统在发出“叮”的一声报告错误之前试图对以下文件取属性:F:/全唐诗。CHI 但是RESULT为“NOT FOUND”。难道它要打开的文件是“全唐诗。CHI”?于是我把文件的扩展名改成CHI,结果是连文件关联都不存在了,更别说打开了。
 
  用Filemon没有解决任何问题。看来只好求助于SoftICE来追踪了。我首先想到的是在CreateFileA这个API上面设个断点,这样好监视系统究竟打开了什么文件,结果发现系统试图打开一个叫“F:/???.CHM”的文件并且失败了:galiletteMay 18 2004, 09:55 AM
 
  看来问题就在这里了,现在要搞清楚这个“???.chm”究竟是怎么来的,为什么文件名无端地变成了问号。继续追踪,发现在打开文件之前,系统调用一个叫WideCharToMultiByte的API把Unicode编码的字符串转化成Ansi字符串,但是转化的结果却是错误的:galiletteMay 18 2004, 09:56 AM
 
  现在错误的关键原因已经找到了,就是WideCharToMultiByte这个API的调用有问题。查“Win32 Programmer’s Reference”手册或者MSDN发现,这个API的第一个参数是代码页(CodePage),而这个代码页与Windows的语种有关。例如简体中文的CodePage是936,繁体中文是950,英文就是1252。仔细观察上面的跟踪过程,我发现我机器的代码页居然是1252(英文),而不是简体中文的936。 这下我明白了,我赶紧打开控制面板,找到“区域设置”一
 
  看,哼唧,竟然是“英语(美国)”。立即把它改成“中文(中国)”,它说要重新启动,我没理它,不重启。重新打开“全唐诗。CHM”,终于Ok了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值