最近做项目,经常遇到玩家机器上的某些系统DLL版本和我编译环境不一样的情况。
比如dgbhelp.dll,这个2000系统下的就和我XP的不一样,
我的问题项目程序都是通过我另外个程序里的CreateProcess方法来启动的,在上面的这种情况下,
CreateProcess函数不会返回错误,但是程序进程却不在进程管理器里(也就是实际上已经失败了)。
很是奇怪,请问有人知道这种错误怎么在程序里直接捕捉到么?

解决方案 »

  1.   

    CreateProcess成功后,用WaitForSingleObject等待进程句柄(可以指定等待时间),如果函数返回WAIT_OBJECT_0,则说明进程已经结束,可以再用GetExitCodeProcess获取进程的返回值。在程序设计时,应先确定程序支持哪些运行环境,在安装时进行检查,如果系统不符合运行要求,则提示不给安装。
      

  2.   

    要不然你就检查一下目标机器上的 dll 的版本信息http://www.vckbase.com/document/viewdoc/?id=1642
      

  3.   

    dll版本不一样的体现是:
    1):函数名不一样了(dll 名也可能不一样吧)2):函数体变化了是哪个我不确定哦
    前者只有不同的os版本,执行不同的dll加载ba后者就直接对 导出函数 返回值进行判断吧
      

  4.   

    把容易出错的DLL都拷贝到程序目录下面