21

Visual Studio デバッガーで実行されている .NET アプリケーションの現在のディレクトリを見つけるにはどうすればよいですか?

更新 1。明確にするために: コードを変更したり、プログラム自体の情報を取得したりしたくありません。現在デバッグ中のアプリケーションに関する情報を取得したいだけです。

.NET Windows Formsアプリケーション (VB.NET と C# の混合) をデバッグしているときに、XML ファイルがどの場所から読み取られているのかわかりませんでした。現在のディレクトリがアプリケーションのディレクトリになると思っていました。ただし、Process Explorer を使用すると、プロセスのプロパティは次のようになります。

D:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\

(プロセス/プロパティ/タブ イメージ/現在のディレクトリを右クリック)。

Process Explorer のメイン ビューでプロセスにカーソルを合わせると、別の結果が表示されました (以下のスクリーンショットを参照)。

D:\dproj\DTASCall\DTASuperCharge\bin\

何が正しいですか?

アプリケーションをスタンドアロンで起動すると、予想される現在のディレクトリが表示されます。

D:\dproj\DTASCall\DTASuperCharge\bin\

Process Explorer プロセス プロパティ ウィンドウで。


Process Explorer の注釈付きスクリーンショット:

代替テキスト http://www.pil.sdu.dk/1/until2039-12-31/PEdiscrepancy_2009-09-02.png

4

3 に答える 3

31

Visual Studio では、[デバッグ] タブのプロジェクトの設定で、必要に応じて "作業ディレクトリ" を設定できます。

コード内またはブレークポイントの即時ウィンドウ内の現在の作業ディレクトリを特定するには、次を試してください。

System.IO.Directory.GetCurrentDirectory()
于 2009-09-02T13:44:36.320 に答える
4

コード内で、関数を呼び出します

System.IO.Directory.GetCurrentDirectory()

既定では、プロジェクトのデバッグ プロパティを変更していない限り、現在のディレクトリはプロジェクトの bin\Debug ディレクトリ (.exe の実行元) として開始されます。

于 2009-09-02T13:44:01.093 に答える
-2

最善の方法は、アプリケーションをWinDbg (Windows デバッガー) で実行してから、プロセスにアタッチして!handleコマンドを実行することです。開いている各ファイルには、関連付けられたハンドルがあります。対応するプロセスのすべてのハンドルをダンプすると、対応するファイル パスが表示されます。

次に例を示します。

!handle 0 f process-id

process-id をプロセス ID の値に置き換えます。プロセス ID の代わりに、プロセス アドレスを使用することもできます。これでファイル オブジェクトが表示されない場合、ファイル ハンドルは既に閉じられています。この場合、ハンドルをトレースする必要があります。これは、コマンドで実行できます!htrace

于 2009-09-02T15:41:54.140 に答える