2009-03-23 9 views
66

私は同じフォルダに2つのexeファイルを持っており、exe1のボタンからexe2を実行できます。今日、リモート(端末サービス)セッションで顧客を観察していて、exe2が「ファイルが見つかりません」というエラーを表示できませんでしたが、私たちがチェックしたときにexe1は同じディレクトリにありました。だからAppDomain.CurrentDomain.BaseDirectoryまたはSystem.Environment.CurrentDirectoryを使用する必要がありますか?AppDomain.CurrentDomain.BaseDirectoryまたはSystem.Environment.CurrentDirectoryを使用する必要がありますか?

おかげ

+0

@Jade M のための顔をしていますか? –

+0

'string.GetFullPath(path)'が 'CurrentDomain.BaseDirectory'ではなく' Environment.CurrentDirectory'を使用していると言って2セントを追加したいのは驚きです。 – JBSnorro

答えて

6

私はそれを理解し、あなたがBaseDirectoryを使用する必要があります。 CurrentDirectoryは、プログラムの実行中に変更される可能性があります。

145

アプリケーションと同じディレクトリにあるファイルを検索する場合は、AppDomain.CurrentDomain.BaseDirectoryが適切です。

Environment.CurrentDirectoryは、アプリケーションの実行中に変化する可能性のある値です。たとえば、デフォルトのパラメータを使用すると、WinFormsのOpenFileDialogは、この値をファイルが選択されたディレクトリに変更します。

+6

私はあなたにこの1回以上あなたを投票させてもらいたいです。 – David

+0

私はOpenFileDialogを表示するためにbutton1を使用し、次にEnvironment2を表示するにはbutton2を使用しましたが、まだデバッグフォルダを表示します。なぜですか? –

2

私は通常のようなものを使用します。

  string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase); 
      AppPath = AppPath.Replace("file:\\", ""); 
14

AppDomain.CurrentDomain.BaseDirectoryを現在のアプリケーションドメインがロードされた場所からディレクトリを返します。 System.Environment.CurrentDirectoryは、現在のシステムディレクトリを返します。 あなたのケースでは、AppDomain.CurrentDomain.BaseDirectoryが最適なソリューションです。

+1

System.Environment.CurrentDirectoryは、現在の(プロセス固有の)_working_ディレクトリを返します。 –

3

ビジュアルスタジオ2010テストプロジェクトでは、テスト設定の編集の展開オプションを有効にすると、AppDomain.CurrentDomain.BaseDirectoryがTestResults \ Outフォルダ(bin \ debugではなく)を指します。 デフォルト設定はbin \ debugフォルダを指します。

ここで私は説得力のある答えを見つけました。

Why AppDomain.CurrentDomain.BaseDirectory not contains "bin" in asp.net app?

10

あなたはAppDomain.CurrentDomain.BaseDirectoryを使用する必要があります。

Windowsサービス・アプリケーションの例:[アプリケーションを返します

AppDomain.CurrentDomain.BaseDirectoryながら\ WINDOWS \ system32に:

System.Environment.CurrentDirectoryCを返します。exeファイルの場所]

注意すべきもう一つの重要な要因は、必要に応じてEnvironment.CurrentDirectoryは何か他のものになることができますがAppDomain.CurrentDomain.BaseDirectoryは読み取り専用プロパティであるということである。

// Change the directory to AppDomain.CurrentDomain.BaseDirectory 
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory; 
0

私が使っていたとして、私はまた、戻ってこの数日をしてきました

それは私の本番サーバー上の問題を与えていたが、私のローカルサーバーに細かい仕事をしていたとして
Environment.CurrentDirectory 

だから私は試しました

System.AppDomain.CurrentDomain.BaseDirectory; 

そして私の両方の環境で働いていました。それらのすべてが言ったように、それはパスの現在のドメインディレクトリをチェックするよう

だから、私たちは常に

System.AppDomain.CurrentDomain.BaseDirectory; 

に行く必要があります。

はどのようにして、端末であなたのEXE1を実行しているより多くの情報

Could not find a part of path error on server

関連する問題