一个比较奇怪的问题,大家帮忙看看 ( 积分: 200 )

  • 主题发起人 主题发起人 mysirius
  • 开始时间 开始时间
M

mysirius

Unregistered / Unconfirmed
GUEST, unregistred user!
程序的初始化代码我放在了主窗体的FromCreate中,程序编译运行和正常的打开运行都没有任何问题,但是当程序是在随系统启动的情况下初始化就会不正常:键盘钩子注册失败(我用的是低级键盘钩子,没放在Dll中);还有本应该将某个文件夹下的exe文件全部枚举到一个ListView上时却会没有显示任何结果,即使手动刷新载入都不行。其它的初始化过程是正常的,比如说读取Ini文件设置单选按钮等。
但是只要将软件关闭重新打开运行就没有任何问题了。偶觉得既然可以打开正常运行,那么代码应该不会有大的问题,可是为什么随系统运行时就会出现错误。实在是没辙了,请大家帮忙想想问题可能出在哪,谢了。
Delphi2007+win2003SP2,没有使用任何三方控件,在XP上测试问题依旧。
 
放到[程序]->[启动]文件夹试试.注意工作路径.
 
系统启动是有顺序的,很可能你的程序启动了,但是程序需要的系统文件还没有启动,你可以加个sleep让你的程序启动后延时一段时间再执行
 
是不是程序工作目录不正确,类似建立快捷方式时,有个工作目录(起始位置)的配置问题。有时工作目录不是指向exe所在文件夹,而是指向了桌面,也会导致一些莫名其妙的问题。
 
查出问题了,是程序随系统启动后不能识别相对路径导致的,改成绝对路径就OK了。可是还是不明白为什么会出现这样的问题,希望有高人给个答案。
 
引导程序不同,程序的当前工作目录会变化的。比如,在资源管理器内双击某个程序启动和给其创建快捷方式启动,其工作目录就有可能不一样。
因为,程序的当前相对路径是在系统调用 CreateProcess 来创建进程时传入的。
函数原型是:
BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory, // 当前目录,相对路径以此为参照
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
 
多谢ufo!的提示,有些明白了。
 
后退
顶部