2012-04-22 1 views
-2

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

string current = Directory.GetCurrentDirectory(); 

プログラムが移動しようと二度目は、私は再びGetCurrentDirectoryを呼ぶが、「現在」の値は、まだ古いパスであり、それは私にFileNotFoundエラーを与えます。

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

+0

怖い質問、UACの天国に感謝します。 ProcessStartInfo.WorkingDirectoryプロパティ。そしてAssembly.GetEntryAssembly()。あなたが気にしない場所。 –

答えて

1

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

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

0

移動した場所を把握してください。

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

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

新しいexeファイルを実行し、古いものを終了したい場合は、あなただけのメインである場合、this APIを使用して

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

を呼び出して、あなたは単に終了を呼び出す代わりに返すことができます。 これはうまくいくはずですが、両方のプログラムが終了する可能性があります(子プロセスを強制終了する場合)。

+0

これは私が達成しようとしている個人的なプロジェクトです。チャレンジのための自己複製プログラムを作りたかったのです。どのようにして新しいプロセスを作成できますか? – Noname

+0

Process.start( "path \ to \ someexe") – imichaelmiers