-2

自分自身をコピーして正確なソース ディレクトリに移動する C# プログラムを作成しました。最初の移動では問題なく動作しますが、2 回目は現在のディレクトリの値が間違っています。私が使用するファイルパスを決定するには:

string current = Directory.GetCurrentDirectory();

プログラムが 2 回目に移動したいGetCurrentDirectory場合、もう一度呼び出しますが、「現在」の値はまだ古いパスであり、FileNotFoundエラーが発生します。

GetCurrentDirectory()新しいパスを読み取らせるにはどうすればよいですか?

4

2 に答える 2

1

アプリケーションを新しいプロセスで実行する必要があります。元のプロセスを使用している可能性が高く、その現在のディレクトリは、アプリケーションをコピーした場所に変更されません。

アプリケーションで何を達成しようとしているのかはわかりませんが、各コピーを新しいプロセスとして確実に実行し、現在のプロセスが終了できるようにします。

于 2012-04-22T22:13:17.120 に答える
0

移動した場所を追跡します。

GetCurrentDirectory()は、プログラムの実行元の作業ディレクトリです。実行可能ファイルを移動するだけでは変更されません(新しい場所から再度実行すると変更されます)。したがって、新しいプロセスを作成してexeを新しい場所で実行するか、移動した場所を追跡します。後者の方がはるかに簡単です。

注意として、exeファイルをコピーしても、プログラムの実行中のインスタンスには影響がありません。これは、「古い」場所から実行されているためです(この時点で実際にメモリにロードされている可能性があります)。実行中のプログラムにとって、exeファイルのコピーは単なるファイルです。なぜあなたはこれをやっている ?

新しいexeを実行して古いexeを終了する場合は、このAPIを使用して呼び出します

Process.start("new/path/to/exe");
Environment.exit(0);

メインにいるだけの場合は、exitを呼び出す代わりに単に戻ることができます。これは機能するはずです。両方のプログラムが終了する可能性があります(これにより子プロセスが強制終了される場合)が、機能しないと思います。

于 2012-04-22T22:19:40.873 に答える