0

PATH envを介してその場所を解決することにより、新しいプロセスを実行しようとしました。変数。私はQtを使用しているので、これは私が追加したことを意味します

X:\フォルダ\

私のPATH変数に、そして私のスターターアプリケーションで私は呼び出しています

QProcess::startDetached("test.exe")

これは実際に機能します。

ただし、test.exe はデータを作業ディレクトリに書き込みます。このデータは、X:\folder\ ではなく、スターター アプリケーションのディレクトリに配置されます。これは、私が望んでいるものではありません。

CLIで「test.exe」と入力して、Windowsコマンドラインで直接動作をテストしましたが、同じです(現在のディレクトリにデータが書き込まれています)。

PATH で見つかったディレクトリを新しいプロセスの作業ディレクトリとして使用しながら、PATH を使用してプロセスを開始する方法 (C++ またはコマンド ラインで) はありますか?

自分の PATH を検索し、その結果を分析して、別の QProcess::startDetached() オーバーロードでプログラムを開始することもできますが、もっと簡単な方法があるのではないかと思います。

4

2 に答える 2

1

パスを使用すると、OS は「現在のディレクトリに移動」しません。あなたはそれを自分でしなければならないでしょう。(ほとんどの場合、アプリケーションが別のディレクトリに移動することを本当に望んでいないでしょう - あなたがそうするときにコンパイラがそれをしたとしたらどうなるでしょうかgcc foo.c- あなたは確かに望んでいないので、すべてにフルパスを渡す必要があります.コンパイラが存在する場所にソース ファイルを配置する必要があります。多くの場合、Unix/Linux システムではそのディレクトリに書き込むことさえできない可能性があります)。

正しいフォルダーを先頭に追加するか [アプリケーションのインストール ディレクトリを使用するのは最適な場所ではないことをお勧めします!]、またはchdir(...)現在の作業ディレクトリをデータを配置したい場所に変更する必要があります。ほとんどのアプリケーション (このように特定の場所にファイルを保存するという原則を使用するもの) は、「デフォルト ディレクトリ」をどこかに設定して保存するため、ユーザーは自分の設定に合わせて設定を変更できます。

于 2014-01-17T08:51:31.607 に答える
0

複雑な構成のない少なくとも 3 つのオプションがあります。

1 - 呼び出し元のアプリケーションから、現在のディレクトリをtest.exeプログラムのある場所に変更します。そうすれば、ファイルは目的のディレクトリに移動します。ただし、呼び出し元のアプリケーションに問題が発生したり、出力すべきでない場所に出力が生成されたりする可能性があるため、呼び出し元のアプリケーションの現在のディレクトリを新たに変更する必要があります。

test.exe2 -ファイルを生成する場所にパラメーターとして渡します。

3 -test.exeファイルの場所を特定し、この情報を使用してこのプロセスの現在のディレクトリを変更するか、パスを知って、ファイルが配置されているのと同じディレクトリにファイルを生成します。

TCHAR szPath[MAX_PATH];

if( !GetModuleFileName( NULL, szPath, MAX_PATH ) ) {
    // handle error in GetModuleFileName
} else {
    // now, szPath contains file path
};

これは、現在のプロセスの場所を取得する Windows の標準的な方法です。ここを参照: GetModuleFileName

于 2014-01-17T09:12:45.253 に答える