这两天给公司做产品的安装工程 用正版installshield2009.操作系统windos7(64bit)
出现了几个问题再次一一列举以备日后参考
问题1:
在win7下 is2009 经常死机崩溃。有时在制作发行时。有时鼠标点击feature时。给技术支持询问回答是:重装看看。
重装后运行几次就又开始crash。把产品部的同事郁闷坏了。
再向技术支持询问。回答:升到2010吧,要3万多。你妈呀!!你给钱呀。被逼无奈下了个Is2010破解版装上后确实好了。
问题2:
产品部的同时添加好feature,我写好脚本。制作。运行安装。启动执行程序,crash。
这是最痛苦的一部。
开始用depend查找。始终不对,虽然depend显示有的库有警告,但应该能正常启动呀。最后多亏了产品部的同时记起以前这种情况是mmdic.dll的问题。
从安装目录删掉它。运行ok 。该死的mmdic。dll.以后要记得它。
问题3:
多语言支持。
每个工程中都有对应的中英文资源。并且放在同一个rc文件。以前在vc6&&xp下用SetThreadLocale控制语言版本。
但经过查找在win7下 SetThreadLocale 已经不起作用了,应该用SetThreadUILanguage。
主框架的资源单独做在了一个dll中。在App::InitInstance()中用LoadLibrary(),用AfxSetResourceHandle指定资源句柄。
改好后,
bug1:安装后测试。win7下启动不了。提示返回消息服务。
bug2:xp下倒是启动成功但是明明是英文但界面是中文版。
1:经过排查原来测试机的uac为中等,但应用程序的编译项中的链接/高级/uac是是否绕过uac =true。改为false后win7可启动并且是英文版。
2:a经过调试SetThreadLocale&&LoadLibrary&&AfxSetResourceHandle返回值是正确的。但界面在xp下就是中文的。
但是将框架的资源文件的中文资源全部删除,只保留英文资源,启动。框架是英文的,但个模块的gui还是中文你的。郁闷。
总不能将所有的模块的资源都只有英文吧。(行不通)
b:google后在http://blog.youkuaiyun.com/akof1314/article/details/6321628 找到一篇blog。感到我的做法没什么不对。回家睡觉。
早上醒来,列好要做的几项排查工作。
按bolg上的说明做了个例子,在xp,win7 正常。
c:xp上将程序安装后,清空垃圾箱。再在安装目录下将所有的动态库,exe都删除掉。再从垃圾箱中将框架等exe动态库一一恢复,
每回复一个执行一次应用看最小的范围的dll是那些,从而缩小有问题的动态库。
当框架能起来的时候是英文版,再继续回复文件,当回复到一个基础库后再启动框架,gui为中文吧。找到了。
告诉产品部的同事。回答是有的dll没有添加英文开关。添加语言开关后后运行 ok。
看来在xp各个动态库中也应该添加语言开关,
经验:要积极的开拓思路,查找各种可能。用排除法进行范围缩小达到目的。
感谢无幻的blog