关于BDE在操作系统中的查找顺序(50分)

  • 主题发起人 主题发起人 zf501
  • 开始时间 开始时间
Z

zf501

Unregistered / Unconfirmed
GUEST, unregistred user!
我将我的Pdox程序自制了一个安装程序,安装后将BDE的与PDox执行有关的Dll和
Bll等文件和应用程序拷贝在一个目录下,没有配置注册表。在不安装新的BDE程序前,
运行良好。
但安装了速达(也是基于BDE的),我的BDE就初始化错误了,我查了关于BDE的帮助,
它说是BDE应用程序的查找BDE顺序是先在当前目录(CurrentDirtory)中找BDE的DLL,Bll等
文件,如找不到才去注册表中找缺省的哪一个吗。
为什么就没先找到执行程序目录中呢?是不是我理解的CurrentDir 有误呢?
 
查找顺序:
1、应用程序的当前目录,一般就是exe所在目录。
2、注册表中BDE设置的路径。
3、系统目录,如 c:/windows/system、c:/winnt/system32。
4、PATH 环境变量中列出的目录路径。
大概是这次序吧。因此,如果系统中有多个应用同时使用 BDE,它们必须使用同一份 BDE
库文件,否则不能够同时运行,第一个程序启动后,其余的程序无法初始化 BDE。将这些
库文件安装到系统目录,并且对较新的文件不进行覆盖,可以解决这种问题。
 
BDE帮助:
LoadLibrary algorithm. Application's startup directory.
1 Current directory. If not found, then
2 System directory. If not found, then
3 Windows directory. If not found, then
4 PATH environment
current directory应该是当前执行程序的路径。
 
不是同时运行,安装速达后只运行我的程序也不能初始化。
是不是Borland提倡用注册表中的哪一个,我的安装程序是不是应加入/.../borland/...
的注册表,如果已有的话,我如何作呢?
 
to zf501:
根据你说的来看,现在注册表中那些路径应该是指向了速达所安装的 BDE 库的目录,
最好把你程序所在目录中的 BDE 的库文件删掉,让它与速达使用同一份 BDE 库文件。
否则,如果你将注册表中的路径指向你程序所在的目录,而速达装的 BDE 也与它自己的
程序在同一目录的话,则速达又可能运行不了的。
总之是要使各程序在查找到之后加载的是同一份 BDE 库文件。
 
要是版本不同呢?
 
应该跟版本没关系,只要两份 DLL 文件名相同就不行的。LoadLibrary 只管文件名。
 
是不是非得用注册表。
 
不用啊,比如放在系统目录下,两个程序都会到该目录下去搜索的。或放在一个目录下,然后
在 PATH 环境变量中加上该目录。在注册表中指定也是可以的,只要保证系统中只有一份 BDE
库文件就行 。
 
试一下:
showmessage(CurrentDirtory);
是你要的当前路径么??
 
【请及时提前或结束您的问题,谢谢合作!】
 
多人接受答案了。
 
后退
顶部