OK - これは非常に風変わりなシナリオであり、その真相を突き止めるのに苦労しています。
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 (それ自体) の正しいファイル パスを示しています。shellexecuteを使用すると、アプリケーションが実際のディレクトリではなく、サブディレクトリから実行されていると何らかの形で認識されるのでしょうか?
最も簡単な解決策は、「app1」が開いているすべてのファイルの先頭にファイルパスを追加することであることを理解しています(試してみましたが、正しく動作します)が、実際には、このメインのファイルが何百もありますアプリケーションは、同様の方法 (txt、ini、または dll) を介してアクセスします。つまり、ファイルがアプリケーションと同じディレクトリにあるという事実に基づいてファイルを割り当てるため、完全修飾ファイル パスを設定せず、それらを変更 (および維持) します。現時点では、すべてを行うことに関心があるわけではありません。
誰もこれまでにこのようなものを見たことがありますか? ShellExecute 以外に App2 が App1 を起動するより良い方法はありますか? App1 に渡されるパラメーターや何もありません。起動する必要があるだけです。
お時間をいただきありがとうございます。これについて他に何か必要なことがあればお知らせください。