好的 - 这是一个非常奇怪的场景,我在试图深入了解它时遇到了问题。
我有 2 个应用程序(让我们说 app1 和 app2)和一个文本文件(txt1)。
App1 和 txt1 位于同一目录中(例如 C:\APP),但 app2 位于 app1 目录的子目录中(C:\APP\SUB)。
当 App1 启动时,它使用标准从 txt1 中读取一些内容:
AssignFile(txtFile,'txt1.txt');
Reset(txtFile);
没有问题。但是,当 App2 通过 shellexecute 命令启动 App1 时:
shellexecute(0,'open','..\app1.exe',nil,nil,SW_SHOW);
App1 似乎看不到文本文件。我收到一条回复说“找不到指定的文件”。奇怪的。
我通过添加进行了调试:
if not fileexists('txt1.txt') then
showMessage(ExtractFilePath(application.exename));
这显示了app1(本身)的正确文件路径,那么,为什么'reset'命令会产生'Could not find....'错误?我想知道使用 shellexecute 是否使应用程序以某种方式认为它是从子目录执行的,而不是它所在的实际目录?
我知道最简单的解决方案是简单地将文件路径添加到我的“app1”正在打开的每个文件的前面(我试过了,是的,它确实可以正常工作),但是实际上,这个主要文件有数百个应用程序通过类似的方法访问(无论是 txt、ini 还是 dll),即根据文件与应用程序位于同一目录中的事实分配文件,因此,不设置完全限定的文件路径,因此更改(和维护)它们这不是我们目前有兴趣做的事情。
有没有人见过这样的东西?除了 ShellExecute,我还有更好的方法让 App2 启动 App1 吗?没有参数或任何东西要传递给 App1,我只需要它启动。
感谢您抽出宝贵时间 - 如果您需要其他任何东西,请告诉我!