我们如何在 C# 中获得 argv[0]?

jw_*_*jw_ 5 c# linux argv

使用 C/C++,我们可以得到 argv[0]:

printf("%s\n",argv[0])
Run Code Online (Sandbox Code Playgroud)

在 C# 中,args 以 argv[1] 开头。

非波纹管 API 提供了 argv[0],至少在 Linux 下:

AppDomain.CurrentDomain.FriendlyName: only gives the name, no path
Process.GetCurrentProcess().ProcessName: gives wrong result with symbol link, and no path
Process.GetCurrentProcess().MainModule.FileName:  gives wrong result with symbol link, and the path is always absolute
Run Code Online (Sandbox Code Playgroud)

仅供参考:在具有上述 C/C++ 代码的 Linux 下(其结果在这里被视为黄金标准),它打印用于调用程序的确切路径(绝对或相对),如果您通过任何符号调用程序链接时,会打印符号链接的名称而不是实际程序。

我问这个问题是因为我尝试在 Ubuntu 下使用 C# 编写一个包装程序,它应该通过 argv[0] 以完全透明,以防包装程序的行为取决于 argv[0]。

小智 6

Environment.CommandLine并且Environment.GetCommandLineArgs()应该包含完整且未修改的命令行。