21

如何找到在 Visual Studio 调试器下运行的 .NET 应用程序的当前目录?

更新 1。需要明确的是:我不想更改代码或获取程序本身的信息 - 我只想获取有关当前正在调试的应用程序的信息。

在调试 .NET Windows 窗体应用程序(混合 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()

默认情况下,除非您更改了项目的 Debug 属性,否则当前目录将作为项目的 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 回答