Environment.CurrentDirectory 是如何工作的?

How do Environment.CurrentDirectory work?

static void Main(string[] args)
{
    Console.WriteLine(Environment.CurrentDirectory);

    Console.ReadLine();
}

代码很简单,但是不小心提出了一个问题。 如果我按下“运行”按钮,我将得到如下输出:

C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp1\bin\Debug

但是如果我用 cmd.exe 或 Powershell 调用这个程序,输出将是控制台的当前目录:

Example 1:
PS C:\Users\Admin> C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp1\bin\Debug\ConsoleApp1.exe
C:\Users\Admin

PS C:\Users\Admin> _

Example 2:
PS C:\Users\Admin\Desktop> C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp1\bin\Debug\ConsoleApp1.exe
C:\Users\Admin\Desktop

PS C:\Users\Admin\Desktop> _

如果我用另一个程序调用这个程序,输出将是后者(调用前者)的工作目录:

The code of ConsoleApp2 (the caller):

        static void Main(string[] args)
        {
            Process.Start(@"C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp1\bin\Debug\ConsoleApp1.exe");
        }
The output of ConsoleApp1 (the called program, because ConsoleApp2 don't have output):

        C:\Users\Admin\source\repos\FeaturesTest\ConsoleApp2\bin\Debug

所以,我重复这个问题:Environment.CurrentDirectory 是如何工作的?我就是想知道。
谢谢。

By definition, if this process starts in the root directory of a local or network drive, the value of this property is the drive name followed by a trailing slash (for example, "C:"). If this process starts in a subdirectory, the value of this property is the drive and subdirectory path, without a trailing slash (for example, "C:\mySubDirectory").

https://docs.microsoft.com/en-us/dotnet/api/system.environment.currentdirectory?view=net-5.0

Enviroment.CurrentDirectory 将为您提供调用应用程序的目录。如果您从 PowerShell 调用可执行文件,在 C:\ 中,应用程序将被包装在此 shell 中,无需实例化一个新的 shell... 如果您双击 .exe 文件将提示一个新的 shell 到 运行 应用程序,所以目录就是 .exe 所在的目录。

另请检查此问题以检查获取 运行ning 应用程序目录的其他方法。

Best way to get application folder path