公司新配一台本本,于是把工作的东西搬上去。
环境如下:
*win7 x64
*pb120 version 12.1 build 7055
症状:
原来电脑上开发了一段时间的程序跑到新电脑里面,调试运行,报打开dll错误。
在程序的根目录下还都能找到该dll,疑惑了一下,尝试放到system32,不行,重装pb,不行。
最后发现,放到pb120.exe所在文件夹下是可以避免的,我做的这个程序用到了4个(dfile.dll、getnet.dll、bmpcli32.dll、zlibwapi.dll),都搬过去就好了。
原因未知,对这方面有研究的大神,求解惑。
------解决方案--------------------
一个老帖子,看有没有用
对于windows程序来说,很多都需要dll以及一些其他文件的支持才能运行。
比如powerbuilder以及编译后的pb程序。
以pb60.exe为例,它查找所需要的dll按照下列路径:
1.pb60.exe所在的路径,我的机上是c:\progra~1\sybase\pb6
2.pb60这个程序所在的当前路径
3.c:\windows\system下
4.c:\windows下
5.环境变量path中的路径
6.注册表中HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\pb60.exe中的path路径
请大家注意一下6,如果应用程序都把路径堆集在path变量中,就会造成path变量的长度太长。
因此6才是windows程序设定路径的标准方法,这种方法可以针对个别的程序单独设定查找路径。
我注意到很多人在编译以后的PB程序无法脱离PB运行,就是忽略了6这个查找路径。
在集成环境中,因为运行的是pb60.exe,在注册表中已设了路径,所以可以找到所需要的DLL。
因此,如果你编译的程序假设为fool.exe,那么你就必须在注册表中加上:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\fool.exe->path这一项。
然后添上所需要的路径,如果搞不清需要什么路径,将pb60.exe的路径copy下来,写入即可。